The intercom API reference.
Intercom API (Unstable)
https://api.intercom.io/
https://api.eu.intercom.io/
https://api.au.intercom.io/
AI Content
With the AI Content APIs, you can create and manage External Pages and Content Import Sources for your Fin Content Library.
External Pages are pages that you want Fin to be able to answer questions about. The API for External Pages is a great way to ingest into your Fin Content Library pages that are not publicly accessible and hence can't be crawled by Intercom.
Content Import Sources are the sources of those pages, and they are used to determine the default audience for the pages (configured via the UI). You should create a Content Import Source for each source of External Pages that you want to ingest into your Fin Content Library.
You can then iterate through the content from that source via its API and POST it to the External Pages endpoint. That endpoint has an external_id parameter which allows you to specify the identifier from the source. The endpoint will then either create a new External Page or update an existing one as appropriate.",
Custom Channel Events
With the "Custom Channel" integration, you can bring Fin and Intercom capabilities to your own platform via API, enabling powerful custom integrations.
Intercom treats your integration like any other Intercom channel, allowing your application and Intercom to exchange events seamlessly. This makes it possible, for example, for your users to interact with Fin directly within your own application’s UI.
Note: "Fin over API" is currently under managed availability. Please reach out to your accounts team to discuss access and tailored, hands-on support.
Custom Object Instances
Everything about your Custom Object instances.
From now on, to access this endpoint, you need additional permissions. Please head over to the Developer Hub app package authentication settings to configure the required permissions.
Macro
A macro is a pre-defined response template (saved reply) that can be used to quickly reply to conversations.
String representing the object's type. Always has the value macro
.
The body of the macro in HTML format with placeholders transformed to XML-like format.
The plain text version of the macro body with original Intercom placeholder format.
The time the macro was created in ISO 8601 format.
The time the macro was last updated in ISO 8601 format.
The team IDs that can view this macro when visible_to is set to specific_teams.
{ "type": "macro", "id": "123", "name": "Order Status Update", "body": "<p>Hi <attribute key=\"user.name\" default=\"there\"/>, your order is ready!</p>", "body_text": "Hi {{user.name|fallback:\"there\"}}, your order is ready!", "created_at": "2025-07-17T11:18:08.000Z", "updated_at": "2025-07-17T15:30:24.000Z", "visible_to": "everyone", "visible_to_team_ids": [ "456", "789" ], "available_on": [ "inbox", "messenger" ] }
Request
You can fetch a list of all macros (saved replies) in your workspace for use in automating responses.
The macros are returned in descending order by updated_at.
Pagination
This endpoint uses cursor-based pagination via the starting_after
parameter. The cursor is a Base64-encoded JSON array containing [updated_at, id]
of the last item from the previous page.
Placeholder Transformation
The API transforms Intercom placeholders to a more standard XML-like format:
- From:
{{user.name | fallback: 'there'}}
- To:
<attribute key="user.name" default="there"/>
- The production API server
https://api.intercom.io/macros
- The european API server
https://api.eu.intercom.io/macros
- The australian API server
https://api.au.intercom.io/macros
- curl
- Node.js
- Ruby
- PHP
- Python
- Java
- Go
- C#
- R
curl -i -X GET \
'https://api.intercom.io/macros?per_page=50&starting_after=WzE3MTk0OTM3NTcuMCwgIjEyMyJd&updated_since=1719474966' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Intercom-Version: Unstable'
{ "type": "list", "data": [ { … }, { … } ], "pages": { "type": "pages", "per_page": 50, "next": { … } } }
Request
You can fetch a single macro (saved reply) by its ID. The macro will only be returned if it is visible to the authenticated user based on its visibility settings.
Visibility Rules
A macro is returned based on its visible_to
setting:
everyone
: Always visible to all team membersspecific_teams
: Only visible if the authenticated user belongs to one of the teams specified invisible_to_team_ids
If a macro exists but is not visible to the authenticated user, a 404 error is returned.
Placeholder Transformation
The API transforms Intercom placeholders to a more standard XML-like format in the body
field:
- From:
{{user.name | fallback: 'there'}}
- To:
<attribute key="user.name" default="there"/>
Default values in placeholders are HTML-escaped for security.
- The production API server
https://api.intercom.io/macros/{id}
- The european API server
https://api.eu.intercom.io/macros/{id}
- The australian API server
https://api.au.intercom.io/macros/{id}
- curl
- Node.js
- Ruby
- PHP
- Python
- Java
- Go
- C#
- R
curl -i -X GET \
https://api.intercom.io/macros/123 \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Intercom-Version: Unstable'
Macro found
String representing the object's type. Always has the value macro
.
The body of the macro in HTML format with placeholders transformed to XML-like format.
The plain text version of the macro body with original Intercom placeholder format.
The time the macro was created in ISO 8601 format.
The time the macro was last updated in ISO 8601 format.
The team IDs that can view this macro when visible_to is set to specific_teams.
{ "type": "macro", "id": "789", "name": "Refund Process Explanation", "body": "<p>Hi <attribute key=\"user.first_name\" default=\"there\"/>,</p><p>I understand you'd like a refund for order #<attribute key=\"conversation.custom_attributes.order_number\"/>. The refund will be processed within 3-5 business days to your <attribute key=\"user.custom_attributes.payment_method\" default=\"original payment method\"/>.</p><p>Is there anything else I can help you with?</p>", "body_text": "Hi {{user.first_name|fallback:\"there\"}},\n\nI understand you'd like a refund for order #{{conversation.custom_attributes.order_number}}. The refund will be processed within 3-5 business days to your {{user.custom_attributes.payment_method|fallback:\"original payment method\"}}.\n\nIs there anything else I can help you with?", "created_at": "2025-07-21T14:44:35.000Z", "updated_at": "2025-07-21T14:44:35.000Z", "visible_to": "specific_teams", "visible_to_team_ids": [ "support_team_1", "support_team_2" ], "available_on": [ "inbox", "messenger" ] }