InTouch Hub · Blue Isle Software

Zoho CRM

Create and update Leads, Contacts, and Deals in Zoho CRM via its v6 REST API.

Provided free and as is, without warranty of any kind — including merchantability, fitness for a particular purpose, and the accuracy or completeness of any result. See the licence. You are responsible for checking what this produces before relying on it.

crmcrm-salesleadssaleszoho

Zoho CRM

Read and write Leads, Contacts, and Deals in Zoho CRM through the official Zoho CRM REST API v6.

Operations

operation HTTP Endpoint Notes
list_records GET /crm/v6/{module}?fields=...&per_page=N Zoho v6 requires the fields param; a default set is sent per module.
get_record GET /crm/v6/{module}/{recordId} Fetch one record by id.
insert_record POST /crm/v6/{module} Body {"data": [ <fields> ]}.
update_record PUT /crm/v6/{module}/{recordId} Body {"data": [ {"id": <recordId>, <fields> } ]}.

{module} is one of Leads, Contacts, Deals (defaults to Leads).

API key setup

  1. Go to the Zoho API Console and create a client (Self Client is simplest for server-to-server use).
  2. Generate an access token with a CRM scope such as ZohoCRM.modules.ALL (or a narrower ZohoCRM.modules.leads.{READ,CREATE,UPDATE}).
  3. Pass that token as apiKey. It is sent as Authorization: Zoho-oauthtoken <token>.

Zoho access tokens expire roughly every hour. For unattended automation, use your refresh token to mint a fresh access token before each run (e.g. a preceding http task hitting https://accounts.zoho.com/oauth/v2/token), then feed the result into this tool's apiKey.

Data center

Pick apiDomain to match where your Zoho account lives:

Data center apiDomain
US (default) https://www.zohoapis.com
EU https://www.zohoapis.eu
India https://www.zohoapis.in
Australia https://www.zohoapis.com.au
Japan https://www.zohoapis.jp

Examples

List the 5 most recent leads

{
  "apiKey": "1000.xxxx.yyyy",
  "operation": "list_records",
  "module": "Leads",
  "perPage": "5"
}

Get one contact by id

{
  "apiKey": "1000.xxxx.yyyy",
  "operation": "get_record",
  "module": "Contacts",
  "recordId": "3652397000003852095"
}

Create a lead

{
  "apiKey": "1000.xxxx.yyyy",
  "operation": "insert_record",
  "module": "Leads",
  "fields": "{\"Last_Name\": \"Smith\", \"First_Name\": \"John\", \"Company\": \"ABC Corp\", \"Email\": \"[email protected]\"}"
}

Update a deal's stage

{
  "apiKey": "1000.xxxx.yyyy",
  "operation": "update_record",
  "module": "Deals",
  "recordId": "3652397000003852095",
  "fields": "{\"Stage\": \"Closed Won\", \"Amount\": 25000}"
}

Output

Every call publishes:

Non-2xx responses are returned with their body intact (not thrown) so the caller can inspect Zoho's error code. A transport-level failure emits {"error": "..."} and exits non-zero, marking the step FAILED.

Publishes

The keys a later task may reference as {{taskName.key}}. Referencing anything not listed here resolves to nothing at run time.

Input Properties

Every property this tool accepts, from its own tool.iml.

Property Type Required Default Description
apiKey string yes — Zoho OAuth access token. Generate via Zoho API Console (Self Client or OAuth flow) with scope ZohoCRM.modules.ALL; sent as 'Authorization: Zoho-oauthtoken '. Access tokens expire ~1 hour — refresh before reuse.
operation string yes — One of: list_records, get_record, insert_record, update_record
module string no — CRM module: Leads, Contacts, or Deals. Defaults to Leads.
recordId string no — Record id — required for get_record and update_record.
fields string no — JSON object of field API names to write, e.g. {"Last_Name": "Smith", "Company": "ABC Corp"}. Required for insert_record and update_record.
queryFields string no — Comma-separated field API names to return for list_records (Zoho v6 requires the 'fields' param). Defaults to a sensible set per module.
perPage string no 10 Max records to return for list_records (1-200).
apiDomain string no — Zoho API domain for your data center. Defaults to https://www.zohoapis.com (US). Use https://www.zohoapis.eu, .in, .com.au, .jp, etc. as appropriate.