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.