Platform
Chatbot Builder Bulk Messaging Team Inbox Mini CRM API & Webhooks AI Integration WhatsApp Flows
Industries
E-commerce & D2C Real Estate Education Healthcare Finance & BFSI Logistics Hospitality Retail
Integrations
Learn
Learning Hub Help & Docs Connect Guides Automation Codex Blog Message Templates
Pricing Get Started →
HomeConnect › Connect Freshsales to WhatsApp
Freshsales Integration Guide · CRM / Sales

Connect Freshsales CRM to WhatsApp

Pull live contact and deal data from Freshsales into a WhatsApp chatbot. When a prospect messages you, look up their record by phone number and reply with their lead stage, account owner, and deal context from your Freshworks CRM.

Published 22 June 2026  ·  7 min read  ·  CRM / Sales

Before following this guide, read the External API Request step foundation guide. It covers every field in the step interface so this guide can focus on Freshsales-specific values.

Freshsales uses 'Token token=', not Bearer

The Freshsales Authorization header format is: Authorization: Token token=YOUR_API_KEY. The prefix is literally the two words 'Token token=' followed by your key. Do not use 'Bearer'. This unique format trips up anyone coming from HubSpot, Zoho, or Salesforce.

Step 1: Find your API key and bundle alias

You need two things: your personal API key and your account's bundle alias. Both are on the same page.

1
In Freshsales, click your profile picture (top right) and select Profile Settings.
2
Click the API Settings tab.
3
Copy your API key, shown in the 'Your API key' field.
4
Note your bundle alias, shown just below the API key. This is the subdomain of your Freshsales account. If your URL is acme.myfreshworks.com, your bundle alias is acme.
API access requires a paid Freshsales plan

The free Freshsales plan has limited or no API access. If you cannot find API Settings under Profile Settings, your account may be on the free tier. Paid plans (Growth, Pro, Enterprise) include full API access.

Official docs

Freshsales REST API: developers.freshworks.com/crm/api

Step 2: Fill in the External API Request step

Freshsales has a dedicated lookup endpoint for searching contacts by a specific field. In your WA.Expert chatbot flow, store the customer's phone as {{customer_phone}} and add an External API Request step:

External API Request Step — WA.Expert
Select Method
GET
Request URL
https://YOUR_BUNDLE.myfreshworks.com/crm/sales/api/lookup?q={{{{customer_phone}}}}&f=mobile_number&entities=contact
Select Auth Type
No Auth (Token in header below)
Header Parameters
AuthorizationToken token=YOUR_FRESHSALES_API_KEY
Content-Typeapplication/json
Select Body Type
None (GET requests carry no body)
Choose Response Type
JSON

Field-by-field breakdown

FieldValueNotes
Select MethodGETSearching for a contact record.
Request URLhttps://YOUR_BUNDLE.myfreshworks.com/crm/sales/api/lookup?q={{{customer_phone}}}&f=mobile_number&entities=contactReplace YOUR_BUNDLE with your bundle alias. ?q= is the search value. ?f=mobile_number searches specifically the mobile number field. ?entities=contact restricts to contacts (not leads, deals, etc.).
Select Auth TypeNo AuthThe Token goes in the Authorization header below.
AuthorizationToken token=YOUR_API_KEYExact format: the word 'Token', a space, the word 'token=', then your key immediately after the equals sign. No quotes, no Bearer.
Content-Typeapplication/jsonStandard header for Freshsales API requests.
Select Body TypeNoneGET requests carry no body.
Choose Response TypeJSONFreshsales returns structured JSON.
Two search endpoints: which to use

Freshsales has two search options. The lookup endpoint (/api/lookup?f=mobile_number) searches a specific field, best for phone lookups. The general search endpoint (/api/search?q=PHONE&include=contact) searches across all text fields, broader but may return false matches. Use lookup for phone number searches.

Step 3: Map the response to WhatsApp variables

A successful Freshsales lookup response looks like this:

Freshsales REST API — GET /api/lookup?f=mobile_number response
{
  "contacts": [
    {
      "id": 5001,
      "first_name": "Priya",
      "last_name": "Sharma",
      "email": "priya@example.com",
      "mobile_number": "9820000001",
      "phone": "+919820000001",
      "lead_stage_id": 3,
      "lead_source_id": 2,
      "owner_id": 12,
      "sales_account_id": 45,
      "created_at": "2026-06-15T10:30:00Z",
      "updated_at": "2026-06-20T14:00:00Z",
      "open_deals_count": 1,
      "won_deals_count": 0
    }
  ]
}
Response fields are at the top level inside contacts array

