Zoho CRM is a cloud-based customer relationship management platform used to manage leads, contacts, deals, activities, and customer service workflows in one system. Teams typically adopt it to centralize customer data, standardize sales processes, and improve pipeline visibility through reporting and automation.
For most businesses, the real value comes when Zoho CRM does not operate in isolation. The Zoho CRM API enables you to connect Zoho CRM with your website, marketing automation, support desk, ERP, data warehouse, or internal tools, so records stay consistent across systems and core operations run with fewer manual handoffs. This guide breaks down what the API is best suited for, what to plan for in integration, and the key endpoints you can build around.
Key Highlights of Zoho CRM APIs
- Full CRUD on core CRM modules
Create, read, update, and delete records for standard modules (Leads, Contacts, Accounts, Deals, Activities) and custom modules, so Zoho stays aligned with your source systems. - Bulk operations for high-volume jobs
Use Bulk Read and Bulk Write patterns to export or ingest large datasets without hammering standard endpoints, ideal for migrations, nightly syncs, and backfills. - Advanced querying with COQL
COQL lets you pull records using structured queries when basic filters are not enough, useful for reporting pipelines, segment pulls, and complex criteria-based sync logic. - Composite requests to reduce API chatter
The Composite API bundles multiple sub-requests into one call (up to five) with optional rollback behavior, helpful for orchestrating multi-step updates while keeping latency and failure points under control. - Operational safety with backup scheduling and downloads
Built-in backup endpoints let you schedule backups and fetch download URLs, this is the backbone for compliance-minded teams that need periodic CRM data archival. - Real-time change tracking via notifications/watch
Watch/notification capabilities help trigger downstream workflows on updates (for supported events/modules), so your systems can react quickly without constant polling. - Governance-ready user and territory management
User, group, and territory endpoints support admin workflows (count users, transfer/delete jobs, manage territories) critical for org hygiene at scale. - Metadata and configuration access for maintainability
Settings APIs (modules, fields, layouts, pipelines, business hours, templates) help you build integrations that adapt to configuration changes instead of breaking every time a layout or field gets updated.
zoho-crm API Endpoints
- Bulk Write
- GET Use the URL present in the download_url parameter in the response of Get Bulk Write Job Details : The 'Download Bulk Write Result' API allows users to download the result of a bulk write job as a CSV file. The download URL is obtained from the 'download_url' parameter in the response of the 'Get Bulk Write Job Details' API. The file is provided in a .zip format, which needs to be extracted to access the CSV file. The CSV file contains the first three mapped columns from the uploaded file, along with three additional columns: ID, Status, and Errors. The 'STATUS' column indicates whether the record was added, skipped, updated, or unprocessed. The 'RECORD_ID' column provides the ID of the added or updated record in Zoho CRM. The 'ERRORS' column lists error codes in the format '-<column_header>' for single errors or '-<column_header>:-<column_header>' for multiple errors. Possible errors include MANDATORY_NOT_FOUND, INVALID_DATA, DUPLICATE_DATA, NOT_APPROVED, BLOCKED_RECORD, CANNOT_PROCESS, LIMIT_EXCEEDED, and RESOURCE_NOT_FOUND.
- POST https://content.zohoapis.com/crm/v6/upload : This API endpoint allows users to upload a CSV file in ZIP format for the bulk write API. The request requires an OAuth token for authorization, a feature header indicating a bulk write job, and the unique organization ID. The file must be uploaded in ZIP format and should not exceed 25MB. Upon successful upload, the response includes a file_id which is used for subsequent bulk write requests. Possible errors include invalid file format, file too large, incorrect URL, insufficient permissions, and internal server errors.
- Appointments
- GET https://crm.zoho.com/crm/v6/Appointments__s/{appointment_id}/Appointments_Rescheduled_History__s : The Get Appointments Rescheduled History API allows users to fetch the rescheduled history data of appointments. It requires an OAuth token for authorization and supports fetching data for a specific appointment using its ID. The API accepts query parameters such as 'fields' to specify which fields to retrieve, 'page' and 'per_page' for pagination, and 'sort_order' and 'sort_by' for sorting the results. The response includes an array of rescheduled history records with details like 'Rescheduled_To', 'id', and 'Reschedule_Reason', along with pagination information.
- POST https://www.zohoapis.com/crm/v6/Appointments_Rescheduled_History__s : The Add Appointments Rescheduled History API allows users to add new records to the appointments rescheduled history. The API requires an OAuth token for authentication and supports creating up to 100 records per call, with a maximum of 20 rescheduled history records for a single appointment. The request body must include details such as the appointment name and ID, rescheduled time, rescheduled by user details, and the rescheduled from and to times. Optional fields include a reschedule note and reason. The response includes details of the created record, including the creation and modification times, and the user who performed these actions.
- PUT https://www.zohoapis.com/crm/v6/Appointments__s : The Update Appointments API allows you to update the details of an existing appointment in your organization. The API endpoint is accessed via a PUT request to the URL https://www.zohoapis.com/crm/v6/Appointments__s. The request requires an Authorization header with a valid Zoho OAuth token. The request body must include an array of appointment objects, each containing the mandatory 'id' field and other optional fields such as 'Status', 'Cancellation_Reason', 'Cancellation_Note', 'Appointment_Start_Time', 'Rescheduled_From', 'Reschedule_Reason', 'Reschedule_Note', 'Job_Sheet_Name', and 'Job_Sheet_Description__s'. The response returns a success message with details of the modified appointment records. The API supports updating up to 100 appointments per call and handles various error scenarios such as missing mandatory fields, invalid data, and permission issues.
- Backup
- GET https://download-accl.zoho.com/v2/crm/{zgid}/backup/{job-id}/{file-name} : The 'Download Backed up Data' API allows users to download backed up data for their CRM account. The API requires a GET request to the specified URL with path parameters including the organization ID (zgid), backup job ID (job-id), and the file name (file-name). The request must include an Authorization header with a valid Zoho OAuth token. The response will be a binary zip file containing the backed up data. The maximum size for each zip file is 1GB, and if the backup exceeds this size, it will be split into multiple files. Possible errors include incorrect URL, invalid HTTP method, unauthorized access due to invalid OAuth scope, permission denied, and internal server errors.
- POST https://www.zohoapis.com/crm/bulk/v6/backup : The Schedule CRM Data Backup API allows users to schedule a backup of all CRM data, including attachments, either immediately or at specified intervals. The API endpoint is accessed via a POST request to 'https://www.zohoapis.com/crm/bulk/v6/backup'. The request requires an 'Authorization' header with a valid OAuth token. The request body can include an optional 'rrule' parameter to specify the recurrence pattern for the backup. If the 'rrule' is omitted, the backup is scheduled immediately. The response includes the status, code, message, and details of the scheduled backup, including a unique backup ID. Possible errors include invalid URL, OAuth scope mismatch, no permission, internal server error, invalid request method, invalid data, backup already scheduled, and backup limit exceeded.
- GET https://www.zohoapis.com/crm/bulk/v6/backup/urls : The 'Get Data Backup Download URLs' API fetches the download URLs for the latest scheduled backup of your account data. It requires an OAuth token for authorization and supports two scopes: ZohoCRM.bulk.backup.ALL for full access and ZohoCRM.bulk.backup.READ for read-only access. The response includes URLs for downloading module-specific data and attachments, along with an expiry date for these links. If no links are available, a 204 status code is returned. Possible errors include invalid URL patterns, OAuth scope mismatches, permission issues, internal server errors, and invalid request methods.
- PUT https://www.zohoapis.com/crm/bulk/v6/backup/{id}/actions/cancel : The Cancel Scheduled Data Backup API allows users to cancel a scheduled data backup for their CRM account. The API requires a PUT request to the specified endpoint with the backup ID in the path parameters and an authorization token in the headers. The response will indicate whether the cancellation was successful, along with details of the backup ID that was canceled. Possible errors include invalid URL, OAuth scope mismatch, no permission, internal server error, invalid request method, backup already canceled, resource not found, and backup in progress.
- Bulk Read
- POST https://www.zohoapis.com/crm/bulk/v6/read : The Create Bulk Read Job API allows users to initiate a bulk export of records from specified modules in Zoho CRM. Users can specify the module, fields, criteria, and other parameters to filter and export records. The API supports exporting records in CSV or ICS format, with a maximum of 200,000 records per job. The response includes details about the job status, operation type, and user who initiated the job. Users can also set up a callback URL to receive notifications upon job completion or failure.
- GET https://www.zohoapis.com/crm/bulk/v6/read/{job_id} : This API retrieves the status and details of a previously performed bulk read job in Zoho CRM. The request requires the job ID as a path parameter and an authorization token in the headers. The response includes the operation type, state of the job, query details, creator information, and result details if the job is completed. The result includes the page number, count of records, download URL, and a flag indicating if more records are available.
- Linking Module
- GET https://www.zohoapis.com/crm/v2/{linking_module_api_name}/{record_id} : The Zoho CRM Linking Module API allows users to manage associations between records from two different modules within Zoho CRM. This API is available in Enterprise and above editions. It supports operations such as retrieving, updating, and deleting specific records, as well as bulk operations like listing, inserting, updating, and deleting multiple records. The API requires the linking module's API name and the record ID for single record operations. It also supports related list APIs to get related records. The API requires an OAuth token for authentication and supports various scopes for different levels of access.
- External ID Management
- POST https://www.zohoapis.com/crm/v2/{module_api_name}/{record_id} : The Zoho CRM External ID Management API allows users to manage external IDs within Zoho CRM records. This API is particularly useful for integrating third-party applications by storing their reference IDs in Zoho CRM. Users can create, update, or delete records using external IDs instead of Zoho CRM's record IDs. The API requires a mandatory header 'X-EXTERNAL' to specify the external field, and it supports various types of external fields, including user-based and org-based fields. The API is available only for the Enterprise and Ultimate editions of Zoho CRM, and a module can have a maximum of 10 external fields for the Enterprise edition and 15 for the Ultimate edition.
- Contacts
- POST https://www.zohoapis.com/crm/v6/Contacts/roles : The Insert Contact Roles API allows users to add new contact roles in the CRM system. It requires a POST request to the specified endpoint with an authorization header containing a valid Zoho OAuth token. The request body must include a list of contact roles, each with a mandatory 'name' and an optional 'sequence_number'. The API can handle up to 100 contact roles per call. The response includes the status of each contact role addition, with a unique identifier for each successfully added role. Possible errors include invalid URL, OAuth scope mismatch, permission issues, and duplicate data.
- Events
- POST https://www.zohoapis.com/crm/v6/Events/{event_id}/actions/cancel : The Meeting Cancel API allows users to cancel a meeting and optionally send a cancellation email to participants. The API requires an OAuth token for authorization and the event ID of the meeting to be cancelled. The request body must include a boolean value indicating whether to send a cancellation email. The API responds with a success message and the ID of the cancelled event. Errors may occur if the URL is incorrect, the OAuth scope is insufficient, or if the meeting cannot be cancelled due to various reasons such as the meeting already being cancelled, no participants being invited, or the meeting end time having passed.
- Leads
- POST https://www.zohoapis.com/crm/v6/Leads/actions/mass_convert : The Mass Convert Lead API allows you to convert up to 50 leads in a single API call. You can choose to create a deal during the conversion process. The API requires the record IDs of the leads to be converted and optionally allows you to specify details for creating a deal, assign the converted lead to a user, and manage related modules, tags, and attachments. The response provides the status of the conversion and a job ID for tracking. Possible errors include missing mandatory fields, invalid data, exceeding the limit of 50 leads, and permission issues.
- GET https://www.zohoapis.com/crm/v6/Leads/actions/mass_convert?job_id={job_id} : The Mass Convert Lead Status API is used to retrieve the status of a previously scheduled mass convert lead job in Zoho CRM. The API requires an OAuth token for authorization and a job_id as a query parameter to identify the specific job. The response provides details about the job status, including the total number of leads scheduled for conversion, the number of leads successfully converted, those not converted, and any failures. Possible statuses include 'completed', 'scheduled', 'in progress', and 'failed'.
- POST https://www.zohoapis.com/crm/v6/Leads/{record_id}/actions/convert : The Convert Lead API allows you to convert a lead into a contact or an account in Zoho CRM. Before conversion, it checks for matching records in Contacts, Accounts, and Deals to associate the lead with existing records instead of creating new ones. The API requires an OAuth token for authentication and accepts various optional parameters such as 'overwrite', 'notify_lead_owner', 'notify_new_entity_owner', 'move_attachments_to', 'Accounts', 'Contacts', 'assign_to', 'Deals', and 'carry_over_tags'. The response includes details of the converted records and a success message. Possible errors include duplicate data, invalid URL, insufficient permissions, and internal server errors.
- Quotes
- POST https://www.zohoapis.com/crm/v6/Quotes/actions/mass_convert : The Mass Convert Inventory Records API allows you to convert inventory records such as Quotes to Sales Orders or Invoices, and Sales Orders to Invoices. You can convert up to 50 records in a single API call. The conversion is performed asynchronously, and a job ID is provided to check the status of the conversion request. The API requires an OAuth token for authentication and supports specifying the module details, whether to carry over tags, owner details, related modules, and the IDs of the records to be converted. The response includes a job ID to track the conversion status.
- POST https://www.zohoapis.com/crm/v6/Quotes/{record_id}/actions/convert : The Convert Inventory Records API allows you to convert records from the Quotes module to Sales Orders or Invoices, and from Sales Orders to Invoices in Zoho CRM. The API requires an OAuth token for authentication and the record ID of the parent record to be converted. The request body must include the 'convert_to' array specifying the target module's API name and ID. Upon successful conversion, the response includes the status, message, and details of the converted record. The API handles various errors such as missing mandatory fields, invalid data types, and permission issues.
- Services
- GET https://www.zohoapis.com/crm/v6/Services__s : The Get Services API allows you to retrieve services data based on specified search criteria. You can specify fields to fetch, sort order, and pagination details. The API requires an OAuth token for authorization and supports various query parameters such as fields, cvid, page_token, page, per_page, sort_order, and sort_by. The response includes a list of services and pagination information. The API handles errors such as invalid tokens, exceeded limits, and invalid requests.
- Users
- DELETE https://www.zohoapis.com/crm/v6/Users/{user_id}/territories/{territory_id} : The 'Remove Territories from User' API allows the removal of specific territories from a user in Zoho CRM. It supports removing a single territory or multiple territories at once. The API requires an OAuth token for authentication and the user ID and territory ID(s) as path or query parameters. The response includes the status of each territory removal operation, indicating success or failure with appropriate messages. Note that territories cannot be removed from their assigned manager or if they are default territories.
- GET https://www.zohoapis.com/crm/v6/users : The Get Users Information from Zoho CRM API allows you to retrieve basic information about CRM users. You can specify the type of users to retrieve using the 'type' query parameter, such as 'AllUsers', 'ActiveUsers', 'AdminUsers', etc. The API supports pagination with 'page' and 'per_page' parameters, and you can also specify specific user IDs to retrieve. The response includes detailed information about each user, such as their role, profile, contact details, and status.
- GET https://www.zohoapis.com/crm/v6/users/actions/count : This API endpoint fetches the total number of users in your organization based on the specified type. The request requires an Authorization header with a valid Zoho OAuth token. The 'type' query parameter is optional and can be used to specify the category of users to count, such as AllUsers, ActiveUsers, DeactiveUsers, etc. The response returns the count of users as an integer. Possible errors include OAUTH_SCOPE_MISMATCH, INVALID_URL_PATTERN, INVALID_REQUEST_METHOD, and AUTHENTICATION_FAILURE, each with specific resolutions.
- GET https://www.zohoapis.com/crm/v6/users/actions/transfer_and_delete?job_id={{job_id}} : This API retrieves the status of a previously scheduled 'transfer records and delete user' job in Zoho CRM. The request requires an OAuth token for authorization and a mandatory 'job_id' query parameter, which is the ID of the job. The response provides the status of the job, which can be 'completed', 'failed', or 'in_progress'. If the 'job_id' is not provided, a 400 error with 'REQUIRED_PARAM_MISSING' is returned.
- GET https://www.zohoapis.com/crm/v6/users/{user_ID}/actions/associated_groups : This API retrieves the groups associated with a specified user in the Zoho CRM system. The request requires an OAuth token for authentication and the unique user ID as a path parameter. Optional query parameters include 'page' and 'per_page' to control pagination. The response includes details of each group such as creation and modification times, group name, description, and the users who created and last modified the group. The 'info' object in the response provides pagination details. Possible errors include 'NO_CONTENT' if no groups are associated with the user and 'INVALID_DATA' if the user ID is invalid.
- PUT https://www.zohoapis.com/crm/v6/users/{user_id} : The Update User Details API allows you to update the details of a specific user in your organization's CRM. The API requires a PUT request to the endpoint with the user's unique ID in the path. The request must include an authorization header with a valid Zoho OAuth token. The body of the request should contain the user's details to be updated, such as phone number, date of birth, role, profile, locale, time format, time zone, name format, and sort order preference. The response will indicate the success or failure of the operation, along with the updated user's ID.
- GET https://www.zohoapis.com/crm/v6/users/{user_id}/territories : This API retrieves the territories associated with a specific user in the CRM system. The request requires an authorization token and the user ID as a path parameter. Optionally, a specific territory ID can be provided to fetch details of that territory. The response includes a list of territories with details such as territory ID, manager information, territory name, and parent territory details. Additional information about pagination is also provided in the response.
- Composite
- POST https://www.zohoapis.com/crm/v6/__composite_requests : The Composite API allows performing multiple sub-requests in a single API call. It supports up to five sub-requests, which can be executed in parallel or sequentially. The API provides options to rollback all sub-requests if any fail, and it consumes API credits based on the execution and rollback status. The request body must include a JSON array of sub-requests, each with a unique sub_request_id, method, uri, and optional params, body, and headers. The response includes the execution status and details of each sub-request. The API supports various operations like creating, updating, and retrieving records, with specific limits on the number of records processed per request.
- Features
- GET https://www.zohoapis.com/crm/v6/__features : The Features API allows users to fetch information about the features available in their organization and their limits, which may vary depending on the organization's edition. Users can retrieve all available features, specific features by API names, or features specific to a module. The API requires an authorization header with a Zoho OAuth token and supports optional query parameters such as module, api_names, page, per_page, and page_token for pagination. The response includes details of each feature, such as components, API names, module support, limits, and feature labels. Possible errors include invalid request methods, invalid module names, OAuth scope mismatches, authentication failures, invalid URL patterns, and internal server errors.
- GET https://www.zohoapis.com/crm/v6/__features/user_licenses : The Get User Licenses Count API retrieves the count of purchased, active, and available user licenses in your organization. The request requires an Authorization header with a Zoho OAuth token. The response includes details about the user licenses, such as the available count, used count, and total purchased licenses. The response also includes metadata about the feature, such as the API name, whether it is module-specific, and the feature label. Possible errors include INVALID_URL_PATTERN and OAUTH_SCOPE_MISMATCH, which indicate issues with the request URL or authorization scope, respectively.
- Notifications
- PATCH https://www.zohoapis.com/crm/v6/actions/watch : The Disable Specific Notifications API allows users to disable notifications for specified events in a channel. The API requires an OAuth token for authentication and supports modules such as Leads, Accounts, Contacts, and more. The request body must include the 'channel_id', 'events', and '_delete_events' keys. The 'events' key is a JSON array specifying operations on selected modules. The response includes details of the operation's success or failure, including the resource URI, ID, and name.
- COQL
- POST https://www.zohoapis.com/crm/v6/coql : This API allows you to retrieve records from a specified module in Zoho CRM using a COQL query. The request is made using the POST method, and the query is specified in the request body under the 'select_query' key. The API requires an authorization header with a Zoho OAuth token. The response includes the data fetched by the query and additional information about the number of records returned and whether more records are available. The API supports various field types and comparators, and it can handle complex queries with joins, aggregate functions, and aliases.
- Files
- POST https://www.zohoapis.com/crm/v6/files : This API allows users to upload files to the Zoho File System (ZFS), which serves as the central storage for all files and attachments. The API requires a valid Zoho OAuth token for authorization and supports uploading up to 10 files in a single request, with each file not exceeding 20MB. The files must be uploaded using multipart/form-data content type. The API returns an encrypted file ID and the file name for each uploaded file, which can be used to attach the file to a record in Zoho CRM. The request URL is 'https://www.zohoapis.com/crm/v6/files', and the method is POST. The API also supports an optional 'type' parameter for uploading inline images. Possible errors include issues with attachment handling, virus detection, invalid URL patterns, OAuth scope mismatches, permission denials, internal server errors, invalid request methods, and authorization failures.
- Organization
- GET https://www.zohoapis.com/crm/v6/org : The Get Organization Data API retrieves detailed information about an organization in Zoho CRM. The request requires an Authorization header with a valid Zoho OAuth token. The response includes various details about the organization such as address, contact information, currency details, license details, and other organizational settings. The API supports different operation types for access control, including full access and read-only access. Possible errors include invalid URL, OAuth scope mismatch, permission issues, and internal server errors.
- POST https://www.zohoapis.com/crm/v6/org/currencies : This API allows you to add new currencies to your organization in Zoho CRM. You need to provide the currency details such as name, ISO code, symbol, exchange rate, and optional format details. The request requires an authorization header with a valid Zoho OAuth token. The response will include the status of the operation and details of the created currency. Possible errors include invalid data, duplicate entries, and permission issues.
- POST https://www.zohoapis.com/crm/v6/org/currencies/actions/enable : This API enables multiple currencies for an organization in Zoho CRM. The request requires an OAuth token for authorization and a JSON body specifying the base currency details such as name, ISO code, exchange rate, and optional formatting details. The response confirms the successful enabling of the multi-currency feature and provides the ID of the created base currency.
- PUT https://www.zohoapis.com/crm/v6/org/currencies/{currency_ID} : The Update Currency Details API allows users to update the details of a specific currency in the Zoho CRM system. The API requires an OAuth token for authentication and the unique ID of the currency to be updated. Users can update various attributes of the currency such as the symbol, exchange rate, and format details. The API responds with the status of the update operation and the ID of the updated currency.
- POST https://www.zohoapis.com/crm/v6/org/photo : The Upload Organization Photo API allows users to upload and update the brand logo or image of an organization. The API requires a POST request to the endpoint 'https://www.zohoapis.com/crm/v6/org/photo' with an authorization header containing a valid Zoho OAuth token. The request body must include a single image file to be uploaded. The API returns a success message upon successful upload. Possible errors include invalid data, file size issues, permission errors, and internal server errors.
- Search
- GET https://www.zohoapis.com/crm/v6/{module_api_name}/search : The Search Records API in Zoho CRM allows users to retrieve records that match specific search criteria. The API supports searching by criteria, email, phone, or word, with criteria taking precedence if multiple parameters are provided. The API requires an authorization token and supports various modules such as leads, accounts, contacts, and more. Users can specify optional parameters like converted, approved, page, per_page, and type to refine their search. The response includes a list of matching records and pagination information. The API supports a maximum of 2000 records per call and provides detailed error messages for common issues.
FAQs
- What authentication does Zoho CRM API use?
Zoho CRM APIs typically use OAuth 2.0 access tokens. Your integration should include token lifecycle management (refresh, rotation, and secure storage) to avoid downtime. - How do I decide between standard APIs and Bulk APIs?
Use standard module endpoints for transactional, near-real-time operations (single record create/update). Use Bulk Read/Write for high-volume exports/imports, migrations, scheduled syncs, and backfills. - How can I pull filtered data efficiently from Zoho CRM?
If basic filters/search are limiting, use COQL to query records with more control. It is generally better for complex selection logic and structured segment extraction. - How do I reduce the number of API calls in my integration?
Use the Composite API to bundle multiple sub-requests into one call (up to five). This reduces latency, improves reliability, and simplifies orchestration for multi-step workflows. - How do I keep Zoho CRM and another system in sync without constant polling?
Where supported, use notifications/watch patterns to react to changes. For the rest, implement incremental sync using modified timestamps and periodic reconciliation jobs. - What’s the safest way to handle large-scale data changes (mass updates/deletes/conversions)?
Prefer asynchronous, job-based endpoints (bulk jobs, mass actions) where possible and always log job IDs, outcomes, and errors. Treat these as operational workflows, not simple API calls. - How do I make my integration resilient to CRM configuration changes?
Use metadata/settings endpoints (modules, fields, layouts, pipelines) to detect changes and keep mappings current. This avoids brittle integrations that break when admins edit fields or layouts.
Get Started with Zoho CRM API Integration
If you want to avoid building and maintaining the entire integration surface area in-house, Knit API offers a faster route to production. By integrating with Knit once, you can streamline access to Zoho CRM APIs while offloading authentication handling and integration maintenance. This is especially useful when Zoho CRM is one of multiple CRMs or SaaS systems you need to support under a single integration layer.




