Metadata APIs
The Module Metadata API retrieves metadata for a specific module, including:
- Fields (all available fields in the module)
- Layouts
- Related lists
Module Metadata
Purpose
To fetch metadata for a module, specify its API name (e.g., Leads, Accounts, Deals) in the request. Use the GET - Modules API to retrieve the available module API names.
Endpoints
- GET /settings/modules/{module_API_name}
Request Details
Request URL
{api-domain}/crm/{version}/settings/modules/{module_api_name}
Header
Authorization: Zoho-oauthtoken d92d4xxxxxxxxxxxxx15f52
Scope
ZohoCRM.settings.ALL or
ZohoCRM.settings.modules.{operation_type}
Possible operation types
ALL - Full data access
READ - Get module data
Note
- Refer to the key api_name in the JSON data while accessing the resource. Every module, field, and related lists will have an API name, which you can use in the third-party integrations. For example, if you want to access the Leads module, use “Leads" which is the api_name every time you access the resource. The Zoho CRM generates an API name internally while creating a custom module, custom field, or related list label. Please note that you cannot alter the API Names for the default modules, fields, and related lists. You can change the API names only for custom modules, fields, and related lists.
- The generated API name can contain only alphabets, numbers, and underscores. The API name should start with an alphabet and should not have two consecutive underscores or end with an underscore.
- The response contains only those modules that the user's profile has permission to view.
- New modules are added when a new file upload / image upload fields are added to a module.
Parameters
statusstring, optional
The status parameter can be used to retrieve specific types of modules.
Possible values:- Possible values:
- user_hidden - Modules that are hidden from the user.
- system_hidden - Modules that are hidden by the system.
- scheduled_for_deletion - Modules that are scheduled to be deleted.
- visible - Modules that are visible to the user.
For example, status = user_hidden,system_hidden can be used to retrieve all modules that are hidden to user and system.
Sample Request
Copiedcurl "https://www.zohoapis.com/crm/v8/settings/modules/Leads"
-X GET
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
Copiedresponse = invokeurl
[
url: "https://www.zohoapis.com/crm/v8/settings/modules/Leads"
type: GET
connection:"crm_oauth_connection"
];
info response;
Response JSON
- global_search_supportedBoolean
Represents if the current module has global search support.
Possible values:
- true: The current module has global search support.
- false: The current module does not have global search support.
- deletableBoolean
Describes if the user can delete a record in the current module.
Possible values:
- true: The user can delete a record in the current module.
- false: The user cannot delete a record in the current module.
- descriptionstring
Represents the description of the module, if any.
- creatableBoolean
Represents if the user can create records in the current module.
Possible values:
- true: The user can create records in the current module.
- false: The user cannot create records in the current module.
- inventory_template_supportedBoolean
Represents the module supports inventory template. The value will be true only for Quotes, Invoices, Purchase Orders, and Sales Orders modules.
Possible values:
- true: The current module supports inventory template.
- false: The current module does not support inventory template.
- modified_timedate and time in ISO8601 format
Represents the date and time of when the module properties were last modified.
- plural_labelstring
Represents the plural form of the module name. For example: Leads.
- singular_labelstring
Represents the singular form of the module name. For example: Lead.
- has_more_profilesBoolean
Represents whether more profiles have access to the module. By default, the Module Metadata API lists up to 50 profiles in the "profiles" key. If there are more than 50 profiles, this value will be true; if there are 50 or fewer, it will be false.
- access_typestring
Specifies the module's access type.
Possible values:- org_based - Default setting, allowing access at an organizational level.
- team_based - Access is restricted to team-level permissions (if the Team Space feature is enabled).
- private_profile JSON array
Represents the profiles available in the Teams module you have created.
- recycle_bin_on_deleteBoolean
Represents whether records in the module can be moved to the recycle bin upon deletion.
- web_link string
This key is related to web tabs, which are treated as modules. Web tabs can be created from either of the two sources: Links or Widgets. The value of this key will be the URL of the web tab (in the case of Links) or the widget's URL (in the case of Widgets).
- presence_sub_menuBoolean
Represents if the module has a submenu. For instance, Tasks in Calls module is a submenu.
Possible values:
- true: The current module has a submenu.
- false: The current module does not have a submenu.
- triggers_supportedBoolean
Represents if the module supports triggers from custom buttons, workflows, approval etc.
Possible values:
- true: The current module supports triggers. For instance, Contacts, Accounts,and so on.
- false: The current module does not support triggers. For instance, Activities, Feeds, and so on.
- idstring
Represents the unique ID of the module. For instance, 4150868000000002173
- lookupableboolean
Specifies if the module can be used as a lookup field in other modules.
- visibilityinteger
Represents the visibility of the module to the current user.
- 2- The module is hidden in the UI, but is available in the API response
- 1- The module is visible
- 0- The module is hidden
- -1 - The module is unavailable/hidden by the system itself due to the downgrading of the plan.
- convertableBoolean
Describes if the user can convert the record into another type of record. For example: Convert Leads into Deals.
Possible values:
- true: The user can convert the records in the current module into another type of record.
- false: The user cannot convert the records in the current module into another type of record.
- viewableBoolean
Represents if the user can view the records in the current module.
Possible values:
- true: The user can view the records in the current module.
- false: The user cannot view the records in the current module.
- editableBoolean
Describes if the user can edit a record in the current module.
Possible values:
true: The user can edit a record in the current module.
false: The user cannot edit a record in the current module. - emailTemplate_supportBoolean
Represents if the module supports the usage of the email templates.
Possible values:
- true: The module has email template support.
- false: The module does not have email template support.
- api_supportedBoolean
Describes if the current module is accessible via API.
Possible values:
- true: The current module is accessible via API. For instance, Leads, Quotes.
- false: The current module is not accessible via API. For instance, Feeds, Documents, and so on.
- profilesJSON array
Each object in the array represents the details of the profile that has access to the module.
For example: {
"name": "Administrator",
"id": "4150868000000026011"
}, - filter_supportedBoolean
Represents if the module supports custom filters besides the system-defined ones in a custom view.
Possible values:
- true: The current module has custom-filter support.
- false: The current module does not have custom-filter support.
- show_as_tabBoolean
Represents if the module is displayed as a tab in the CRM UI.
Possible values:
- true: The module is displayed as a tab in the CRM UI. For instance, Contacts, Accounts, and so on.
- false: The module is not displayed as a tab in the CRM UI. For instance, Tasks, linking modules, and so on.
- web_linkstring
Represents the web link of the module, if any. For instance, https://extensions.zoho.com/plugin/facebook
- sequence_numberinteger
Represents the position of the module in the CRM.
- api_namestring
Represents the API name of the module. Example: Leads.
- quick_createBoolean
Represents if the module supports quick create.
Possible values:
- true: The user can add records using quick create in the current module. For instance, Contacts, Accounts, and so on.
- false: The user cannot add records using quick create in the current module. For instance, Feeds, Forecasts, and so on.
- modified_byJSON object
Represents the name and ID of the user who last modified the module properties.
For example:
"modified_by": {
"name": "Patricia Boyle",
"id": "4150868000000225013"
} - generated_typestring
Represents how the module was created.
Possible values:- default: It is a standard module. For instance, Leads, Contacts, Accounts, and so on.
- linking: It is a linking module i.e., MxN modules
- subform: It is a line item subform in one of the inventory modules.
- web: It is a web-tab widget.
- custom: It is a custom module.
- feeds_requiredBoolean
Represents if feeds is enabled for the module.
Possible values:
true: Feeds is enabled for the current module.
false: Feeds is not enabled for the current module. - scoring_supportedBoolean
Represents if the records of the module qualify for the scoring process, if there is one.
Possible values:
true: The current module qualifies for the scoring process.
false: The current module does not qualify for the scoring process. - webform_supportedBoolean
Represents if the records in the module can be created via web forms.
Possible values:
true: The current module supports webforms.
false: The current module does not support webforms. - argumentsJSON array
Represents the parameters for the link used in Web-tab. Each object represents display name and the value of the argument.
For example:
"arguments": [
{
"name": "sample",
"value": "users.city"
}
] - module_namestring
Represents the unique module name.
- business_card_field_limitinteger
Represents the number of fields you can have in the business card details.
Note: Business card details are displayed on the "Details View" page of a record. This is also the information shown when you hover over a lookup field. - custom_viewJSON object
Represents the details of the custom views created for this module. If you pass the custom view ID, the response contains the details of that custom view. Otherwise, the system fetches the details of the default view in that module.
- parent_moduleJSON object
Represents the details of the parent module, if any. For instance, Sales Orders is the parent module for Ordered Items(subform module).
- statusstring
The status parameter can be used to retrieve specific types of modules.
Possible values:
- user_hidden - Modules that are hidden from the user.
- system_hidden - Modules that are hidden by the system.
- scheduled_for_deletion - Modules that are scheduled to be deleted.
- visible - Modules that are visible to the user.
- sub_menu_availableBoolean
Represents if sub menu option is available for the module or not.
- actual_plural_labelstring
Represents the actual plural form of the module name.
- actual_singular_label string
Represents the actual singular form of the module name.
- lookupableBoolean
Represents if the module can be used as a lookup field in other modules.
- isBlueprintSupportedBoolean
Represents if the module supports blueprints.
- profile_countinteger
Represents the number of profiles that have access to the module.
- public_fields_configuredBoolean
Represents if public fields are configured for the module.
Possible Errors
- INVALID_MODULEHTTP 400
The API name of the module is invalid.
Resolution: The key resource_path_index in the response gives the index at which the error has occurred. The index 0 starts after the version number in the URL. So, if the index in the response is 2, it means the error is three places after the version number. - INVALID_REQUEST_METHODHTTP 400
The http request method type is not a valid one
Resolution: You have specified an invalid HTTP method to access the API URL. Specify a valid request method. Refer to the Endpoints section. - AUTHORIZATION_FAILEDHTTP 400
User does not have sufficient privilege to read module details.
Resolution: The user does not have the permission to retrieve module details. Contact your system administrator. - OAUTH_SCOPE_MISMATCHHTTP 401
Unauthorized
Resolution: Client does not have ZohoCRM.settings.modules.READ scope. Create a new client with valid scope. Refer to the Scope section. - NO_PERMISSIONHTTP 403
Permission denied to read
Resolution: The user does not have permission to read records. Contact your system administrator. - INVALID_URL_PATTERNHTTP 404
Please check if the URL trying to access is a correct one
Resolution: The request URL specified is incorrect. Specify a valid request URL. Refer to the Request URL section. - INTERNAL_ERRORHTTP 500
Internal Server Error
Resolution: Unexpected and unhandled exception in the server. Contact support team.
Sample Response
Copied{
"modules": [
{
"private_profile": null,
"global_search_supported": true,
"activity_badge": "Enabled",
"$field_states": [
"convert_scheduler"
],
"recycle_bin_on_delete": true,
"plural_label": "Leads",
"presence_sub_menu": true,
"chart_view": false,
"id": "5725767000000002175",
"per_page": 10,
"$properties": [
"$approval_state",
"$wizard_connection_path",
"$converted_detail",
"$cpq_executions",
"$currency_symbol",
"$zia_owner_assignment",
"$review",
"$review_process",
"$approval",
"$in_merge",
"$process_flow",
"$orchestration",
"$pathfinder",
"$stop_processing",
"$data_source_details",
"$zia_visions",
"$layout_id",
"$editable",
"$field_states",
"$locked_for_me",
"$sharing_permission"
],
"visibility": 1,
"sub_menu_available": true,
"profiles": [
{
"name": "Administrator",
"id": "5725767000000026011"
},
{
"name": "Standard",
"id": "5725767000000026014"
},
{
"name": "asd",
"id": "5725767000000871001"
}
],
"$on_demand_properties": [
"$blocked_reason",
"$client_portal_invited",
"$client_portal_permission"
],
"kanban_view_supported": true,
"web_link": null,
"lookup_field_properties": {
"fields": [
{
"sequence_number": 1,
"api_name": "Full_Name",
"id": "5725767000000002631"
},
{
"sequence_number": 2,
"api_name": "Company",
"id": "5725767000000002591"
},
{
"sequence_number": 3,
"api_name": "Owner",
"id": "5725767000000002589"
},
{
"sequence_number": 4,
"api_name": "Email",
"id": "5725767000000002599"
},
{
"sequence_number": 5,
"api_name": "Last_Name",
"id": "5725767000000002595"
},
{
"sequence_number": 6,
"api_name": "Created_Time",
"id": "5725767000000002627"
},
{
"sequence_number": 7,
"api_name": "Total_Notes_Added",
"id": "5725767000005100020"
}
]
},
"viewable": true,
"api_name": "Leads",
"public_fields_configured": false,
"module_name": "Leads",
"chart_view_supported": true,
"custom_view": {
"display_value": "All Leads",
"created_time": null,
"access_type": "public",
"criteria": {
"comparator": "equal",
"field": {
"api_name": "Converted__s",
"id": "5725767000000323001"
},
"type": "value",
"value": false
},
"system_name": "ALLVIEWS",
"sort_by": null,
"created_by": null,
"shared_to": null,
"default": true,
"modified_time": "2025-01-23T22:46:41-08:00",
"name": "All Open Leads",
"system_defined": true,
"modified_by": {
"name": "Patricia Boyle",
"id": "5725767000000411001"
},
"id": "5725767000000087501",
"fields": [
{
"api_name": "Full_Name",
"_pin": false,
"id": "5725767000000002631"
},
{
"api_name": "Company",
"_pin": false,
"id": "5725767000000002591"
},
{
"api_name": "Owner",
"_pin": false,
"id": "5725767000000002589"
},
{
"api_name": "Email",
"_pin": false,
"id": "5725767000000002599"
},
{
"api_name": "Last_Name",
"_pin": false,
"id": "5725767000000002595"
},
{
"api_name": "Created_Time",
"_pin": false,
"id": "5725767000000002627"
},
{
"api_name": "Total_Notes_Added",
"_pin": false,
"id": "5725767000005100020"
}
],
"category": "public_views",
"last_accessed_time": "2025-04-15T22:15:13-07:00",
"locked": false,
"sort_order": null,
"favorite": null
},
"parent_module": {},
"status": "visible",
"has_more_profiles": false,
"access_type": "org_based",
"kanban_view": false,
"deletable": true,
"description": null,
"creatable": true,
"filter_status": true,
"modified_time": "2025-04-24T10:32:20-07:00",
"actual_plural_label": "Leads",
"lookupable": true,
"isBlueprintSupported": true,
"related_list_properties": {
"sort_by": null,
"fields": [
"Full_Name",
"Company",
"Email",
"Lead_Source",
"Lead_Status",
"Phone"
],
"sort_order": null
},
"convertable": true,
"editable": true,
"actual_singular_label": "Lead",
"display_field": "Full_Name",
"search_layout_fields": [
"Owner",
"Company",
"Email",
"Phone",
"Lead_Source",
"Full_Name"
],
"show_as_tab": true,
"sequence_number": 2,
"singular_label": "Lead",
"api_supported": true,
"quick_create": true,
"modified_by": {
"name": "Patricia Boyle",
"id": "5725767000000411001"
},
"generated_type": "default",
"feeds_required": false,
"arguments": [],
"profile_count": 3,
"business_card_field_limit": 5,
"territory": {
"name": "All Territories",
"id": "0",
"subordinates": false
}
}
]
}