Freshsales returns contact fields directly in the contacts array (not nested under a 'properties' or 'response' wrapper). Map using contacts[0].first_name, contacts[0].email, etc. If the contacts array is empty, no contact was found.

Map these response paths to variables in the External API Request step:

Variable nameResponse pathExample value
contact_idcontacts[0].id5001
first_namecontacts[0].first_namePriya
last_namecontacts[0].last_nameSharma
emailcontacts[0].emailpriya@example.com
open_dealscontacts[0].open_deals_count1
won_dealscontacts[0].won_deals_count0

lead_stage_id and owner_id are numeric IDs, not labels. To get the stage name or owner name, you need a second API call to /api/settings/contacts/fields or /api/selector/owners. For a simple WhatsApp reply, open_deals_count and won_deals_count are more immediately useful.

Keep the WhatsApp reply in the free service window

If the contact messaged you first within the last 24 hours, your reply is a free service conversation. For proactive outbound follow-up triggered by Freshsales data, use an approved Utility or Marketing template.

Worked example: sales context bot

Chatbot flow — Freshsales contact lookup by WhatsApp number
Customer messages your WhatsApp number.
WA.Expert captures their phone as {{customer_phone}} = "9820000001".

External API Request step:
GET https://acme.myfreshworks.com/crm/sales/api/lookup
  ?q=9820000001&f=mobile_number&entities=contact
Authorization: Token token=sfg999666t673t7t82

Response mapped:
first_name   = "Priya"
last_name    = "Sharma"
open_deals   = "1"
won_deals    = "0"

Conditions: if contacts array is empty → "We could not find your record."

Bot replies (if found):
"Hi Priya Sharma, great to hear from you.
You have 1 open deal and 0 closed deals with us.

Reply DEAL to get an update on your open proposal,
or reply SUPPORT for assistance."

Troubleshooting

SymptomLikely causeFix
401 UnauthorizedWrong auth format: using 'Bearer' instead of 'Token token='Change Authorization header to exactly: Token token=YOUR_API_KEY. The format is case-sensitive.
404 Not FoundWrong bundle alias in URLCheck your bundle alias in Profile Settings > API Settings. Replace YOUR_BUNDLE in the URL with the exact alias shown.
Empty contacts arrayPhone number format mismatch or field mismatchTry ?f=phone instead of ?f=mobile_number if contacts store the number in the Phone field rather than Mobile. Also try the number with and without country code.
API key not visibleOn free Freshsales planAPI Settings only show an API key on paid plans. Upgrade to Growth, Pro, or Enterprise to access the API.
429 Too Many RequestsRate limit: 1,000 requests/hour exceededAdd retry logic with delay. For a WhatsApp bot doing single lookups, this limit is very generous.
IDs returned instead of nameslead_stage_id, owner_id are numericMake a second GET request to /api/settings/contacts/fields for stage names or /api/selector/owners for owner names. For a simple bot reply, use open_deals_count instead.

Common questions

What is the Freshsales API auth header format?
+
Authorization: Token token=YOUR_API_KEY. The prefix is 'Token token=' (two words, equals sign, no space before the key). Not 'Bearer'. This is unique to Freshworks products.
What is a bundle alias and where do I find it?
+
The bundle alias is your Freshsales subdomain. If your URL is acme.myfreshworks.com, the alias is 'acme'. Find it explicitly under Profile Settings > API Settings, listed below your API key.
Can I search Freshsales by phone number?
+
Yes: GET /api/lookup?q=9820000001&f=mobile_number&entities=contact. Use ?f=phone to search the Phone field instead of Mobile.
What is the difference between Freshsales and Freshdesk?
+
Freshsales is Freshworks' CRM for sales teams (contacts, deals, pipelines). Freshdesk is their helpdesk for support (tickets, SLA). Both are Freshworks products but serve different teams. See our separate Freshdesk + WhatsApp guide for support ticket integration.
What plan do I need for API access?
+
Paid plans: Growth, Pro, or Enterprise. The free Freshsales plan does not include API access. If API Settings is not visible under Profile Settings, check your plan.
Does this incur extra WA.Expert charges?
+
The External API Request step counts as one automation action per call. On the Complete plan this is included. On Starter, extra action packs apply from Rs. 49 per 1,000 actions.

Connect Freshsales to WhatsApp today

Free trial, no credit card required. And if you ever get stuck, we are the only platform in India that answers you live on WhatsApp.

Start Free Trial → Book a Demo
1