Overview
A client-mode connector for the Intercom REST API that connects plant and product events to customer support. A connected machine that raises an alarm can open a conversation or a ticket for its owner, the support team can be told when it clears, and contact or company custom attributes (firmware, run hours, machines online) stay current from live data. Usage can be recorded as Intercom events so it shows on the customer’s timeline. Every event pinsIntercom-Version: 2.16, the latest generally available version (released 2026-07-15), so a change of the app’s default version in the Developer Hub does not change the connector’s behaviour. Topics use crm/intercom/<object>/<verb>; each response is published on <source topic>/response.
Authentication
Create an app in the Intercom Developer Hub and copy its access token from Configure > Authentication in the app (see Intercom authentication). Public apps use an OAuth access token instead; the header is the same. The connector sendsAuthorization: Bearer <token>, taken from the access_token field of each MQTT payload.
Do not publish the token in retained messages. Store it as a broker secret (for example
INTERCOM_ACCESS_TOKEN) and have a LoT action add it to the payload with GET SECRET before publishing to the connector topic.BASE_ADDRESS to https://api.eu.intercom.io or https://api.au.intercom.io.
Payload fields
| Field | Used by | Notes |
|---|---|---|
access_token | every event | Intercom access token |
id | ...Get, ...Update, reply, manage, notes, tags | Intercom id of the contact, conversation or ticket |
external_id | ContactGetByExternalId | Your own customer id |
query | CompaniesFind, EventsList, DataAttributesList | URL-encoded query string |
body | create, update, reply and search events | JSON object sent as the request body |
Events
| Event | Method | Endpoint | Source topic | Write |
|---|---|---|---|---|
CurrentAdmin | GET | /me | crm/intercom/me/get | |
AdminsList | GET | /admins | crm/intercom/admins/list | |
ContactsSearch | POST | /contacts/search | crm/intercom/contacts/search | |
ContactGet | GET | /contacts/{id} | crm/intercom/contacts/get | |
ContactGetByExternalId | GET | /contacts/find_by_external_id/{external_id} | crm/intercom/contacts/by-external-id/get | |
ContactCreate | POST | /contacts | crm/intercom/contacts/create | yes |
ContactUpdate | PUT | /contacts/{id} | crm/intercom/contacts/update | yes |
CompaniesFind | GET | /companies?{query} | crm/intercom/companies/find | |
CompanyUpsert | POST | /companies | crm/intercom/companies/upsert | yes |
EventCreate | POST | /events | crm/intercom/events/create | yes |
EventsList | GET | /events?{query} | crm/intercom/events/list | |
ConversationCreate | POST | /conversations | crm/intercom/conversations/create | yes |
ConversationsSearch | POST | /conversations/search | crm/intercom/conversations/search | |
ConversationGet | GET | /conversations/{id} | crm/intercom/conversations/get | |
ConversationReply | POST | /conversations/{id}/reply | crm/intercom/conversations/reply | yes |
ConversationManage | POST | /conversations/{id}/parts | crm/intercom/conversations/manage | yes |
ContactNoteCreate | POST | /contacts/{id}/notes | crm/intercom/contacts/notes/create | yes |
TicketTypesList | GET | /ticket_types | crm/intercom/ticket-types/list | |
TicketCreate | POST | /tickets | crm/intercom/tickets/create | yes |
TicketUpdate | PUT | /tickets/{id} | crm/intercom/tickets/update | yes |
TicketsSearch | POST | /tickets/search | crm/intercom/tickets/search | |
TagsList | GET | /tags | crm/intercom/tags/list | |
ContactTag | POST | /contacts/{id}/tags | crm/intercom/contacts/tags/add | yes |
DataAttributesList | GET | /data_attributes?{query} | crm/intercom/data-attributes/list | |
MessageCreate | POST | /messages | crm/intercom/messages/create | yes |
POST .../search events only read data; Intercom uses a JSON body for search queries. No delete, merge, archive, block or redact events are packaged on purpose.
Basic Syntax
DEFINE CONNECTOR IntercomRestApi WITH TYPE REST_API
ADD REST_API_CONFIG
WITH BASE_ADDRESS "https://api.intercom.io"
WITH ENABLE_CLIENT "true"
WITH USE_SSL "true"
WITH REQUEST_TIMEOUT '60'
WITH DEFAULT_CONTENT_TYPE "application/json"
ADD EVENT CurrentAdmin
WITH SOURCE_TOPIC "crm/intercom/me/get"
WITH DESTINATION_TOPIC "crm/intercom/me/get/response"
WITH METHOD "GET"
WITH ENDPOINT "/me"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD EVENT AdminsList
WITH SOURCE_TOPIC "crm/intercom/admins/list"
WITH DESTINATION_TOPIC "crm/intercom/admins/list/response"
WITH METHOD "GET"
WITH ENDPOINT "/admins"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD EVENT ContactsSearch
WITH SOURCE_TOPIC "crm/intercom/contacts/search"
WITH DESTINATION_TOPIC "crm/intercom/contacts/search/response"
WITH METHOD "POST"
WITH ENDPOINT "/contacts/search"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT ContactGet
WITH SOURCE_TOPIC "crm/intercom/contacts/get"
WITH DESTINATION_TOPIC "crm/intercom/contacts/get/response"
WITH METHOD "GET"
WITH ENDPOINT "/contacts/{value.json.id}"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD EVENT ContactGetByExternalId
WITH SOURCE_TOPIC "crm/intercom/contacts/by-external-id/get"
WITH DESTINATION_TOPIC "crm/intercom/contacts/by-external-id/get/response"
WITH METHOD "GET"
WITH ENDPOINT "/contacts/find_by_external_id/{value.json.external_id}"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD EVENT ContactCreate
WITH SOURCE_TOPIC "crm/intercom/contacts/create"
WITH DESTINATION_TOPIC "crm/intercom/contacts/create/response"
WITH METHOD "POST"
WITH ENDPOINT "/contacts"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT ContactUpdate
WITH SOURCE_TOPIC "crm/intercom/contacts/update"
WITH DESTINATION_TOPIC "crm/intercom/contacts/update/response"
WITH METHOD "PUT"
WITH ENDPOINT "/contacts/{value.json.id}"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT CompaniesFind
WITH SOURCE_TOPIC "crm/intercom/companies/find"
WITH DESTINATION_TOPIC "crm/intercom/companies/find/response"
WITH METHOD "GET"
WITH ENDPOINT "/companies?{value.json.query}"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD EVENT CompanyUpsert
WITH SOURCE_TOPIC "crm/intercom/companies/upsert"
WITH DESTINATION_TOPIC "crm/intercom/companies/upsert/response"
WITH METHOD "POST"
WITH ENDPOINT "/companies"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT EventCreate
WITH SOURCE_TOPIC "crm/intercom/events/create"
WITH DESTINATION_TOPIC "crm/intercom/events/create/response"
WITH METHOD "POST"
WITH ENDPOINT "/events"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT EventsList
WITH SOURCE_TOPIC "crm/intercom/events/list"
WITH DESTINATION_TOPIC "crm/intercom/events/list/response"
WITH METHOD "GET"
WITH ENDPOINT "/events?{value.json.query}"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD EVENT ConversationCreate
WITH SOURCE_TOPIC "crm/intercom/conversations/create"
WITH DESTINATION_TOPIC "crm/intercom/conversations/create/response"
WITH METHOD "POST"
WITH ENDPOINT "/conversations"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT ConversationsSearch
WITH SOURCE_TOPIC "crm/intercom/conversations/search"
WITH DESTINATION_TOPIC "crm/intercom/conversations/search/response"
WITH METHOD "POST"
WITH ENDPOINT "/conversations/search"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT ConversationGet
WITH SOURCE_TOPIC "crm/intercom/conversations/get"
WITH DESTINATION_TOPIC "crm/intercom/conversations/get/response"
WITH METHOD "GET"
WITH ENDPOINT "/conversations/{value.json.id}"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD EVENT ConversationReply
WITH SOURCE_TOPIC "crm/intercom/conversations/reply"
WITH DESTINATION_TOPIC "crm/intercom/conversations/reply/response"
WITH METHOD "POST"
WITH ENDPOINT "/conversations/{value.json.id}/reply"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT ConversationManage
WITH SOURCE_TOPIC "crm/intercom/conversations/manage"
WITH DESTINATION_TOPIC "crm/intercom/conversations/manage/response"
WITH METHOD "POST"
WITH ENDPOINT "/conversations/{value.json.id}/parts"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT ContactNoteCreate
WITH SOURCE_TOPIC "crm/intercom/contacts/notes/create"
WITH DESTINATION_TOPIC "crm/intercom/contacts/notes/create/response"
WITH METHOD "POST"
WITH ENDPOINT "/contacts/{value.json.id}/notes"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT TicketTypesList
WITH SOURCE_TOPIC "crm/intercom/ticket-types/list"
WITH DESTINATION_TOPIC "crm/intercom/ticket-types/list/response"
WITH METHOD "GET"
WITH ENDPOINT "/ticket_types"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD EVENT TicketCreate
WITH SOURCE_TOPIC "crm/intercom/tickets/create"
WITH DESTINATION_TOPIC "crm/intercom/tickets/create/response"
WITH METHOD "POST"
WITH ENDPOINT "/tickets"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT TicketUpdate
WITH SOURCE_TOPIC "crm/intercom/tickets/update"
WITH DESTINATION_TOPIC "crm/intercom/tickets/update/response"
WITH METHOD "PUT"
WITH ENDPOINT "/tickets/{value.json.id}"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT TicketsSearch
WITH SOURCE_TOPIC "crm/intercom/tickets/search"
WITH DESTINATION_TOPIC "crm/intercom/tickets/search/response"
WITH METHOD "POST"
WITH ENDPOINT "/tickets/search"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT TagsList
WITH SOURCE_TOPIC "crm/intercom/tags/list"
WITH DESTINATION_TOPIC "crm/intercom/tags/list/response"
WITH METHOD "GET"
WITH ENDPOINT "/tags"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD EVENT ContactTag
WITH SOURCE_TOPIC "crm/intercom/contacts/tags/add"
WITH DESTINATION_TOPIC "crm/intercom/contacts/tags/add/response"
WITH METHOD "POST"
WITH ENDPOINT "/contacts/{value.json.id}/tags"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
ADD EVENT DataAttributesList
WITH SOURCE_TOPIC "crm/intercom/data-attributes/list"
WITH DESTINATION_TOPIC "crm/intercom/data-attributes/list/response"
WITH METHOD "GET"
WITH ENDPOINT "/data_attributes?{value.json.query}"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD EVENT MessageCreate
WITH SOURCE_TOPIC "crm/intercom/messages/create"
WITH DESTINATION_TOPIC "crm/intercom/messages/create/response"
WITH METHOD "POST"
WITH ENDPOINT "/messages"
WITH HEADERS
ADD "Accept" "application/json"
ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
ADD "Authorization" "Bearer {value.json.access_token}"
ADD "Intercom-Version" "2.16"
ADD "Content-Type" "application/json"
WITH BODY "{value.json.body}"
Examples
- Conversation from an alarm
- Contact custom attributes
- Usage event
- Ticket for the service team
Publish to When the alarm clears, publish
crm/intercom/conversations/create:{"access_token": "<from GET SECRET>", "body": {"from": {"type": "user", "id": "<contact id>"}, "body": "Press 7 reports overtemperature (E42)"}}
{"access_token": "...", "id": "<conversation id>", "body": {"message_type": "close", "type": "admin", "admin_id": "<admin id>", "body": "Cleared by the line"}} to crm/intercom/conversations/manage.Check the attribute names with
crm/intercom/data-attributes/list ("query": "model=contact"), then publish to crm/intercom/contacts/update:{"access_token": "<from GET SECRET>", "id": "<contact id>", "body": {"custom_attributes": {"firmware": "4.2.1", "run_hours": 1820}}}
Publish to Intercom answers
crm/intercom/events/create:{"access_token": "<from GET SECRET>", "body": {"event_name": "machine-alarm", "created_at": 1791000000, "user_id": "cust-1042", "metadata": {"code": "E42", "line": "4"}}}
202 Accepted with an empty body. created_at is a Unix timestamp in seconds.Get a
ticket_type_id from crm/intercom/ticket-types/list, then publish to crm/intercom/tickets/create:{"access_token": "<from GET SECRET>", "body": {"ticket_type_id": "<id>", "contacts": [{"id": "<contact id>"}], "ticket_attributes": {"_default_title_": "Press 7 overtemperature", "_default_description_": "E42 at 13:55"}}}
Webhooks into the broker
Intercom webhooks (topics such asconversation.user.created or ticket.state.updated) are set up on the app’s Webhooks page in the Developer Hub, not through the API. Intercom then POSTs each notification to your endpoint and signs it with an X-Hub-Signature header (sha1= plus the HMAC-SHA1 of the JSON body, keyed with the app’s client_secret from its Basic Info page). To receive them, run a separate server-mode connector:
DEFINE CONNECTOR IntercomWebhookReceiver WITH TYPE REST_API
ADD REST_API_CONFIG
WITH ENABLE_SERVER "true"
WITH SERVER_PORT '8443'
WITH DEFAULT_CONTENT_TYPE "application/json"
ADD EVENT IntercomNotification
WITH ENDPOINT "/intercom/webhook"
WITH METHOD "POST"
WITH DESTINATION_TOPIC "crm/intercom/webhook/events"
Rate limits
By default an app may make 10,000 API calls per minute and a workspace 25,000, spread evenly over 10-second windows. Excess calls get429 Too Many Requests with X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers. React to events rather than polling searches from fast timers.

