Skip to content

Intercom API (Unstable)

The intercom API reference.

Download OpenAPI description
Languages
Servers
The production API server

https://api.intercom.io/

The european API server

https://api.eu.intercom.io/

The australian API server

https://api.au.intercom.io/

Admins

Everything about your Admins

Operations

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.",

Operations

Articles

Everything about your Articles

Operations

Away Status Reasons

Everything about your Away Status Reasons

Operations

Companies

Everything about your Companies

Operations

Contacts

Everything about your contacts

Operations

Conversations

Everything about your Conversations

Operations

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.

Operations

Custom Object Instances

Everything about your Custom Object instances.

Permission Requirements

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.

Operations

Data Attributes

Everything about your Data Attributes

Operations

Data Events

Everything about your Data Events

Operations

Data Export

Everything about your Data Exports

Operations

Help Center

Everything about your Help Center

Operations

Jobs

Everything about jobs

Operations

Macros

Operations related to saved replies (macros) in conversations

Operations

Macro

A macro is a pre-defined response template (saved reply) that can be used to quickly reply to conversations.

typestring

String representing the object's type. Always has the value macro.

Value"macro"
Example: "macro"
idstring

The unique identifier for the macro.

Example: "123"
namestring

The name of the macro.

Example: "Order Status Update"
bodystring

The body of the macro in HTML format with placeholders transformed to XML-like format.

Example: "<p>Hi <attribute key=\"user.name\" default=\"there\"/>, your order is ready!</p>"
body_textstring

The plain text version of the macro body with original Intercom placeholder format.

Example: "Hi {{user.name|fallback:\"there\"}}, your order is ready!"
created_atstring(date-time)

The time the macro was created in ISO 8601 format.

Example: "2025-07-17T11:18:08.000Z"
updated_atstring(date-time)

The time the macro was last updated in ISO 8601 format.

Example: "2025-07-17T15:30:24.000Z"
visible_tostring

Who can view this macro.

Enum"everyone""specific_teams"
Example: "everyone"
visible_to_team_idsArray of strings

The team IDs that can view this macro when visible_to is set to specific_teams.

Example: ["456","789"]
available_onArray of strings

Where the macro is available for use.

Items Enum"inbox""messenger"
Example: ["inbox","messenger"]
{ "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" ] }

Macro List

A paginated list of macros (saved replies) in the workspace.

typestring

Always list

Value"list"
Example: "list"
dataArray of objects or null(Macro)

The list of macro objects

pagesobject

Pagination information

{ "type": "list", "data": [ {} ], "pages": { "type": "pages", "per_page": 50, "next": {} } }

List all macros

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"/>
Security
bearerAuth
Query
per_pageinteger[ 1 .. 150 ]

The number of results per page

Default 50
Example: per_page=50
starting_afterstring

Base64-encoded cursor containing [updated_at, id] for pagination

Example: starting_after=WzE3MTk0OTM3NTcuMCwgIjEyMyJd
updated_sinceinteger(int64)

Unix timestamp to filter macros updated after this time

Example: updated_since=1719474966
Headers
Intercom-Versionstring(intercom_version)

Intercom API version.
By default, it's equal to the version set in the app package.

Default Unstable
Enum"1.0""1.1""1.2""1.3""1.4""2.0""2.1""2.2""2.3""2.4"
Example: Unstable
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'

Responses

Successful response

Bodyapplication/json
typestring

Always list

Value"list"
Example: "list"
dataArray of objects or null(Macro)

The list of macro objects

pagesobject

Pagination information

Response
application/json
{ "type": "list", "data": [ {}, {} ], "pages": { "type": "pages", "per_page": 50, "next": {} } }

Retrieve a macro

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 members
  • specific_teams: Only visible if the authenticated user belongs to one of the teams specified in visible_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.

Security
bearerAuth
Path
idstringrequired

The unique identifier of the macro

Example: 123
Headers
Intercom-Versionstring(intercom_version)

Intercom API version.
By default, it's equal to the version set in the app package.

Default Unstable
Enum"1.0""1.1""1.2""1.3""1.4""2.0""2.1""2.2""2.3""2.4"
Example: Unstable
curl -i -X GET \
  https://api.intercom.io/macros/123 \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Intercom-Version: Unstable'

Responses

Macro found

Bodyapplication/json
typestring

String representing the object's type. Always has the value macro.

Value"macro"
Example: "macro"
idstring

The unique identifier for the macro.

Example: "123"
namestring

The name of the macro.

Example: "Order Status Update"
bodystring

The body of the macro in HTML format with placeholders transformed to XML-like format.

Example: "<p>Hi <attribute key=\"user.name\" default=\"there\"/>, your order is ready!</p>"
body_textstring

The plain text version of the macro body with original Intercom placeholder format.

Example: "Hi {{user.name|fallback:\"there\"}}, your order is ready!"
created_atstring(date-time)

The time the macro was created in ISO 8601 format.

Example: "2025-07-17T11:18:08.000Z"
updated_atstring(date-time)

The time the macro was last updated in ISO 8601 format.

Example: "2025-07-17T15:30:24.000Z"
visible_tostring

Who can view this macro.

Enum"everyone""specific_teams"
Example: "everyone"
visible_to_team_idsArray of strings

The team IDs that can view this macro when visible_to is set to specific_teams.

Example: ["456","789"]
available_onArray of strings

Where the macro is available for use.

Items Enum"inbox""messenger"
Example: ["inbox","messenger"]
Response
application/json
{ "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" ] }

Messages

Everything about your messages

Operations

News

Everything about your News

Operations

Notes

Everything about your Notes

Operations

Segments

Everything about your Segments

Operations

Subscription Types

Everything about subscription types

Operations

Switch

Everything about Switch

Operations

Tags

Everything about tags

Operations

Teams

Everything about your Teams

Operations

Ticket States

Everything about your ticket states

Operations

Ticket Type Attributes

Everything about your ticket type attributes

Operations

Ticket Types

Everything about your ticket types

Operations

Tickets

Everything about your tickets

Operations

Visitors

Everything about your Visitors

Operations

Models

Export

Operations

WhatsApp

Operations