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 📝 Blog 🗂 Codex Pricing Start Free Trial →
HomeConnect › Connect Intercom to WhatsApp
Intercom Integration Guide · Support / Helpdesk

Connect Intercom to WhatsApp

Look up Intercom contacts from a WhatsApp chatbot by email or phone number, fetch account details and custom attributes, and reply with live context. When a customer messages you on WhatsApp, your bot already knows who they are.

Published 23 June 2026  ·  7 min read  ·  Support / Helpdesk

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 Intercom-specific values.

Intercom contact search is a POST, not a GET

Unlike most APIs in this series where you search via GET query parameters, Intercom's contact search endpoint is a POST request with a structured JSON body. Your External API Request step must be set to POST, not GET, even though you are only reading data. This is the most common mistake when first setting up this integration.

Step 1: Get your Intercom Access Token

Intercom uses a workspace-level access token. One token gives access to all contacts, conversations, and data in your workspace.

1
In Intercom, go to Settings (bottom left) → IntegrationsDeveloper Hub. Or go directly to app.intercom.com/a/developer-signup.
2
Click Your Apps and select your existing app, or create a new one (name it "WA.Expert Bot").
3
Go to the Authentication tab. Copy the Access Token. This is a permanent token. Treat it like a password.
Token is workspace-scoped

The Intercom access token gives full read and write access to your workspace. Store it securely in WA.Expert's step configuration and do not share it. If compromised, regenerate it from the same Developer Hub page.

Official docs

Intercom REST API reference: developers.intercom.com/docs

Step 2: Fill in the External API Request step

Intercom contact search is a POST with a JSON body. In your WA.Expert chatbot flow, collect the customer's email as {{customer_email}}, then add an External API Request step:

External API Request Step · WA.Expert
Select Method
POST
Request URL
https://api.intercom.io/contacts/search
Select Auth Type
No Auth (Bearer in header below)
Header Parameters
AuthorizationBearer YOUR_INTERCOM_ACCESS_TOKEN
Content-Typeapplication/json
Intercom-Version2.11
Select Body Type
JSON
Body
{{"query": {{"field": "email", "operator": "=", "value": "{{{{customer_email}}}}"}},"pagination": {{"per_page": 1}}}}
Choose Response Type
JSON

Field-by-field breakdown

FieldValueNotes
Select MethodPOSTThe contacts search endpoint requires POST even for read-only queries.
Request URLhttps://api.intercom.io/contacts/searchSingle fixed URL for all contact searches. No query parameters.
AuthorizationBearer YOUR_INTERCOM_ACCESS_TOKENStandard Bearer auth. Paste the token from Step 1 after 'Bearer '.
Content-Typeapplication/jsonRequired for POST requests with a JSON body.
Intercom-Version2.11Required on every Intercom API request. Specifies the API version. Use 2.11 for stable behaviour.
BodyJSON search query (see below)Structured filter query. Field, operator, and value define what to search.
Choose Response TypeJSONIntercom returns structured JSON.
The Intercom-Version header is required on every request

Without Intercom-Version: 2.11, Intercom defaults to the version your Developer Hub app was originally registered on, which may be older and have different field names. Always include this header.

Search query patterns

The JSON body of the search request defines what to look for. Every search follows the same structure.

What you wantJSON body
Contact by email{{"query": {{"field": "email", "operator": "=", "value": "priya@example.com"}}}}
Contact by phone{{"query": {{"field": "phone", "operator": "=", "value": "+919820000001"}}}}
Contact by name{{"query": {{"field": "name", "operator": "=", "value": "Priya Sharma"}}}}
Users only (not leads){{"query": {{"operator": "AND", "value": [{{"field": "email", "operator": "=", "value": "priya@example.com"}}, {{"field": "role", "operator": "=", "value": "user"}}]}}}}

Intercom supports AND and OR operators at the top level of the query value array for multi-field searches.

Step 3: Map the response to WhatsApp variables

A successful Intercom contact search response looks like this:

Intercom REST API — POST /contacts/search response
{
  "type": "list",
  "data": [
    {
      "type": "contact",
      "id": "64a1b2c3d4e5f6a7b8c9d0e1",
      "workspace_id": "abc123",
      "external_id": "usr_001",
      "role": "user",
      "email": "priya@example.com",
      "name": "Priya Sharma",
      "phone": "+919820000001",
      "avatar": null,
      "created_at": 1718870400,
      "updated_at": 1719216000,
      "last_seen_at": 1719216000,
      "unsubscribed_from_emails": false,
      "custom_attributes": {
        "plan": "pro",
        "account_value": "125000"
      }
    }
  ],
  "total_count": 1,
  "pages": {
    "type": "pages",
    "page": 1,
    "per_page": 1,
    "total_pages": 1
  }
}

Map: data[0].id, data[0].name, data[0].email, data[0].role
     data[0].custom_attributes.plan (if you store plan in Intercom)
