API review

Zoho CRM API review

Low-cost, highly customisable CRM with REST API v8 (records, upsert with duplicate-check fields, search, COQL), Bulk Read/Write jobs, notifications (webhooks), GraphQL, multi-data-centre OAuth and a free Zoho MCP that spends the same API credits. Best for cost-sensitive clients that still need an API.

Verified 25 Oct 2026 · 8 endpoints listed · Official MCP server

What a call costs

The actions you pay for, as Zoho CRM prices them.

ActionCostPer
Insert/Update/Upsert1credit per 10 records
Bulk Write initialize500credits per job
Bulk Read initialize50credits
Convert Lead5credits
Merge records50credits
Send Mail20credits

Pricing, plan by plan

US dollars, as Zoho CRM's pricing page shows them on 25 Oct 2026. Monthly and annual billing are shown apart.

Free tier Free edition: up to 3 users, 5,000 API credits/day, no webhooks. Signup opens a 15-day trial and requires a mobile number verified by SMS OTP (our trial from an Indian IP, 2026-10-25).

Standard

$20/mo

billed monthly

$14/mo

billed annually

per user; India price ₹1,300 monthly / ₹800 annual per user/month (same price file, INR column)

API included
Plan details

pay-as-you-go extra API credits

Professional

$35/mo

billed monthly

$23/mo

billed annually

per user; webhooks 50,000/day or 100/user licence/day; India price ₹2,100 / ₹1,400 per user/month (same price file, INR column)

API included

Enterprise

$50/mo

billed monthly

$40/mo

billed annually

per user; webhooks 500,000/day or 500/user licence/day; India price ₹3,000 / ₹2,400 per user/month (same price file, INR column)

API included

Ultimate

$65/mo

billed monthly

$52/mo

billed annually

per user; webhooks 1,000,000/day or 1,000/user/day; India price ₹3,200 / ₹2,600 per user/month (same price file, INR column)

API included

Starter (India)

₹600/user monthly, ₹500/user/month annual; shown only in INR on the comparison page and absent from the USD price file (India-only plan)

API included

Rate limits

Credit system on a rolling 24-hour window plus a concurrency cap per org per app (no per-minute limit).

LimitFreeStandard/StarterProfessionalEnterprise/Zoho OneUltimate/CRM Plus
Credits 24h5,00050,000 + users x 250 + add-ons (max 100,000)50,000 + users x 500 + add-ons (max 3,000,000)50,000 + users x 1,000 + add-ons (max 5,000,000)50,000 + users x 2,000 + add-ons (unlimited max)
Concurrency510152025
More on limitsLess

Most calls cost 1 credit; writes cost 1 per 10 records; Bulk Write 500 per job. X-API-CREDITS-REMAINING header appears after 50% use. Extra credits can be enabled pay-as-you-go from the API dashboard.

How to get an API key

Zoho CRM uses OAuth. The steps below follow Zoho CRM's own docs.

  1. Create a Zoho CRM account. API access starts on the Standard plan.
  2. Register a client in the Zoho API console, get a grant code, exchange it for an access token (expires_in 3600 s) and a refresh token; tokens are org-specific and data-centre-specific. Accounts URLs: US accounts.zoho.com, AU.com.au, EU.eu, IN.in, CN.com.cn, JP.jp, SA accounts.zoho.sa, CA accounts.zohocloud.ca; API domain follows the DC (e.g. www.zohoapis.eu, www.zohoapis.com.cn).
  3. Send it with every request: header: Authorization: Zoho-oauthtoken <access_token>.
  4. Make a first call: Insert or update up to 100 records, matched on duplicate check fields (system unique fields or fields marked unique), order set by duplicate_check_fields. Keep the key in an environment variable, never in the command.
    curl -X POST "https://www.zohoapis.com/crm/v8/{module}/upsert" \
      -H "Authorization: Bearer $ZOHO_CRM_ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{}'

Where the docs live

WhatWhere
Documentationzoho.com/crm/developer/docs/api/v8
API referencezoho.com/crm/developer/docs/api-directory.md
llms.txtzoho.com/crm/developer/llms.txt
Base URLhttps://www.zohoapis.com/crm/v8
MCP serverhttps://www.zoho.com/mcp/
SDKsPHP, Node.js, Java, C#, Python, Ruby, TypeScript, Scala, JavaScript (client-side)

