Integrate Freshsales (Freshworks CRM) into the workflow. Create, update, look up, and search contacts, manage deals and accounts, create leads on Freshsales Classic accounts, and log the work around them: follow-up tasks, appointments, notes, and sales activities such as AI calls or WhatsApp chats. Requires your Freshsales bundle alias and API key.
Create a contact in Freshsales. Needs an email or a mobile number; email and mobile number are unique, so a duplicate fails.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
firstName | string | No | First name |
lastName | string | No | Last name |
email | string | No | Primary email address. Creating needs an email or a mobile number. |
mobileNumber | string | No | Mobile number. Unique per record. |
workNumber | string | No | Work phone number |
jobTitle | string | No | Job title |
ownerId | string | No | ID of the user to assign as owner |
lifecycleStageId | string | No | ID of the lifecycle stage |
contactStatusId | string | No | ID of the contact status |
salesAccountId | string | No | ID of an existing account to set as the primary account of the contact |
customFields | json | No | Custom field values keyed by internal name, e.g. {"cf_city": "Pune", "cf_is_active": true} |
additionalFields | json | No | Any other documented attributes in Freshsales API naming, e.g. {"territory_id": 3}. Explicit fields win over the same keys here. |
| Parameter | Type | Description |
|---|
contact | object | The created contact |
↳ customFields | json | Custom field values keyed by internal name |
Update fields of a Freshsales contact by ID, such as owner, lifecycle stage, phone, or custom fields. Only the fields you set change.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
contactId | string | Yes | ID of the contact to update |
firstName | string | No | First name |
lastName | string | No | Last name |
email | string | No | Primary email address. Creating needs an email or a mobile number. |
mobileNumber | string | No | Mobile number. Unique per record. |
workNumber | string | No | Work phone number |
jobTitle | string | No | Job title |
ownerId | string | No | ID of the user to assign as owner |
lifecycleStageId | string | No | ID of the lifecycle stage |
contactStatusId | string | No | ID of the contact status |
salesAccountId | string | No | ID of an existing account to set as the primary account of the contact |
customFields | json | No | Custom field values keyed by internal name, e.g. {"cf_city": "Pune", "cf_is_active": true} |
additionalFields | json | No | Any other documented attributes in Freshsales API naming, e.g. {"territory_id": 3}. Explicit fields win over the same keys here. |
| Parameter | Type | Description |
|---|
contact | object | The updated contact |
↳ customFields | json | Custom field values keyed by internal name |
Get a Freshsales contact by ID.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
contactId | string | Yes | ID of the contact |
| Parameter | Type | Description |
|---|
contact | object | The contact |
↳ customFields | json | Custom field values keyed by internal name |
Find Freshsales contacts. "lookup" finds exact matches on one field (email by default, or name or a custom field); "search" runs a keyword search over names and emails; "filter" runs a filtered search with filter rules.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
searchMode | string | Yes | How to search: "lookup", "search", or "filter" |
query | string | No | Value to look up or keywords to search for (lookup and search modes) |
lookupField | string | No | Field to match exactly in lookup mode: "email" (default), "name", or the internal name of a text, number, dropdown, or radio custom field |
filterRule | json | No | Filter rules for filter mode, e.g. [{"attribute": "contact_email.email", "operator": "is_in", "value": "jane@example.com"}] |
perPage | number | No | Results per page for search and filter modes (default 10, max 100) |
| Parameter | Type | Description |
|---|
contacts | array | Matching contacts. Keyword search returns only id, displayName, and email for each. |
↳ customFields | json | Custom field values keyed by internal name |
count | number | Number of contacts returned |
total | number | Total matches reported by filter mode |
Create a lead in a Freshsales Classic account (freshsales.io domain). Needs an email or a mobile number. Current Freshworks CRM accounts have no lead module; create a contact instead.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
firstName | string | No | First name |
lastName | string | No | Last name |
email | string | No | Primary email address. Creating needs an email or a mobile number. |
mobileNumber | string | No | Mobile number. Unique per record. |
workNumber | string | No | Work phone number |
jobTitle | string | No | Job title |
ownerId | string | No | ID of the user to assign as owner |
companyName | string | No | Name of the company the lead works for |
leadStageId | string | No | ID of the lead stage |
leadSourceId | string | No | ID of the lead source |
customFields | json | No | Custom field values keyed by internal name, e.g. {"cf_city": "Pune", "cf_is_active": true} |
additionalFields | json | No | Any other documented attributes in Freshsales API naming, e.g. {"territory_id": 3}. Explicit fields win over the same keys here. |
| Parameter | Type | Description |
|---|
lead | object | The created lead |
↳ company | object | Company of the lead |
Update fields of a Freshsales Classic lead by ID, such as owner, lead stage, or custom fields. Only the fields you set change.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
leadId | string | Yes | ID of the lead to update |
firstName | string | No | First name |
lastName | string | No | Last name |
email | string | No | Primary email address. Creating needs an email or a mobile number. |
mobileNumber | string | No | Mobile number. Unique per record. |
workNumber | string | No | Work phone number |
jobTitle | string | No | Job title |
ownerId | string | No | ID of the user to assign as owner |
companyName | string | No | Name of the company the lead works for |
leadStageId | string | No | ID of the lead stage |
leadSourceId | string | No | ID of the lead source |
customFields | json | No | Custom field values keyed by internal name, e.g. {"cf_city": "Pune", "cf_is_active": true} |
additionalFields | json | No | Any other documented attributes in Freshsales API naming, e.g. {"territory_id": 3}. Explicit fields win over the same keys here. |
| Parameter | Type | Description |
|---|
lead | object | The updated lead |
↳ company | object | Company of the lead |
Get a Freshsales Classic lead by ID.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
leadId | string | Yes | ID of the lead |
| Parameter | Type | Description |
|---|
lead | object | The lead |
↳ company | object | Company of the lead |
Create a deal in Freshsales. Name, amount, and the account ID are required by Freshsales.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
name | string | Yes | Deal name |
amount | number | Yes | Deal value |
salesAccountId | string | Yes | ID of the account the deal belongs to. Freshsales requires an account on every deal. |
dealStageId | string | No | ID of the deal stage |
dealPipelineId | string | No | ID of the deal pipeline |
ownerId | string | No | ID of the user to assign as owner |
expectedClose | string | No | Expected close date, YYYY-MM-DD |
contactIds | string | No | Comma-separated contact IDs to link to the deal |
customFields | json | No | Custom field values keyed by internal name, e.g. {"cf_city": "Pune", "cf_is_active": true} |
additionalFields | json | No | Any other documented attributes in Freshsales API naming, e.g. {"territory_id": 3}. Explicit fields win over the same keys here. |
| Parameter | Type | Description |
|---|
deal | object | The created deal |
↳ customFields | json | Custom field values keyed by internal name |
Update fields of a Freshsales deal by ID, such as stage, amount, owner, or expected close date. Only the fields you set change.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
dealId | string | Yes | ID of the deal to update |
name | string | No | Deal name |
amount | number | No | Deal value |
salesAccountId | string | No | ID of the account the deal belongs to |
dealStageId | string | No | ID of the deal stage |
dealPipelineId | string | No | ID of the deal pipeline |
ownerId | string | No | ID of the user to assign as owner |
expectedClose | string | No | Expected close date, YYYY-MM-DD |
contactIds | string | No | Comma-separated contact IDs to link to the deal |
customFields | json | No | Custom field values keyed by internal name, e.g. {"cf_city": "Pune", "cf_is_active": true} |
additionalFields | json | No | Any other documented attributes in Freshsales API naming, e.g. {"territory_id": 3}. Explicit fields win over the same keys here. |
| Parameter | Type | Description |
|---|
deal | object | The updated deal |
↳ customFields | json | Custom field values keyed by internal name |
Get a Freshsales deal by ID.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
dealId | string | Yes | ID of the deal |
| Parameter | Type | Description |
|---|
deal | object | The deal |
↳ customFields | json | Custom field values keyed by internal name |
Create an account (a company, called a sales account in the API) in Freshsales.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
name | string | Yes | Account name |
website | string | No | Website of the account |
phone | string | No | Phone number of the account |
city | string | No | City of the account |
country | string | No | Country of the account |
ownerId | string | No | ID of the user to assign as owner |
customFields | json | No | Custom field values keyed by internal name, e.g. {"cf_city": "Pune", "cf_is_active": true} |
additionalFields | json | No | Any other documented attributes in Freshsales API naming, e.g. {"territory_id": 3}. Explicit fields win over the same keys here. |
| Parameter | Type | Description |
|---|
account | object | The created account |
↳ customFields | json | Custom field values keyed by internal name |
Get a Freshsales account (sales account) by ID.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
accountId | string | Yes | ID of the account |
| Parameter | Type | Description |
|---|
account | object | The account |
↳ customFields | json | Custom field values keyed by internal name |
Create a follow-up task in Freshsales on a contact, account, deal, or Freshsales Classic lead, assigned to a user with a due date.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
title | string | Yes | Task title |
dueDate | string | Yes | When the task is due, ISO 8601, e.g. 2026-11-02T10:00:00Z |
ownerId | string | Yes | ID of the user the task is assigned to |
targetType | string | Yes | Type of the related record: "Contact", "SalesAccount", "Deal", or "Lead" (Freshsales Classic only) |
targetId | string | Yes | ID of the related record |
description | string | No | Task description |
taskTypeId | string | No | ID of the task type |
outcomeId | string | No | ID of the task outcome |
| Parameter | Type | Description |
|---|
task | object | The created task |
Book an appointment (meeting) in Freshsales on a contact, account, deal, or Freshsales Classic lead, with optional user and contact attendees.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
title | string | Yes | Appointment title |
fromDate | string | Yes | Start time, ISO 8601, e.g. 2026-11-02T10:30:00+05:30 |
endDate | string | Yes | End time, ISO 8601 |
targetType | string | No | Type of the related record: "Contact", "SalesAccount", "Deal", or "Lead" (Freshsales Classic only) |
targetId | string | No | ID of the related record |
description | string | No | Appointment description |
location | string | No | Location or meeting link |
timeZone | string | No | Time zone name, e.g. "Chennai" |
isAllDay | boolean | No | Whether the appointment lasts all day |
attendeeUserIds | string | No | Comma-separated IDs of users to invite |
attendeeContactIds | string | No | Comma-separated IDs of contacts to invite |
| Parameter | Type | Description |
|---|
appointment | object | The created appointment |
↳ attendeeIds | array | IDs of the appointment attendee records |
Add a note to a Freshsales contact, account, deal, or Freshsales Classic lead, such as a call summary or conversation recap.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
description | string | Yes | Note text |
targetType | string | Yes | Type of the related record: "Contact", "SalesAccount", "Deal", or "Lead" (Freshsales Classic only) |
targetId | string | Yes | ID of the related record |
| Parameter | Type | Description |
|---|
note | object | The created note |
Log a sales activity in Freshsales, such as a call, WhatsApp chat, or demo, on a contact, account, deal, or Freshsales Classic lead.
| Parameter | Type | Required | Description |
|---|
domain | string | Yes | Bundle alias of the Freshsales account, e.g. "acme" or "acme.myfreshworks.com" (shown under Profile Settings > API Settings). Use "acme.freshsales.io" for a Freshsales Classic account. |
apiKey | string | Yes | Freshsales API key, from Profile Settings > API Settings |
title | string | Yes | Title of the activity |
salesActivityTypeId | string | Yes | ID of the sales activity type, from Admin Settings > Sales Activities |
startDate | string | Yes | Start time, ISO 8601, e.g. 2026-11-02T17:00:00+05:30 |
endDate | string | Yes | End time, ISO 8601 |
ownerId | string | Yes | ID of the user who owns the activity |
targetType | string | Yes | Type of the related record: "Contact", "SalesAccount", "Deal", or "Lead" (Freshsales Classic only) |
targetId | string | Yes | ID of the related record |
notes | string | No | Notes about the activity, e.g. a call summary |
outcomeId | string | No | ID of the activity outcome |
customFields | json | No | Custom field values keyed by internal name, e.g. {"cf_call_outcome": "Interested"} |
| Parameter | Type | Description |
|---|
salesActivity | object | The logged sales activity |