Results are in a data array under the list response

Intercom wraps search results in a 'list' object with a 'data' array. Map as data[0].name, data[0].email. If total_count is 0 or data is empty, the contact was not found. The role field tells you whether this is a 'user' (known customer) or 'lead' (anonymous visitor).

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

Variable nameResponse pathExample value
contact_iddata[0].id64a1b2c3d4e5f6a7b8c9d0e1
contact_namedata[0].namePriya Sharma
contact_emaildata[0].emailpriya@example.com
contact_roledata[0].roleuser
contact_plandata[0].custom_attributes.planpro
total_counttotal_count1

custom_attributes contains any fields you have added to your Intercom contacts: plan, account value, company, region, or any other data you track. The key names match what you set in Intercom.

Keep the WhatsApp reply in the free service window

If the customer messaged you first within the last 24 hours, your reply is a free service conversation. For proactive outbound messages using Intercom data, use an approved Utility or Marketing template.

Bonus: get a contact's conversations

Once you have the contact's Intercom ID, a second GET step fetches their conversation history:

Get contact conversations — GET /contacts/{id}/conversations
GET https://api.intercom.io/contacts/64a1b2c3d4e5f6a7b8c9d0e1/conversations
Authorization: Bearer YOUR_INTERCOM_ACCESS_TOKEN
Intercom-Version: 2.11

Response (abbreviated):
{
  "type": "list",
  "conversations": [
    {
      "id": "483",
      "title": "Need help with my order",
      "state": "open",
      "created_at": 1719000000,
      "updated_at": 1719200000
    }
  ],
  "total_count": 2
}

Map: conversations[0].id, conversations[0].title, conversations[0].state
state can be: open, closed, snoozed

Worked example: customer context bot

Chatbot flow — Intercom contact lookup by email
Customer messages: "Can someone look into my account?"

Bot asks: "Please share the email on your account."
Customer: priya@example.com
Stored as {{customer_email}}.

External API Request step (POST):
URL: https://api.intercom.io/contacts/search
Headers:
  Authorization: Bearer eyJhbGciOi...
  Content-Type: application/json
  Intercom-Version: 2.11
Body:
  {{"query": {{"field": "email", "operator": "=", "value": "{{customer_email}}"}}}}

Response mapped:
contact_id   = "64a1b2c3d4e5f6a7b8c9d0e1"
contact_name = "Priya Sharma"
contact_plan = "pro"
total_count  = "1"

Conditions: if total_count = 0 → "No account found for this email."

Bot replies (if found):
"Hi Priya Sharma, I can see your account.
Plan: Pro

Reply SUPPORT and a team member will pick this up,
or ORDERS to check your recent order status."

Troubleshooting

SymptomLikely causeFix
401 UnauthorizedInvalid or missing access tokenCheck the token from Developer Hub > Authentication tab. Ensure 'Bearer ' prefix is in the Authorization header.
Missing Intercom-Version errorIntercom-Version header absentAdd Intercom-Version: 2.11 as a header on every request.
Empty data array (total_count: 0)Contact not found or wrong fieldTry phone field if email returns nothing. Confirm the format matches what is stored in Intercom (with/without country code).
405 Method Not AllowedUsing GET instead of POSTThe contacts search endpoint requires POST. Change the method in your step.
contact_plan undefinedcustom_attributes.plan not set for this contactCheck the field name in Intercom. Custom attribute keys are case-sensitive and must match exactly what you defined in Intercom.
rate limit 429Intercom plan rate limit exceededIntercom rate limits are plan-based. For a WhatsApp bot doing single lookups, standard limits are very generous.

Common questions

Why is the search endpoint a POST?
+
Intercom's search uses a structured JSON query body, which requires POST. GET requests cannot carry a request body reliably. Set your External API Request step to POST even for read-only contact searches.
What is the Intercom-Version header?
+
It specifies the API version. Current stable: 2.11. Required on every request. Without it, Intercom falls back to the version your app was first registered on, which may differ.
Where do I find my Access Token?
+
Settings > Integrations > Developer Hub > Your Apps > select app > Authentication tab.
What is the difference between a user and a lead in Intercom?
+
User = identified contact with a known email. Lead = anonymous or partially identified visitor. The role field in the response tells you which type: role=user or role=lead.
Can I search by phone number?
+
Yes. POST /contacts/search with body: {"query": {"field": "phone", "operator": "=", "value": "+919820000001"}}.
Does this incur extra WA.Expert charges?
+
One automation action per External API Request call. Included on Complete plan. Starter: from Rs. 49 per 1,000 actions.

Connect Zendesk to WhatsApp

Zendesk Support API: OAuth 2.0, search tickets by customer email.

Read guide →

Connect Freshdesk to WhatsApp

Freshdesk API: Basic Auth with API key, ticket lookup and creation.

Read guide →

External API Request Step

Master every field in WA.Expert's HTTP action step.

Read foundation guide →

Connect Intercom 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