Strengths and limits

Where it fits

  • Cost-sensitive clients (Standard from $14/user/month annual) that still need an API
  • Batch writes: insert/update/upsert 100 records per call for 1 credit per 10 records
  • Large imports via Bulk Write (25,000 records per CSV, 500 credits per job)
  • Org-wide SQL-like reads with COQL

Where it falls short

  • Webhooks on Free/Starter/Standard (webhook actions start at Professional)
  • Exact-match dedupe via Search: the equals operator behaves like contains
  • Teams that cannot handle OAuth refresh tokens and data-centre-specific domains

Worth knowing

6 moreShow fewer

Our take

We compared Zoho CRM's Free edition when choosing a free CRM for our own team and ruled it out: it caps data at 5,000 records and has no webhooks, no custom fields and no de-duplicate tool.

Who should use it

Use Zoho CRM for
Cost-sensitive clients (Standard from $14/user/month annual) that still need an API
Look elsewhere for
Webhooks on Free/Starter/Standard (webhook actions start at Professional)

If Zoho CRM is not the answer

Other CRM tools in this directory, each with its own review.

Before you build

Four things to settle first, each read off Zoho CRM's own pages.

  • Confirm the API is on your planAPI access starts on the Standard plan. Free tier: Free edition: up to 3 users, 5,000 API credits/day, no webhooks.
  • Keep the key out of your codeOAuth. It is sent as: header: Authorization: Zoho-oauthtoken <access_token>.
  • Design around the rate limitCredit system on a rolling 24-hour window plus a concurrency cap per org per app (no per-minute limit).
  • Know the catch before you scaleSearch API 'equals' behaves like 'contains': (Company:equals:ABC) also returns 'ABC Inc'. Do not use it as an exact dedupe check; prefer upsert with duplicate_check_fields or COQL. Source: zoho.com/crm/developer/docs/api/v8/search-records.html

Want us to build it for you?

Tell us what you want Zoho CRM to do in your stack. We will show you how we would wire it into your data, outbound or CRM, and what we would check first.

Read from zohowebstatic.com/sites/zweb/json/pricing/crm-pricing, zoho.com/crm/developer/docs/api-directory.md and zoho.com/crm/developer/docs/api/v8/api-limit. Verified 25 Oct 2026.

All 8 endpointsFor developers: method, path, what it does and what it costs.

Base URL: zohoapis.com/crm/v8 (data-centre specific, e.g. zohoapis.eu/crm/v8)

Bulk and async: Bulk Write: zipped CSV max 25MB, 25,000 records and 200 columns per file, 500 credits per job; Bulk Read: 50 credits per job. Source: zoho.com/crm/developer/docs/api/v8/bulk-write/limitations.html

Webhooks: Two kinds: workflow webhook actions (Professional+; per-day caps by edition) and Notification API channels (instant create/edit/delete events, channel expiry max one week, re-enable to keep alive). Sources: zoho.com/crm/comparison.html; zoho.com/crm/developer/docs/api/v8/notifications/enable.html

8 endpoints
MethodPathWhat it doesCost
POST/{module}/upsertInsert or update up to 100 records, matched on duplicate check fields (system unique fields or fields marked unique), order set by duplicate_check_fields1 credit per 10 records (max 10 per call)
POST/{module}Insert up to 100 records1 credit per 10 records
GET/{module}/searchSearch records in one module by criteria/email/phone/word1
POST/coqlSQL-like SELECT across a module (COQL)1 (LIMIT 1-200), 2 (201-1000), 3 (1001-2000)
POSTasynchttps://www.zohoapis.com/crm/bulk/v8/writeBulk Write job from an uploaded zipped CSV (insert/update/upsert)500 credits per job regardless of outcome
POSTasynchttps://www.zohoapis.com/crm/bulk/v8/readBulk Read (export) job50 credits per initialize
POST/__composite_requestsRun several API calls in one request1
POST/actions/watchEnable instant notifications (create/edit/delete events) to a URL; channel_expiry max one week, and if omitted (or set beyond a week) the channel expires after one hour1