The intercom API reference.
The intercom API reference.
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.",
Conversations are how you can communicate with users in Intercom. They are created when a contact replies to an outbound message, or when one admin directly sends a message to a single contact.
The last time a Contact responded to an Admin. In other words, the time a customer started waiting for a response. Set to null if last reply is from an Admin.
If set this is the time in the future when this conversation will be marked as open. i.e. it will be in a snoozed state until this time. i.e. it will be in a snoozed state until this time.
If marked as priority, it will return priority or else not_priority.
The id of the admin assigned to the conversation. If it's not assigned to an admin it will return null.
The id of the team assigned to the conversation. If it's not assigned to a team it will return null.
The Conversation Rating object which contains information on the rating and/or remark added by a Contact and the Admin assigned to the conversation.
The Conversation Part that originated this conversation, which can be Contact, Admin, Campaign, Automated or Operator initiated.
The list of contacts (users or leads) involved in this conversation. This will only contain one customer unless more were added via the group conversation feature.
The list of teammates who participated in the conversation (wrote at least one conversation part).
An object containing the different custom attributes associated to the conversation as key-value pairs. For relationship attributes the value will be a list of custom object instance models.
An object containing information on the first users message. For a contact initiated message this will represent the users original message.
The SLA Applied object contains the details for which SLA has been applied to this conversation. Important: if there are any canceled sla_events for the conversation - meaning an SLA has been manually removed from a conversation, the sla_status will always be returned as null.
A Statistics object containing all information required for reporting, with timestamps and calculated metrics.
A list of Conversation Part objects for each part message in the conversation. This is only returned when Retrieving a Conversation, and ignored when Listing all Conversations. There is a limit of 500 parts.
An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
Indicates whether the AI Agent participated in the conversation.
{ "type": "conversation", "id": "1295", "title": "Conversation Title", "created_at": 1663597223, "updated_at": 1663597260, "waiting_since": 1663597260, "snoozed_until": 1663597260, "open": true, "state": "open", "read": true, "priority": "priority", "admin_assignee_id": 0, "team_assignee_id": "5017691", "tags": { "type": "tag.list", "tags": [ … ] }, "conversation_rating": { "rating": 5, "remark": "", "created_at": 1671028894, "contact": { … }, "teammate": { … } }, "source": { "type": "conversation", "id": "3", "delivered_as": "operator_initiated", "subject": "", "body": "<p>Hey there!</p>", "author": { … }, "attachments": [ … ], "url": null, "redacted": false }, "contacts": { "type": "contact.list", "contacts": [ … ] }, "teammates": { "type": "admin.list", "teammates": [ … ] }, "custom_attributes": { "property1": "string", "property2": "string" }, "first_contact_reply": { "created_at": 1663597223, "type": "conversation", "url": "https://developers.intercom.com/" }, "sla_applied": { "type": "conversation_sla_summary", "sla_name": "", "sla_status": "hit" }, "statistics": { "type": "conversation_statistics", "time_to_assignment": 2310, "time_to_admin_reply": 2310, "time_to_first_close": 2310, "time_to_last_close": 2310, "median_time_to_reply": 2310, "first_contact_reply_at": 1663597233, "first_assignment_at": 1663597233, "first_admin_reply_at": 1663597233, "first_close_at": 1663597233, "last_assignment_at": 1663597233, "last_assignment_admin_reply_at": 1663597233, "last_contact_reply_at": 1663597233, "last_admin_reply_at": 1663597233, "last_close_at": 1663597233, "last_closed_by_id": "c3po", "count_reopens": 1, "count_assignments": 1, "count_conversation_parts": 1, "assigned_team_first_response_time_by_team": [ … ], "assigned_team_first_response_time_in_office_hours": [ … ], "handling_time": 2310 }, "conversation_parts": { "type": "conversation_part.list", "conversation_parts": [ … ], "total_count": 2 }, "linked_objects": { "type": "list", "total_count": 100, "has_more": false, "data": [ … ] }, "ai_agent_participated": true, "ai_agent": { "source_type": "workflow", "source_title": "My AI Workflow", "last_answer_type": "ai_answer", "resolution_state": "assumed_resolution", "rating": 4, "rating_remark": "Very helpful!", "content_sources": { … } } }
curl -i -X POST \ 'https://api.intercom.io/conversations/{conversation_id}/tags' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "id": 577, "admin_id": 991266910 }'
{ "type": "tag", "id": "577", "name": "Manual tag" }
curl -i -X DELETE \ 'https://api.intercom.io/conversations/{conversation_id}/tags/{id}' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "admin_id": 991266914 }'
{ "type": "tag", "id": "580", "name": "Manual tag" }
You can fetch a list of all conversations.
You can optionally request the result page size and the cursor to start after to fetch the result.
You can use pagination to limit the number of results returned. The default is 20
results per page. See the pagination section for more details on how to use the starting_after
param.
curl -i -X GET \ 'https://api.intercom.io/conversations?per_page=20&starting_after=string' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Intercom-Version: Unstable'
{ "type": "conversation.list", "pages": { "type": "pages", "page": 1, "per_page": 20, "total_pages": 1 }, "total_count": 1, "conversations": [ { … } ] }
You can create a conversation that has been initiated by a contact (ie. user or lead). The conversation can be an in-app message only.
You can also send a message from a visitor by specifying their user_id
or id
value in the from
field, along with a type
field value of contact
. This visitor will be automatically converted to a contact with a lead role once the conversation is created.
This will return the Message model that has been created.
curl -i -X POST \ https://api.intercom.io/conversations \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "from": { "type": "user", "id": "674daed76abd01084258a6f5" }, "body": "Hello there" }'
{ "type": "user_message", "id": "403918075", "created_at": 1733144281, "body": "Hello there", "message_type": "inapp", "conversation_id": "33" }
You can fetch the details of a single conversation.
This will return a single Conversation model with all its conversation parts.
The maximum number of conversation parts that can be returned via the API is 500. If you have more than that we will return the 500 most recent conversation parts.
For AI agent conversation metadata, please note that you need to have the agent enabled in your workspace, which is a paid feature.
curl -i -X GET \ 'https://api.intercom.io/conversations/{id}?display_as=string' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Intercom-Version: Unstable'
conversation found
The last time a Contact responded to an Admin. In other words, the time a customer started waiting for a response. Set to null if last reply is from an Admin.
If set this is the time in the future when this conversation will be marked as open. i.e. it will be in a snoozed state until this time. i.e. it will be in a snoozed state until this time.
If marked as priority, it will return priority or else not_priority.
The id of the admin assigned to the conversation. If it's not assigned to an admin it will return null.
The id of the team assigned to the conversation. If it's not assigned to a team it will return null.
The Conversation Rating object which contains information on the rating and/or remark added by a Contact and the Admin assigned to the conversation.
The Conversation Part that originated this conversation, which can be Contact, Admin, Campaign, Automated or Operator initiated.
The list of contacts (users or leads) involved in this conversation. This will only contain one customer unless more were added via the group conversation feature.
The list of teammates who participated in the conversation (wrote at least one conversation part).
An object containing the different custom attributes associated to the conversation as key-value pairs. For relationship attributes the value will be a list of custom object instance models.
An object containing information on the first users message. For a contact initiated message this will represent the users original message.
The SLA Applied object contains the details for which SLA has been applied to this conversation. Important: if there are any canceled sla_events for the conversation - meaning an SLA has been manually removed from a conversation, the sla_status will always be returned as null.
A Statistics object containing all information required for reporting, with timestamps and calculated metrics.
A list of Conversation Part objects for each part message in the conversation. This is only returned when Retrieving a Conversation, and ignored when Listing all Conversations. There is a limit of 500 parts.
An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
Indicates whether the AI Agent participated in the conversation.
{ "type": "conversation", "id": "37", "created_at": 1733144289, "updated_at": 1733144290, "waiting_since": null, "snoozed_until": null, "source": { "type": "conversation", "id": "403918079", "delivered_as": "admin_initiated", "subject": "", "body": "<p>this is the message body</p>", "author": { … }, "attachments": [], "url": null, "redacted": false }, "contacts": { "type": "contact.list", "contacts": [ … ] }, "first_contact_reply": null, "admin_assignee_id": null, "team_assignee_id": null, "open": false, "state": "closed", "read": false, "tags": { "type": "tag.list", "tags": [] }, "priority": "not_priority", "sla_applied": null, "statistics": null, "conversation_rating": null, "teammates": null, "title": null, "custom_attributes": {}, "topics": {}, "ticket": null, "linked_objects": { "type": "list", "data": [], "total_count": 0, "has_more": false }, "ai_agent": null, "ai_agent_participated": false, "conversation_parts": { "type": "conversation_part.list", "conversation_parts": [], "total_count": 0 } }
curl -i -X PUT \ 'https://api.intercom.io/conversations/{id}?display_as=string' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "read": true, "custom_attributes": { "issue_type": "Billing", "priority": "High" } }'
conversation found
The last time a Contact responded to an Admin. In other words, the time a customer started waiting for a response. Set to null if last reply is from an Admin.
If set this is the time in the future when this conversation will be marked as open. i.e. it will be in a snoozed state until this time. i.e. it will be in a snoozed state until this time.
If marked as priority, it will return priority or else not_priority.
The id of the admin assigned to the conversation. If it's not assigned to an admin it will return null.
The id of the team assigned to the conversation. If it's not assigned to a team it will return null.
The Conversation Rating object which contains information on the rating and/or remark added by a Contact and the Admin assigned to the conversation.
The Conversation Part that originated this conversation, which can be Contact, Admin, Campaign, Automated or Operator initiated.
The list of contacts (users or leads) involved in this conversation. This will only contain one customer unless more were added via the group conversation feature.
The list of teammates who participated in the conversation (wrote at least one conversation part).
An object containing the different custom attributes associated to the conversation as key-value pairs. For relationship attributes the value will be a list of custom object instance models.
An object containing information on the first users message. For a contact initiated message this will represent the users original message.
The SLA Applied object contains the details for which SLA has been applied to this conversation. Important: if there are any canceled sla_events for the conversation - meaning an SLA has been manually removed from a conversation, the sla_status will always be returned as null.
A Statistics object containing all information required for reporting, with timestamps and calculated metrics.
A list of Conversation Part objects for each part message in the conversation. This is only returned when Retrieving a Conversation, and ignored when Listing all Conversations. There is a limit of 500 parts.
An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
Indicates whether the AI Agent participated in the conversation.
{ "type": "conversation", "id": "41", "created_at": 1733144298, "updated_at": 1733144300, "waiting_since": null, "snoozed_until": null, "source": { "type": "conversation", "id": "403918083", "delivered_as": "admin_initiated", "subject": "", "body": "<p>this is the message body</p>", "author": { … }, "attachments": [], "url": null, "redacted": false }, "contacts": { "type": "contact.list", "contacts": [ … ] }, "first_contact_reply": null, "admin_assignee_id": null, "team_assignee_id": null, "open": false, "state": "closed", "read": true, "tags": { "type": "tag.list", "tags": [] }, "priority": "not_priority", "sla_applied": null, "statistics": null, "conversation_rating": null, "teammates": null, "title": null, "custom_attributes": { "issue_type": "Billing", "priority": "High" }, "topics": {}, "ticket": null, "linked_objects": { "type": "list", "data": [], "total_count": 0, "has_more": false }, "ai_agent": null, "ai_agent_participated": false, "conversation_parts": { "type": "conversation_part.list", "conversation_parts": [ … ], "total_count": 2 } }
curl -i -X DELETE \ 'https://api.intercom.io/conversations/{id}' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Intercom-Version: Unstable'
{ "id": "45", "object": "conversation", "deleted": true }
You can search for multiple conversations by the value of their attributes in order to fetch exactly which ones you want.
To search for conversations, you need to send a POST
request to https://api.intercom.io/conversations/search
.
This will accept a query object in the body which will define your filters in order to search for conversations.
Search queries can be complex, so optimizing them can help the performance of your search. Use the AND
and OR
operators to combine multiple filters to get the exact results you need and utilize pagination to limit the number of results returned. The default is 20
results per page and maximum is 150
. See the pagination section for more details on how to use the starting_after
param.
You can nest these filters in order to get even more granular insights that pinpoint exactly what you need. Example: (1 OR 2) AND (3 OR 4). There are some limitations to the amount of multiple's there can be:
Most keys listed as part of the The conversation model is searchable, whether writeable or not. The value you search for has to match the accepted type, otherwise the query will fail (ie. as created_at
accepts a date, the value
cannot be a string such as "foorbar"
).
Field | Type |
---|---|
id | String |
created_at | Date (UNIX timestamp) |
updated_at | Date (UNIX timestamp) |
source.type | String Accepted fields are conversation , email , facebook , instagram , phone_call , phone_switch , push , sms , twitter and whatsapp . |
source.id | String |
source.delivered_as | String |
source.subject | String |
source.body | String |
source.author.id | String |
source.author.type | String |
source.author.name | String |
source.author.email | String |
source.url | String |
contact_ids | String |
teammate_ids | String |
admin_assignee_id | String |
team_assignee_id | String |
channel_initiated | String |
open | Boolean |
read | Boolean |
state | String |
waiting_since | Date (UNIX timestamp) |
snoozed_until | Date (UNIX timestamp) |
tag_ids | String |
priority | String |
statistics.time_to_assignment | Integer |
statistics.time_to_admin_reply | Integer |
statistics.time_to_first_close | Integer |
statistics.time_to_last_close | Integer |
statistics.median_time_to_reply | Integer |
statistics.first_contact_reply_at | Date (UNIX timestamp) |
statistics.first_assignment_at | Date (UNIX timestamp) |
statistics.first_admin_reply_at | Date (UNIX timestamp) |
statistics.first_close_at | Date (UNIX timestamp) |
statistics.last_assignment_at | Date (UNIX timestamp) |
statistics.last_assignment_admin_reply_at | Date (UNIX timestamp) |
statistics.last_contact_reply_at | Date (UNIX timestamp) |
statistics.last_admin_reply_at | Date (UNIX timestamp) |
statistics.last_close_at | Date (UNIX timestamp) |
statistics.last_closed_by_id | String |
statistics.count_reopens | Integer |
statistics.count_assignments | Integer |
statistics.count_conversation_parts | Integer |
conversation_rating.requested_at | Date (UNIX timestamp) |
conversation_rating.replied_at | Date (UNIX timestamp) |
conversation_rating.score | Integer |
conversation_rating.remark | String |
conversation_rating.contact_id | String |
conversation_rating.admin_d | String |
ai_agent_participated | Boolean |
ai_agent.resolution_state | String |
ai_agent.last_answer_type | String |
ai_agent.rating | Integer |
ai_agent.rating_remark | String |
ai_agent.source_type | String |
ai_agent.source_title | String |
The table below shows the operators you can use to define how you want to search for the value. The operator should be put in as a string ("="
). The operator has to be compatible with the field's type (eg. you cannot search with >
for a given string value as it's only compatible for integer's and dates).
Operator | Valid Types | Description |
---|---|---|
= | All | Equals |
!= | All | Doesn't Equal |
IN | All | In Shortcut for OR queries Values most be in Array |
NIN | All | Not In Shortcut for OR ! queries Values must be in Array |
> | Integer Date (UNIX Timestamp) | Greater (or equal) than |
< | Integer Date (UNIX Timestamp) | Lower (or equal) than |
~ | String | Contains |
!~ | String | Doesn't Contain |
^ | String | Starts With |
$ | String | Ends With |
Search using Intercoms Search APIs with a single filter.
The accepted operators you can use to define how you want to search for the value.
curl -i -X POST \ https://api.intercom.io/conversations/search \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "query": { "operator": "AND", "value": [ { "field": "created_at", "operator": ">", "value": "1306054154" } ] }, "pagination": { "per_page": 5 } }'
{ "type": "conversation.list", "pages": { "type": "pages", "page": 1, "per_page": 5, "total_pages": 1 }, "total_count": 1, "conversations": [ { … } ] }
Payload of the request to reply on behalf of a contact using their intercom_user_id
A list of files that will be added as attachments.
The time the reply was created. If not provided, the current time will be used.
curl -i -X POST \ 'https://api.intercom.io/conversations/{id}/reply' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "message_type": "comment", "type": "user", "intercom_user_id": "674daf086abd01084258a70c", "body": "Thanks again :)" }'
User last conversation reply
The last time a Contact responded to an Admin. In other words, the time a customer started waiting for a response. Set to null if last reply is from an Admin.
If set this is the time in the future when this conversation will be marked as open. i.e. it will be in a snoozed state until this time. i.e. it will be in a snoozed state until this time.
If marked as priority, it will return priority or else not_priority.
The id of the admin assigned to the conversation. If it's not assigned to an admin it will return null.
The id of the team assigned to the conversation. If it's not assigned to a team it will return null.
The Conversation Rating object which contains information on the rating and/or remark added by a Contact and the Admin assigned to the conversation.
The Conversation Part that originated this conversation, which can be Contact, Admin, Campaign, Automated or Operator initiated.
The list of contacts (users or leads) involved in this conversation. This will only contain one customer unless more were added via the group conversation feature.
The list of teammates who participated in the conversation (wrote at least one conversation part).
An object containing the different custom attributes associated to the conversation as key-value pairs. For relationship attributes the value will be a list of custom object instance models.
An object containing information on the first users message. For a contact initiated message this will represent the users original message.
The SLA Applied object contains the details for which SLA has been applied to this conversation. Important: if there are any canceled sla_events for the conversation - meaning an SLA has been manually removed from a conversation, the sla_status will always be returned as null.
A Statistics object containing all information required for reporting, with timestamps and calculated metrics.
A list of Conversation Part objects for each part message in the conversation. This is only returned when Retrieving a Conversation, and ignored when Listing all Conversations. There is a limit of 500 parts.
An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
Indicates whether the AI Agent participated in the conversation.
{ "type": "conversation", "id": "57", "created_at": 1733144328, "updated_at": 1733144329, "waiting_since": 1733144329, "snoozed_until": null, "source": { "type": "conversation", "id": "403918093", "delivered_as": "admin_initiated", "subject": "", "body": "<p>this is the message body</p>", "author": { … }, "attachments": [], "url": null, "redacted": false }, "contacts": { "type": "contact.list", "contacts": [ … ] }, "first_contact_reply": { "created_at": 1733144329, "type": "conversation", "url": null }, "admin_assignee_id": null, "team_assignee_id": null, "open": true, "state": "open", "read": false, "tags": { "type": "tag.list", "tags": [] }, "priority": "not_priority", "sla_applied": null, "statistics": null, "conversation_rating": null, "teammates": null, "title": null, "custom_attributes": {}, "topics": {}, "ticket": null, "linked_objects": { "type": "list", "data": [], "total_count": 0, "has_more": false }, "ai_agent": null, "ai_agent_participated": false, "conversation_parts": { "type": "conversation_part.list", "conversation_parts": [ … ], "total_count": 1 } }
curl -i -X POST \ 'https://api.intercom.io/conversations/{id}/parts' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "message_type": "close", "type": "admin", "admin_id": 991266992, "body": "Goodbye :)" }'
Assign a conversation
The last time a Contact responded to an Admin. In other words, the time a customer started waiting for a response. Set to null if last reply is from an Admin.
If set this is the time in the future when this conversation will be marked as open. i.e. it will be in a snoozed state until this time. i.e. it will be in a snoozed state until this time.
If marked as priority, it will return priority or else not_priority.
The id of the admin assigned to the conversation. If it's not assigned to an admin it will return null.
The id of the team assigned to the conversation. If it's not assigned to a team it will return null.
The Conversation Rating object which contains information on the rating and/or remark added by a Contact and the Admin assigned to the conversation.
The Conversation Part that originated this conversation, which can be Contact, Admin, Campaign, Automated or Operator initiated.
The list of contacts (users or leads) involved in this conversation. This will only contain one customer unless more were added via the group conversation feature.
The list of teammates who participated in the conversation (wrote at least one conversation part).
An object containing the different custom attributes associated to the conversation as key-value pairs. For relationship attributes the value will be a list of custom object instance models.
An object containing information on the first users message. For a contact initiated message this will represent the users original message.
The SLA Applied object contains the details for which SLA has been applied to this conversation. Important: if there are any canceled sla_events for the conversation - meaning an SLA has been manually removed from a conversation, the sla_status will always be returned as null.
A Statistics object containing all information required for reporting, with timestamps and calculated metrics.
A list of Conversation Part objects for each part message in the conversation. This is only returned when Retrieving a Conversation, and ignored when Listing all Conversations. There is a limit of 500 parts.
An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
Indicates whether the AI Agent participated in the conversation.
{ "type": "conversation", "id": "64", "created_at": 1733144347, "updated_at": 1733144348, "waiting_since": null, "snoozed_until": null, "source": { "type": "conversation", "id": "403918100", "delivered_as": "admin_initiated", "subject": "", "body": "<p>this is the message body</p>", "author": { … }, "attachments": [], "url": null, "redacted": false }, "contacts": { "type": "contact.list", "contacts": [ … ] }, "first_contact_reply": null, "admin_assignee_id": null, "team_assignee_id": null, "open": false, "state": "closed", "read": false, "tags": { "type": "tag.list", "tags": [] }, "priority": "not_priority", "sla_applied": null, "statistics": null, "conversation_rating": null, "teammates": null, "title": null, "custom_attributes": {}, "topics": {}, "ticket": null, "linked_objects": { "type": "list", "data": [], "total_count": 0, "has_more": false }, "ai_agent": null, "ai_agent_participated": false, "conversation_parts": { "type": "conversation_part.list", "conversation_parts": [ … ], "total_count": 1 } }
curl -i -X POST \ 'https://api.intercom.io/conversations/{id}/run_assignment_rules' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Intercom-Version: Unstable'
Assign a conversation using assignment rules
The last time a Contact responded to an Admin. In other words, the time a customer started waiting for a response. Set to null if last reply is from an Admin.
If set this is the time in the future when this conversation will be marked as open. i.e. it will be in a snoozed state until this time. i.e. it will be in a snoozed state until this time.
If marked as priority, it will return priority or else not_priority.
The id of the admin assigned to the conversation. If it's not assigned to an admin it will return null.
The id of the team assigned to the conversation. If it's not assigned to a team it will return null.
The Conversation Rating object which contains information on the rating and/or remark added by a Contact and the Admin assigned to the conversation.
The Conversation Part that originated this conversation, which can be Contact, Admin, Campaign, Automated or Operator initiated.
The list of contacts (users or leads) involved in this conversation. This will only contain one customer unless more were added via the group conversation feature.
The list of teammates who participated in the conversation (wrote at least one conversation part).
An object containing the different custom attributes associated to the conversation as key-value pairs. For relationship attributes the value will be a list of custom object instance models.
An object containing information on the first users message. For a contact initiated message this will represent the users original message.
The SLA Applied object contains the details for which SLA has been applied to this conversation. Important: if there are any canceled sla_events for the conversation - meaning an SLA has been manually removed from a conversation, the sla_status will always be returned as null.
A Statistics object containing all information required for reporting, with timestamps and calculated metrics.
A list of Conversation Part objects for each part message in the conversation. This is only returned when Retrieving a Conversation, and ignored when Listing all Conversations. There is a limit of 500 parts.
An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
Indicates whether the AI Agent participated in the conversation.
{ "type": "conversation", "id": "79", "created_at": 1733144373, "updated_at": 1733144374, "waiting_since": null, "snoozed_until": null, "source": { "type": "conversation", "id": "403918109", "delivered_as": "admin_initiated", "subject": "", "body": "<p>this is the message body</p>", "author": { … }, "attachments": [], "url": null, "redacted": false }, "contacts": { "type": "contact.list", "contacts": [ … ] }, "first_contact_reply": null, "admin_assignee_id": null, "team_assignee_id": null, "open": false, "state": "closed", "read": false, "tags": { "type": "tag.list", "tags": [] }, "priority": "not_priority", "sla_applied": null, "statistics": null, "conversation_rating": null, "teammates": null, "title": null, "custom_attributes": {}, "topics": {}, "ticket": null, "linked_objects": { "type": "list", "data": [], "total_count": 0, "has_more": false }, "ai_agent": null, "ai_agent_participated": false, "conversation_parts": { "type": "conversation_part.list", "conversation_parts": [ … ], "total_count": 1 } }
You can add participants who are contacts to a conversation, on behalf of either another contact or an admin.
If you add a contact via the email parameter and there is no user/lead found on that workspace with he given email, then we will create a new contact with role
set to lead
.
curl -i -X POST \ 'https://api.intercom.io/conversations/{id}/customers' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "admin_id": 991267015, "customer": { "intercom_user_id": "674daf406abd01084258a725" } }'
Attach a contact to a conversation
The last time a Contact responded to an Admin. In other words, the time a customer started waiting for a response. Set to null if last reply is from an Admin.
If set this is the time in the future when this conversation will be marked as open. i.e. it will be in a snoozed state until this time. i.e. it will be in a snoozed state until this time.
If marked as priority, it will return priority or else not_priority.
The id of the admin assigned to the conversation. If it's not assigned to an admin it will return null.
The id of the team assigned to the conversation. If it's not assigned to a team it will return null.
The Conversation Rating object which contains information on the rating and/or remark added by a Contact and the Admin assigned to the conversation.
The Conversation Part that originated this conversation, which can be Contact, Admin, Campaign, Automated or Operator initiated.
The list of contacts (users or leads) involved in this conversation. This will only contain one customer unless more were added via the group conversation feature.
The list of teammates who participated in the conversation (wrote at least one conversation part).
An object containing the different custom attributes associated to the conversation as key-value pairs. For relationship attributes the value will be a list of custom object instance models.
An object containing information on the first users message. For a contact initiated message this will represent the users original message.
The SLA Applied object contains the details for which SLA has been applied to this conversation. Important: if there are any canceled sla_events for the conversation - meaning an SLA has been manually removed from a conversation, the sla_status will always be returned as null.
A Statistics object containing all information required for reporting, with timestamps and calculated metrics.
A list of Conversation Part objects for each part message in the conversation. This is only returned when Retrieving a Conversation, and ignored when Listing all Conversations. There is a limit of 500 parts.
An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
Indicates whether the AI Agent participated in the conversation.
{ "customers": [ { … } ] }
You can add participants who are contacts to a conversation, on behalf of either another contact or an admin.
If you add a contact via the email parameter and there is no user/lead found on that workspace with he given email, then we will create a new contact with role
set to lead
.
curl -i -X DELETE \ 'https://api.intercom.io/conversations/{conversation_id}/customers/{contact_id}' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "admin_id": 991267023, "customer": { "intercom_user_id": "674daf496abd01084258a729" } }'
Detach a contact from a group conversation
The last time a Contact responded to an Admin. In other words, the time a customer started waiting for a response. Set to null if last reply is from an Admin.
If set this is the time in the future when this conversation will be marked as open. i.e. it will be in a snoozed state until this time. i.e. it will be in a snoozed state until this time.
If marked as priority, it will return priority or else not_priority.
The id of the admin assigned to the conversation. If it's not assigned to an admin it will return null.
The id of the team assigned to the conversation. If it's not assigned to a team it will return null.
The Conversation Rating object which contains information on the rating and/or remark added by a Contact and the Admin assigned to the conversation.
The Conversation Part that originated this conversation, which can be Contact, Admin, Campaign, Automated or Operator initiated.
The list of contacts (users or leads) involved in this conversation. This will only contain one customer unless more were added via the group conversation feature.
The list of teammates who participated in the conversation (wrote at least one conversation part).
An object containing the different custom attributes associated to the conversation as key-value pairs. For relationship attributes the value will be a list of custom object instance models.
An object containing information on the first users message. For a contact initiated message this will represent the users original message.
The SLA Applied object contains the details for which SLA has been applied to this conversation. Important: if there are any canceled sla_events for the conversation - meaning an SLA has been manually removed from a conversation, the sla_status will always be returned as null.
A Statistics object containing all information required for reporting, with timestamps and calculated metrics.
A list of Conversation Part objects for each part message in the conversation. This is only returned when Retrieving a Conversation, and ignored when Listing all Conversations. There is a limit of 500 parts.
An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
Indicates whether the AI Agent participated in the conversation.
{ "customers": [ { … } ] }
You can redact a conversation part or the source message of a conversation (as seen in the source object).
If you are redacting a conversation part, it must have a body
. If you are redacting a source message, it must have been created by a contact. We will return a conversation_part_not_redactable
error if these criteria are not met.
Payload of the request to redact a conversation part
The type of resource being redacted.
curl -i -X POST \ https://api.intercom.io/conversations/redact \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "type": "conversation_part", "conversation_id": 141, "conversation_part_id": 24 }'
Redact a conversation part
The last time a Contact responded to an Admin. In other words, the time a customer started waiting for a response. Set to null if last reply is from an Admin.
If set this is the time in the future when this conversation will be marked as open. i.e. it will be in a snoozed state until this time. i.e. it will be in a snoozed state until this time.
If marked as priority, it will return priority or else not_priority.
The id of the admin assigned to the conversation. If it's not assigned to an admin it will return null.
The id of the team assigned to the conversation. If it's not assigned to a team it will return null.
The Conversation Rating object which contains information on the rating and/or remark added by a Contact and the Admin assigned to the conversation.
The Conversation Part that originated this conversation, which can be Contact, Admin, Campaign, Automated or Operator initiated.
The list of contacts (users or leads) involved in this conversation. This will only contain one customer unless more were added via the group conversation feature.
The list of teammates who participated in the conversation (wrote at least one conversation part).
An object containing the different custom attributes associated to the conversation as key-value pairs. For relationship attributes the value will be a list of custom object instance models.
An object containing information on the first users message. For a contact initiated message this will represent the users original message.
The SLA Applied object contains the details for which SLA has been applied to this conversation. Important: if there are any canceled sla_events for the conversation - meaning an SLA has been manually removed from a conversation, the sla_status will always be returned as null.
A Statistics object containing all information required for reporting, with timestamps and calculated metrics.
A list of Conversation Part objects for each part message in the conversation. This is only returned when Retrieving a Conversation, and ignored when Listing all Conversations. There is a limit of 500 parts.
An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
Indicates whether the AI Agent participated in the conversation.
{ "type": "conversation", "id": "141", "created_at": 1733144461, "updated_at": 1733144464, "waiting_since": 1733144462, "snoozed_until": null, "source": { "type": "conversation", "id": "403918135", "delivered_as": "admin_initiated", "subject": "", "body": "<p>this is the message body</p>", "author": { … }, "attachments": [], "url": null, "redacted": false }, "contacts": { "type": "contact.list", "contacts": [ … ] }, "first_contact_reply": { "created_at": 1733144462, "type": "conversation", "url": null }, "admin_assignee_id": null, "team_assignee_id": null, "open": true, "state": "open", "read": true, "tags": { "type": "tag.list", "tags": [] }, "priority": "not_priority", "sla_applied": null, "statistics": null, "conversation_rating": null, "teammates": null, "title": null, "custom_attributes": {}, "topics": {}, "ticket": null, "linked_objects": { "type": "list", "data": [], "total_count": 0, "has_more": false }, "ai_agent": null, "ai_agent_participated": false, "conversation_parts": { "type": "conversation_part.list", "conversation_parts": [ … ], "total_count": 1 } }
The ID of the type of ticket you want to convert the conversation to
The attributes set on the ticket. When setting the default title and description attributes, the attribute keys that should be used are _default_title_
and _default_description_
. When setting ticket type attributes of the list attribute type, the key should be the attribute name and the value of the attribute should be the list item id, obtainable by listing the ticket type. For example, if the ticket type has an attribute called priority
of type list
, the key should be priority
and the value of the attribute should be the guid of the list item (e.g. de1825a0-0164-4070-8ca6-13e22462fa7e
).
curl -i -X POST \ 'https://api.intercom.io/conversations/{id}/convert' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -H 'Intercom-Version: Unstable' \ -d '{ "ticket_type_id": "1" }'
successful
The ID of the Ticket used in the Intercom Inbox and Messenger. Do not use ticket_id for API queries.
An object containing the different attributes associated to the ticket as key-value pairs. For the default title and description attributes, the keys are _default_title_
and _default_description_
.
A ticket type, used to define the data fields to be captured in a ticket.
The time the ticket was created as a UTC Unix timestamp.
The last time the ticket was updated as a UTC Unix timestamp.
The time the ticket will be snoozed until as a UTC Unix timestamp. If null, the ticket is not currently snoozed.
An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
A list of Ticket Part objects for each note and event in the ticket. There is a limit of 500 parts.
{ "type": "ticket", "id": "144", "ticket_id": "1", "ticket_attributes": {}, "ticket_state": { "type": "ticket_state", "id": "9077", "category": "submitted", "internal_label": "Submitted", "external_label": "Submitted" }, "ticket_type": { "type": "ticket_type", "id": "1", "name": "my-ticket-type-1", "description": "my ticket type description is awesome.", "icon": "🦁", "workspace_id": "this_is_an_id440_that_should_be_at_least_", "archived": false, "created_at": 1733144474, "updated_at": 1733144474, "is_internal": false, "ticket_type_attributes": { … }, "category": "Customer" }, "contacts": { "type": "contact.list", "contacts": [ … ] }, "admin_assignee_id": "0", "team_assignee_id": "0", "created_at": 1733144471, "updated_at": 1733144474, "ticket_parts": { "type": "ticket_part.list", "ticket_parts": [ … ], "total_count": 2 }, "open": true, "linked_objects": { "type": "list", "data": [], "total_count": 0, "has_more": false }, "category": "Customer", "is_shared": true }