From ede917a85ee85ce9cfce6a0a27dc321ab1f5dd06 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Wed, 22 Jul 2026 16:34:11 +0100 Subject: [PATCH 01/22] Seed descriptions/2.16 from 2.15 (WIP) Start v2.16 as a copy of the 2.15 spec so it advertises nothing not yet served; graduated endpoints/fields are layered in via follow-up commits. Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 24471 +++++++++++++++++++++++ 1 file changed, 24471 insertions(+) create mode 100644 descriptions/2.16/api.intercom.io.yaml diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml new file mode 100644 index 00000000..a2881df6 --- /dev/null +++ b/descriptions/2.16/api.intercom.io.yaml @@ -0,0 +1,24471 @@ +--- +openapi: 3.0.1 +info: + title: Intercom API + version: '2.16' + description: The intercom API reference. + contact: + name: Intercom Developer Hub + url: https://developers.intercom.com + license: + name: MIT + url: https://spdx.org/licenses/MIT +paths: + "/me": + get: + summary: Identify an admin + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Admins + operationId: identifyAdmin + description: "\nYou can view the currently authorised admin along with the embedded + app object (a \"workspace\" in legacy terminology).\n\n> \U0001F6A7 Single + Sign On\n>\n> If you are building a custom \"Log in with Intercom\" flow for + your site, and you call the `/me` endpoint to identify the logged-in user, + you should not accept any sign-ins from users with unverified email addresses + as it poses a potential impersonation security risk.\n" + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: admin + id: '991267459' + email: admin1@email.com + name: Ciaran1 Lee + email_verified: true + app: + type: app + id_code: this_is_an_id1_that_should_be_at_least_40 + name: MyApp 1 + created_at: 1734537243 + secure: false + identity_verification: false + timezone: America/Los_Angeles + region: US + avatar: + type: avatar + image_url: https://static.intercomassets.com/assets/default-avatars/admins/128.png + has_inbox_seat: true + schema: + "$ref": "#/components/schemas/admin_with_app" + "/admins/{admin_id}/away": + put: + summary: Set an admin to away + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: admin_id + in: path + required: true + description: The unique identifier of a given admin + schema: + type: integer + tags: + - Admins + operationId: setAwayAdmin + description: You can set an Admin as away for the Inbox. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: admin + id: '991267460' + name: Ciaran2 Lee + email: admin2@email.com + away_mode_enabled: true + away_mode_reassign: true + has_inbox_seat: true + away_status_reason_id: '12345' + team_ids: [] + schema: + "$ref": "#/components/schemas/admin" + '404': + description: Admin not found + content: + application/json: + examples: + Admin not found: + value: + type: error.list + request_id: efcd0531-798b-4c22-bccd-68877ed7faa4 + errors: + - code: admin_not_found + message: Admin for admin_id not found + schema: + "$ref": "#/components/schemas/error" + '400': + description: Bad Request + content: + application/json: + examples: + parameter_invalid: + summary: "Example of an invalid away_status_reason_id" + value: + type: error.list + errors: + - code: parameter_invalid + message: "Away status reason is deleted" + away_status_reason_mandatory: + summary: "Example of a missing away_status_reason_id when away reasons are mandatory" + value: + type: error.list + errors: + - code: away_status_reason_mandatory + message: "Away status reason is mandatory" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e76b2df0-2413-4215-8a5a-b5f6ebd4e642 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - away_mode_enabled + - away_mode_reassign + properties: + away_mode_enabled: + type: boolean + description: Set to "true" to change the status of the admin to + away. + example: true + default: true + away_mode_reassign: + type: boolean + description: Set to "true" to assign any new conversation replies + to your default inbox. + example: false + default: false + away_status_reason_id: + type: integer + description: The unique identifier of the away status reason + example: 12345 + examples: + successful_response: + summary: Successful response + value: + away_mode_enabled: true + away_mode_reassign: true + away_status_reason_id: 12345 + admin_not_found: + summary: Admin not found + value: + away_mode_enabled: true + away_mode_reassign: true + unauthorized: + summary: Unauthorized + value: + away_mode_enabled: true + away_mode_reassign: true + "/admins/activity_logs": + get: + summary: List all activity logs + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: created_at_after + in: query + required: true + description: The start date that you request data for. It must be formatted + as a UNIX timestamp. + example: '1677253093' + schema: + type: string + - name: created_at_before + in: query + required: false + description: The end date that you request data for. It must be formatted + as a UNIX timestamp. + example: '1677861493' + schema: + type: string + tags: + - Admins + operationId: listActivityLogs + description: You can get a log of activities by all admins in an app. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: activity_log.list + pages: + type: pages + next: + page: 1 + per_page: 20 + total_pages: 1 + activity_logs: + - id: fca05814-4b72-4dce-ad4f-77a786a2c136 + performed_by: + type: admin + id: '991267464' + email: admin5@email.com + ip: 127.0.0.1 + metadata: + before: before + after: after + created_at: 1734537253 + activity_type: app_name_change + activity_description: Ciaran5 Lee changed your app name from + before to after. + - id: f48c653b-0185-48ac-a276-23d11006bafb + performed_by: + type: admin + id: '991267464' + email: admin5@email.com + ip: 127.0.0.1 + metadata: + message: + id: 123 + title: Initial message title + before: Initial message title + after: Eventual message title + created_at: 1734537253 + activity_type: message_state_change + activity_description: Ciaran5 Lee changed your Initial message + title message from Initial message title to Eventual message + title. + schema: + "$ref": "#/components/schemas/activity_log_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 57cc6148-2c0a-471b-bd9e-859538110958 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/admins": + get: + summary: List all admins + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: display_avatar + in: query + required: false + description: If set to true, the response will include the admin's avatar + object containing the image URL. Defaults to false. + example: true + schema: + type: boolean + tags: + - Admins + operationId: listAdmins + description: You can fetch a list of admins for a given workspace. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: admin.list + admins: + - type: admin + email: admin7@email.com + id: '991267466' + name: Ciaran7 Lee + away_mode_enabled: false + away_mode_reassign: false + has_inbox_seat: true + team_ids: [] + schema: + "$ref": "#/components/schemas/admin_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 5ef5682e-f66e-40a4-b828-8592175f83b8 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/admins/{admin_id}": + get: + summary: Retrieve an admin + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: admin_id + in: path + required: true + description: The unique identifier of a given admin + example: 123 + schema: + type: integer + tags: + - Admins + operationId: retrieveAdmin + description: You can retrieve the details of a single admin. + responses: + '200': + description: Admin found + content: + application/json: + examples: + Admin found: + value: + type: admin + id: '991267468' + name: Ciaran9 Lee + email: admin9@email.com + away_mode_enabled: false + away_mode_reassign: false + has_inbox_seat: true + away_status_reason_id: null + team_ids: [] + schema: + "$ref": "#/components/schemas/admin" + '404': + description: Admin not found + content: + application/json: + examples: + Admin not found: + value: + type: error.list + request_id: c59f7ca5-1639-4284-a66d-50e34ed98ab3 + errors: + - code: admin_not_found + message: Admin not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: ff783bc1-754f-4a9f-887b-22f94fec18f0 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/ai/content_import_sources": + get: + summary: List content import sources + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - AI Content + operationId: listContentImportSources + description: You can retrieve a list of all content import sources for a workspace. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + data: + - id: 33 + type: content_import_source + last_synced_at: 1734537259 + status: active + url: https://support.example.com/us/1 + sync_behavior: automatic + created_at: 1734537259 + updated_at: 1734537259 + audience_ids: [] + - id: 34 + type: content_import_source + last_synced_at: 1734537259 + status: active + url: https://support.example.com/us/2 + sync_behavior: automatic + created_at: 1734537259 + updated_at: 1734537259 + audience_ids: [] + - id: 35 + type: content_import_source + last_synced_at: 1734537259 + status: active + url: https://support.example.com/us/3 + sync_behavior: automatic + created_at: 1734537259 + updated_at: 1734537259 + audience_ids: [] + pages: + type: pages + page: 1 + per_page: 50 + total_pages: 1 + total_count: 3 + type: list + schema: + "$ref": "#/components/schemas/content_import_sources_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 9e554e0f-ed0a-4fc6-b141-105d70c9d485 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create a content import source + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - AI Content + operationId: createContentImportSource + description: You can create a new content import source by sending a POST request + to this endpoint. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: 36 + type: content_import_source + last_synced_at: 1734537261 + status: active + url: https://www.example.com + sync_behavior: api + created_at: 1734537261 + updated_at: 1734537261 + audience_ids: [] + schema: + "$ref": "#/components/schemas/content_import_source" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 31262ee6-aa3b-4748-a260-a1084754ebae + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_content_import_source_request" + examples: + successful: + summary: successful + value: + sync_behavior: api + url: https://www.example.com + "/ai/content_import_sources/{source_id}": + parameters: + - name: source_id + in: path + description: The unique identifier for the content import source which is given + by Intercom. + required: true + schema: + type: string + delete: + summary: Delete a content import source + operationId: deleteContentImportSource + description: You can delete a content import source by making a DELETE request + this endpoint. This will also delete all external pages that were imported + from this source. + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - AI Content + responses: + '204': + description: successful + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: '093e1dd9-996a-4154-a64c-80803a5c2084' + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + get: + summary: Retrieve a content import source + operationId: getContentImportSource + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - AI Content + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: 38 + type: content_import_source + last_synced_at: 1734537265 + status: active + url: https://support.example.com/us/5 + sync_behavior: api + created_at: 1734537265 + updated_at: 1734537265 + audience_ids: [] + schema: + "$ref": "#/components/schemas/content_import_source" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 5556d3dd-d4e2-4424-9757-2ad0accb52e5 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update a content import source + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - AI Content + operationId: updateContentImportSource + description: You can update an existing content import source. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: 39 + type: content_import_source + last_synced_at: 1734537267 + status: active + url: https://www.example.com + sync_behavior: api + created_at: 1734537267 + updated_at: 1734537267 + audience_ids: [] + schema: + "$ref": "#/components/schemas/content_import_source" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: cb4a6795-2cdb-44f9-adb7-0624702f7e8a + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_content_import_source_request" + examples: + successful: + summary: successful + value: + sync_behavior: api + url: https://www.example.com + "/ai/external_pages": + get: + summary: List external pages + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - AI Content + operationId: listExternalPages + description: You can retrieve a list of all external pages for a workspace. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + data: + - id: '19' + type: external_page + title: My External Content + html: "

Hello world

This is external content

" + url: https://support.example.com/us/3 + ai_agent_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + fin_availability: true + locale: en + source_id: 42 + external_id: '3' + created_at: 1734537269 + updated_at: 1734537269 + last_ingested_at: 1734537269 + - id: '18' + type: external_page + title: My External Content + html: "

Hello world

This is external content

" + url: https://support.example.com/us/2 + ai_agent_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + fin_availability: true + locale: en + source_id: 41 + external_id: '2' + created_at: 1734537269 + updated_at: 1734537269 + last_ingested_at: 1734537269 + - id: '17' + type: external_page + title: My External Content + html: "

Hello world

This is external content

" + url: https://support.example.com/us/1 + ai_agent_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + fin_availability: true + locale: en + source_id: 40 + external_id: '1' + created_at: 1734537269 + updated_at: 1734537269 + last_ingested_at: 1734537269 + pages: + type: pages + page: 1 + per_page: 50 + total_pages: 1 + total_count: 3 + type: list + schema: + "$ref": "#/components/schemas/external_pages_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: bd0c53dd-d3fd-4095-be25-94537a8ba364 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create an external page (or update an external page by external ID) + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - AI Content + operationId: createExternalPage + description: You can create a new external page by sending a POST request to + this endpoint. If an external page already exists with the specified source_id + and external_id, it will be updated instead. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '21' + type: external_page + title: Test + html: "

Test

" + url: https://www.example.com + ai_agent_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + fin_availability: true + locale: en + source_id: 44 + external_id: abc1234 + created_at: 1734537273 + updated_at: 1734537274 + last_ingested_at: 1734537274 + schema: + "$ref": "#/components/schemas/external_page" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 205ffc13-1b25-43b2-a176-cb817af5f899 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_external_page_request" + examples: + successful: + summary: successful + value: + external_id: abc1234 + html: "

Test

" + locale: en + source_id: 44 + title: Test + url: https://www.example.com + "/ai/external_pages/{page_id}": + parameters: + - name: page_id + in: path + description: The unique identifier for the external page which is given by Intercom. + required: true + schema: + type: string + delete: + summary: Delete an external page + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - AI Content + operationId: deleteExternalPage + description: Sending a DELETE request for an external page will remove it from + the content library UI and from being used for AI answers. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '22' + type: external_page + title: My External Content + html: '' + url: https://support.example.com/us/5 + ai_agent_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + fin_availability: true + locale: en + source_id: 45 + external_id: '4' + created_at: 1734537276 + updated_at: 1734537276 + last_ingested_at: 1734537276 + schema: + "$ref": "#/components/schemas/external_page" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2380cdd5-c4a0-451a-b07d-a6f4b720add3 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + get: + summary: Retrieve an external page + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - AI Content + operationId: getExternalPage + description: You can retrieve an external page. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '23' + type: external_page + title: My External Content + html: "

Hello world

This is external content

" + url: https://support.example.com/us/6 + ai_agent_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + fin_availability: true + locale: en + source_id: 46 + external_id: '5' + created_at: 1734537278 + updated_at: 1734537278 + last_ingested_at: 1734537278 + schema: + "$ref": "#/components/schemas/external_page" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 504cde98-f786-4f64-b373-e26a6a41fd11 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update an external page + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - AI Content + operationId: updateExternalPage + description: You can update an existing external page (if it was created via + the API). + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '24' + type: external_page + title: Test + html: "

Test

" + url: https://www.example.com + ai_agent_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + fin_availability: true + locale: en + source_id: 47 + external_id: '5678' + created_at: 1734537280 + updated_at: 1734537281 + last_ingested_at: 1734537281 + schema: + "$ref": "#/components/schemas/external_page" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 8217b189-b908-4562-962d-2a19a7b77f25 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_external_page_request" + examples: + successful: + summary: successful + value: + external_id: '5678' + html: "

Test

" + locale: en + source_id: 47 + title: Test + url: https://www.example.com + "/articles": + get: + summary: List all articles + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Articles + operationId: listArticles + description: "You can fetch a list of all articles by making a GET request to + `https://api.intercom.io/articles`.\n\n> \U0001F4D8 How are the articles sorted + and ordered?\n>\n> Articles will be returned in descending order on the `updated_at` + attribute. This means if you need to iterate through results then we'll show + the most recently updated articles first.\n" + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + pages: + type: pages + page: 1 + per_page: 25 + total_pages: 1 + total_count: 1 + data: + - id: '39' + type: article + workspace_id: this_is_an_id64_that_should_be_at_least_4 + parent_id: 143 + parent_type: collection + parent_ids: [] + tags: + type: tag.list + tags: [] + title: This is the article title + description: '' + body: '' + author_id: 991267492 + state: published + created_at: 1734537283 + updated_at: 1734537283 + url: http://help-center.test/myapp-64/en/articles/39-this-is-the-article-title + schema: + "$ref": "#/components/schemas/article_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2e760b85-9020-471b-89dc-f579ec8a0104 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create an article + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Articles + operationId: createArticle + description: "You can create a new article by making a POST request to `https://api.intercom.io/articles`.\n\n> + \U0001F4D8 Tags cannot be managed via the Articles API\n>\n> Article tags are + read-only in responses. To create, update, or delete tags, use the Intercom + UI or the Tags API endpoints.\n" + responses: + '200': + description: article created + content: + application/json: + examples: + article created: + value: + id: '42' + type: article + workspace_id: this_is_an_id68_that_should_be_at_least_4 + parent_id: 145 + parent_type: collection + parent_ids: [] + statistics: + type: article_statistics + views: 0 + conversations: 0 + reactions: 0 + happy_reaction_percentage: 0 + neutral_reaction_percentage: 0 + sad_reaction_percentage: 0 + tags: + type: tag.list + tags: [] + title: Thanks for everything + description: Description of the Article + body:

Body of the Article

+ author_id: 991267497 + state: published + created_at: 1734537288 + updated_at: 1734537288 + url: http://help-center.test/myapp-68/en/articles/42-thanks-for-everything + schema: + "$ref": "#/components/schemas/article" + '400': + description: Bad Request + content: + application/json: + examples: + Bad Request: + value: + type: error.list + request_id: e522ca8a-cd15-404e-84b3-7f7536003d4a + errors: + - code: parameter_not_found + message: author_id must be in the main body or default locale + translated_content object + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 85e91429-72df-4e69-8a12-b55793dff59f + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_article_request" + examples: + article_created: + summary: article created + value: + title: Thanks for everything + description: Description of the Article + body: Body of the Article + author_id: 991267497 + state: published + parent_id: 145 + parent_type: collection + translated_content: + fr: + title: Merci pour tout + description: Description de l'article + body: Corps de l'article + author_id: 991267497 + state: published + bad_request: + summary: Bad Request + value: + title: Thanks for everything + description: Description of the Article + body: Body of the Article + state: published + "/articles/{article_id}": + get: + summary: Retrieve an article + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: article_id + in: path + required: true + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Articles + operationId: retrieveArticle + description: You can fetch the details of a single article by making a GET request + to `https://api.intercom.io/articles/`. + responses: + '200': + description: Article found + content: + application/json: + examples: + Article found: + value: + id: '45' + type: article + workspace_id: this_is_an_id74_that_should_be_at_least_4 + parent_id: 148 + parent_type: collection + parent_ids: [] + statistics: + type: article_statistics + views: 0 + conversations: 0 + reactions: 0 + happy_reaction_percentage: 0 + neutral_reaction_percentage: 0 + sad_reaction_percentage: 0 + tags: + type: tag.list + tags: [] + title: This is the article title + description: '' + body: '' + author_id: 991267502 + state: published + created_at: 1734537292 + updated_at: 1734537292 + url: http://help-center.test/myapp-74/en/articles/45-this-is-the-article-title + schema: + "$ref": "#/components/schemas/article" + '404': + description: Article not found + content: + application/json: + examples: + Article not found: + value: + type: error.list + request_id: 79abd27a-1bfb-42ec-a404-5728c76ba773 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2eab07fb-5092-49a4-ba74-44094f31f264 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update an article + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: article_id + in: path + required: true + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Articles + operationId: updateArticle + description: "You can update the details of a single article by making a PUT + request to `https://api.intercom.io/articles/`.\n\n> \U0001F4D8 Tags cannot be + managed via the Articles API\n>\n> Article tags are read-only in responses. + To create, update, or delete tags, use the Intercom UI or the Tags API + endpoints.\n" + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '48' + type: article + workspace_id: this_is_an_id80_that_should_be_at_least_4 + parent_id: 151 + parent_type: collection + parent_ids: [] + statistics: + type: article_statistics + views: 0 + conversations: 0 + reactions: 0 + happy_reaction_percentage: 0 + neutral_reaction_percentage: 0 + sad_reaction_percentage: 0 + tags: + type: tag.list + tags: [] + title: Christmas is here! + description: '' + body:

New gifts in store for the jolly season

+ author_id: 991267508 + state: published + created_at: 1734537297 + updated_at: 1734537298 + url: http://help-center.test/myapp-80/en/articles/48-christmas-is-here + schema: + "$ref": "#/components/schemas/article" + '404': + description: Article Not Found + content: + application/json: + examples: + Article Not Found: + value: + type: error.list + request_id: f9adccb2-9fca-4b87-bbb7-65f2af5e1d78 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: d1ea223d-bb62-42e3-8bcf-30fdcf7dbd99 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_article_request" + examples: + successful: + summary: successful + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + article_not_found: + summary: Article Not Found + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + delete: + summary: Delete an article + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: article_id + in: path + required: true + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Articles + operationId: deleteArticle + description: You can delete a single article by making a DELETE request to `https://api.intercom.io/articles/`. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '51' + object: article + deleted: true + schema: + "$ref": "#/components/schemas/deleted_article_object" + '404': + description: Article Not Found + content: + application/json: + examples: + Article Not Found: + value: + type: error.list + request_id: afe37506-cc48-4727-8068-ae7ff0e7b0e3 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c6e86ce8-9402-4196-89c5-f1b2912b4bac + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/articles/search": + get: + summary: Search for articles + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: phrase + in: query + required: false + description: The phrase within your articles to search for. + example: Getting started + schema: + type: string + - name: state + in: query + required: false + description: The state of the Articles returned. One of `published`, `draft` + or `all`. + example: published + schema: + type: string + - name: help_center_id + in: query + required: false + description: The ID of the Help Center to search in. + example: 123 + schema: + type: integer + - name: highlight + in: query + required: false + description: Return a highlighted version of the matching content within your + articles. Refer to the response schema for more details. + example: false + schema: + type: boolean + tags: + - Articles + operationId: searchArticles + description: You can search for articles by making a GET request to `https://api.intercom.io/articles/search`. + responses: + '200': + description: Search successful + content: + application/json: + examples: + Search successful: + value: + type: list + total_count: 1 + data: + articles: + - id: '55' + type: article + workspace_id: this_is_an_id92_that_should_be_at_least_4 + parent_id: + parent_type: + parent_ids: [] + tags: + type: tag.list + tags: [] + title: Title 1 + description: '' + body: '' + author_id: 991267521 + state: draft + created_at: 1734537306 + updated_at: 1734537306 + url: + highlights: [] + pages: + type: pages + page: 1 + total_pages: 1 + per_page: 10 + schema: + "$ref": "#/components/schemas/article_search_response" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c70746a8-a5b2-4772-afba-1a4b487ea75d + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/away_status_reasons": + get: + summary: List all away status reasons + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Away Status Reasons + operationId: listAwayStatusReasons + description: "Returns a list of all away status reasons configured for the workspace, including deleted ones." + responses: + '200': + description: Successful response + content: + application/json: + schema: + "$ref": "#/components/schemas/away_status_reason_list" + '401': + "$ref": "#/components/responses/Unauthorized" + "/export/reporting_data/enqueue": + post: + summary: Enqueue a new reporting data export job + tags: [Reporting Data Export] + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [dataset_id, attribute_ids, start_time, end_time] + properties: + dataset_id: + type: string + example: conversation + attribute_ids: + type: array + items: + type: string + example: [conversation_id, conversation_started_at] + start_time: + type: integer + format: int64 + example: 1717490000 + end_time: + type: integer + format: int64 + example: 1717510000 + responses: + '200': + description: Job enqueued successfully + content: + application/json: + schema: + type: object + properties: + job_identifier: + type: string + example: job1 + status: + type: string + example: pending + download_url: + type: string + download_expires_at: + type: string + '400': + description: Bad request (e.g. validation errors) + content: + application/json: + examples: + No dataset_id: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: "'dataset_id' is a required parameter" + Invalid dataset_id: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: imaginary is not a valid dataset_id + No attribute_ids: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: "'attribute_ids' is a required parameter" + Empty attribute_ids: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: attribute_ids must contain at least one attribute_id + Non array attribute_ids: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: "'attribute_ids' not an array must be of type Array" + Invalid attribute_ids: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: "attribute_ids invalid for conversation dataset: non_existent" + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '429': + description: Too many jobs in progress + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: rate_limit_exceeded + message: Exceeded rate limit of 5 pending reporting dataset export jobs + schema: + "$ref": "#/components/schemas/error" + "/export/reporting_data/{job_identifier}": + get: + summary: Get export job status + tags: [Reporting Data Export] + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: app_id + in: query + description: The Intercom defined code of the workspace the company is associated + to. + required: true + schema: + type: string + - name: client_id + in: query + required: true + schema: + type: string + - name: job_identifier + description: Unique identifier of the job. + in: query + required: true + schema: + type: string + responses: + '200': + description: Job status returned successfully + content: + application/json: + examples: + With complete status: + value: + job_identifier: job1 + status: complete + download_url: '' + download_expires_at: '' + With failed status: + value: + job_identifier: job1 + status: failed + download_url: '' + download_expires_at: '' + schema: + type: object + properties: + job_identifier: + type: string + status: + type: string + download_url: + type: string + download_expires_at: + type: string + '404': + description: When job not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: not_found + message: "Export job not found for identifier: job1" + schema: + "$ref": "#/components/schemas/error" + "/export/reporting_data/get_datasets": + get: + summary: List available datasets and attributes + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: [Reporting Data Export] + responses: + '200': + description: List of datasets + content: + application/json: + schema: + type: object + properties: + type: + type: string + example: list + data: + type: array + items: + type: object + properties: + id: + type: string + example: conversation + name: + type: string + example: Conversation + description: + type: string + example: "Conversation-level details: status, channel, assignee." + default_time_attribute_id: + type: string + example: conversation_started_at + attributes: + type: array + items: + type: object + properties: + id: + type: string + example: conversation_id + name: + type: string + example: Conversation ID + "/download/reporting_data/{job_identifier}": + get: + summary: Download completed export job data + description: | + Download the data from a completed reporting data export job. + + > Octet header required + > + > You will have to specify the header Accept: `application/octet-stream` when hitting this endpoint. + tags: [Reporting Data Export] + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: Accept + in: header + required: true + schema: + type: string + example: application/octet-stream + enum: + - application/octet-stream + description: "Required header for downloading the export file" + - name: app_id + in: query + required: true + schema: + type: string + - name: job_identifier + in: query + required: true + schema: + type: string + responses: + '200': + description: Export file downloaded + '404': + description: When job not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: not_found + message: "Export job not found for identifier: job1" + schema: + "$ref": "#/components/schemas/error" + "/fin/start": + post: + summary: Start a conversation with Fin + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Fin Agent + operationId: startFinConversation + description: | + Initialize Fin by passing it the user's message along with conversation history and user details. + + These additional pieces of context will be used by Fin to provide a better and more contextual answer to the user. + + {% admonition type="warning" %} + Please reach out to your accounts team to discuss access. + {% /admonition %} + + Once Fin is initialized, it progresses through a series of statuses such as *thinking*, *awaiting_user_reply*, or *resolved* before ending with a status of *complete*. + + During this workflow, the client should allow Fin to continue uninterrupted until a final *complete* status is returned via webhook, at which point control of the conversation passes back to the client. + responses: + '200': + description: Fin conversation started successfully + content: + application/json: + examples: + Successful response: + value: + conversation_id: ext-123 + user_id: user-456 + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + Response with attribute errors: + value: + conversation_id: ext-123 + user_id: user-456 + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + errors: + user: + attributes: + invalid_attr: User attribute 'invalid_attr' does not exist + conversation: + attributes: + bad_attr: Conversation attribute 'bad_attr' does not exist + schema: + type: object + properties: + conversation_id: + type: string + description: The ID of the conversation. + example: ext-123 + user_id: + type: string + description: The ID of the user. + example: user-456 + status: + type: string + enum: + - thinking + - awaiting_user_reply + - escalated + - resolved + - complete + description: | + Fin's current status in the conversation workflow. + example: thinking + created_at_ms: + type: string + format: date-time + description: The timestamp the response was created at, with millisecond precision. + example: '2025-01-24T10:00:00.123Z' + errors: + "$ref": "#/components/schemas/fin_agent_attribute_errors" + sse_subscription_url: + type: string + description: | + Optional. A URL to subscribe to Server-Sent Events (SSE) for this conversation, if SSE is enabled. The access token is a JWT with a 3-minute TTL. The token is revoked when Fin sets the conversation to awaiting_user_reply or complete status. + example: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + '400': + description: Bad Request + content: + application/json: + examples: + Invalid request: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: parameter_invalid + message: conversation_id is required + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + conversation_id: + type: string + description: The ID of the conversation that is calling Fin via this API. + example: ext-123 + message: + "$ref": "#/components/schemas/fin_agent_message" + user: + "$ref": "#/components/schemas/fin_agent_user" + attachments: + type: array + description: An array of attachments to include with the message. Maximum of 10 attachments. + maxItems: 10 + items: + "$ref": "#/components/schemas/fin_agent_attachment" + conversation_metadata: + "$ref": "#/components/schemas/fin_agent_conversation_metadata" + required: + - conversation_id + - message + - user + examples: + Basic request: + value: + conversation_id: ext-123 + message: + author: user + body: How can I see my account details? + timestamp: '2025-01-24T10:01:20.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + Request with conversation history: + value: + conversation_id: ext-123 + message: + author: user + body: How can I see my account details? + timestamp: '2025-01-24T10:01:20.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + attributes: + plan_type: Pro + subscription_status: active + conversation_metadata: + history: + - author: user + body: I need help + timestamp: '2025-01-24T10:00:01Z' + - author: agent + body: What do you need help with? + timestamp: '2025-01-24T10:01:00Z' + attributes: + priority_level: high + department: sales + Request with attachments: + value: + conversation_id: ext-123 + message: + author: user + body: Here is a screenshot of the issue + timestamp: '2025-01-24T10:01:20.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + attachments: + - type: url + url: https://example.com/document.pdf + - type: file + name: screenshot.png + content_type: image/png + data: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk... + "/fin/reply": + post: + summary: Reply to Fin + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Fin Agent + operationId: replyToFin + description: | + Once Fin has returned a response to a user's message, its status will be `awaiting_user_reply`. + + If a user replies, use this endpoint to send this response to Fin. + + {% admonition type="warning" %} + Please reach out to your accounts team to discuss access. + {% /admonition %} + responses: + '200': + description: Reply sent successfully + content: + application/json: + examples: + Successful response: + value: + conversation_id: ext-123 + user_id: user-456 + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...' + Response with attribute errors: + value: + conversation_id: ext-123 + user_id: user-456 + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...' + errors: + user: + attributes: + invalid_attr: User attribute 'invalid_attr' does not exist + schema: + type: object + properties: + conversation_id: + type: string + description: The ID of the conversation. + example: ext-123 + user_id: + type: string + description: The ID of the user. + example: user-456 + status: + type: string + enum: + - thinking + - awaiting_user_reply + - escalated + - resolved + - complete + description: | + Fin's current status in the conversation workflow. + example: thinking + created_at_ms: + type: string + format: date-time + description: The timestamp the response was created at, with millisecond precision. + example: '2025-01-24T10:00:00.123Z' + errors: + "$ref": "#/components/schemas/fin_agent_attribute_errors" + sse_subscription_url: + type: string + description: | + Optional. A URL to subscribe to Server-Sent Events (SSE) for this conversation, if SSE is enabled. The access token is a JWT with a 3-minute TTL. The token is revoked when Fin sets the conversation to awaiting_user_reply or complete status. + example: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...' + '400': + description: Bad Request + content: + application/json: + examples: + Invalid request: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: parameter_invalid + message: conversation_id is required + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + conversation_id: + type: string + description: The ID of the conversation. + example: '123456' + message: + "$ref": "#/components/schemas/fin_agent_message" + user: + "$ref": "#/components/schemas/fin_agent_user" + attachments: + type: array + description: An array of attachments to include with the message. Maximum of 10 attachments. + maxItems: 10 + items: + "$ref": "#/components/schemas/fin_agent_attachment" + required: + - conversation_id + - message + - user + examples: + Basic reply: + value: + conversation_id: '123456' + message: + author: user + body: Here's the information you requested. + timestamp: '2025-01-24T09:01:00.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + Reply with attachments: + value: + conversation_id: '123456' + message: + author: user + body: Here's the invoice you asked for. + timestamp: '2025-01-24T09:01:00.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + attachments: + - type: url + url: https://example.com/invoice.pdf + "/help_center/collections": + get: + summary: List all collections + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Help Center + operationId: listAllCollections + description: | + You can fetch a list of all collections by making a GET request to `https://api.intercom.io/help_center/collections`. + + Collections will be returned in descending order on the `updated_at` attribute. This means if you need to iterate through results then we'll show the most recently updated collections first. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: list + data: + - id: '159' + workspace_id: this_is_an_id96_that_should_be_at_least_4 + name: English collection title + url: http://help-center.test/myapp-96/collection-17 + order: 17 + created_at: 1734537309 + updated_at: 1734537309 + description: english collection description + icon: bookmark + parent_id: + help_center_id: 79 + - id: '160' + workspace_id: this_is_an_id96_that_should_be_at_least_4 + name: English section title + url: http://help-center.test/myapp-96/section-1 + order: 1 + created_at: 1734537309 + updated_at: 1734537309 + description: + icon: bookmark + parent_id: '159' + help_center_id: + total_count: 2 + pages: + type: pages + page: 1 + per_page: 20 + total_pages: 1 + schema: + "$ref": "#/components/schemas/collection_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 12c2d3a0-77ef-462e-a5ed-e67ddff50b6e + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create a collection + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Help Center + operationId: createCollection + description: You can create a new collection by making a POST request to `https://api.intercom.io/help_center/collections.` + responses: + '200': + description: collection created + content: + application/json: + examples: + collection created: + value: + id: '165' + workspace_id: this_is_an_id100_that_should_be_at_least_ + name: Thanks for everything + url: http://help-center.test/myapp-100/ + order: 1 + created_at: 1734537312 + updated_at: 1734537312 + description: '' + icon: book-bookmark + parent_id: + help_center_id: 81 + schema: + "$ref": "#/components/schemas/collection" + '400': + description: Bad Request + content: + application/json: + examples: + Bad Request: + value: + type: error.list + request_id: 816186b3-3187-4b47-adf8-e201bea32208 + errors: + - code: parameter_not_found + message: Name is a required parameter. + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 25d96ec2-641f-4354-b24e-83a85d33bd30 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_collection_request" + examples: + collection_created: + summary: collection created + value: + name: Thanks for everything + bad_request: + summary: Bad Request + value: + description: Missing required parameter + "/help_center/collections/{collection_id}": + get: + summary: Retrieve a collection + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: collection_id + in: path + required: true + description: The unique identifier for the collection which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Help Center + operationId: retrieveCollection + description: You can fetch the details of a single collection by making a GET + request to `https://api.intercom.io/help_center/collections/`. + responses: + '200': + description: Collection found + content: + application/json: + examples: + Collection found: + value: + id: '170' + workspace_id: this_is_an_id106_that_should_be_at_least_ + name: English collection title + url: http://help-center.test/myapp-106/collection-22 + order: 22 + created_at: 1734537315 + updated_at: 1734537315 + description: english collection description + icon: bookmark + parent_id: + help_center_id: 84 + schema: + "$ref": "#/components/schemas/collection" + '404': + description: Collection not found + content: + application/json: + examples: + Collection not found: + value: + type: error.list + request_id: a074a09e-97d1-44e2-b164-b703559c9f23 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: a29395a5-181c-4f3b-b069-5b2f32604c58 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update a collection + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: collection_id + in: path + required: true + description: The unique identifier for the collection which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Help Center + operationId: updateCollection + description: You can update the details of a single collection by making a PUT + request to `https://api.intercom.io/collections/`. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '176' + workspace_id: this_is_an_id112_that_should_be_at_least_ + name: Update collection name + url: http://help-center.test/myapp-112/collection-25 + order: 25 + created_at: 1734537318 + updated_at: 1734537319 + description: english collection description + icon: folder + parent_id: + help_center_id: 87 + schema: + "$ref": "#/components/schemas/collection" + '404': + description: Collection Not Found + content: + application/json: + examples: + Collection Not Found: + value: + type: error.list + request_id: 198e3add-d017-4e18-b478-fbe2cb8c538b + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b286edcc-453d-43af-bf2f-40f303708c61 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_collection_request" + examples: + successful: + summary: successful + value: + name: Update collection name + collection_not_found: + summary: Collection Not Found + value: + name: Update collection name + delete: + summary: Delete a collection + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: collection_id + in: path + required: true + description: The unique identifier for the collection which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Help Center + operationId: deleteCollection + description: You can delete a single collection by making a DELETE request to + `https://api.intercom.io/collections/`. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '182' + object: collection + deleted: true + schema: + "$ref": "#/components/schemas/deleted_collection_object" + '404': + description: collection Not Found + content: + application/json: + examples: + collection Not Found: + value: + type: error.list + request_id: f0d0ea9b-ffaf-48f5-95d0-e99531c379e2 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: d0d16fb5-93e6-45ca-b07d-f98fb92fd733 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/help_center/help_centers/{help_center_id}": + get: + summary: Retrieve a Help Center + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: help_center_id + in: path + required: true + description: The unique identifier for the collection which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Help Center + operationId: retrieveHelpCenter + description: You can fetch the details of a single Help Center by making a GET + request to `https://api.intercom.io/help_center/help_center/`. + responses: + '200': + description: Collection found + content: + application/json: + examples: + Collection found: + value: + id: '93' + workspace_id: this_is_an_id124_that_should_be_at_least_ + created_at: 1734537325 + updated_at: 1734537325 + identifier: help-center-1 + website_turned_on: false + display_name: Intercom Help Center + url: https://help.mycompany.com + custom_domain: help.mycompany.com + schema: + "$ref": "#/components/schemas/help_center" + '404': + description: Collection not found + content: + application/json: + examples: + Collection not found: + value: + type: error.list + request_id: bbd5de60-49c4-4850-afff-1226cdaa0beb + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c7c301f6-9206-418b-9792-98821970e48b + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/help_center/help_centers": + get: + summary: List all Help Centers + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Help Center + operationId: listHelpCenters + description: You can list all Help Centers by making a GET request to `https://api.intercom.io/help_center/help_centers`. + responses: + '200': + description: Help Centers found + content: + application/json: + examples: + Help Centers found: + value: + type: list + data: [] + schema: + "$ref": "#/components/schemas/help_center_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 76edbbb7-e463-4f6a-817a-b7905d467535 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/internal_articles": + get: + summary: List all articles + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Internal Articles + operationId: listInternalArticles + description: "You can fetch a list of all internal articles by making a GET request to + `https://api.intercom.io/internal_articles`." + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + pages: + type: pages + page: 1 + per_page: 25 + total_pages: 1 + total_count: 1 + data: + - id: '39' + title: Thanks for everything + body: Body of the Article + owner_id: 991266252 + author_id: 991266252 + locale: en + schema: + "$ref": "#/components/schemas/internal_article_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2e760b85-9020-471b-89dc-f579ec8a0104 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create an internal article + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Internal Articles + operationId: createInternalArticle + description: You can create a new internal article by making a POST request to `https://api.intercom.io/internal_articles`. + responses: + '200': + description: internal article created + content: + application/json: + examples: + internal article created: + value: + id: '42' + title: Thanks for everything + body: Body of the Article + owner_id: 991266252 + author_id: 991266252 + locale: en + schema: + "$ref": "#/components/schemas/internal_article" + '400': + description: Bad Request + content: + application/json: + examples: + Bad Request: + value: + type: error.list + request_id: e522ca8a-cd15-404e-84b3-7f7536003d4a + errors: + - code: parameter_not_found + message: author_id must be in the main body or default locale + translated_content object + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 85e91429-72df-4e69-8a12-b55793dff59f + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_internal_article_request" + examples: + internal_article_created: + summary: internal article created + value: + title: Thanks for everything + body: Body of the Article + owner_id: 991266252 + author_id: 991266252 + locale: en + bad_request: + summary: Bad Request + value: + title: Thanks for everything + body: Body of the Internal Article + "/internal_articles/{internal_article_id}": + get: + summary: Retrieve an internal article + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: internal_article_id + in: path + required: true + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Internal Articles + operationId: retrieveInternalArticle + description: You can fetch the details of a single internal article by making a GET request + to `https://api.intercom.io/internal_articles/`. + responses: + '200': + description: Internal article found + content: + application/json: + examples: + Internal article found: + value: + id: '45' + body: Body of the Article + owner_id: 991266252 + author_id: 991266252 + locale: en + schema: + "$ref": "#/components/schemas/internal_article" + '404': + description: Internal article not found + content: + application/json: + examples: + Internal article not found: + value: + type: error.list + request_id: 79abd27a-1bfb-42ec-a404-5728c76ba773 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2eab07fb-5092-49a4-ba74-44094f31f264 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update an internal article + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: internal_article_id + in: path + required: true + description: The unique identifier for the internal article which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Internal Articles + operationId: updateInternalArticle + description: You can update the details of a single internal article by making a PUT + request to `https://api.intercom.io/internal_articles/`. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '48' + body: Body of the Article + owner_id: 991266252 + author_id: 991266252 + locale: en + schema: + "$ref": "#/components/schemas/internal_article" + '404': + description: Internal article not found + content: + application/json: + examples: + Internal article not found: + value: + type: error.list + request_id: f9adccb2-9fca-4b87-bbb7-65f2af5e1d78 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: d1ea223d-bb62-42e3-8bcf-30fdcf7dbd99 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_internal_article_request" + examples: + successful: + summary: successful + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + internal_article_not_found: + summary: Internal article not found + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + delete: + summary: Delete an internal article + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: internal_article_id + in: path + required: true + description: The unique identifier for the internal article which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Internal Articles + operationId: deleteInternalArticle + description: You can delete a single internal article by making a DELETE request to `https://api.intercom.io/internal_articles/`. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '51' + object: internal_article + deleted: true + schema: + "$ref": "#/components/schemas/deleted_internal_article_object" + '404': + description: Internal article not found + content: + application/json: + examples: + Internal article not found: + value: + type: error.list + request_id: afe37506-cc48-4727-8068-ae7ff0e7b0e3 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c6e86ce8-9402-4196-89c5-f1b2912b4bac + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/internal_articles/search": + get: + summary: Search for internal articles + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: folder_id + in: query + required: false + description: The ID of the folder to search in. + example: 123 + schema: + type: string + tags: + - Internal Articles + operationId: searchInternalArticles + description: You can search for internal articles by making a GET request to `https://api.intercom.io/internal_articles/search`. + responses: + '200': + description: Search successful + content: + application/json: + examples: + Search successful: + value: + type: list + total_count: 1 + data: + internal_articles: + - id: '55' + body: Body of the Article + owner_id: 991266252 + author_id: 991266252 + locale: en + pages: + type: pages + page: 1 + total_pages: 1 + per_page: 10 + schema: + "$ref": "#/components/schemas/internal_article_search_response" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c70746a8-a5b2-4772-afba-1a4b487ea75d + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/ip_allowlist": + get: + summary: Get IP allowlist settings + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - IP Allowlist + operationId: getIpAllowlist + description: Retrieve the current IP allowlist configuration for the workspace. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful: + value: + type: ip_allowlist + enabled: true + ip_allowlist: + - "192.168.1.0/24" + - "10.0.0.1" + schema: + "$ref": "#/components/schemas/ip_allowlist" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update IP allowlist settings + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - IP Allowlist + operationId: updateIpAllowlist + description: | + Update the IP allowlist configuration for the workspace. + + {% admonition type="warning" name="Lockout Protection" %} + The API will reject updates that would lock out the caller's IP address. Ensure your current IP is included in the allowlist when enabling the feature. + {% /admonition %} + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful: + value: + type: ip_allowlist + enabled: true + ip_allowlist: + - "192.168.1.0/24" + - "10.0.0.1" + schema: + "$ref": "#/components/schemas/ip_allowlist" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '422': + description: Validation error + content: + application/json: + examples: + Lockout Protection: + value: + type: error.list + request_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + errors: + - code: parameter_invalid + message: Your IP (1.2.3.4) is not on the allowlist. Saving would lock you out of this workspace. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/ip_allowlist" + examples: + successful: + summary: Enable IP allowlist + value: + enabled: true + ip_allowlist: + - "192.168.1.0/24" + - "10.0.0.1" + "/companies": + post: + summary: Create or Update a company + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Companies + operationId: createOrUpdateCompany + description: | + You can create or update a company. + + Companies will be only visible in Intercom when there is at least one associated user. + + Companies are looked up via `company_id` in a `POST` request, if not found via `company_id`, the new company will be created, if found, that company will be updated. + + {% admonition type="warning" name="Using `company_id`" %} + You can set a unique `company_id` value when creating a company. However, it is not possible to update `company_id`. Be sure to set a unique value once upon creation of the company. + {% /admonition %} + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: company + company_id: company_remote_id + id: 6762f0761bb69f9f2193bae2 + app_id: this_is_an_id147_that_should_be_at_least_ + name: my company + remote_created_at: 1374138000 + created_at: 1734537334 + updated_at: 1734537334 + monthly_spend: 0 + session_count: 0 + user_count: 0 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: + industry: manufacturing + schema: + "$ref": "#/components/schemas/company" + '400': + description: Bad Request + content: + application/json: + examples: + Bad Request: + value: + type: error.list + request_id: + errors: + - code: bad_request + message: bad 'test' parameter + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 8a9f415f-e9df-41e9-ba1f-739914f66551 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_or_update_company_request" + examples: + successful: + summary: Successful + value: + company_id: company_remote_id + name: my company + remote_created_at: 1374138000 + bad_request: + summary: Bad Request + value: + test: invalid + get: + summary: Retrieve companies + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: name + in: query + required: false + description: The `name` of the company to filter by. + example: my company + schema: + type: string + - name: company_id + in: query + required: false + description: The `company_id` of the company to filter by. + example: '12345' + schema: + type: string + - name: tag_id + in: query + required: false + description: The `tag_id` of the company to filter by. + example: '678910' + schema: + type: string + - name: segment_id + in: query + required: false + description: The `segment_id` of the company to filter by. + example: '98765' + schema: + type: string + - name: page + in: query + required: false + description: The page of results to fetch. Defaults to first page + example: 1 + schema: + type: integer + - name: per_page + in: query + required: false + description: How many results to display per page. Defaults to 15 + example: 15 + schema: + type: integer + tags: + - Companies + operationId: retrieveCompany + description: | + You can fetch a single company by passing in `company_id` or `name`. + + `https://api.intercom.io/companies?name={name}` + + `https://api.intercom.io/companies?company_id={company_id}` + + You can fetch all companies and filter by `segment_id` or `tag_id` as a query parameter. + + `https://api.intercom.io/companies?tag_id={tag_id}` + + `https://api.intercom.io/companies?segment_id={segment_id}` + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: list + data: + - type: company + company_id: remote_companies_scroll_2 + id: 6762f07a1bb69f9f2193baea + app_id: this_is_an_id153_that_should_be_at_least_ + name: IntercomQATest1 + remote_created_at: 1734537338 + created_at: 1734537338 + updated_at: 1734537338 + monthly_spend: 0 + session_count: 0 + user_count: 4 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: {} + pages: + type: pages + next: + page: 1 + per_page: 15 + total_pages: 1 + total_count: 1 + schema: + "$ref": "#/components/schemas/company_list" + '404': + description: Company Not Found + content: + application/json: + examples: + Company Not Found: + value: + type: error.list + request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 + errors: + - code: company_not_found + message: Company Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2fa563ba-f9c9-4281-a76b-10bfd777dfd7 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/companies/{company_id}": + get: + summary: Retrieve a company by ID + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: company_id + in: path + required: true + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + schema: + type: string + tags: + - Companies + operationId: RetrieveACompanyById + description: You can fetch a single company. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: company + company_id: '1' + id: 6762f07f1bb69f9f2193baf5 + app_id: this_is_an_id159_that_should_be_at_least_ + name: company1 + remote_created_at: 1734537343 + created_at: 1734537343 + updated_at: 1734537343 + monthly_spend: 0 + session_count: 0 + user_count: 1 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: {} + schema: + "$ref": "#/components/schemas/company" + '404': + description: Company Not Found + content: + application/json: + examples: + Company Not Found: + value: + type: error.list + request_id: 57d57564-b5e2-4064-abfe-4653e5ac24c0 + errors: + - code: company_not_found + message: Company Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: caf73ce4-bda6-4f2b-bbfb-0d984d430335 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update a company + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: company_id + in: path + required: true + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + schema: + type: string + tags: + - Companies + operationId: UpdateCompany + description: | + You can update a single company using the Intercom provisioned `id`. + + {% admonition type="warning" name="Using `company_id`" %} + When updating a company it is not possible to update `company_id`. This can only be set once upon creation of the company. + {% /admonition %} + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_company_request" + examples: + successful: + summary: Successful + value: + name: my company + website: http://www.mycompany.com/ + bad_request: + summary: Bad Request + value: + test: invalid + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: company + company_id: '1' + id: 6762f0841bb69f9f2193baff + app_id: this_is_an_id165_that_should_be_at_least_ + name: company2 + remote_created_at: 1734537348 + created_at: 1734537348 + updated_at: 1734537348 + monthly_spend: 0 + session_count: 0 + user_count: 1 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: {} + schema: + "$ref": "#/components/schemas/company" + '404': + description: Company Not Found + content: + application/json: + examples: + Company Not Found: + value: + type: error.list + request_id: daa64b43-3e3c-4fc4-aef9-91eb40c7885c + errors: + - code: company_not_found + message: Company Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 4748eb32-3261-4798-ace0-a5825edf4eb5 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + delete: + summary: Delete a company + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: company_id + in: path + required: true + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + schema: + type: string + tags: + - Companies + operationId: deleteCompany + description: | + Delete a single company. + + This endpoint does not permanently remove the company. It archives the company record and detaches any contacts attached to it; the contacts themselves are not deleted. A `company.deleted` webhook is sent once archival completes. + + The endpoint returns `200` with `"deleted": true` as soon as the request is accepted — archival is processed asynchronously. + + {% admonition type="warning" %} + Third-party integrations that sync companies into Intercom (for example, Salesforce or Chargebee) will recreate any company deleted through this endpoint on their next sync. To prevent recreation, remove or filter the company at the source integration before deleting it via the API. + {% /admonition %} + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + id: 6762f0881bb69f9f2193bb09 + object: company + deleted: true + schema: + "$ref": "#/components/schemas/deleted_company_object" + '404': + description: Company Not Found + content: + application/json: + examples: + Company Not Found: + value: + type: error.list + request_id: 4f41d1d6-7a42-45e3-a24e-544deb62da47 + errors: + - code: company_not_found + message: Company Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 7b13fd9c-31be-40de-94e1-d71f260a3458 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/companies/{company_id}/contacts": + get: + summary: List attached contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: company_id + in: path + required: true + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + schema: + type: string + tags: + - Companies + - Contacts + operationId: ListAttachedContacts + description: You can fetch a list of all contacts that belong to a company. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: list + data: [] + total_count: 0 + pages: + type: pages + page: 1 + per_page: 50 + total_pages: 0 + schema: + "$ref": "#/components/schemas/company_attached_contacts" + '404': + description: Company Not Found + content: + application/json: + examples: + Company Not Found: + value: + type: error.list + request_id: 5dde0b79-8c81-4d9e-a4d4-736a44cf2f00 + errors: + - code: company_not_found + message: Company Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: f7586690-c217-47db-9042-cb9550b81260 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/companies/{company_id}/segments": + get: + summary: List attached segments for companies + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: company_id + in: path + required: true + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + schema: + type: string + tags: + - Companies + operationId: ListAttachedSegmentsForCompanies + description: You can fetch a list of all segments that belong to a company. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: list + data: [] + schema: + "$ref": "#/components/schemas/company_attached_segments" + '404': + description: Company Not Found + content: + application/json: + examples: + Company Not Found: + value: + type: error.list + request_id: de5d939e-77fb-46d7-a3b9-f34199d9f25a + errors: + - code: company_not_found + message: Company Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 91f04dce-5759-4d80-981e-f598ec989d1a + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/companies/{company_id}/notes": + get: + summary: List all company notes + parameters: + - name: company_id + in: path + required: true + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Notes + - Companies + operationId: listCompanyNotes + description: You can fetch a list of notes that are associated to a company. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: list + data: + - type: note + id: '26' + created_at: 1733932587 + company: + type: company + id: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + author: + type: admin + id: '991267581' + name: Ciaran122 Lee + email: admin122@email.com + away_mode_enabled: false + away_mode_reassign: false + away_status_reason_id: null + has_inbox_seat: true + team_ids: [] + team_priority_level: {} + body: "

This is a note.

" + total_count: 1 + pages: + type: pages + next: + page: 1 + per_page: 50 + total_pages: 1 + schema: + "$ref": "#/components/schemas/note_list" + '404': + description: Company not found + content: + application/json: + examples: + Company not found: + value: + type: error.list + request_id: 57055cde-3d0d-4c67-b5c9-b20b80340bf0 + errors: + - code: company_not_found + message: Company Not Found + schema: + "$ref": "#/components/schemas/error" + "/companies/list": + post: + summary: List all companies + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: page + in: query + required: false + description: The page of results to fetch. Defaults to first page + example: 1 + schema: + type: integer + - name: per_page + in: query + required: false + description: How many results to return per page. Defaults to 15 + example: 15 + schema: + type: integer + - name: order + in: query + required: false + description: "`asc` or `desc`. Return the companies in ascending or descending + order. Defaults to desc" + example: desc + schema: + type: string + tags: + - Companies + operationId: listAllCompanies + description: | + You can list companies. The company list is sorted by the `last_request_at` field and by default is ordered descending, most recently requested first. + + Note that the API does not include companies who have no associated users in list responses. + + When using the Companies endpoint and the pages object to iterate through the returned companies, there is a limit of 10,000 Companies that can be returned. If you need to list or iterate on more than 10,000 Companies, please use the [Scroll API](https://developers.intercom.com/reference#iterating-over-all-companies). + {% admonition type="warning" name="Pagination" %} + You can use pagination to limit the number of results returned. The default is `20` results per page. + See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#pagination-for-list-apis) for more details on how to use the `starting_after` param. + {% /admonition %} + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: list + data: + - type: company + company_id: remote_companies_scroll_2 + id: 6762f0941bb69f9f2193bb25 + app_id: this_is_an_id189_that_should_be_at_least_ + name: IntercomQATest1 + remote_created_at: 1734537364 + created_at: 1734537364 + updated_at: 1734537364 + monthly_spend: 0 + session_count: 0 + user_count: 4 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: {} + pages: + type: pages + next: + page: 1 + per_page: 15 + total_pages: 1 + total_count: 1 + schema: + "$ref": "#/components/schemas/company_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 537ccc45-2cae-4e72-ac2f-849f1422a771 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/companies/scroll": + get: + summary: Scroll over all companies + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: scroll_param + in: query + required: false + description: '' + schema: + type: string + tags: + - Companies + operationId: scrollOverAllCompanies + description: |2 + The `list all companies` functionality does not work well for huge datasets, and can result in errors and performance problems when paging deeply. The Scroll API provides an efficient mechanism for iterating over all companies in a dataset. + + - Each app can only have 1 scroll open at a time. You'll get an error message if you try to have more than one open per app. + - If the scroll isn't used for 1 minute, it expires and calls with that scroll param will fail + - If the end of the scroll is reached, "companies" will be empty and the scroll parameter will expire + + {% admonition type="info" name="Scroll Parameter" %} + You can get the first page of companies by simply sending a GET request to the scroll endpoint. + For subsequent requests you will need to use the scroll parameter from the response. + {% /admonition %} + {% admonition type="danger" name="Scroll network timeouts" %} + Since scroll is often used on large datasets network errors such as timeouts can be encountered. When this occurs you will see a HTTP 500 error with the following message: + "Request failed due to an internal network error. Please restart the scroll operation." + If this happens, you will need to restart your scroll query: It is not possible to continue from a specific point when using scroll. + {% /admonition %} + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: list + data: + - type: company + company_id: remote_companies_scroll_2 + id: 6762f0971bb69f9f2193bb2b + app_id: this_is_an_id193_that_should_be_at_least_ + name: IntercomQATest1 + remote_created_at: 1734537367 + created_at: 1734537367 + updated_at: 1734537367 + monthly_spend: 0 + session_count: 0 + user_count: 4 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: {} + pages: + total_count: + scroll_param: 69352cd2-ab5b-42ac-b004-a13d4e55e9b0 + schema: + "$ref": "#/components/schemas/company_scroll" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: ca269b05-8c42-4615-a28d-7df0eb1687c5 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/contacts/{contact_id}/companies": + post: + summary: Attach a Contact to a Company + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + required: true + description: The unique identifier for the contact which is given by Intercom + schema: + type: string + tags: + - Companies + - Contacts + operationId: attachContactToACompany + description: You can attach a company to a single contact. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: company + company_id: '1' + id: 6762f09a1bb69f9f2193bb34 + app_id: this_is_an_id197_that_should_be_at_least_ + name: company6 + remote_created_at: 1734537370 + created_at: 1734537370 + updated_at: 1734537370 + monthly_spend: 0 + session_count: 0 + user_count: 1 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: {} + schema: + "$ref": "#/components/schemas/company" + '400': + description: Bad Request + content: + application/json: + examples: + Bad Request: + value: + type: error.list + request_id: 8879ee29-ade4-4b5a-a275-ab1ac531b82a + errors: + - code: parameter_not_found + message: company not specified + Contact Company Limit Exceeded: + value: + type: error.list + request_id: 9a3d0816-9707-4598-977e-c009ba630148 + errors: + - code: contact_company_limit_exceeded + message: Contact has reached the maximum of 1000 company associations + schema: + "$ref": "#/components/schemas/error" + '404': + description: Company Not Found + content: + application/json: + examples: + Company Not Found: + value: + type: error.list + request_id: 981799ea-f19b-432d-828c-491a3b29ad29 + errors: + - code: company_not_found + message: Company Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 1f187e85-cd9a-4be4-964e-cdbb8c66334a + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier for the company which is given + by Intercom + example: 58a430d35458202d41b1e65b + examples: + successful: + summary: Successful + value: + id: 6762f09a1bb69f9f2193bb34 + bad_request: + summary: Bad Request + value: + company_not_found: + summary: Company Not Found + value: + id: '123' + get: + summary: List attached companies for contact + parameters: + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Contacts + - Companies + operationId: listCompaniesForAContact + description: You can fetch a list of companies that are associated to a contact. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: + - type: company + company_id: '1' + id: 6762f0a61bb69f9f2193bb55 + app_id: this_is_an_id213_that_should_be_at_least_ + name: company12 + remote_created_at: 1734537382 + created_at: 1734537382 + updated_at: 1734537382 + last_request_at: 1734364582 + monthly_spend: 0 + session_count: 0 + user_count: 1 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: {} + pages: + type: pages + next: + page: 1 + per_page: 50 + total_pages: 1 + total_count: 1 + schema: + "$ref": "#/components/schemas/contact_attached_companies" + '404': + description: Contact not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 32c856ba-901b-49c4-8e8d-d43fc3ee6ea5 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 565a4f38-5fa9-451d-bcf0-32076f79517f + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/contacts/{contact_id}/companies/{company_id}": + delete: + summary: Detach a contact from a company + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + required: true + description: The unique identifier for the contact which is given by Intercom + example: 58a430d35458202d41b1e65b + schema: + type: string + - name: company_id + in: path + required: true + description: The unique identifier for the company which is given by Intercom + example: 58a430d35458202d41b1e65b + schema: + type: string + tags: + - Companies + - Contacts + operationId: detachContactFromACompany + description: You can detach a company from a single contact. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: company + company_id: '1' + id: 6762f0a01bb69f9f2193bb44 + app_id: this_is_an_id205_that_should_be_at_least_ + name: company8 + remote_created_at: 1734537376 + created_at: 1734537376 + updated_at: 1734537377 + monthly_spend: 0 + session_count: 0 + user_count: 0 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: {} + schema: + "$ref": "#/components/schemas/company" + '404': + description: Contact Not Found + content: + application/json: + examples: + Company Not Found: + value: + type: error.list + request_id: dcfc3465-8a51-4d78-b24c-2f215d48f339 + errors: + - code: company_not_found + message: Company Not Found + Contact Not Found: + value: + type: error.list + request_id: b5a1f332-1bf1-44bd-a068-2634244b6051 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 9bc1e0cc-5cc4-412d-8037-57e073375ab0 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/contacts/{contact_id}/notes": + get: + summary: List all notes + parameters: + - name: contact_id + in: path + required: true + description: The unique identifier of a contact. + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Notes + - Contacts + operationId: listNotes + description: You can fetch a list of notes that are associated to a contact. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: list + data: + - type: note + id: '26' + created_at: 1733932587 + contact: + type: contact + id: 6762f0ab1bb69f9f2193bb60 + author: + type: admin + id: '991267581' + name: Ciaran122 Lee + email: admin122@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

This is a note.

" + - type: note + id: '25' + created_at: 1733846187 + contact: + type: contact + id: 6762f0ab1bb69f9f2193bb60 + author: + type: admin + id: '991267581' + name: Ciaran122 Lee + email: admin122@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

This is a note.

" + - type: note + id: '24' + created_at: 1733846187 + contact: + type: contact + id: 6762f0ab1bb69f9f2193bb60 + author: + type: admin + id: '991267581' + name: Ciaran122 Lee + email: admin122@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

This is a note.

" + total_count: 3 + pages: + type: pages + next: + page: 1 + per_page: 50 + total_pages: 1 + schema: + "$ref": "#/components/schemas/note_list" + '404': + description: Contact not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 57055cde-3d0d-4c67-b5c9-b20b80340bf0 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create a note + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + required: true + description: The unique identifier of a given contact. + example: '123' + schema: + type: integer + tags: + - Notes + - Contacts + operationId: createNote + description: You can add a note to a single contact. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: note + id: '31' + created_at: 1734537390 + contact: + type: contact + id: 6762f0ad1bb69f9f2193bb62 + author: + type: admin + id: '991267583' + name: Ciaran124 Lee + email: admin124@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

Hello

" + schema: + "$ref": "#/components/schemas/note" + '404': + description: Contact not found + content: + application/json: + examples: + Admin not found: + value: + type: error.list + request_id: 168f1bc3-d198-4797-8422-9f93fe8af5ad + errors: + - code: not_found + message: Resource Not Found + Contact not found: + value: + type: error.list + request_id: 6f372239-0259-428f-9943-91b8f7a92162 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - body + properties: + body: + type: string + description: The text of the note. + example: New note + admin_id: + type: string + description: The unique identifier of a given admin. + example: '123' + examples: + successful_response: + summary: Successful response + value: + contact_id: 6762f0ad1bb69f9f2193bb62 + admin_id: 991267583 + body: Hello + admin_not_found: + summary: Admin not found + value: + contact_id: 6762f0af1bb69f9f2193bb63 + admin_id: 123 + body: Hello + contact_not_found: + summary: Contact not found + value: + contact_id: 123 + admin_id: 991267585 + body: Hello + "/contacts/{contact_id}/segments": + get: + summary: List attached segments for contact + parameters: + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Contacts + - Segments + operationId: listSegmentsForAContact + description: You can fetch a list of segments that are associated to a contact. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: + - type: segment + id: 6762f0b21bb69f9f2193bb65 + name: segment + created_at: 1734537394 + updated_at: 1734537394 + person_type: user + schema: + "$ref": "#/components/schemas/contact_segments" + '404': + description: Contact not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 61c119c7-b2f0-4158-8457-fd53e83f936a + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 0273c219-51b7-4938-95d2-19996b2e2734 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/contacts/{contact_id}/subscriptions": + get: + summary: List subscriptions for a contact + parameters: + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Contacts + - Subscription Types + operationId: listSubscriptionsForAContact + description: | + You can fetch a list of subscription types that are attached to a contact. These can be subscriptions that a user has 'opted-in' to or has 'opted-out' from, depending on the subscription type. + This will return a list of Subscription Type objects that the contact is associated with. + + The data property will show a combined list of: + + 1.Opt-out subscription types that the user has opted-out from. + 2.Opt-in subscription types that the user has opted-in to receiving. + + **Note:** This endpoint only returns subscriptions where the contact has explicitly configured their preference. Subscriptions that are in the default state — where the contact has not made an explicit opt-in or opt-out choice — are not included in the response. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: list + data: + - type: subscription + id: '91' + state: live + consent_type: opt_out + default_translation: + name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + translations: + - name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + content_types: + - email + - type: subscription + id: '93' + state: live + consent_type: opt_in + default_translation: + name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + translations: + - name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + content_types: + - sms_message + schema: + "$ref": "#/components/schemas/subscription_type_list" + '404': + description: Contact not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: c9b793ad-ff39-436c-80c9-db6f24d0d444 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 7323b97b-9ba4-4c54-946c-38cecea65b3c + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Add subscription to a contact + tags: + - Subscription Types + - Contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + operationId: attachSubscriptionTypeToContact + description: | + You can add a specific subscription to a contact. In Intercom, we have two different subscription types based on user consent - opt-out and opt-in: + + 1.Attaching a contact to an opt-out subscription type will opt that user out from receiving messages related to that subscription type. + + 2.Attaching a contact to an opt-in subscription type will opt that user in to receiving messages related to that subscription type. + + This will return a subscription type model for the subscription type that was added to the contact. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: subscription + id: '106' + state: live + consent_type: opt_in + default_translation: + name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + translations: + - name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + content_types: + - sms_message + schema: + "$ref": "#/components/schemas/subscription_type" + '404': + description: Resource not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 0c2871af-abed-4bce-a5c5-77efbe721711 + errors: + - code: not_found + message: User Not Found + Resource not found: + value: + type: error.list + request_id: 2774db46-34d9-4925-a24d-8203d4a39f65 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: f615465d-fd5f-4d68-8498-389130b897e4 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - id + - consent_type + properties: + id: + type: string + description: The unique identifier for the subscription which is + given by Intercom + example: '37846' + consent_type: + type: string + description: The consent_type of a subscription, opt_out or opt_in. + example: opt_in + examples: + successful: + summary: Successful + value: + id: 106 + consent_type: opt_in + contact_not_found: + summary: Contact not found + value: + id: 110 + consent_type: opt_in + resource_not_found: + summary: Resource not found + value: + id: invalid_id + consent_type: opt_in + "/contacts/{contact_id}/subscriptions/{subscription_id}": + delete: + summary: Remove subscription from a contact + tags: + - Subscription Types + - Contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + - name: subscription_id + in: path + description: The unique identifier for the subscription type which is given + by Intercom + example: '37846' + required: true + schema: + type: string + operationId: detachSubscriptionTypeToContact + description: You can remove a specific subscription from a contact. This will + return a subscription type model for the subscription type that was removed + from the contact. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: subscription + id: '122' + state: live + consent_type: opt_in + default_translation: + name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + translations: + - name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + content_types: + - sms_message + schema: + "$ref": "#/components/schemas/subscription_type" + '404': + description: Resource not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 82b37940-b43f-46ee-a492-11543a317c97 + errors: + - code: not_found + message: User Not Found + Resource not found: + value: + type: error.list + request_id: c18422ca-5454-42af-9e1d-dd92066e6e9d + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c7de741d-dc8f-49b1-8cbe-791668ade76c + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/contacts/{contact_id}/tags": + get: + summary: List tags attached to a contact + tags: + - Contacts + - Tags + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + operationId: listTagsForAContact + description: You can fetch a list of all tags that are attached to a specific + contact. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: + - type: tag + id: '80' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' + schema: + "$ref": "#/components/schemas/tag_list" + '404': + description: Contact not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: ca3c5e6e-c743-428b-aa8a-ac371a50cc39 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Add tag to a contact + tags: + - Tags + - Contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + operationId: attachTagToContact + description: You can tag a specific contact. This will return a tag object for + the tag that was added to the contact. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: tag + id: '81' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' + schema: + "$ref": "#/components/schemas/tag" + '404': + description: Tag not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: f22a7847-ee33-449f-80c0-707efd295a53 + errors: + - code: not_found + message: User Not Found + Tag not found: + value: + type: error.list + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 9b1c9966-caeb-485a-8419-d707fd472c63 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier for the tag which is given by + Intercom + example: '7522907' + examples: + successful: + summary: successful + value: + id: 81 + contact_not_found: + summary: Contact not found + value: + id: 82 + tag_not_found: + summary: Tag not found + value: + id: '123' + "/contacts/{contact_id}/tags/{tag_id}": + delete: + summary: Remove tag from a contact + tags: + - Tags + - Contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + - name: tag_id + in: path + description: The unique identifier for the tag which is given by Intercom + example: '7522907' + required: true + schema: + type: string + operationId: detachTagFromContact + description: You can remove tag from a specific contact. This will return a + tag object for the tag that was removed from the contact. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: tag + id: '84' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' + schema: + "$ref": "#/components/schemas/tag" + '404': + description: Tag not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: b3d41080-5b35-42b8-8584-31e4660d355f + errors: + - code: not_found + message: User Not Found + Tag not found: + value: + type: error.list + request_id: '02871f7a-860e-433a-8545-6a73fbbe5e22' + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 491beaa4-a452-4940-85e0-498c0ca5528d + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/contacts/{contact_id}": + put: + summary: Update a contact + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: id + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + tags: + - Contacts + - Custom Object Instances + operationId: UpdateContact + description: | + You can update an existing contact (ie. user or lead). + + {% admonition type="info" %} + This endpoint handles both **contact updates** and **custom object associations**. + + See _`update a contact with an association to a custom object instance`_ in the request/response examples to see the custom object association format. + {% /admonition %} + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: contact + id: 6762f0cd1bb69f9f2193bb7c + workspace_id: this_is_an_id279_that_should_be_at_least_ + external_id: '70' + role: user + email: joebloggs@intercom.io + phone: + name: joe bloggs + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537421 + updated_at: 1734537422 + signed_up_at: 1734537421 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} + tags: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: + update a contact with an association to a custom object instance: + value: + type: contact + id: 6762f0cd1bb69f9f2193bb7c + workspace_id: this_is_an_id279_that_should_be_at_least_ + external_id: '70' + role: user + email: joebloggs@intercom.io + phone: + name: joe bloggs + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537421 + updated_at: 1734537422 + signed_up_at: 1734537421 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: + order: + type: Order.list + instances: + - id: '21' + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + type: Order + tags: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: + schema: + allOf: + - "$ref": "#/components/schemas/contact" + properties: + enabled_push_messaging: + type: boolean + nullable: true + description: If the user has enabled push messaging. + example: true + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 89ce96d9-aae9-4eec-ace2-d68cc4f74879 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + oneOf: + - "$ref": "#/components/schemas/update_contact_request" + examples: + successful: + summary: successful + value: + email: joebloggs@intercom.io + name: joe bloggs + update_a_contact_with_an_association_to_a_custom_object_instance: + summary: update a contact with an association to a custom object + instance + value: + custom_attributes: + order: + - '21' + get: + summary: Get a contact + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: contact_id + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + tags: + - Contacts + operationId: ShowContact + description: | + You can fetch the details of a single contact. + + {% admonition type="warning" name="Merged contacts" %} + If a contact has been merged into another contact via the Merge endpoint (POST /contacts/merge), requesting it by its original ID will return a `404 Not Found` error. Use the merged-into contact's ID instead. + {% /admonition %} + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: contact + id: 6762f0d01bb69f9f2193bb7d + workspace_id: this_is_an_id283_that_should_be_at_least_ + external_id: '70' + role: user + email: joe@bloggs.com + phone: + name: Joe Bloggs + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537424 + updated_at: 1734537424 + signed_up_at: 1734537424 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} + tags: + type: list + data: [] + url: "/contacts/6762f0d01bb69f9f2193bb7d/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f0d01bb69f9f2193bb7d/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f0d01bb69f9f2193bb7d/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0d01bb69f9f2193bb7d/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0d01bb69f9f2193bb7d/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: + schema: + allOf: + - "$ref": "#/components/schemas/contact" + properties: + enabled_push_messaging: + type: boolean + nullable: true + description: If the user has enabled push messaging. + example: true + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 45b30bd1-75d2-40cc-bb39-74ac133a2836 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + delete: + summary: Delete a contact + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: contact_id + required: true + schema: + type: string + tags: + - Contacts + operationId: DeleteContact + description: You can delete a single contact. + responses: + '200': + description: successful + content: + application/json: + schema: + "$ref": "#/components/schemas/contact_deleted" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: a947b2f0-23d3-419d-9ec4-cdd191cea676 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/contacts/merge": + post: + summary: Merge a lead and a user + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Contacts + operationId: MergeContact + description: | + You can merge a contact with a `role` of `lead` into a contact with a `role` of `user`. + + {% admonition type="warning" name="Merged contacts are not retrievable via the API" %} + Once a merge is completed, the source contact (`from`) is permanently removed from the active contact list. This means: + - **GET /contacts/{id}** — Requesting the source contact by its original ID will return a `404 Not Found` error. + - **POST /contacts/search** — The source contact will not appear in search results, including queries filtered by `updated_at`. + - **GET /contacts** — The source contact will not appear in list results. + + Only the target contact (`into`) remains accessible. If your application stores contact IDs, update them to use the target contact's ID after a merge. + {% /admonition %} + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: contact + id: 6762f0d51bb69f9f2193bb80 + workspace_id: this_is_an_id291_that_should_be_at_least_ + external_id: '70' + role: user + email: joe@bloggs.com + phone: + name: Joe Bloggs + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537429 + updated_at: 1734537430 + signed_up_at: 1734537429 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} + tags: + type: list + data: [] + url: "/contacts/6762f0d51bb69f9f2193bb80/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f0d51bb69f9f2193bb80/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f0d51bb69f9f2193bb80/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0d51bb69f9f2193bb80/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0d51bb69f9f2193bb80/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: + schema: + allOf: + - "$ref": "#/components/schemas/contact" + properties: + enabled_push_messaging: + type: boolean + nullable: true + description: If the user has enabled push messaging. + example: true + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: ff328c7c-6140-48eb-84dd-bb8960b66cd0 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/merge_contacts_request" + examples: + successful: + summary: successful + value: + from: 6762f0d51bb69f9f2193bb7f + into: 6762f0d51bb69f9f2193bb80 + "/contacts/search": + post: + summary: Search contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Contacts + operationId: SearchContacts + description: | + You can search for multiple contacts by the value of their attributes in order to fetch exactly who you want. + + To search for contacts, you need to send a `POST` request to `https://api.intercom.io/contacts/search`. + + This will accept a query object in the body which will define your filters in order to search for contacts. + + {% admonition type="warning" name="Optimizing search queries" %} + 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 `50` results per page. + See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#example-search-conversations-request) for more details on how to use the `starting_after` param. + {% /admonition %} + ### Merged Contacts + + Contacts that have been merged (via POST /contacts/merge) are excluded from search results. If a contact was recently merged into another, it will no longer appear in queries filtered by `updated_at` or any other field. Only the target contact from the merge remains searchable. + + ### Contact Creation Delay + + If a contact has recently been created, there is a possibility that it will not yet be available when searching. This means that it may not appear in the response. This delay can take a few minutes. If you need to be instantly notified it is recommended to use webhooks and iterate to see if they match your search filters. + + ### Nesting & Limitations + + 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: + * There's a limit of max 2 nested filters + * There's a limit of max 15 filters for each AND or OR group + + ### Searching for Timestamp Fields + + All timestamp fields (created_at, updated_at etc.) are indexed as Dates for Contact Search queries; Datetime queries are not currently supported. This means you can only query for timestamp fields by day - not hour, minute or second. The day a timestamp falls on is determined using your workspace's timezone, so the same query can return different results across workspaces in different timezones. Because timestamps are stored in UTC, filtering by a value the API returned may not match the originating contact when your workspace is not set to UTC. + For example, on a workspace set to UTC, if you search for all Contacts with a created_at value greater (>) than 1577869200 (the UNIX timestamp for January 1st, 2020 9:00 AM UTC), that will be interpreted as 1577836800 (January 1st, 2020 12:00 AM UTC). The search results will then include Contacts created from January 2nd, 2020 12:00 AM UTC onwards. On a workspace in another timezone, the day boundaries fall on that timezone's midnight instead. + If you'd like to get contacts created on January 1st, 2020 you should search with a created_at value equal (=) to 1577836800 (January 1st, 2020 12:00 AM UTC). + This behaviour applies only to timestamps used in search queries. The search results will still contain the full UNIX timestamp and be sorted accordingly. + + ### Accepted Fields + + Most key listed as part of the Contacts Model are 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 | + | role | String
Accepts user or lead | + | name | String | + | avatar | String | + | owner_id | Integer | + | email | String | + | email_domain | String | + | phone | String | + | external_id | String | + | created_at | Date (UNIX Timestamp) | + | signed_up_at | Date (UNIX Timestamp) | + | updated_at | Date (UNIX Timestamp) | + | last_seen_at | Date (UNIX Timestamp) | + | last_contacted_at | Date (UNIX Timestamp) | + | last_replied_at | Date (UNIX Timestamp) | + | last_email_opened_at | Date (UNIX Timestamp) | + | last_email_clicked_at | Date (UNIX Timestamp) | + | language_override | String | + | browser | String | + | browser_language | String | + | os | String | + | location.country | String | + | location.region | String | + | location.city | String | + | unsubscribed_from_emails | Boolean | + | marked_email_as_spam | Boolean | + | has_hard_bounced | Boolean | + | ios_last_seen_at | Date (UNIX Timestamp) | + | ios_app_version | String | + | ios_device | String | + | ios_app_device | String | + | ios_os_version | String | + | ios_app_name | String | + | ios_sdk_version | String | + | android_last_seen_at | Date (UNIX Timestamp) | + | android_app_version | String | + | android_device | String | + | android_app_name | String | + | andoid_sdk_version | String | + | segment_id | String | + | tag_id | String | + | custom_attributes.{attribute_name} | String | + + ### Accepted Operators + + {% admonition type="warning" name="Searching based on `created_at`" %} + You cannot use the `<=` or `>=` operators to search by `created_at`. + {% /admonition %} + + 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 must be in Array | + | NIN | All | Not In
Shortcut for `OR !` queries
Values must be in Array | + | > | Integer
Date (UNIX Timestamp) | Greater than | + | < | Integer
Date (UNIX Timestamp) | Lower than | + | ~ | String | Contains | + | !~ | String | Doesn't Contain | + | ^ | String | Starts With | + | $ | String | Ends With | + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: [] + total_count: 0 + pages: + type: pages + page: 1 + per_page: 5 + total_pages: 0 + schema: + "$ref": "#/components/schemas/contact_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: f0dc95f1-9e46-4e8d-8150-89365c2c5195 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/search_request" + examples: + successful: + summary: successful + value: + query: + operator: AND + value: + - field: created_at + operator: ">" + value: '1306054154' + pagination: + per_page: 5 + "/contacts": + get: + summary: List all contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Contacts + operationId: ListContacts + description: | + You can fetch a list of all contacts (ie. users or leads) in your workspace. + {% admonition type="info" name="Merged contacts" %} + Contacts that have been merged (via POST /contacts/merge) will not appear in list results. Only the target contact from the merge remains accessible. + {% /admonition %} + {% admonition type="warning" name="Pagination" %} + You can use pagination to limit the number of results returned. The default is `50` results per page. + See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#pagination-for-list-apis) for more details on how to use the `starting_after` param. + {% /admonition %} + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: [] + total_count: 0 + pages: + type: pages + page: 1 + per_page: 10 + total_pages: 0 + schema: + "$ref": "#/components/schemas/contact_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create contact + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Contacts + operationId: CreateContact + description: You can create a new contact (ie. user or lead). + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: contact + id: 6762f0dd1bb69f9f2193bb83 + workspace_id: this_is_an_id303_that_should_be_at_least_ + external_id: + role: user + email: joebloggs@intercom.io + phone: + name: + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537437 + updated_at: 1734537437 + signed_up_at: + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} + tags: + type: list + data: [] + url: "/contacts/6762f0dd1bb69f9f2193bb83/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f0dd1bb69f9f2193bb83/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f0dd1bb69f9f2193bb83/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0dd1bb69f9f2193bb83/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0dd1bb69f9f2193bb83/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: + schema: + allOf: + - "$ref": "#/components/schemas/contact" + properties: + enabled_push_messaging: + type: boolean + nullable: true + description: If the user has enabled push messaging. + example: true + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: ff2353d3-d3d6-4f20-8268-847869d01e73 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + oneOf: + - "$ref": "#/components/schemas/create_contact_request" + examples: + successful: + summary: successful + value: + email: joebloggs@intercom.io + "/contacts/find_by_external_id/{external_id}": + get: + summary: Get a contact by External ID + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: external_id + in: path + required: true + example: cdd29344-5e0c-4ef0-ac56-f9ba2979bc27 + description: The external ID of the user that you want to retrieve + schema: + type: string + tags: + - Contacts + operationId: ShowContactByExternalId + description: You can fetch the details of a single contact by external ID. Note + that this endpoint only supports users and not leads. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: contact + id: 6762f0df1bb69f9f2193bb84 + workspace_id: this_is_an_id307_that_should_be_at_least_ + external_id: '70' + role: user + email: joe@bloggs.com + phone: + name: Joe Bloggs + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537439 + updated_at: 1734537439 + signed_up_at: 1734537439 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} + tags: + type: list + data: [] + url: "/contacts/6762f0df1bb69f9f2193bb84/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f0df1bb69f9f2193bb84/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f0df1bb69f9f2193bb84/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0df1bb69f9f2193bb84/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0df1bb69f9f2193bb84/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: + schema: + allOf: + - "$ref": "#/components/schemas/contact" + properties: + enabled_push_messaging: + type: boolean + nullable: true + description: If the user has enabled push messaging. + example: true + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 1fb28be7-cda6-4029-b4da-447ef61cb61a + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/contacts/{contact_id}/archive": + post: + summary: Archive contact + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: contact_id + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + tags: + - Contacts + operationId: ArchiveContact + description: You can archive a single contact. + responses: + '200': + description: successful + content: + application/json: + schema: + "$ref": "#/components/schemas/contact_archived" + "/contacts/{contact_id}/unarchive": + post: + summary: Unarchive contact + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: contact_id + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + tags: + - Contacts + operationId: UnarchiveContact + description: You can unarchive a single contact. + responses: + '200': + description: successful + content: + application/json: + schema: + "$ref": "#/components/schemas/contact_unarchived" + "/contacts/{contact_id}/block": + post: + summary: Block contact + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: contact_id + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + tags: + - Contacts + operationId: BlockContact + description: Block a single contact.
**Note:** conversations of the contact will also be archived during the process.
More details in [FAQ How do I block Inbox spam?](https://www.intercom.com/help/en/articles/8838656-inbox-faqs) + responses: + '200': + description: successful + content: + application/json: + schema: + "$ref": "#/components/schemas/contact_blocked" + "/conversations/{conversation_id}/tags": + post: + summary: Add tag to a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + description: conversation_id + example: '64619700005694' + required: true + schema: + type: string + tags: + - Tags + - Conversations + operationId: attachTagToConversation + description: You can tag a specific conversation. This will return a tag object + for the tag that was added to the conversation. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: tag + id: '86' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' + schema: + "$ref": "#/components/schemas/tag" + '404': + description: Conversation not found + content: + application/json: + examples: + Conversation not found: + value: + type: error.list + request_id: c6e8c74f-a354-4dfd-a5be-6061d2d26341 + errors: + - code: not_found + message: Conversation not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 617bb25d-4dea-4a68-ae74-2fb8f4e87b39 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - id + - admin_id + properties: + id: + type: string + description: The unique identifier for the tag which is given by + Intercom + example: '7522907' + admin_id: + type: string + description: The unique identifier for the admin which is given + by Intercom. + example: '780' + examples: + successful: + summary: successful + value: + id: 86 + admin_id: 991267618 + conversation_not_found: + summary: Conversation not found + value: + id: 87 + admin_id: 991267620 + "/conversations/{conversation_id}/tags/{tag_id}": + delete: + summary: Remove tag from a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + description: conversation_id + example: '64619700005694' + required: true + schema: + type: string + - name: tag_id + in: path + description: tag_id + example: '7522907' + required: true + schema: + type: string + tags: + - Tags + - Conversations + operationId: detachTagFromConversation + description: You can remove tag from a specific conversation. This will return + a tag object for the tag that was removed from the conversation. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: tag + id: '89' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' + schema: + "$ref": "#/components/schemas/tag" + '404': + description: Tag not found + content: + application/json: + examples: + Conversation not found: + value: + type: error.list + request_id: 84db22c5-0fef-465a-a909-2643d8a22c69 + errors: + - code: not_found + message: Conversation not found + Tag not found: + value: + type: error.list + request_id: 1fe3e9ec-6a5b-4abc-b51c-a515f77d9577 + errors: + - code: tag_not_found + message: Tag not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: df73b7b4-2352-44fd-8d14-4ea8536ad138 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - admin_id + properties: + admin_id: + type: string + description: The unique identifier for the admin which is given + by Intercom. + example: '123' + examples: + successful: + summary: successful + value: + admin_id: 991267622 + conversation_not_found: + summary: Conversation not found + value: + admin_id: 991267624 + tag_not_found: + summary: Tag not found + value: + admin_id: 991267625 + "/conversations": + get: + summary: List all conversations + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: per_page + in: query + schema: + type: integer + default: 20 + maximum: 150 + required: false + description: How many results per page + - name: starting_after + in: query + required: false + description: String used to get the next page of conversations. + schema: + type: string + tags: + - Conversations + operationId: listConversations + description: | + 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. + {% admonition type="warning" name="Pagination" %} + You can use pagination to limit the number of results returned. The default is `20` results per page. + See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#pagination-for-list-apis) for more details on how to use the `starting_after` param. + {% /admonition %} + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: conversation.list + pages: + type: pages + page: 1 + per_page: 20 + total_pages: 1 + total_count: 1 + conversations: + - type: conversation + id: '471' + created_at: 1734537460 + updated_at: 1734537460 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918320' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267628' + name: Ciaran166 Lee + email: admin166@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f0f31bb69f9f2193bb8b + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + schema: + "$ref": "#/components/schemas/conversation_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b14d75ab-7d26-4191-b33f-77ca0a4d4ede + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 591a0c2f-78b3-41bb-bfa7-f1fae15107b9 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + post: + summary: Creates a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Conversations + operationId: createConversation + description: |+ + 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. + + {% admonition type="info" name="Sending for visitors" %} + 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. + {% /admonition %} + + This will return the Message model that has been created. + + responses: + '200': + description: conversation created + content: + application/json: + examples: + conversation created: + value: + type: user_message + id: '403918330' + created_at: 1734537501 + body: Hello there + message_type: inapp + conversation_id: '499' + schema: + allOf: + - "$ref": "#/components/schemas/message" + required: + - conversation_id + '404': + description: Contact Not Found + content: + application/json: + examples: + Contact Not Found: + value: + type: error.list + request_id: d7eb553e-74ae-4341-820b-5d38a94d4a99 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 68e42c33-8220-48ea-906f-75584c3ec440 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: dcf1b373-3e66-4026-a987-98c16f00a908 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_conversation_request" + examples: + conversation_created: + summary: conversation created + value: + from: + type: user + id: 6762f11b1bb69f9f2193bba3 + body: Hello there + contact_not_found: + summary: Contact Not Found + value: + from: + type: user + id: 123_doesnt_exist + body: Hello there + "/conversations/{conversation_id}": + get: + summary: Retrieve a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The id of the conversation to target + example: 123 + schema: + type: integer + - name: display_as + in: query + required: false + description: Set to plaintext to retrieve conversation messages in plain text. + example: plaintext + schema: + type: string + - name: include_translations + in: query + required: false + description: If set to true, conversation parts will be translated to the detected language of the conversation. + example: true + schema: + type: boolean + tags: + - Conversations + operationId: retrieveConversation + description: |2 + + You can fetch the details of a single conversation. + + This will return a single Conversation model with all its conversation parts. + + {% admonition type="warning" name="Hard limit of 500 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. + {% /admonition %} + + For AI agent conversation metadata, please note that you need to have the agent enabled in your workspace, which is a [paid feature](https://www.intercom.com/help/en/articles/8205718-fin-resolutions#h_97f8c2e671). + responses: + '200': + description: conversation found + content: + application/json: + examples: + conversation found: + value: + type: conversation + id: '503' + created_at: 1734537511 + updated_at: 1734537511 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918334' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267645' + name: Ciaran176 Lee + email: admin176@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1261bb69f9f2193bba7 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: + - type: tag + id: '123456' + name: Test tag + applied_at: 1663597223 + applied_by: + type: contact + id: '1a2b3c' + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: 1 + part_type: comment + body:

Okay!

+ created_at: 1663597223 + updated_at: 1663597260 + notified_at: 1663597260 + assigned_to: + type: contact + id: '1a2b3c' + author: + type: admin + id: '274' + name: Operator + email: operator+abcd1234@intercom.io + attachments: [] + external_id: 'abcd1234' + redacted: false + email_message_metadata: null + state: open + tags: + - type: tag + id: '123456' + name: Test tag + event_details: + app_package_code: null + - type: conversation_part + id: 2 + part_type: custom_action_started + body: + created_at: 1740141842 + updated_at: 1740141842 + notified_at: 1740141842 + assigned_to: + author: + type: admin + id: '274' + name: Jamie Oliver + email: jamie+abcd1234@intercom.io + attachments: [] + external_id: + redacted: false + email_message_metadata: null + state: open + tags: [] + event_details: + action: + name: Jira Create Issue + app_package_code: test-integration + - type: conversation_part + id: 3 + part_type: conversation_attribute_updated_by_admin + body: + created_at: 1740141851 + updated_at: 1740141851 + notified_at: 1740141851 + assigned_to: + author: + type: bot + id: '278' + name: Fin + email: operator+abcd1234@intercom.io + attachments: [] + external_id: + redacted: false + email_message_metadata: null + state: open + tags: [] + event_details: + attribute: + name: jira_issue_key + value: + name: PROJ-007 + app_package_code: null + - type: conversation_part + id: 4 + part_type: custom_action_finished + body: + created_at: 1740141857 + updated_at: 1740141857 + notified_at: 1740141857 + assigned_to: + author: + type: admin + id: '274' + name: Jamie Oliver + email: jamie+abcd1234@intercom.io + attachments: [] + external_id: + redacted: false + email_message_metadata: null + state: closed + tags: [] + event_details: + action: + name: Jira Create Issue + result: success + app_package_code: null + total_count: 4 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: 8c288c4f-b699-4209-9de4-064398f02785 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 1350c241-0f22-48ca-bab9-169080340870 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 8b3deed3-fd8b-43d6-b6a8-428c9e17aabb + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The id of the conversation to target + example: 123 + schema: + type: integer + - name: display_as + in: query + required: false + description: Set to plaintext to retrieve conversation messages in plain text. + example: plaintext + schema: + type: string + tags: + - Conversations + - Custom Object Instances + operationId: updateConversation + description: |2+ + + You can update an existing conversation. + + {% admonition type="info" name="Replying and other actions" %} + If you want to reply to a coveration or take an action such as assign, unassign, open, close or snooze, take a look at the reply and manage endpoints. + {% /admonition %} + + {% admonition type="info" %} + This endpoint handles both **conversation updates** and **custom object associations**. + + See _`update a conversation with an association to a custom object instance`_ in the request/response examples to see the custom object association format. + {% /admonition %} + + {% admonition type="danger" name="Breaking change: duplicate custom attribute names" %} + The `PUT /conversations/{id}` endpoint now returns a `400 INVALID_PARAMETER` error when the request includes `custom_attributes` and your workspace contains multiple non-archived conversation custom attributes with the same name. Previously, the update would silently apply to a non-deterministic attribute. To resolve, rename or archive the duplicate attribute in your workspace settings, then retry the request. + {% /admonition %} + + responses: + '200': + description: update a conversation with an association to a custom object + instance + content: + application/json: + examples: + conversation found: + value: + type: conversation + id: '507' + created_at: 1734537521 + updated_at: 1734537523 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918338' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267653' + name: Ciaran180 Lee + email: admin180@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1301bb69f9f2193bbab + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: true + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: + issue_type: Billing + priority: High + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '129' + part_type: conversation_attribute_updated_by_admin + body: + created_at: 1734537523 + updated_at: 1734537523 + notified_at: 1734537523 + assigned_to: + author: + id: '991267654' + type: bot + name: Fin + email: operator+this_is_an_id354_that_should_be_at_least_@intercom.io + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + - type: conversation_part + id: '130' + part_type: conversation_attribute_updated_by_admin + body: + created_at: 1734537523 + updated_at: 1734537523 + notified_at: 1734537523 + assigned_to: + author: + id: '991267654' + type: bot + name: Fin + email: operator+this_is_an_id354_that_should_be_at_least_@intercom.io + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 2 + update a conversation with an association to a custom object instance: + value: + type: conversation + id: '508' + created_at: 1734537525 + updated_at: 1734537525 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918339' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267659' + name: Ciaran185 Lee + email: admin185@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1341bb69f9f2193bbac + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: + order: + type: Order.list + instances: + - id: '21' + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + type: Order + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: [] + total_count: 0 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: de1be01d-a0d3-48a6-9ea6-9789931a6887 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: de63ddb2-c525-4ebf-ad38-82ed8b44c896 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 34072e07-6b70-4f59-96bf-3106a3563a24 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_conversation_request" + examples: + conversation_found: + summary: conversation found + value: + read: true + title: new conversation title + custom_attributes: + issue_type: Billing + priority: High + update_a_conversation_with_an_association_to_a_custom_object_instance: + summary: update a conversation with an association to a custom object + instance + value: + custom_attributes: + order: + - '21' + not_found: + summary: Not found + value: + read: true + title: new conversation title + custom_attributes: + issue_type: Billing + priority: High + delete: + summary: Delete a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + description: id + required: true + schema: + type: integer + tags: + - Conversations + operationId: deleteConversation + description: | + {% admonition type="warning" name="Irreversible operation" %} + Deleting a conversation is permanent and cannot be reversed. + {% /admonition %} + + Deleting a conversation permanently removes it from the inbox. All sensitive data is deleted, including admin and user replies, conversation attributes, uploads, and related content. The conversation will still appear in reporting, though some data may be incomplete due to the deletion. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '512' + object: conversation + deleted: true + schema: + "$ref": "#/components/schemas/conversation_deleted" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 7a80b950-b392-499f-85db-ea7c6c424d37 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + "/conversations/search": + post: + summary: Search conversations + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Conversations + operationId: searchConversations + description: | + 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. + {% admonition type="warning" name="Optimizing search queries" %} + 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](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#example-search-conversations-request) for more details on how to use the `starting_after` param. + {% /admonition %} + + ### Nesting & Limitations + + 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: + - There's a limit of max 2 nested filters + - There's a limit of max 15 filters for each AND or OR group + + ### Accepted Fields + + Most keys listed in the conversation model are 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"`). + The `source.body` field is unique as the search will not be performed against the entire value, but instead against every element of the value separately. For example, when searching for a conversation with a `"I need support"` body - the query should contain a `=` operator with the value `"support"` for such conversation to be returned. A query with a `=` operator and a `"need support"` value will not yield a result. + + | 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 | Integer | + | team_assignee_id | Integer | + | 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 | + + ### Accepted Operators + + 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 | + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: conversation.list + pages: + type: pages + page: 1 + per_page: 5 + total_pages: 1 + total_count: 1 + conversations: + - type: conversation + id: '515' + created_at: 1734537546 + updated_at: 1734537546 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918346' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267691' + name: Ciaran210 Lee + email: admin210@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f14a1bb69f9f2193bbb3 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + schema: + "$ref": "#/components/schemas/conversation_list" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/search_request" + examples: + successful: + summary: successful + value: + query: + operator: AND + value: + - field: created_at + operator: ">" + value: '1306054154' + pagination: + per_page: 5 + "/conversations/{conversation_id}/reply": + post: + summary: Reply to a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The Intercom provisioned identifier for the conversation or the + string "last" to reply to the last part of the conversation + example: 123 or "last" + schema: + type: string + tags: + - Conversations + operationId: replyConversation + description: |- + You can reply to a conversation with a message from an admin or on behalf of a contact, or with a note for admins. + + {% admonition type="warning" name="Bot replies to inbound email" %} + By default, bot or Operator replies to an inbound email conversation aren't sent to your customer. The reply is stored as an unnotifiable bot comment, and no `seen` receipt is generated until an email is actually delivered. + + To send these replies as outbound emails, reach out to your accounts team to enable the email-reply feature flag for your workspace. + {% /admonition %} + responses: + '200': + description: User last conversation reply + content: + application/json: + examples: + User reply: + value: + type: conversation + id: '524' + created_at: 1734537559 + updated_at: 1734537561 + waiting_since: 1734537561 + snoozed_until: + source: + type: conversation + id: '403918349' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267694' + name: Ciaran212 Lee + email: admin212@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1571bb69f9f2193bbbb + external_id: '70' + first_contact_reply: + created_at: 1734537561 + type: conversation + url: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: false + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '132' + part_type: open + body: "

Thanks again :)

" + created_at: 1734537561 + updated_at: 1734537561 + notified_at: 1734537561 + assigned_to: + author: + id: 6762f1571bb69f9f2193bbbb + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Admin Reply with a Note: + value: + type: conversation + id: '525' + created_at: 1734537563 + updated_at: 1734537565 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918350' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267696' + name: Ciaran213 Lee + email: admin213@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f15b1bb69f9f2193bbbc + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '133' + part_type: note + body: |- +

An Unordered HTML List

+
    +
  • Coffee
  • +
  • Tea
  • +
  • Milk
  • +
+

An Ordered HTML List

+
    +
  1. Coffee
  2. +
  3. Tea
  4. +
  5. Milk
  6. +
+ created_at: 1734537565 + updated_at: 1734537565 + notified_at: 1734537565 + assigned_to: + author: + id: '991267696' + type: admin + name: Ciaran213 Lee + email: admin213@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Admin Reply to send Quick Reply Options: + value: + type: conversation + id: '526' + created_at: 1734537567 + updated_at: 1734537568 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918351' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267698' + name: Ciaran214 Lee + email: admin214@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f15e1bb69f9f2193bbbd + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '134' + part_type: quick_reply + body: + created_at: 1734537568 + updated_at: 1734537568 + notified_at: 1734537568 + assigned_to: + author: + id: '991267698' + type: admin + name: Ciaran214 Lee + email: admin214@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + User last conversation reply: + value: + type: conversation + id: '527' + created_at: 1734537571 + updated_at: 1734537572 + waiting_since: 1734537572 + snoozed_until: + source: + type: conversation + id: '403918352' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267700' + name: Ciaran215 Lee + email: admin215@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1621bb69f9f2193bbbe + external_id: '70' + first_contact_reply: + created_at: 1734537572 + type: conversation + url: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: false + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '135' + part_type: open + body: "

Thanks again :)

" + created_at: 1734537572 + updated_at: 1734537572 + notified_at: 1734537572 + assigned_to: + author: + id: 6762f1621bb69f9f2193bbbe + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: '06234918-c245-4caa-a2cc-90247983c6ff' + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 50f1e8d1-cf1a-450c-a7b5-87a264076241 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 48ad16d0-525c-40bf-b733-89239feb70e3 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/reply_conversation_request" + examples: + user_reply: + summary: User reply + value: + message_type: comment + type: user + intercom_user_id: 6762f1571bb69f9f2193bbbb + body: Thanks again :) + admin_note_reply: + summary: Admin Reply with a Note + value: + message_type: note + type: admin + admin_id: 991267696 + body: "

An Unordered HTML List

  • Coffee
  • + \
  • Tea
  • Milk

An Ordered HTML List

+ \
  1. Coffee
  2. Tea
  3. Milk
+ \ " + admin_quick_reply_reply: + summary: Admin Reply to send Quick Reply Options + value: + message_type: quick_reply + type: admin + admin_id: 991267698 + reply_options: + - text: 'Yes' + uuid: a5e1c524-5ddd-4c3e-9328-6bca5d6e3edb + - text: 'No' + uuid: f4a98af1-be56-4948-a57e-e1a83f8484c6 + contact_quick_reply_reply: + summary: User reply with quick reply selection + value: + message_type: quick_reply + type: user + intercom_user_id: 6762f1621bb69f9f2193bbbe + reply_options: + - text: 'Yes' + uuid: a5e1c524-5ddd-4c3e-9328-6bca5d6e3edb + user_last_conversation_reply: + summary: User last conversation reply + value: + message_type: comment + type: user + intercom_user_id: 6762f1661bb69f9f2193bbbf + body: Thanks again :) + "/conversations/{conversation_id}/parts": + post: + summary: Manage a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The identifier for the conversation as given by Intercom. + example: '123' + schema: + type: string + tags: + - Conversations + operationId: manageConversation + description: | + For managing conversations you can: + - Close a conversation + - Snooze a conversation to reopen on a future date + - Open a conversation which is `snoozed` or `closed` + - Assign a conversation to an admin and/or team. + responses: + '200': + description: Assign a conversation + content: + application/json: + examples: + Close a conversation: + value: + type: conversation + id: '531' + created_at: 1734537582 + updated_at: 1734537584 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918356' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267708' + name: Ciaran219 Lee + email: admin219@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f16e1bb69f9f2193bbc2 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '136' + part_type: close + body: "

Goodbye :)

" + created_at: 1734537584 + updated_at: 1734537584 + notified_at: 1734537584 + assigned_to: + author: + id: '991267708' + type: admin + name: Ciaran219 Lee + email: admin219@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Snooze a conversation: + value: + type: conversation + id: '532' + created_at: 1734537586 + updated_at: 1734537587 + waiting_since: + snoozed_until: 1734541187 + source: + type: conversation + id: '403918357' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267710' + name: Ciaran220 Lee + email: admin220@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1711bb69f9f2193bbc3 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: snoozed + read: false + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '137' + part_type: snoozed + body: + created_at: 1734537587 + updated_at: 1734537587 + notified_at: 1734537587 + assigned_to: + author: + id: '991267710' + type: admin + name: Ciaran220 Lee + email: admin220@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Open a conversation: + value: + type: conversation + id: '537' + created_at: 1734537587 + updated_at: 1734537601 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918358' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267712' + name: Ciaran221 Lee + email: admin221@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1781bb69f9f2193bbc8 + external_id: '74' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: true + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: '' + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '139' + part_type: open + body: + created_at: 1734537601 + updated_at: 1734537601 + notified_at: 1734537601 + assigned_to: + author: + id: '991267712' + type: admin + name: Ciaran221 Lee + email: admin221@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Assign a conversation: + value: + type: conversation + id: '542' + created_at: 1734537603 + updated_at: 1734537605 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918361' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267715' + name: Ciaran223 Lee + email: admin223@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1831bb69f9f2193bbcc + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: false + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '140' + part_type: assign_and_reopen + body: + created_at: 1734537605 + updated_at: 1734537605 + notified_at: 1734537605 + assigned_to: + type: admin + id: '991267715' + author: + id: '991267715' + type: admin + name: Ciaran223 Lee + email: admin223@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: e056b3c3-fae3-4a3c-9bcf-836b84efa331 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 623bbbb8-f6fb-45f3-a2e2-4106ff3a4349 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: a57737d0-63a7-42bd-aa65-8380ef828124 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + oneOf: + - "$ref": "#/components/schemas/close_conversation_request" + - "$ref": "#/components/schemas/snooze_conversation_request" + - "$ref": "#/components/schemas/open_conversation_request" + - "$ref": "#/components/schemas/assign_conversation_request" + examples: + close_a_conversation: + summary: Close a conversation + value: + message_type: close + type: admin + admin_id: 991267708 + body: Goodbye :) + snooze_a_conversation: + summary: Snooze a conversation + value: + message_type: snoozed + admin_id: 991267710 + snoozed_until: 1734541187 + open_a_conversation: + summary: Open a conversation + value: + message_type: open + admin_id: 991267712 + assign_a_conversation: + summary: Assign a conversation + value: + message_type: assignment + type: admin + admin_id: 991267715 + assignee_id: 991267715 + not_found: + summary: Not found + value: + message_type: close + type: admin + admin_id: 991267717 + body: Goodbye :) + "/conversations/{conversation_id}/customers": + post: + summary: Attach a contact to a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The identifier for the conversation as given by Intercom. + example: '123' + schema: + type: string + tags: + - Conversations + operationId: attachContactToConversation + description: |+ + You can add participants who are contacts to a conversation, on behalf of either another contact or an admin. + + {% admonition type="warning" name="Contacts without an email" %} + 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`. + {% /admonition %} + + responses: + '200': + description: Attach a contact to a conversation + content: + application/json: + examples: + Attach a contact to a conversation: + value: + customers: + - type: user + id: 6762f19b1bb69f9f2193bbd4 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: 86fd8b2e-7048-4fbd-9fb0-d73085d7210b + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 9dc7c1a0-b818-472c-adf6-3e327f22f541 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 99f72599-ac98-4b1e-af96-808654b6383e + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/attach_contact_to_conversation_request" + examples: + attach_a_contact_to_a_conversation: + summary: Attach a contact to a conversation + value: + admin_id: 991267731 + customer: + intercom_user_id: 6762f19b1bb69f9f2193bbd4 + not_found: + summary: Not found + value: + admin_id: 991267733 + customer: + intercom_user_id: 6762f19e1bb69f9f2193bbd5 + "/conversations/{conversation_id}/customers/{contact_id}": + delete: + summary: Detach a contact from a group conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The identifier for the conversation as given by Intercom. + example: '123' + schema: + type: string + - name: contact_id + in: path + required: true + description: The identifier for the contact as given by Intercom. + example: '123' + schema: + type: string + tags: + - Conversations + operationId: detachContactFromConversation + description: |+ + You can remove participants who are contacts from a group conversation, on behalf of an admin. + + {% admonition type="warning" name="Removing the last participant" %} + You cannot remove the last remaining contact from a conversation. + {% /admonition %} + + responses: + '200': + description: Detach a contact from a group conversation + content: + application/json: + examples: + Detach a contact from a group conversation: + value: + customers: + - type: user + id: 6762f1b41bb69f9f2193bbe0 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Contact not found + content: + application/json: + examples: + Conversation not found: + value: + type: error.list + request_id: 89835b60-6756-4d2a-b148-26ca0cb49f9f + errors: + - code: not_found + message: Resource Not Found + Contact not found: + value: + type: error.list + request_id: ab1b9371-3185-417f-a53a-dcae35892980 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + '422': + description: Last customer + content: + application/json: + examples: + Last customer: + value: + type: error.list + request_id: 8275e92f-66b7-40f9-82a8-9647ca8d7eb4 + errors: + - code: parameter_invalid + message: Removing the last customer is not allowed + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 89ef64b2-d1f9-40c3-89e9-d39175d3d647 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 6fe4106b-967a-46ba-b1c9-9996aff6e8c3 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/detach_contact_from_conversation_request" + examples: + detach_a_contact_from_a_group_conversation: + summary: Detach a contact from a group conversation + value: + admin_id: 991267739 + customer: + intercom_user_id: 6762f1a61bb69f9f2193bbd8 + conversation_not_found: + summary: Conversation not found + value: + admin_id: 991267742 + customer: + intercom_user_id: 6762f1b61bb69f9f2193bbe1 + contact_not_found: + summary: Contact not found + value: + admin_id: 991267745 + customer: + intercom_user_id: 6762f1c41bb69f9f2193bbe9 + last_customer: + summary: Last customer + value: + admin_id: 991267748 + customer: + intercom_user_id: 6762f1d11bb69f9f2193bbf1 + "/conversations/{id}/handling_events": + get: + summary: List handling events + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The identifier for the conversation as given by Intercom. + example: '123' + schema: + type: string + tags: + - Conversations + operationId: listHandlingEvents + description: | + List all pause/resume events for a conversation. These events track when teammates paused or resumed handling a conversation. + + Requires the `read_conversations` OAuth scope. + responses: + '200': + description: Successful response + content: + application/json: + schema: + "$ref": "#/components/schemas/handling_event_list" + examples: + Successful response: + value: + handling_events: + - teammate: + type: admin + id: 123 + name: Jane Example + email: jane@example.com + type: paused + timestamp: "2026-01-09T09:00:00Z" + reason: Paused + - teammate: + type: admin + id: 123 + name: Jane Example + email: jane@example.com + type: resumed + timestamp: "2026-01-09T09:10:00Z" + '401': + description: Unauthorized + content: + application/json: + schema: + "$ref": "#/components/schemas/error" + '404': + description: Conversation not found + content: + application/json: + schema: + "$ref": "#/components/schemas/error" + "/conversations/redact": + post: + summary: Redact a conversation part + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Conversations + operationId: redactConversation + description: |+ + You can redact a conversation part or the source message of a conversation (as seen in the source object). + + {% admonition type="info" name="Redacting parts and messages" %} + 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. + {% /admonition %} + + responses: + '200': + description: Redact a conversation part + content: + application/json: + examples: + Redact a conversation part: + value: + type: conversation + id: '608' + created_at: 1734537721 + updated_at: 1734537724 + waiting_since: 1734537722 + snoozed_until: + source: + type: conversation + id: '403918391' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267757' + name: Ciaran247 Lee + email: admin247@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1f81bb69f9f2193bc09 + external_id: '70' + first_contact_reply: + created_at: 1734537722 + type: conversation + url: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: true + tags: + type: tag.list + tags: [] + priority: not_priority + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '149' + part_type: open + body: "

This message was deleted

" + created_at: 1734537722 + updated_at: 1734537724 + notified_at: 1734537722 + assigned_to: + author: + id: 6762f1f81bb69f9f2193bc09 + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + external_id: + redacted: true + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: 5b7bb755-4031-4bfe-8897-54d0f1872bbc + errors: + - code: conversation_part_or_message_not_found + message: Conversation part or message not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 4814668f-5d31-4bf7-8f66-b426aac054db + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/redact_conversation_request" + examples: + redact_a_conversation_part: + summary: Redact a conversation part + value: + type: conversation_part + conversation_id: 608 + conversation_part_id: 149 + not_found: + summary: Not found + value: + type: conversation_part + conversation_id: really_123_doesnt_exist + conversation_part_id: really_123_doesnt_exist + "/conversations/{conversation_id}/convert": + post: + summary: Convert a conversation to a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The id of the conversation to target + example: 123 + schema: + type: integer + tags: + - Conversations + description: You can convert a conversation to a ticket. + operationId: convertConversationToTicket + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: ticket + id: '611' + ticket_id: '22' + ticket_attributes: {} + ticket_state: + type: ticket_state + id: '7493' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_type: + type: ticket_type + id: '53' + name: my-ticket-type-1 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id442_that_should_be_at_least_ + archived: false + created_at: 1734537737 + updated_at: 1734537737 + is_internal: false + ticket_type_attributes: + type: list + data: [] + category: Customer + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f2041bb69f9f2193bc0c + external_id: '70' + admin_assignee_id: '0' + team_assignee_id: '0' + created_at: 1734537732 + updated_at: 1734537737 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '151' + part_type: comment + body: "

Comment for message

" + created_at: 1734537732 + updated_at: 1734537732 + author: + id: 6762f2041bb69f9f2193bc0c + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + redacted: false + app_package_code: test-integration + - type: ticket_part + id: '152' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537737 + updated_at: 1734537737 + author: + id: '991267767' + type: bot + name: Fin + email: operator+this_is_an_id442_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + app_package_code: test-integration + total_count: 2 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Customer + is_shared: true + schema: + "$ref": "#/components/schemas/ticket" + '400': + description: Bad request + content: + application/json: + examples: + Bad request: + value: + type: error.list + request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 + errors: + - code: parameter_invalid + message: Ticket type is not a customer ticket type + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/convert_conversation_to_ticket_request" + examples: + successful: + summary: successful + value: + ticket_type_id: '53' + bad_request: + summary: Bad request + value: + ticket_type_id: '54' + "/custom_object_instances/{custom_object_type_identifier}": + parameters: + - name: custom_object_type_identifier + in: path + description: The unique identifier of the custom object type that defines the + structure of the custom object instance. + example: Order + required: true + schema: + type: string + post: + summary: Create or Update a Custom Object Instance + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: createCustomObjectInstances + description: Create or update a custom object instance + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '22' + type: Order + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + created_at: 1734537745 + updated_at: 1734537745 + schema: + "$ref": "#/components/schemas/custom_object_instance" + '401': + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/TypeNotFound" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_or_update_custom_object_instance_request" + examples: + successful: + summary: successful + value: + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + get: + summary: Get Custom Object Instance by External ID + parameters: + - name: external_id + in: query + style: form + required: true + schema: + type: string + description: The unique identifier for the instance in the external system + it originated from. + title: Find by external_id + properties: + external_id: + type: string + required: + - external_id + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: getCustomObjectInstancesByExternalId + description: Fetch a Custom Object Instance by external_id. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '24' + type: Order + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + external_id: '123' + external_created_at: + external_updated_at: + created_at: 1734537748 + updated_at: 1734537748 + schema: + "$ref": "#/components/schemas/custom_object_instance" + '401': + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/ObjectNotFound" + delete: + summary: Delete a Custom Object Instance by External ID + parameters: + - name: external_id + in: query + style: form + required: true + schema: + type: string + description: The unique identifier for the instance in the external system + it originated from. + title: Find by external_id + properties: + external_id: + type: string + required: + - external_id + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: deleteCustomObjectInstancesById + description: Delete a single Custom Object instance by external_id. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '26' + object: Order + deleted: true + schema: + "$ref": "#/components/schemas/custom_object_instance_deleted" + '401': + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/ObjectNotFound" + "/custom_object_instances/{custom_object_type_identifier}/{custom_object_instance_id}": + parameters: + - name: custom_object_type_identifier + in: path + description: The unique identifier of the custom object type that defines the + structure of the custom object instance. + example: Order + required: true + schema: + type: string + get: + summary: Get Custom Object Instance by ID + parameters: + - name: custom_object_instance_id + in: path + description: The id or external_id of the custom object instance + required: true + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: getCustomObjectInstancesById + description: Fetch a Custom Object Instance by id. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '25' + type: Order + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + external_id: '123' + external_created_at: + external_updated_at: + created_at: 1734537750 + updated_at: 1734537750 + schema: + "$ref": "#/components/schemas/custom_object_instance" + '401': + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/ObjectNotFound" + delete: + summary: Delete a Custom Object Instance by ID + parameters: + - name: custom_object_instance_id + in: path + description: The Intercom defined id of the custom object instance + required: true + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: deleteCustomObjectInstancesByExternalId + description: Delete a single Custom Object instance using the Intercom defined + id. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '26' + object: Order + deleted: true + schema: + "$ref": "#/components/schemas/custom_object_instance_deleted" + '401': + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/ObjectNotFound" + "/data_attributes": + get: + summary: List all data attributes + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: model + in: query + required: false + description: Specify the data attribute model to return. + schema: + type: string + enum: + - contact + - company + - conversation + example: company + - name: include_archived + in: query + required: false + description: Include archived attributes in the list. By default we return + only non archived data attributes. + example: false + schema: + type: boolean + tags: + - Data Attributes + operationId: lisDataAttributes + description: You can fetch a list of all data attributes belonging to a workspace + for contacts, companies or conversations. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: list + data: + - type: data_attribute + name: name + full_name: name + label: Company name + description: The name of a company + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: company_id + full_name: company_id + label: Company ID + description: A number identifying a company + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: last_request_at + full_name: last_request_at + label: Company last seen + description: The last day anyone from a company visited your + site or app + data_type: date + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: remote_created_at + full_name: remote_created_at + label: Company created at + description: The day a company was added to Intercom + data_type: date + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: user_count + full_name: user_count + label: People + description: The number of people in a company + data_type: integer + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: session_count + full_name: session_count + label: Company web sessions + description: All visits from anyone in a company to your product's + site or app + data_type: integer + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: name + full_name: plan.name + label: Plan + description: A specific plan or level within your product that + companies have signed up to + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: monthly_spend + full_name: monthly_spend + label: Monthly Spend + description: The monthly revenue you receive from a company + data_type: float + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: size + full_name: size + label: Company size + description: The number of people employed in this company, + expressed as a single number + data_type: integer + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: industry + full_name: industry + label: Company industry + description: The category or domain this company belongs to + e.g. 'ecommerce' or 'SaaS' + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: website + full_name: website + label: Company website + description: The web address for the company's primary marketing + site + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - id: 34 + type: data_attribute + name: The One Ring + full_name: custom_attributes.The One Ring + label: The One Ring + description: One ring to rule them all, one ring to find them, + One ring to bring them all and in the darkness bind them. + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: true + archived: false + admin_id: '991267784' + created_at: 1734537753 + updated_at: 1734537753 + model: company + - type: data_attribute + name: id + full_name: id + label: ID + description: The Intercom defined id representing the company + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: created_at + full_name: created_at + label: Created at + description: The time the company was added to Intercom + data_type: date + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: updated_at + full_name: updated_at + label: Updated at + description: The last time the company was updated + data_type: date + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: id + full_name: plan.id + label: Plan ID + description: The Intercom defined id representing the plan + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: app_id + full_name: app_id + label: App ID + description: The Intercom defined id representing the app + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + schema: + "$ref": "#/components/schemas/data_attribute_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 6d231766-b44b-4e78-bc9e-9c268ff19671 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create a data attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Data Attributes + operationId: createDataAttribute + description: You can create a data attributes for a `contact` or a `company`. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + id: 37 + type: data_attribute + name: Mithril Shirt + full_name: custom_attributes.Mithril Shirt + label: Mithril Shirt + data_type: string + api_writable: true + ui_writable: false + messenger_writable: false + custom: true + archived: false + admin_id: '991267786' + created_at: 1734537756 + updated_at: 1734537756 + model: company + schema: + "$ref": "#/components/schemas/data_attribute" + '400': + description: Too few options for list + content: + application/json: + examples: + Same name already exists: + value: + type: error.list + request_id: da2a7037-11f4-4fcc-8d19-27da3b3a4336 + errors: + - code: parameter_invalid + message: You already have 'The One Ring' in your company data. + To save this as new people data, use a different name. + Invalid name: + value: + type: error.list + request_id: 1c45cfd9-ffd1-4e3e-9f7a-2ac99abdf03d + errors: + - code: parameter_invalid + message: Your name for this attribute must only contain alphanumeric + characters, currency symbols, and hyphens + Attribute already exists: + value: + type: error.list + request_id: 55999605-a170-4894-a3d0-090c4fee8d11 + errors: + - code: parameter_invalid + message: You already have 'The One Ring' in your company data. + To save this as new company data, use a different name. + Invalid Data Type: + value: + type: error.list + request_id: e0a9ccc7-a540-4ef0-8ffc-28ab86658b04 + errors: + - code: parameter_invalid + message: Data Type isn't an option + Too few options for list: + value: + type: error.list + request_id: 6544ccf8-435d-49e1-91ed-e49356f14255 + errors: + - code: parameter_invalid + message: The Data Attribute model field must be either contact + or company + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: fa71b91c-4a25-4fe6-88a9-884f6950860e + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_data_attribute_request" + examples: + successful: + summary: Successful + value: + name: Mithril Shirt + model: company + data_type: string + same_name_already_exists: + summary: Same name already exists + value: + name: The One Ring + model: contact + data_type: integer + invalid_name: + summary: Invalid name + value: + name: "!nv@l!d n@me" + model: company + data_type: string + attribute_already_exists: + summary: Attribute already exists + value: + name: The One Ring + model: company + data_type: string + invalid_data_type: + summary: Invalid Data Type + value: + name: The Second Ring + model: company + data_type: mithril + too_few_options_for_list: + summary: Too few options for list + value: + description: Just a plain old ring + options: + - value: 1-10 + archived: false + "/data_attributes/{data_attribute_id}": + put: + summary: Update a data attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: data_attribute_id + in: path + required: true + description: The data attribute id + example: 1 + schema: + type: integer + tags: + - Data Attributes + operationId: updateDataAttribute + description: "\nYou can update a data attribute.\n\n> \U0001F6A7 Updating the + data type is not possible\n>\n> It is currently a dangerous action to execute + changing a data attribute's type via the API. You will need to update the + type via the UI instead.\n" + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + id: 44 + type: data_attribute + name: The One Ring + full_name: custom_attributes.The One Ring + label: The One Ring + description: Just a plain old ring + data_type: string + options: + - 1-10 + - 11-20 + api_writable: true + ui_writable: false + messenger_writable: true + custom: true + archived: false + admin_id: '991267793' + created_at: 1734537762 + updated_at: 1734537763 + model: company + schema: + "$ref": "#/components/schemas/data_attribute" + '400': + description: Too few options in list + content: + application/json: + examples: + Too few options in list: + value: + type: error.list + request_id: 37cff4c5-5e1a-4958-a2ba-149b09d1915c + errors: + - code: parameter_invalid + message: Options isn't an array + schema: + "$ref": "#/components/schemas/error" + '404': + description: Attribute Not Found + content: + application/json: + examples: + Attribute Not Found: + value: + type: error.list + request_id: eee16d31-0b0a-4b5f-b95a-25d37528c80f + errors: + - code: field_not_found + message: We couldn't find that data attribute to update + schema: + "$ref": "#/components/schemas/error" + '422': + description: Has Dependant Object + content: + application/json: + examples: + Has Dependant Object: + value: + type: error.list + request_id: f04b6b14-1c5b-46e1-9c95-4a914557062c + errors: + - code: data_invalid + message: The Data Attribute you are trying to archive has a + dependant object + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c60ce63d-1c74-4fe2-8e21-31d1f817a0c2 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_data_attribute_request" + examples: + successful: + summary: Successful + value: + description: Just a plain old ring + options: + - value: 1-10 + - value: 11-20 + archived: false + too_few_options_in_list: + summary: Too few options in list + value: + description: Too few options + options: + value: 1-10 + archived: false + attribute_not_found: + summary: Attribute Not Found + value: + description: Just a plain old ring + options: + - value: 1-10 + - value: 11-20 + archived: false + has_dependant_object: + summary: Has Dependant Object + value: + description: Trying to archieve + archived: true + "/events": + post: + summary: Submit a data event + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Data Events + operationId: createDataEvent + description: |2+ + + You will need an Access Token that has write permissions to send Events. Once you have a key you can submit events via POST to the Events resource, which is located at https://api.intercom.io/events, or you can send events using one of the client libraries. When working with the HTTP API directly a client should send the event with a `Content-Type` of `application/json`. + + When using the JavaScript API, [adding the code to your app](http://docs.intercom.io/configuring-Intercom/tracking-user-events-in-your-app) makes the Events API available. Once added, you can submit an event using the `trackEvent` method. This will associate the event with the Lead or currently logged-in user or logged-out visitor/lead and send it to Intercom. The final parameter is a map that can be used to send optional metadata about the event. + + With the Ruby client you pass a hash describing the event to `Intercom::Event.create`, or call the `track_user` method directly on the current user object (e.g. `user.track_event`). + + **NB: For the JSON object types, please note that we do not currently support nested JSON structure.** + + | Type | Description | Example | + | :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------- | + | String | The value is a JSON String | `"source":"desktop"` | + | Number | The value is a JSON Number | `"load": 3.67` | + | Date | The key ends with the String `_date` and the value is a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time), assumed to be in the [UTC](http://en.wikipedia.org/wiki/Coordinated_Universal_Time) timezone. | `"contact_date": 1392036272` | + | Link | The value is a HTTP or HTTPS URI. | `"article": "https://example.org/ab1de.html"` | + | Rich Link | The value is a JSON object that contains `url` and `value` keys. | `"article": {"url": "https://example.org/ab1de.html", "value":"the dude abides"}` | + | Monetary Amount | The value is a JSON object that contains `amount` and `currency` keys. The `amount` key is a positive integer representing the amount in cents. The price in the example to the right denotes €349.99. | `"price": {"amount": 34999, "currency": "eur"}` | + + **Lead Events** + + When submitting events for Leads, you will need to specify the Lead's `id`. + + **Metadata behaviour** + + - We currently limit the number of tracked metadata keys to 10 per event. Once the quota is reached, we ignore any further keys we receive. The first 10 metadata keys are determined by the order in which they are sent in with the event. + - It is not possible to change the metadata keys once the event has been sent. A new event will need to be created with the new keys and you can archive the old one. + - There might be up to 24 hrs delay when you send a new metadata for an existing event. + + **Event de-duplication** + + The API may detect and ignore duplicate events. Each event is uniquely identified as a combination of the following data - the Workspace identifier, the Contact external identifier, the Data Event name and the Data Event created time. As a result, it is **strongly recommended** to send a second granularity Unix timestamp in the `created_at` field. + + Duplicated events are responded to using the normal `202 Accepted` code - an error is not thrown, however repeat requests will be counted against any rate limit that is in place. + + ### HTTP API Responses + + - Successful responses to submitted events return `202 Accepted` with an empty body. + - Unauthorised access will be rejected with a `401 Unauthorized` or `403 Forbidden` response code. + - Events sent about users that cannot be found will return a `404 Not Found`. + - Event lists containing duplicate events will have those duplicates ignored. + - Server errors will return a `500` response code and may contain an error message in the body. + + responses: + '202': + description: successful + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 212c8206-e7a6-44c8-8f27-5f0ad7f1d243 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_data_event_request" + get: + summary: List all data events + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - in: query + name: filter + required: true + style: form + explode: true + schema: + type: object + oneOf: + - title: user_id query parameter + properties: + user_id: + type: string + required: + - user_id + additionalProperties: false + - title: intercom_user_id query parameter + properties: + intercom_user_id: + type: string + required: + - intercom_user_id + additionalProperties: false + - title: email query parameter + properties: + email: + type: string + required: + - email + additionalProperties: false + - name: type + in: query + required: true + description: The value must be user + schema: + type: string + - name: summary + in: query + required: false + description: summary flag + schema: + type: boolean + tags: + - Data Events + operationId: lisDataEvents + description: "\n> \U0001F6A7\n>\n> Please note that you can only 'list' events + that are less than 90 days old. Event counts and summaries will still include + your events older than 90 days but you cannot 'list' these events individually + if they are older than 90 days\n\nThe events belonging to a customer can be + listed by sending a GET request to `https://api.intercom.io/events` with a + user or lead identifier along with a `type` parameter. The identifier parameter + can be one of `user_id`, `email` or `intercom_user_id`. The `type` parameter + value must be `user`.\n\n- `https://api.intercom.io/events?type=user&user_id={user_id}`\n- + `https://api.intercom.io/events?type=user&email={email}`\n- `https://api.intercom.io/events?type=user&intercom_user_id={id}` + (this call can be used to list leads)\n\nThe `email` parameter value should + be [url encoded](http://en.wikipedia.org/wiki/Percent-encoding) when sending.\n\nYou + can optionally define the result page size as well with the `per_page` parameter.\n" + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: event.summary + events: [] + pages: + next: http://api.intercom.test/events?next page + email: user26@email.com + intercom_user_id: 6762f22b1bb69f9f2193bc12 + user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 + schema: + "$ref": "#/components/schemas/data_event_summary" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e6f50446-be4a-40ac-8c8d-6fb91e1040fd + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/events/summaries": + post: + summary: Create event summaries + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Data Events + operationId: dataEventSummaries + description: "Create event summaries for a user. Event summaries are used to + track the number of times an event has occurred, the first time it occurred + and the last time it occurred.\n\n" + responses: + '200': + description: successful + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 7a7d8425-2c1b-46ab-8133-c043fc1e5711 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_data_event_summaries_request" + "/export/content/data": + post: + summary: Create content data export + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Data Export + operationId: createDataExport + description: "To create your export job, you need to send a `POST` request to + the export endpoint `https://api.intercom.io/export/content/data`.\n\nThis + endpoint exports **message delivery and engagement data** for outbound content + (Emails, Posts, Custom Bots, Surveys, Tours, Series, and more). The exported + data includes who received each message, when they received it, and how they + engaged with it (opens, clicks, replies, completions, dismissals, unsubscribes, + and bounces). It does not export raw message or conversation content.\n\nThe + only parameters you need to provide are the range of dates that you want exported.\n\n>\U0001F6A7 + Limit of one active job\n>\n> You can only have one active job per workspace. + You will receive a HTTP status code of 429 with the message Exceeded rate + limit of 1 pending message data export jobs if you attempt to create a second + concurrent job.\n\n>❗️ Updated_at not included\n>\n> It should be noted that + the timeframe only includes messages sent during the time period and not messages + that were only updated during this period. For example, if a message was updated + yesterday but sent two days ago, you would need to set the created_at_after + date before the message was sent to include that in your retrieval job.\n\n>\U0001F4D8 + Date ranges are inclusive\n>\n> Requesting data for 2018-06-01 until 2018-06-30 + will get all data for those days including those specified - e.g. 2018-06-01 + 00:00:00 until 2018-06-30 23:59:99.\n" + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + job_identifier: al9w983lwu88w1fd + status: pending + download_url: '' + download_expires_at: '' + schema: + "$ref": "#/components/schemas/data_export" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_data_exports_request" + examples: + successful: + summary: successful + value: + created_at_after: 1734519776 + created_at_before: 1734537776 + "/export/content/data/{job_identifier}": + get: + summary: Show content data export + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: job_identifier + in: path + description: job_identifier + required: true + schema: + type: string + tags: + - Data Export + operationId: getDataExport + description: "You can view the status of your job by sending a `GET` request + to the URL\n`https://api.intercom.io/export/content/data/{job_identifier}` + - the `{job_identifier}` is the value returned in the response when you first + created the export job. More on it can be seen in the Export Job Model.\n\n> + \U0001F6A7 Jobs expire after two days\n> All jobs that have completed processing + (and are thus available to download from the provided URL) will have an expiry + limit of two days from when the export ob completed. After this, the data + will no longer be available.\n" + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + job_identifier: braxwk3j039t6txy + status: pending + download_url: '' + download_expires_at: '' + schema: + "$ref": "#/components/schemas/data_export" + "/export/cancel/{job_identifier}": + post: + summary: Cancel content data export + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: job_identifier + in: path + description: job_identifier + required: true + schema: + type: string + tags: + - Data Export + operationId: cancelDataExport + description: You can cancel your job + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + job_identifier: v134nyc2bku9hj91 + status: canceled + download_url: '' + download_expires_at: '' + schema: + "$ref": "#/components/schemas/data_export" + "/download/content/data/{job_identifier}": + get: + summary: Download content data export + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: job_identifier + in: path + description: job_identifier + required: true + schema: + type: string + tags: + - Data Export + operationId: downloadDataExport + description: "When a job has a status of complete, and thus a filled download_url, + you can download your data by hitting that provided URL, formatted like so: + https://api.intercom.io/download/content/data/xyz1234.\n\nYour exported message + data will be streamed continuously back down to you in a gzipped CSV format.\n\n> + \U0001F4D8 Octet header required\n>\n> You will have to specify the header + Accept: `application/octet-stream` when hitting this endpoint.\n" + responses: + '200': + description: successful + "/jobs/status/{job_id}": + get: + summary: Retrieve job status + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: job_id + in: path + required: true + description: The unique identifier for the job which is given by Intercom + schema: + type: string + tags: + - Jobs + operationId: jobsStatus + description: Retrieve the status of job execution. + responses: + '200': + description: Job execution status + content: + application/json: + examples: + job status retrieved: + value: + type: job + id: '2' + status: success + resource_type: ticket + resource_id: '20' + resource_url: 'https://api.intercom.io/tickets/20' + schema: + "$ref": "#/components/schemas/jobs" + '404': + description: Job not found + content: + application/json: + examples: + Job not found: + value: + type: error.list + request_id: 123e4567-e89b-12d3-a456-426614174000 + errors: + - code: job_not_found + message: Job Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2c8a20ee-ed09-42c0-a31d-a1b4f5d2742d + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/messages": + post: + summary: Create a message + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Messages + operationId: createMessage + description: "You can create a message that has been initiated by an admin. + The conversation can be either an in-app message or an email.\n\n> \U0001F6A7 + Sending for visitors\n>\n> There can be a short delay between when a contact + is created and when a contact becomes available to be messaged through the + API. A 404 Not Found error will be returned in this case.\n\nThis will return + the Message model that has been created.\n\n> \U0001F6A7 Retrieving Associated + Conversations\n>\n> As this is a message, there will be no conversation present + until the contact responds. Once they do, you will have to search for a contact's + conversations with the id of the message.\n" + responses: + '200': + description: admin message created + content: + application/json: + examples: + user message created: + value: + type: user_message + id: '403918396' + created_at: 1734537780 + body: heyy + message_type: inapp + conversation_id: '613' + lead message created: + value: + type: user_message + id: '403918397' + created_at: 1734537783 + body: heyy + message_type: inapp + conversation_id: '614' + admin message created: + value: + type: admin_message + id: '19' + created_at: 1734537786 + subject: heyy + body: heyy + message_type: inapp + owner: + type: admin + id: '991267816' + name: Ciaran299 Lee + email: admin299@email.com + away_mode_enabled: false + away_mode_reassign: false + schema: + "$ref": "#/components/schemas/message" + '400': + description: No body supplied for email message + content: + application/json: + examples: + No body supplied for message: + value: + type: error.list + request_id: 3f3e74cc-65af-4408-9bf5-9e71b55c8166 + errors: + - code: parameter_invalid + message: Body is required + No body supplied for email message: + value: + type: error.list + request_id: 2d6abc61-1441-4860-9ef0-777852f8b24f + errors: + - code: parameter_invalid + message: Body is required + schema: + "$ref": "#/components/schemas/error" + '422': + description: No subject supplied for email message + content: + application/json: + examples: + No subject supplied for email message: + value: + type: error.list + request_id: 97db463e-7070-4ac9-9846-9a5d31933772 + errors: + - code: parameter_not_found + message: No subject supplied for email message + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2c8a20ee-ed09-42c0-a31d-a1b4f5d2742d + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 72b6821e-54ff-4a25-adf9-abdfef5fe72b + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_message_request" + examples: + user_message_created: + summary: user message created + value: + from: + type: user + id: 6762f2341bb69f9f2193bc17 + body: heyy + referer: https://twitter.com/bob + lead_message_created: + summary: lead message created + value: + from: + type: lead + id: 6762f2371bb69f9f2193bc18 + body: heyy + referer: https://twitter.com/bob + admin_message_created: + summary: admin message created + value: + from: + type: admin + id: '991267816' + to: + - type: user + id: 6762f2391bb69f9f2193bc19 + - type: lead + id: 6762f23c1bb69f9f2193bc1b + - type: user + id: 6762f23d1bb69f9f2193bc1c + cc: + - type: user + id: 6762f23e1bb69f9f2193bc1d + - type: user + id: 6762f23f1bb69f9f2193bc1e + bcc: + - type: user + id: 6762f23e1bb69f9f2193bc2f + message_type: conversation + body: heyy + no_body_supplied_for_message: + summary: No body supplied for message + value: + from: + type: admin + id: '991267818' + to: + type: user + id: 6762f23b1bb69f9f2193bc1a + message_type: inapp + body: + subject: heyy + no_subject_supplied_for_email_message: + summary: No subject supplied for email message + value: + from: + type: admin + id: '991267819' + to: + type: user + user_id: '70' + message_type: email + body: hey there + no_body_supplied_for_email_message: + summary: No body supplied for email message + value: + from: + type: admin + id: '991267820' + to: + type: user + id: 6762f23d1bb69f9f2193bc1c + message_type: email + body: + subject: heyy + "/news/news_items": + get: + summary: List all news items + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - News + operationId: listNewsItems + description: You can fetch a list of all news items + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + pages: + page: 1 + per_page: 10 + total_pages: 1 + type: pages + data: + - id: '29' + type: news-item + workspace_id: this_is_an_id530_that_should_be_at_least_ + title: We have news + body: "

Hello there,

" + sender_id: 991267825 + state: draft + labels: [] + cover_image_url: + reactions: + - + - + - + - + deliver_silently: false + created_at: 1734537793 + updated_at: 1734537793 + newsfeed_assignments: [] + - id: '30' + type: news-item + workspace_id: this_is_an_id530_that_should_be_at_least_ + title: We have news + body: "

Hello there,

" + sender_id: 991267827 + state: draft + labels: [] + cover_image_url: + reactions: + - + - + - + - + deliver_silently: false + created_at: 1734537793 + updated_at: 1734537793 + newsfeed_assignments: [] + total_count: 2 + schema: + "$ref": "#/components/schemas/paginated_response" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: d7997515-cd92-4fe4-966c-cb1f4bdda1d4 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create a news item + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - News + operationId: createNewsItem + description: You can create a news item + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '33' + type: news-item + workspace_id: this_is_an_id534_that_should_be_at_least_ + title: Halloween is here! + body: "

New costumes in store for this spooky season

" + sender_id: 991267834 + state: live + labels: + - New + - Product + - Update + cover_image_url: + reactions: + - "\U0001F606" + - "\U0001F605" + deliver_silently: true + created_at: 1734537797 + updated_at: 1734537797 + newsfeed_assignments: + - newsfeed_id: 53 + published_at: 1664638214 + schema: + "$ref": "#/components/schemas/news_item" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 5142ad8e-883e-4b71-9adb-6494851e9b77 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/news_item_request" + examples: + successful: + summary: successful + value: + title: Halloween is here! + body: "

New costumes in store for this spooky season

" + labels: + - Product + - Update + - New + sender_id: 991267834 + deliver_silently: true + reactions: + - "\U0001F606" + - "\U0001F605" + state: live + newsfeed_assignments: + - newsfeed_id: 53 + published_at: 1664638214 + "/news/news_items/{news_item_id}": + get: + summary: Retrieve a news item + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: news_item_id + in: path + required: true + description: The unique identifier for the news item which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - News + operationId: retrieveNewsItem + description: You can fetch the details of a single news item. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '34' + type: news-item + workspace_id: this_is_an_id538_that_should_be_at_least_ + title: We have news + body: "

Hello there,

" + sender_id: 991267837 + state: live + labels: [] + cover_image_url: + reactions: + - + - + - + - + deliver_silently: false + created_at: 1734537800 + updated_at: 1734537800 + newsfeed_assignments: + - newsfeed_id: 55 + published_at: 1734537800 + schema: + "$ref": "#/components/schemas/news_item" + '404': + description: News Item Not Found + content: + application/json: + examples: + News Item Not Found: + value: + type: error.list + request_id: da84e250-8626-47e8-815c-62b33f0f2c36 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 33ff62c6-ceb7-4bde-93d6-301bed6f24b2 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update a news item + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: news_item_id + in: path + required: true + description: The unique identifier for the news item which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - News + operationId: updateNewsItem + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '37' + type: news-item + workspace_id: this_is_an_id544_that_should_be_at_least_ + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + sender_id: 991267845 + state: live + labels: [] + cover_image_url: + reactions: + - "\U0001F61D" + - "\U0001F602" + deliver_silently: false + created_at: 1734537803 + updated_at: 1734537804 + newsfeed_assignments: [] + schema: + "$ref": "#/components/schemas/news_item" + '404': + description: News Item Not Found + content: + application/json: + examples: + News Item Not Found: + value: + type: error.list + request_id: 2014d867-b634-495a-9b4f-ce56c4d657a9 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 5838c54e-dd15-460b-82dd-794c4d0e12c5 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/news_item_request" + examples: + successful: + summary: successful + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + sender_id: 991267845 + reactions: + - "\U0001F61D" + - "\U0001F602" + news_item_not_found: + summary: News Item Not Found + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + sender_id: 991267848 + reactions: + - "\U0001F61D" + - "\U0001F602" + delete: + summary: Delete a news item + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: news_item_id + in: path + required: true + description: The unique identifier for the news item which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - News + operationId: deleteNewsItem + description: You can delete a single news item. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '40' + object: news-item + deleted: true + schema: + "$ref": "#/components/schemas/deleted_object" + '404': + description: News Item Not Found + content: + application/json: + examples: + News Item Not Found: + value: + type: error.list + request_id: 23728e22-7b9f-44a9-9b8d-5028811b9cd0 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e5357876-89be-4a04-80c3-16735b7f53ff + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/news/newsfeeds/{newsfeed_id}/items": + get: + summary: List all live newsfeed items + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: newsfeed_id + in: path + required: true + description: The unique identifier for the news feed item which is given by + Intercom. + example: '123' + schema: + type: string + tags: + - News + operationId: listLiveNewsfeedItems + description: You can fetch a list of all news items that are live on a given + newsfeed + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + pages: + page: 1 + per_page: 20 + total_pages: 0 + type: pages + data: [] + total_count: 0 + schema: + "$ref": "#/components/schemas/paginated_response" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 022ff8b0-d16f-437c-8217-754c13e16dee + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/news/newsfeeds": + get: + summary: List all newsfeeds + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - News + operationId: listNewsfeeds + description: You can fetch a list of all newsfeeds + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + pages: + page: 1 + per_page: 10 + total_pages: 1 + type: pages + data: + - id: '68' + type: newsfeed + name: Visitor Feed + created_at: 1734537813 + updated_at: 1734537813 + - id: '69' + type: newsfeed + name: Visitor Feed + created_at: 1734537813 + updated_at: 1734537813 + total_count: 2 + schema: + "$ref": "#/components/schemas/paginated_response" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: caa26d8b-6512-445d-9418-9fc5849ca304 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/news/newsfeeds/{newsfeed_id}": + get: + summary: Retrieve a newsfeed + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: newsfeed_id + in: path + required: true + description: The unique identifier for the news feed item which is given by + Intercom. + example: '123' + schema: + type: string + tags: + - News + operationId: retrieveNewsfeed + description: You can fetch the details of a single newsfeed + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '72' + type: newsfeed + name: Visitor Feed + created_at: 1734537815 + updated_at: 1734537815 + schema: + "$ref": "#/components/schemas/newsfeed" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 6d9a1bf5-aa08-4c93-a61a-5a21130b6553 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/notes/{note_id}": + get: + summary: Retrieve a note + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: note_id + in: path + required: true + description: The unique identifier of a given note + example: 1 + schema: + type: integer + tags: + - Notes + operationId: retrieveNote + description: You can fetch the details of a single note. + responses: + '200': + description: Note found + content: + application/json: + examples: + Note found: + value: + type: note + id: '34' + created_at: 1733846617 + contact: + type: contact + id: 6762f2591bb69f9f2193bc1f + author: + type: admin + id: '991267864' + name: Ciaran346 Lee + email: admin346@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

This is a note.

" + schema: + "$ref": "#/components/schemas/note" + '404': + description: Note not found + content: + application/json: + examples: + Note not found: + value: + type: error.list + request_id: bc300b1a-492a-405f-924e-a5881cb72e3a + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 81384687-5818-4df9-b421-fba77edd6c17 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/segments": + get: + summary: List all segments + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: include_count + in: query + required: false + description: It includes the count of contacts that belong to each segment. + example: true + schema: + type: boolean + tags: + - Segments + operationId: listSegments + description: You can fetch a list of all segments. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: segment.list + segments: + - type: segment + id: 6762f25c1bb69f9f2193bc22 + name: John segment + created_at: 1734537820 + updated_at: 1734537820 + person_type: user + - type: segment + id: 6762f25c1bb69f9f2193bc23 + name: Jane segment + created_at: 1734537820 + updated_at: 1734537820 + person_type: user + schema: + "$ref": "#/components/schemas/segment_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b1939528-98f0-4a63-a442-2cc9203fc8c7 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/segments/{segment_id}": + get: + summary: Retrieve a segment + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: segment_id + in: path + required: true + description: The unique identified of a given segment. + example: '123' + schema: + type: string + tags: + - Segments + operationId: retrieveSegment + description: You can fetch the details of a single segment. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: segment + id: 6762f25f1bb69f9f2193bc26 + name: John segment + created_at: 1734537823 + updated_at: 1734537823 + person_type: user + schema: + "$ref": "#/components/schemas/segment" + '404': + description: Segment not found + content: + application/json: + examples: + Segment not found: + value: + type: error.list + request_id: bd697cc6-7757-488c-a89f-16e6feaf7585 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: be0d5309-d722-4d2a-aae9-77f4bc0a2cd0 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/subscription_types": + get: + summary: List subscription types + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Subscription Types + operationId: listSubscriptionTypes + description: You can list all subscription types. A list of subscription type + objects will be returned. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: list + data: + - type: subscription + id: '135' + state: live + consent_type: opt_out + default_translation: + name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + translations: + - name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + content_types: + - email + schema: + "$ref": "#/components/schemas/subscription_type_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 06d15b1f-19b0-42cc-aff9-a9d9db39402b + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/phone_call_redirects": + post: + summary: Create a phone Switch + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Switch + operationId: createPhoneSwitch + description: | + You can use the API to deflect phone calls to the Intercom Messenger. + Calling this endpoint will send an SMS with a link to the Messenger to the phone number specified. + + If custom attributes are specified, they will be added to the user or lead's custom data attributes. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + url: http://via.intercom.io/msgr/1add3dd1-a75e-4a96-96fd-984d16aba059 + type: phone_call_redirect + schema: + "$ref": "#/components/schemas/phone_switch" + '400': + description: bad request - invalid number + content: + application/json: + examples: + bad request - exception sending sms: + value: + error_key: sms_failed + message: SMS was not sent due to an unknown error + bad request - invalid number: + value: + error_key: invalid_phone_number + message: Invalid phone number + '422': + description: unprocessable entity + content: + application/json: + examples: + unprocessable entity: + value: + error_key: some_error + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e1ed4f34-9477-492a-8ddb-22f10af39734 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_phone_switch_request" + examples: + successful: + summary: successful + value: + phone: "+353832345678" + custom_attributes: + issue_type: Billing + priority: High + bad_request_-_exception_sending_sms: + summary: bad request - exception sending sms + value: + phone: "+353832345678" + custom_attributes: + issue_type: Billing + priority: High + bad_request_-_invalid_number: + summary: bad request - invalid number + value: + phone: "+353832345678" + custom_attributes: + issue_type: Billing + priority: High + unprocessable_entity: + summary: unprocessable entity + value: + phone: "+40241100100" + custom_attributes: + issue_type: Billing + priority: High + "/calls": + get: + summary: List all calls + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: page + in: query + required: false + description: The page of results to fetch. Defaults to first page + example: 1 + schema: + type: integer + - name: per_page + in: query + required: false + description: How many results to display per page. Defaults to 25. Max 25. + example: 25 + schema: + type: integer + tags: + - Calls + operationId: listCalls + description: | + Retrieve a paginated list of calls. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: [] + total_count: 0 + pages: + type: pages + page: 1 + per_page: 25 + total_pages: 0 + schema: + "$ref": "#/components/schemas/call_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/calls/{call_id}": + get: + summary: Get a call + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: call_id + in: path + required: true + description: The id of the call to retrieve + schema: + type: string + tags: + - Calls + operationId: showCall + description: Retrieve a single call by id. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: call + id: "123" + conversation_id: "456" + admin_id: "789" + contact_id: "6762f0dd1bb69f9f2193bb83" + state: completed + initiated_at: 1734537437 + answered_at: 1734537440 + ended_at: 1734537530 + created_at: 1734537437 + updated_at: 1734537531 + recording_url: "https://api.intercom.io/calls/123/recording" + transcription_url: "https://api.intercom.io/calls/123/transcript" + call_type: phone + direction: outbound + ended_reason: answered + phone: "+15551234567" + fin_recording_url: "https://api.intercom.io/calls/124/recording" + fin_transcription_url: "https://api.intercom.io/calls/124/transcript" + schema: + "$ref": "#/components/schemas/call" + '404': + description: Not Found + content: + application/json: + examples: + Not Found: + value: + type: error.list + request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 + errors: + - code: not_found + message: Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/calls/{call_id}/recording": + get: + summary: Get call recording by call id + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: call_id + in: path + required: true + description: The id of the call + schema: + type: string + tags: + - Calls + operationId: showCallRecording + description: Redirects to a signed URL for the call's recording if it exists. + responses: + '302': + description: Redirect to signed recording URL + headers: + Location: + description: The signed recording URL + schema: + type: string + format: uri + '404': + description: Recording not found + content: + application/json: + examples: + Not Found: + value: + type: error.list + request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 + errors: + - code: not_found + message: Recording Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/calls/{call_id}/transcript": + get: + summary: Get call transcript by call id + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: call_id + in: path + required: true + description: The id of the call + schema: + type: string + tags: + - Calls + operationId: showCallTranscript + description: | + Returns the transcript for the specified call as a downloadable text file. + responses: + '200': + description: successful + headers: + Content-Disposition: + description: File attachment directive and suggested filename for the transcript + schema: + type: string + example: "attachment; filename=transcription_data-2025-07-17.txt" + content: + text/plain: + schema: + type: string + description: Transcript text + examples: + transcript_txt: + value: |- + [00:00:03] Teammate 1: "Hello, thanks for calling. How can I help today?" + [00:00:09] User: "I need help recovering access to my account." + [00:00:15] Teammate 1: "I can help with that. For security, I’ll ask a few generic verification questions." + [00:00:22] User: "Okay." + [00:00:28] Teammate 1: "Please confirm general details on the account (no sensitive data over this call)." + [00:00:35] User: "I can provide non-sensitive info." + [00:00:41] Teammate 1: "Thank you. I’ll initiate a standard account recovery process and send the next steps." + [00:00:48] User: "Great, thanks." + [00:00:53] Teammate 1: "You should receive a message shortly with instructions to complete recovery." + '404': + description: Not Found + content: + application/json: + examples: + Not Found: + value: + type: error.list + request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 + errors: + - code: not_found + message: Not Found + schema: + "$ref": "#/components/schemas/error" + "/calls/search": + post: + summary: List calls with transcripts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Calls + operationId: listCallsWithTranscripts + description: | + Retrieve calls by a list of conversation ids and include transcripts when available. + A maximum of 20 `conversation_ids` can be provided. If none are provided or more than 20 are provided, a 400 error is returned. + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - conversation_ids + properties: + conversation_ids: + type: array + description: A list of conversation ids to fetch calls for. Maximum 20. + minItems: 1 + maxItems: 20 + items: + type: string + examples: + example: + value: + conversation_ids: + - "64619700005694" + - "64619700005695" + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: + - type: call + id: "123" + conversation_id: "64619700005694" + transcript: + - {} + transcript_status: completed + schema: + type: object + properties: + type: + type: string + example: list + data: + type: array + items: + allOf: + - "$ref": "#/components/schemas/call" + - type: object + properties: + transcript: + type: array + description: The call transcript if available, otherwise an empty array. + items: + type: object + additionalProperties: true + transcript_status: + type: string + nullable: true + description: The status of the transcript if available. + '400': + description: Bad Request + content: + application/json: + examples: + too_many_ids: + value: + type: error.list + errors: + - code: conversation_id_limit_exceeded + message: "A list of up to 20 conversation IDs is required" + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/tags": + get: + summary: List all tags + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Tags + operationId: listTags + description: "You can fetch a list of all tags for a given workspace.\n\n" + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: + - type: tag + id: '102' + name: Manual tag 1 + schema: + "$ref": "#/components/schemas/tag_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2859da57-c83f-405c-8166-240a312442a3 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create or update a tag, Tag or untag companies, Tag contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Tags + operationId: createTag + description: | + You can use this endpoint to perform the following operations: + + **1. Create a new tag:** You can create a new tag by passing in the tag name as specified in "Create or Update Tag Request Payload" described below. + + **2. Update an existing tag:** You can update an existing tag by passing the id of the tag as specified in "Create or Update Tag Request Payload" described below. + + **3. Tag Companies:** You can tag single company or a list of companies. You can tag a company by passing in the tag name and the company details as specified in "Tag Company Request Payload" described below. Also, if the tag doesn't exist then a new one will be created automatically. + + **4. Untag Companies:** You can untag a single company or a list of companies. You can untag a company by passing in the tag id and the company details as specified in "Untag Company Request Payload" described below. + + **5. Tag Multiple Users:** You can tag a list of users. You can tag the users by passing in the tag name and the user details as specified in "Tag Users Request Payload" described below. + + Each operation will return a tag object. + responses: + '200': + description: Action successful + content: + application/json: + examples: + Action successful: + value: + type: tag + id: '105' + name: test + schema: + "$ref": "#/components/schemas/tag_basic" + '400': + description: Invalid parameters + content: + application/json: + examples: + Invalid parameters: + value: + type: error.list + request_id: 33a05108-3bf7-411f-a270-72db40b5a31c + errors: + - code: parameter_invalid + message: invalid tag parameters + schema: + "$ref": "#/components/schemas/error" + '404': + description: User not found + content: + application/json: + examples: + Company not found: + value: + type: error.list + request_id: 23c998cc-32b8-435d-9653-932c15809460 + errors: + - code: company_not_found + message: Company Not Found + User not found: + value: + type: error.list + request_id: 7358f78d-f122-45dd-a2e1-c2261300c38a + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: f230e3a7-00a9-456b-bf1c-2ad4b7dc49f6 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + oneOf: + - "$ref": "#/components/schemas/create_or_update_tag_request" + - "$ref": "#/components/schemas/tag_company_request" + - "$ref": "#/components/schemas/untag_company_request" + - "$ref": "#/components/schemas/tag_multiple_users_request" + examples: + action_successful: + summary: Action successful + value: + name: test + invalid_parameters: + summary: Invalid parameters + value: + test: invalid + company_not_found: + summary: Company not found + value: + name: test + companies: + - company_id: '123' + user_not_found: + summary: User not found + value: + name: test + users: + - id: '123' + "/tags/{tag_id}": + get: + summary: Find a specific tag + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: tag_id + in: path + description: The unique identifier of a given tag + example: '123' + required: true + schema: + type: string + tags: + - Tags + operationId: findTag + description: | + You can fetch the details of tags that are on the workspace by their id. + This will return a tag object. + responses: + '200': + description: Tag found + content: + application/json: + examples: + Tag found: + value: + type: tag + id: '113' + name: Manual tag + schema: + "$ref": "#/components/schemas/tag_basic" + '404': + description: Tag not found + content: + application/json: + examples: + Tag not found: + value: + type: error.list + request_id: e20c89d2-29c6-4abb-aa3d-c860e1cec1ca + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c1c0477c-5b80-4874-be65-01ec8a9ffe14 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + delete: + summary: Delete tag + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: tag_id + in: path + description: The unique identifier of a given tag + example: '123' + required: true + schema: + type: string + tags: + - Tags + operationId: deleteTag + description: You can delete the details of tags that are on the workspace by + passing in the id. + responses: + '200': + description: Successful + '404': + description: Resource not found + content: + application/json: + examples: + Resource not found: + value: + type: error.list + request_id: 49536975-bbc5-4a2f-ab8b-7928275cb4d3 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '400': + description: Tag has dependent objects + content: + application/json: + examples: + Tag has dependent objects: + value: + type: error.list + request_id: 28960d1e-a056-46c0-bf18-a0d798eb889f + errors: + - code: tag_has_dependent_objects + message: 'Unable to delete Tag with dependent objects. Segments: + Seg 1.' + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 90a369be-14bb-48d1-8ed6-6287976f6a64 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/teams": + get: + summary: List all teams + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Teams + operationId: listTeams + description: This will return a list of team objects for the App. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: team.list + teams: [] + schema: + "$ref": "#/components/schemas/team_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: a77dadbc-1f1e-4875-bac3-f0d09bbc214a + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/teams/{team_id}": + get: + summary: Retrieve a team + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: team_id + in: path + required: true + description: The unique identifier of a given team. + example: '123' + schema: + type: string + tags: + - Teams + operationId: retrieveTeam + description: You can fetch the details of a single team, containing an array + of admins that belong to this team. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: team + id: '991267902' + name: team 1 + admin_ids: [] + assignment_limit: 10 + distribution_method: round_robin + schema: + "$ref": "#/components/schemas/team" + '404': + description: Team not found + content: + application/json: + examples: + Team not found: + value: + type: error.list + request_id: 3ff156ba-a66e-40d4-93ff-cb6e6afc3c9d + errors: + - code: team_not_found + message: Team not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: fc4b741b-b9f1-4ef9-92c7-eb71e9811df3 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/ticket_states": + get: + summary: List all ticket states + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Ticket States + operationId: listTicketStates + description: You can get a list of all ticket states for a workspace. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: + - type: ticket_state + id: '8269' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_types: + type: list + data: + - type: ticket_type + id: '55' + name: my-ticket-type-3 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '56' + name: my-ticket-type-4 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '58' + name: my-ticket-type-6 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + archived: false + - type: ticket_state + id: '8270' + category: in_progress + internal_label: In progress + external_label: In progress + ticket_types: + type: list + data: + - type: ticket_type + id: '55' + name: my-ticket-type-3 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '56' + name: my-ticket-type-4 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '58' + name: my-ticket-type-6 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + archived: false + - type: ticket_state + id: '8271' + category: waiting_on_customer + internal_label: Waiting on customer + external_label: Waiting on you + ticket_types: + type: list + data: + - type: ticket_type + id: '55' + name: my-ticket-type-3 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '56' + name: my-ticket-type-4 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '58' + name: my-ticket-type-6 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + archived: false + - type: ticket_state + id: '8272' + category: resolved + internal_label: Resolved + external_label: Resolved + ticket_types: + type: list + data: + - type: ticket_type + id: '55' + name: my-ticket-type-3 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '56' + name: my-ticket-type-4 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '58' + name: my-ticket-type-6 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + archived: false + - type: ticket_state + id: '8273' + category: submitted + internal_label: Admin label 1 + external_label: User label + ticket_types: + type: list + data: + - type: ticket_type + id: '55' + name: my-ticket-type-3 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '56' + name: my-ticket-type-4 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + archived: false + - type: ticket_state + id: '8274' + category: submitted + internal_label: Admin label 2 + external_label: User label + ticket_types: + type: list + data: + - type: ticket_type + id: '58' + name: my-ticket-type-6 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + archived: false + schema: + "$ref": "#/components/schemas/ticket_state_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 5e0bd231-7307-42e6-a6ee-babf05bd163b + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/ticket_types/{ticket_type_id}/attributes": + post: + summary: Create a new attribute for a ticket type + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_type_id + in: path + required: true + description: The unique identifier for the ticket type which is given by Intercom. + schema: + type: string + tags: + - Ticket Type Attributes + description: You can create a new attribute for a ticket type. + operationId: createTicketTypeAttribute + responses: + '200': + description: Ticket Type Attribute created + content: + application/json: + examples: + Ticket Type Attribute created: + value: + type: ticket_type_attribute + id: '157' + workspace_id: this_is_an_id640_that_should_be_at_least_ + name: Attribute Title + description: Attribute Description + data_type: string + input_options: + multiline: false + order: 2 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: false + ticket_type_id: 63 + archived: false + created_at: 1734537862 + updated_at: 1734537862 + schema: + "$ref": "#/components/schemas/ticket_type_attribute" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 6c9836ed-8485-4f1d-929d-b9d7e153daed + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_ticket_type_attribute_request" + examples: + ticket_type_attribute_created: + summary: Ticket Type Attribute created + value: + name: Attribute Title + description: Attribute Description + data_type: string + required_to_create: false + "/ticket_types/{ticket_type_id}/attributes/{attribute_id}": + put: + summary: Update an existing attribute for a ticket type + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_type_id + in: path + required: true + description: The unique identifier for the ticket type which is given by Intercom. + schema: + type: string + - name: attribute_id + in: path + required: true + description: The unique identifier for the ticket type attribute which is + given by Intercom. + schema: + type: string + tags: + - Ticket Type Attributes + description: You can update an existing attribute for a ticket type. + operationId: updateTicketTypeAttribute + responses: + '200': + description: Ticket Type Attribute updated + content: + application/json: + examples: + Ticket Type Attribute updated: + value: + type: ticket_type_attribute + id: '162' + workspace_id: this_is_an_id644_that_should_be_at_least_ + name: name + description: New Attribute Description + data_type: string + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: false + visible_to_contacts: false + default: false + ticket_type_id: 65 + archived: false + created_at: 1734537864 + updated_at: 1734537864 + schema: + "$ref": "#/components/schemas/ticket_type_attribute" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: cd303186-b33e-4409-8bfc-5814b176d6e1 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_ticket_type_attribute_request" + examples: + ticket_type_attribute_updated: + summary: Ticket Type Attribute updated + value: + description: New Attribute Description + "/ticket_types": + get: + summary: List all ticket types + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Ticket Types + operationId: listTicketTypes + description: You can get a list of all ticket types for a workspace. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: + - type: ticket_type + id: '67' + name: Bug Report + description: Bug Report Template + icon: "\U0001F39F️" + workspace_id: this_is_an_id648_that_should_be_at_least_ + archived: false + created_at: 1734537866 + updated_at: 1734537866 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '165' + workspace_id: this_is_an_id648_that_should_be_at_least_ + name: _default_title_ + description: '' + data_type: string + input_options: + multiline: false + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 67 + archived: false + created_at: 1734537866 + updated_at: 1734537866 + - type: ticket_type_attribute + id: '167' + workspace_id: this_is_an_id648_that_should_be_at_least_ + name: name + description: description + data_type: string + input_options: + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: false + visible_to_contacts: false + default: false + ticket_type_id: 67 + archived: false + created_at: 1734537866 + updated_at: 1734537866 + - type: ticket_type_attribute + id: '166' + workspace_id: this_is_an_id648_that_should_be_at_least_ + name: _default_description_ + description: '' + data_type: string + input_options: + multiline: true + order: 1 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 67 + archived: false + created_at: 1734537866 + updated_at: 1734537866 + category: Customer + ticket_states: + type: list + data: + - type: ticket_state + id: '8321' + category: submitted + internal_label: Submitted + external_label: Submitted + - type: ticket_state + id: '8322' + category: in_progress + internal_label: In progress + external_label: In progress + - type: ticket_state + id: '8323' + category: waiting_on_customer + internal_label: Waiting on customer + external_label: Waiting on you + - type: ticket_state + id: '8324' + category: resolved + internal_label: Resolved + external_label: Resolved + schema: + "$ref": "#/components/schemas/ticket_type_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: a63507c2-3b3b-4a1a-aafa-f08b87eb2c12 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create a ticket type + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Ticket Types + operationId: createTicketType + description: "You can create a new ticket type.\n> \U0001F4D8 Creating ticket + types.\n>\n> Every ticket type will be created with two default attributes: + _default_title_ and _default_description_.\n> For the `icon` propery, use + an emoji from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/)\n" + responses: + '200': + description: Ticket type created + content: + application/json: + examples: + Ticket type created: + value: + type: ticket_type + id: '70' + name: Customer Issue + description: Customer Report Template + icon: "\U0001F39F️" + workspace_id: this_is_an_id652_that_should_be_at_least_ + archived: false + created_at: 1734537869 + updated_at: 1734537869 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '174' + workspace_id: this_is_an_id652_that_should_be_at_least_ + name: _default_title_ + description: '' + data_type: string + input_options: + multiline: false + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 70 + archived: false + created_at: 1734537869 + updated_at: 1734537869 + - type: ticket_type_attribute + id: '175' + workspace_id: this_is_an_id652_that_should_be_at_least_ + name: _default_description_ + description: '' + data_type: string + input_options: + multiline: true + order: 1 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 70 + archived: false + created_at: 1734537869 + updated_at: 1734537869 + category: Customer + ticket_states: + type: list + data: + - type: ticket_state + id: '8337' + category: submitted + internal_label: Submitted + external_label: Submitted + - type: ticket_state + id: '8338' + category: in_progress + internal_label: In progress + external_label: In progress + - type: ticket_state + id: '8339' + category: waiting_on_customer + internal_label: Waiting on customer + external_label: Waiting on you + - type: ticket_state + id: '8340' + category: resolved + internal_label: Resolved + external_label: Resolved + schema: + "$ref": "#/components/schemas/ticket_type" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 36b79d0c-b78f-4e1d-bd6d-bfc3dcc71f53 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_ticket_type_request" + examples: + ticket_type_created: + summary: Ticket type created + value: + name: Customer Issue + description: Customer Report Template + icon: "\U0001F39F️" + category: Customer + "/ticket_types/{ticket_type_id}": + get: + summary: Retrieve a ticket type + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_type_id + in: path + required: true + description: The unique identifier for the ticket type which is given by Intercom. + schema: + type: string + tags: + - Ticket Types + operationId: getTicketType + description: You can fetch the details of a single ticket type. + responses: + '200': + description: Ticket type found + content: + application/json: + examples: + Ticket type found: + value: + type: ticket_type + id: '72' + name: Bug Report + description: Bug Report Template + icon: "\U0001F39F️" + workspace_id: this_is_an_id656_that_should_be_at_least_ + archived: false + created_at: 1734537870 + updated_at: 1734537870 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '179' + workspace_id: this_is_an_id656_that_should_be_at_least_ + name: _default_title_ + description: '' + data_type: string + input_options: + multiline: false + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 72 + archived: false + created_at: 1734537871 + updated_at: 1734537871 + - type: ticket_type_attribute + id: '181' + workspace_id: this_is_an_id656_that_should_be_at_least_ + name: name + description: description + data_type: string + input_options: + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: false + visible_to_contacts: false + default: false + ticket_type_id: 72 + archived: false + created_at: 1734537871 + updated_at: 1734537871 + - type: ticket_type_attribute + id: '180' + workspace_id: this_is_an_id656_that_should_be_at_least_ + name: _default_description_ + description: '' + data_type: string + input_options: + multiline: true + order: 1 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 72 + archived: false + created_at: 1734537871 + updated_at: 1734537871 + category: Customer + ticket_states: + type: list + data: + - type: ticket_state + id: '8353' + category: submitted + internal_label: Submitted + external_label: Submitted + - type: ticket_state + id: '8354' + category: in_progress + internal_label: In progress + external_label: In progress + - type: ticket_state + id: '8355' + category: waiting_on_customer + internal_label: Waiting on customer + external_label: Waiting on you + - type: ticket_state + id: '8356' + category: resolved + internal_label: Resolved + external_label: Resolved + schema: + "$ref": "#/components/schemas/ticket_type" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c9a2c3da-7536-4eba-bde7-c38c2d9e2942 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update a ticket type + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_type_id + in: path + required: true + description: The unique identifier for the ticket type which is given by Intercom. + schema: + type: string + tags: + - Ticket Types + operationId: updateTicketType + description: "\nYou can update a ticket type.\n\n> \U0001F4D8 Updating a ticket + type.\n>\n> For the `icon` propery, use an emoji from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/)\n" + responses: + '200': + description: Ticket type updated + content: + application/json: + examples: + Ticket type updated: + value: + type: ticket_type + id: '74' + name: Bug Report 2 + description: Bug Report Template + icon: "\U0001F39F️" + workspace_id: this_is_an_id660_that_should_be_at_least_ + archived: false + created_at: 1734537873 + updated_at: 1734537874 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '185' + workspace_id: this_is_an_id660_that_should_be_at_least_ + name: _default_title_ + description: '' + data_type: string + input_options: + multiline: false + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 74 + archived: false + created_at: 1734537873 + updated_at: 1734537873 + - type: ticket_type_attribute + id: '187' + workspace_id: this_is_an_id660_that_should_be_at_least_ + name: name + description: description + data_type: string + input_options: + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: false + visible_to_contacts: false + default: false + ticket_type_id: 74 + archived: false + created_at: 1734537873 + updated_at: 1734537873 + - type: ticket_type_attribute + id: '186' + workspace_id: this_is_an_id660_that_should_be_at_least_ + name: _default_description_ + description: '' + data_type: string + input_options: + multiline: true + order: 1 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 74 + archived: false + created_at: 1734537873 + updated_at: 1734537873 + category: Customer + ticket_states: + type: list + data: + - type: ticket_state + id: '8369' + category: submitted + internal_label: Submitted + external_label: Submitted + - type: ticket_state + id: '8370' + category: in_progress + internal_label: In progress + external_label: In progress + - type: ticket_state + id: '8371' + category: waiting_on_customer + internal_label: Waiting on customer + external_label: Waiting on you + - type: ticket_state + id: '8372' + category: resolved + internal_label: Resolved + external_label: Resolved + schema: + "$ref": "#/components/schemas/ticket_type" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2fc2ae95-64ec-4581-80f0-79ecfdc2e759 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_ticket_type_request" + examples: + ticket_type_updated: + summary: Ticket type updated + value: + name: Bug Report 2 + "/tickets/{ticket_id}/reply": + post: + summary: Reply to a ticket + operationId: replyTicket + description: You can reply to a ticket with a message from an admin or on behalf + of a contact, or with a note for admins. + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_id + in: path + required: true + schema: + title: Ticket ID + type: string + description: | + The id of the ticket to target. + {% admonition type="info" name="Not the Inbox ticket ID" %} + This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. + {% /admonition %} + example: '123' + tags: + - Tickets + responses: + '400': + description: User reply + content: + application/json: + examples: + User reply: + value: + type: error.list + request_id: 603ce1da-f2bf-4641-a1ee-d1f13ebf9172 + errors: + - code: parameter_mismatch + message: User replies are not allowed on Backoffice tickets + schema: + "$ref": "#/components/schemas/error" + '200': + description: Admin Reply to send Quick Reply Options + content: + application/json: + examples: + Admin note reply: + value: + type: ticket_part + id: '156' + part_type: note + body: |- +

An Unordered HTML List

+
    +
  • Coffee
  • +
  • Tea
  • +
  • Milk
  • +
+

An Ordered HTML List

+
    +
  1. Coffee
  2. +
  3. Tea
  4. +
  5. Milk
  6. +
+ created_at: 1734537884 + updated_at: 1734537884 + author: + id: '991267943' + type: admin + name: Ciaran419 Lee + email: admin419@email.com + attachments: [] + redacted: false + app_package_code: test-integration + Admin quick_reply reply: + value: + type: ticket_part + id: '158' + part_type: quick_reply + created_at: 1734537890 + updated_at: 1734537890 + author: + id: '991267948' + type: admin + name: Ciaran423 Lee + email: admin423@email.com + attachments: [] + redacted: false + schema: + "$ref": "#/components/schemas/ticket_reply" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: 24561472-06a4-41b2-aca2-97b3ccd9ca19 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: ed4305b3-4364-4fab-9f8d-e07e9a8190ab + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + oneOf: + - "$ref": "#/components/schemas/contact_reply_ticket_request" + - "$ref": "#/components/schemas/admin_reply_ticket_request" + properties: + skip_notifications: + type: boolean + description: Option to disable notifications when replying to a + Ticket. + example: true + examples: + user_reply: + summary: User reply + value: + message_type: comment + type: user + intercom_user_id: 6762f2971bb69f9f2193bc49 + body: Thanks again :) + admin_note_reply: + summary: Admin note reply + value: + message_type: note + type: admin + admin_id: 991267943 + body: "

An Unordered HTML List

  • Coffee
  • + \
  • Tea
  • Milk

An Ordered HTML List

+ \
  1. Coffee
  2. Tea
  3. Milk
+ \ " + admin_note_cross_post_reply: + summary: Admin note reply with cross-post to linked conversations + value: + message_type: note + type: admin + admin_id: 991267943 + body: This note will be cross-posted to all linked conversations. + cross_post: true + admin_quick_reply_reply: + summary: Admin quick_reply reply + value: + message_type: quick_reply + type: admin + admin_id: 991267948 + reply_options: + - text: 'Yes' + uuid: 0df48b85-9a93-4c66-a167-753eff0baaec + - text: 'No' + uuid: 4f0b5145-4193-4b4f-8cad-ce19478a3938 + not_found: + summary: Not found + value: + message_type: comment + type: user + intercom_user_id: 6762f2a41bb69f9f2193bc4c + body: Thanks again :) + "/tickets/{ticket_id}/tags": + post: + summary: Add tag to a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_id + in: path + description: ticket_id + example: '64619700005694' + required: true + schema: + type: string + tags: + - Tags + - Tickets + operationId: attachTagToTicket + description: You can tag a specific ticket. This will return a tag object for + the tag that was added to the ticket. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: tag + id: '121' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' + schema: + "$ref": "#/components/schemas/tag" + '404': + description: Ticket not found + content: + application/json: + examples: + Ticket not found: + value: + type: error.list + request_id: b44cff1d-c6f8-4d60-ab6f-33522cd739d8 + errors: + - code: ticket_not_found + message: Ticket not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2bed74fe-1b04-4c07-8813-02c700e8dcad + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - id + - admin_id + properties: + id: + type: string + description: The unique identifier for the tag which is given by + Intercom + example: '7522907' + admin_id: + type: string + description: The unique identifier for the admin which is given + by Intercom. + example: '780' + examples: + successful: + summary: successful + value: + id: 121 + admin_id: 991267958 + ticket_not_found: + summary: Ticket not found + value: + id: 122 + admin_id: 991267963 + "/tickets/{ticket_id}/tags/{tag_id}": + delete: + summary: Remove tag from a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_id + in: path + description: ticket_id + example: '64619700005694' + required: true + schema: + type: string + - name: tag_id + in: path + description: The unique identifier for the tag which is given by Intercom + example: '7522907' + required: true + schema: + type: string + tags: + - Tags + - Tickets + operationId: detachTagFromTicket + description: You can remove tag from a specific ticket. This will return a tag + object for the tag that was removed from the ticket. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: tag + id: '124' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' + schema: + "$ref": "#/components/schemas/tag" + '404': + description: Tag not found + content: + application/json: + examples: + Ticket not found: + value: + type: error.list + request_id: 734019dc-1d61-4fad-a86e-e3fb06244c4d + errors: + - code: ticket_not_found + message: Ticket not found + Tag not found: + value: + type: error.list + request_id: a3658b9a-3562-48a7-8afe-362284632d67 + errors: + - code: tag_not_found + message: Tag not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2e87c98e-4ffc-407e-b7bc-065d4d456ea7 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - admin_id + properties: + admin_id: + type: string + description: The unique identifier for the admin which is given + by Intercom. + example: '123' + examples: + successful: + summary: successful + value: + admin_id: 991267973 + ticket_not_found: + summary: Ticket not found + value: + admin_id: 991267978 + tag_not_found: + summary: Tag not found + value: + admin_id: 991267983 + "/tickets": + post: + summary: Create a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Tickets + description: You can create a new ticket. + operationId: createTicket + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: ticket + id: '626' + ticket_id: '33' + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + ticket_state: + type: ticket_state + id: '8481' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_type: + type: ticket_type + id: '88' + name: my-ticket-type-23 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id688_that_should_be_at_least_ + archived: false + created_at: 1734537943 + updated_at: 1734537943 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '196' + workspace_id: this_is_an_id688_that_should_be_at_least_ + name: _default_title_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 88 + archived: false + created_at: 1734537943 + updated_at: 1734537943 + - type: ticket_type_attribute + id: '197' + workspace_id: this_is_an_id688_that_should_be_at_least_ + name: _default_description_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 88 + archived: false + created_at: 1734537943 + updated_at: 1734537943 + category: Back-office + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f2d81bb69f9f2193bc54 + external_id: '70' + admin_assignee_id: '0' + team_assignee_id: '0' + created_at: 1734537944 + updated_at: 1734537946 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '175' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537945 + updated_at: 1734537945 + author: + id: '991267999' + type: bot + name: Fin + email: operator+this_is_an_id688_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + total_count: 1 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Back-office + is_shared: false + schema: + "$ref": "#/components/schemas/ticket" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c7bf358f-135e-48d7-8286-a4988a8a1d9b + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + allOf: + - "$ref": "#/components/schemas/create_ticket_request" + properties: + skip_notifications: + type: boolean + description: Option to disable notifications when a Ticket is created. + example: true + examples: + successful_response: + summary: Successful response + value: + ticket_type_id: 88 + contacts: + - id: 6762f2d81bb69f9f2193bc54 + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + "/tickets/enqueue": + post: + summary: Enqueue create ticket + description: Enqueues ticket creation for asynchronous processing, returning if the job was enqueued successfully to be processed. We attempt to perform a best-effort validation on inputs before tasks are enqueued. If the given parameters are incorrect, we won't enqueue the job. + operationId: enqueueCreateTicket + tags: + - Tickets + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + requestBody: + content: + application/json: + schema: + allOf: + - "$ref": "#/components/schemas/create_ticket_request" + properties: + skip_notifications: + type: boolean + description: Option to disable notifications when a Ticket is created. + example: true + examples: + successful_response: + summary: Successful response + value: + ticket_type_id: 88 + contacts: + - id: 6762f2d81bb69f9f2193bc54 + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: job + id: "20" + status: pending + url: https://api.intercom.io/jobs/status/20 + resource_type: ticket + resource_id: null + resource_url: null + schema: + "$ref": "#/components/schemas/jobs" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c7bf358f-135e-48d7-8286-a4988a8a1d9b + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '400': + description: Bad Request + content: + application/json: + examples: + Bad Request: + value: + type: error.list + request_id: c7bf358f-135e-48d7-8286-a4988a8a1456 + errors: + - code: parameter_invalid + message: "Missing required ticket attributes" + schema: + "$ref": "#/components/schemas/error" + "/tickets/{ticket_id}": + put: + summary: Update a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_id + in: path + required: true + description: | + The unique identifier for the ticket which is given by Intercom. + {% admonition type="info" name="Not the Inbox ticket ID" %} + This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. + {% /admonition %} + schema: + type: string + tags: + - Tickets + operationId: updateTicket + description: You can update a ticket. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: ticket + id: '627' + ticket_id: '34' + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + ticket_state: + type: ticket_state + id: '8498' + category: in_progress + internal_label: In progress + external_label: In progress + ticket_type: + type: ticket_type + id: '90' + name: my-ticket-type-25 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id692_that_should_be_at_least_ + archived: false + created_at: 1734537948 + updated_at: 1734537948 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '200' + workspace_id: this_is_an_id692_that_should_be_at_least_ + name: _default_title_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 90 + archived: false + created_at: 1734537949 + updated_at: 1734537949 + - type: ticket_type_attribute + id: '201' + workspace_id: this_is_an_id692_that_should_be_at_least_ + name: _default_description_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 90 + archived: false + created_at: 1734537949 + updated_at: 1734537949 + category: Back-office + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f2dd1bb69f9f2193bc55 + external_id: 8df1fa21-b41d-4621-9229-d6f7a3a590ce + admin_assignee_id: '991268013' + team_assignee_id: '0' + created_at: 1734537950 + updated_at: 1734537955 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '176' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537951 + updated_at: 1734537951 + author: + id: '991268011' + type: admin + name: Ciaran477 Lee + email: admin477@email.com + attachments: [] + redacted: false + - type: ticket_part + id: '177' + part_type: ticket_attribute_updated_by_admin + created_at: 1734537953 + updated_at: 1734537953 + author: + id: '991268012' + type: bot + name: Fin + email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + updated_attribute_data: + attribute: + type: "attribute" + id: "10" + label: "Photo" + value: + type: "value" + id: [2] + label: ["photo.png"] + - type: ticket_part + id: '178' + part_type: ticket_attribute_updated_by_admin + created_at: 1734537953 + updated_at: 1734537953 + author: + id: '991268012' + type: bot + name: Fin + email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + updated_attribute_data: + attribute: + type: "attribute" + id: "7" + label: "Progress" + value: + type: "value" + id: "Fast" + label: "Fast" + - type: ticket_part + id: '179' + part_type: ticket_state_updated_by_admin + ticket_state: in_progress + previous_ticket_state: submitted + created_at: 1734537954 + updated_at: 1734537954 + author: + id: '991268012' + type: bot + name: Fin + email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + app_package_code: test-integration + - type: ticket_part + id: '180' + part_type: assignment + created_at: 1734537954 + updated_at: 1734537954 + assigned_to: + type: admin + id: '991268013' + author: + id: '991268011' + type: admin + name: Ciaran477 Lee + email: admin477@email.com + attachments: [] + redacted: false + - type: ticket_part + id: '181' + part_type: snoozed + created_at: 1734537955 + updated_at: 1734537955 + author: + id: '991268012' + type: bot + name: Fin + email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + total_count: 6 + open: true + snoozed_until: 1734627600 + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Back-office + is_shared: false + schema: + "$ref": "#/components/schemas/ticket" + '404': + description: Assignee not found + content: + application/json: + examples: + Admin not found: + value: + type: error.list + request_id: f9757add-b48a-4519-a6e0-04b2ef9c8c6c + errors: + - code: assignee_not_found + message: Assignee not found + Assignee not found: + value: + type: error.list + request_id: 39cf6495-768c-450c-a2c4-c9c3c4ea2e01 + errors: + - code: assignee_not_found + message: Assignee not found + '400': + description: Ticket state id is not valid or is not associated with the + ticket type. + content: + application/json: + examples: + Ticket state id is not valid or is not associated with the ticket type.: + value: + type: error.list + request_id: 28b71de1-b451-433a-a08c-845f2b1736b6 + errors: + - code: ticket_state_id_invalid + message: Ticket state id is not valid or is not associated with + the ticket type + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 17db783e-1e43-41c9-b4db-0c05da78a909 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + allOf: + - "$ref": "#/components/schemas/update_ticket_request" + properties: + skip_notifications: + type: boolean + description: Option to disable notifications when a Ticket is updated. + example: true + examples: + successful_response: + summary: Successful response + value: + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + admin_id: 991268011 + assignee_id: 991268013 + open: true + snoozed_until: 1673609604 + ticket_state_id: 8498 + admin_not_found: + summary: Admin not found + value: + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + admin_id: 991268011 + assignee_id: 991268013 + ticket_state_id: 8506 + assignee_not_found: + summary: Assignee not found + value: + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + admin_id: 991268011 + assignee_id: 991268013 + ticket_state_id: 8514 + ticket_state_id_is_not_valid_or_is_not_associated_with_the_ticket_type: + summary: Ticket state id is not valid or is not associated with the + ticket type. + value: + ticket_state_id: 0 + get: + summary: Retrieve a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_id + in: path + required: true + description: | + The unique identifier for the ticket which is given by Intercom. + {% admonition type="info" name="Not the Inbox ticket ID" %} + This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. + {% /admonition %} + schema: + type: string + tags: + - Tickets + operationId: getTicket + description: You can fetch the details of a single ticket. + responses: + '200': + description: Ticket found + content: + application/json: + examples: + Ticket found: + value: + type: ticket + id: '631' + ticket_id: '38' + ticket_attributes: + _default_title_: attribute_value + _default_description_: + ticket_state: + type: ticket_state + id: '8537' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_type: + type: ticket_type + id: '95' + name: my-ticket-type-30 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id702_that_should_be_at_least_ + archived: false + created_at: 1734537973 + updated_at: 1734537973 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '210' + workspace_id: this_is_an_id702_that_should_be_at_least_ + name: _default_title_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 95 + archived: false + created_at: 1734537973 + updated_at: 1734537973 + - type: ticket_type_attribute + id: '211' + workspace_id: this_is_an_id702_that_should_be_at_least_ + name: _default_description_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 95 + archived: false + created_at: 1734537973 + updated_at: 1734537973 + category: Back-office + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f2f61bb69f9f2193bc59 + external_id: b16afa36-2637-4880-adee-a46d145bc27f + admin_assignee_id: '0' + team_assignee_id: '0' + created_at: 1734537974 + updated_at: 1734537976 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '185' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537975 + updated_at: 1734537975 + author: + id: '991268047' + type: admin + name: Ciaran509 Lee + email: admin509@email.com + attachments: [] + redacted: false + app_package_code: test-integration + total_count: 1 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Back-office + is_shared: false + schema: + "$ref": "#/components/schemas/ticket" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: d719ad4f-5ae2-492f-88d6-98ba0a9ab6cc + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + delete: + summary: Delete a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_id + in: path + required: true + description: | + The unique identifier for the ticket which is given by Intercom. + {% admonition type="info" name="Not the Inbox ticket ID" %} + This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. + {% /admonition %} + schema: + type: string + tags: + - Tickets + operationId: deleteTicket + description: | + {% admonition type="warning" name="Irreversible operation" %} + Deleting a ticket is permanent and cannot be reversed. + {% /admonition %} + + Deleting a ticket permanently removes it from the inbox. All sensitive data is deleted, including admin and user replies, ticket attributes, uploads, and related content. The ticket will still appear in reporting, though some data may be incomplete due to the deletion. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '632' + object: ticket + deleted: true + schema: + "$ref": "#/components/schemas/ticket_deleted" + '404': + description: Ticket not found + content: + application/json: + examples: + Ticket not found: + value: + type: error.list + request_id: 34a070f1-122e-42dc-a94e-9b86768df26c + errors: + - code: ticket_not_found + message: Ticket not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 50348131-55cd-4ca1-a65f-de093b232adb + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 7a80b950-b392-499f-85db-ea7c6c424d37 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + "/tickets/search": + post: + summary: Search tickets + operationId: searchTickets + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Tickets + description: | + You can search for multiple tickets by the value of their attributes in order to fetch exactly which ones you want. + + To search for tickets, you send a `POST` request to `https://api.intercom.io/tickets/search`. + + This will accept a query object in the body which will define your filters. + {% admonition type="warning" name="Optimizing search queries" %} + 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. + See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#example-search-conversations-request) for more details on how to use the `starting_after` param. + {% /admonition %} + + ### Nesting & Limitations + + 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 multiples there can be: + - There's a limit of max 2 nested filters + - There's a limit of max 15 filters for each AND or OR group + + ### Accepted Fields + + Most keys listed as part of the Ticket model are 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 `"foobar"`). + The `source.body` field is unique as the search will not be performed against the entire value, but instead against every element of the value separately. For example, when searching for a conversation with a `"I need support"` body - the query should contain a `=` operator with the value `"support"` for such conversation to be returned. A query with a `=` operator and a `"need support"` value will not yield a result. + + | Field | Type | + | :---------------------------------------- | :--------------------------------------------------------------------------------------- | + | id | String | + | created_at | Date (UNIX timestamp) | + | updated_at | Date (UNIX timestamp) | + | title | String | + | description | String | + | category | String | + | ticket_type_id | String | + | contact_ids | String | + | teammate_ids | String | + | admin_assignee_id | String | + | team_assignee_id | String | + | open | Boolean | + | state | String | + | snoozed_until | Date (UNIX timestamp) | + | ticket_attribute.{id} | String or Boolean or Date (UNIX timestamp) or Float or Integer | + + {% admonition type="info" name="Searching by Category" %} + When searching for tickets by the **`category`** field, specific terms must be used instead of the category names: + * For **Customer** category tickets, use the term `request`. + * For **Back-office** category tickets, use the term `task`. + * For **Tracker** category tickets, use the term `tracker`. + {% /admonition %} + + ### Accepted Operators + + {% admonition type="info" name="Searching based on `created_at`" %} + You may use the `<=` or `>=` operators to search by `created_at`. + {% /admonition %} + + 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 | + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: ticket.list + pages: + type: pages + page: 1 + per_page: 5 + total_pages: 1 + total_count: 1 + tickets: + - type: ticket + id: '633' + ticket_id: '40' + ticket_attributes: + _default_title_: attribute_value + _default_description_: + ticket_state: + type: ticket_state + id: '8577' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_type: + type: ticket_type + id: '100' + name: my-ticket-type-35 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id712_that_should_be_at_least_ + archived: false + created_at: 1734537989 + updated_at: 1734537989 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '220' + workspace_id: this_is_an_id712_that_should_be_at_least_ + name: _default_title_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 100 + archived: false + created_at: 1734537989 + updated_at: 1734537989 + - type: ticket_type_attribute + id: '221' + workspace_id: this_is_an_id712_that_should_be_at_least_ + name: _default_description_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 100 + archived: false + created_at: 1734537989 + updated_at: 1734537989 + category: Back-office + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f3061bb69f9f2193bc5b + external_id: 9b913927-c084-4391-b1db-098341b5ffe3 + admin_assignee_id: '0' + team_assignee_id: '0' + created_at: 1734537990 + updated_at: 1734537992 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '188' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537991 + updated_at: 1734537991 + author: + id: '991268079' + type: admin + name: Ciaran539 Lee + email: admin539@email.com + attachments: [] + redacted: false + total_count: 1 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Back-office + is_shared: false + schema: + "$ref": "#/components/schemas/ticket_list" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/search_request" + examples: + successful: + summary: successful + value: + query: + operator: AND + value: + - field: created_at + operator: ">" + value: '1306054154' + pagination: + per_page: 5 + "/visitors": + put: + summary: Update a visitor + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Visitors + operationId: updateVisitor + description: | + Sending a PUT request to `/visitors` will result in an update of an existing Visitor. + + **Option 1.** You can update a visitor by passing in the `user_id` of the visitor in the Request body. + + **Option 2.** You can update a visitor by passing in the `id` of the visitor in the Request body. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: visitor + id: 6762f30c1bb69f9f2193bc5e + user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 + anonymous: true + email: '' + phone: + name: Gareth Bale + pseudonym: Violet Suitcase + avatar: + type: avatar + image_url: https://static.intercomassets.com/app/pseudonym_avatars_2019/violet-suitcase.png + app_id: this_is_an_id716_that_should_be_at_least_ + companies: + type: company.list + companies: [] + location_data: {} + last_request_at: + created_at: 1734537996 + remote_created_at: 1734537996 + signed_up_at: 1734537996 + updated_at: 1734537997 + session_count: 0 + social_profiles: + type: social_profile.list + social_profiles: [] + owner_id: + unsubscribed_from_emails: false + marked_email_as_spam: false + has_hard_bounced: false + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + custom_attributes: {} + referrer: + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + do_not_track: + schema: + "$ref": "#/components/schemas/visitor" + '404': + description: visitor Not Found + content: + application/json: + examples: + visitor Not Found: + value: + type: error.list + request_id: 6a6d5522-54e2-437d-8fd0-1109686af965 + errors: + - code: not_found + message: Visitor Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 3f474ec4-4e61-42ee-9acc-eac64982e393 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_visitor_request" + examples: + successful: + summary: successful + value: + id: 6762f30c1bb69f9f2193bc5e + name: Gareth Bale + visitor_not_found: + summary: visitor Not Found + value: + user_id: fail + name: Christian Fail + get: + summary: Retrieve a visitor with User ID + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: user_id + in: query + description: The user_id of the Visitor you want to retrieve. + required: true + schema: + type: string + tags: + - Visitors + operationId: retrieveVisitorWithUserId + description: You can fetch the details of a single visitor. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: visitor + id: 6762f3101bb69f9f2193bc64 + user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 + anonymous: true + email: '' + phone: + name: + pseudonym: + avatar: + type: avatar + image_url: + app_id: this_is_an_id722_that_should_be_at_least_ + companies: + type: company.list + companies: [] + location_data: {} + last_request_at: + created_at: 1734538000 + remote_created_at: 1734538000 + signed_up_at: 1734538000 + updated_at: 1734538000 + session_count: 0 + social_profiles: + type: social_profile.list + social_profiles: [] + owner_id: + unsubscribed_from_emails: false + marked_email_as_spam: false + has_hard_bounced: false + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + custom_attributes: {} + referrer: + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + do_not_track: + schema: + "$ref": "#/components/schemas/visitor" + '404': + description: Visitor not found + content: + application/json: + examples: + Visitor not found: + value: + type: error.list + request_id: 3c1b017d-39fb-4d13-8cc9-540ad0d37106 + errors: + - code: not_found + message: Visitor Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 1d7f49b3-10bc-4bf8-a28a-1ac95de3a6ff + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/visitors/convert": + post: + summary: Convert a visitor + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Visitors + operationId: convertVisitor + description: "You can merge a Visitor to a Contact of role type `lead` or `user`.\n\n> + \U0001F4D8 What happens upon a visitor being converted?\n>\n> If the User + exists, then the Visitor will be merged into it, the Visitor deleted and the + User returned. If the User does not exist, the Visitor will be converted to + a User, with the User identifiers replacing it's Visitor identifiers.\n" + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: contact + id: 6762f3141bb69f9f2193bc6b + workspace_id: this_is_an_id728_that_should_be_at_least_ + external_id: + role: user + email: foo@bar.com + phone: + name: + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734538004 + updated_at: 1734538005 + signed_up_at: 1734538004 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} + tags: + type: list + data: [] + url: "/contacts/6762f3141bb69f9f2193bc6b/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f3141bb69f9f2193bc6b/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f3141bb69f9f2193bc6b/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f3141bb69f9f2193bc6b/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f3141bb69f9f2193bc6b/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: + schema: + "$ref": "#/components/schemas/contact" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b3e71306-0600-41e4-9f44-83b52906d2b7 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/convert_visitor_request" + examples: + successful: + summary: successful + value: + visitor: + user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 + user: + email: foo@bar.com + type: user + "/brands": + get: + summary: List all brands + tags: + - Brands + operationId: listBrands + description: | + Retrieves all brands for the workspace, including the default brand. + The default brand id always matches the workspace + parameters: + - name: Intercom-Version + in: header + schema: + $ref: "#/components/schemas/intercom_version" + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: "#/components/schemas/brand_list" + examples: + Successful response: + value: + type: list + data: + - type: brand + id: "tlkp1d91" + name: "Default Brand" + is_default: true + created_at: 1673778600 + updated_at: 1711031100 + help_center_id: "11" + default_address_settings_id: "13" + - type: brand + id: "3" + name: "Premium Brand" + is_default: false + created_at: 1686387300 + updated_at: 1709229600 + help_center_id: "10" + default_address_settings_id: "15" + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "/brands/{id}": + get: + summary: Retrieve a brand + tags: + - Brands + operationId: retrieveBrand + description: Fetches a specific brand by its unique identifier + parameters: + - name: Intercom-Version + in: header + schema: + $ref: "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier of the brand + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: "#/components/schemas/brand" + examples: + Successful response: + value: + type: brand + id: "15" + name: "Premium Brand" + is_default: false + created_at: 1686387300 + updated_at: 1709229600 + help_center_id: "20" + default_address_settings_id: "15" + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/error" + '404': + description: Brand not found + content: + application/json: + schema: + $ref: "#/components/schemas/error" + examples: + Brand not found: + value: + type: error.list + request_id: "req_12345" + errors: + - code: not_found + message: Brand not found + "/emails": + get: + summary: List all email settings + tags: + - Emails + operationId: listEmails + description: Lists all sender email address settings for the workspace + parameters: + - name: Intercom-Version + in: header + schema: + $ref: "#/components/schemas/intercom_version" + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: "#/components/schemas/email_list" + examples: + Successful response: + value: + type: list + data: + - type: email_setting + id: "1" + email: "support@company.com" + verified: true + domain: "company.com" + brand_id: "9" + forwarding_enabled: true + forwarded_email_last_received_at: 1710498600 + created_at: 1692530400 + updated_at: 1710498600 + - type: email_setting + id: "2" + email: "hello@company.com" + verified: true + domain: "company.com" + brand_id: "10" + forwarding_enabled: false + forwarded_email_last_received_at: null + created_at: 1683729000 + updated_at: 1701424500 + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "/emails/{id}": + get: + summary: Retrieve an email setting + tags: + - Emails + operationId: retrieveEmail + description: Fetches a specific email setting by its unique identifier + parameters: + - name: Intercom-Version + in: header + schema: + $ref: "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier of the email setting + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: "#/components/schemas/email_setting" + examples: + Successful response: + value: + type: email_setting + id: "10" + email: "support@company.com" + verified: true + domain: "company.com" + brand_id: "15" + forwarding_enabled: true + forwarded_email_last_received_at: 1710498600 + created_at: 1692530400 + updated_at: 1710498600 + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/error" + '404': + description: Email setting not found + content: + application/json: + schema: + $ref: "#/components/schemas/error" + examples: + Email setting not found: + value: + type: error.list + request_id: "req_12345" + errors: + - code: not_found + message: Email setting not found + "/fin_voice/register": + post: + summary: Register a Fin Voice call + description: | + Register a Fin Voice call with Intercom. This endpoint creates an external reference + that links an external call identifier to an Intercom call and conversation. + + The call can be from different sources: + - AWS Connect (default) + - Five9 + - Zoom Phone + operationId: registerFinVoiceCall + tags: + - Calls + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/register_fin_voice_call_request" + responses: + '200': + description: successful + content: + application/json: + schema: + $ref: "#/components/schemas/ai_call_response" + '400': + description: bad request - missing phone_number or call_id + content: + application/json: + schema: + $ref: "#/components/schemas/error" + '409': + description: conflict - duplicate call registration + content: + application/json: + schema: + $ref: "#/components/schemas/error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "/fin_voice/collect/{id}": + get: + summary: Collect Fin Voice call by ID + description: Retrieve information about a Fin Voice call using the external reference ID. + operationId: collectFinVoiceCallById + tags: + - Calls + parameters: + - name: id + in: path + required: true + description: The external reference ID + schema: + type: integer + responses: + '200': + description: successful + content: + application/json: + schema: + $ref: "#/components/schemas/ai_call_response" + '404': + description: not found - external reference not found or not matched + content: + application/json: + schema: + $ref: "#/components/schemas/error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "/fin_voice/external_id/{external_id}": + get: + summary: Collect Fin Voice call by external ID + description: Retrieve information about a Fin Voice call using the external call identifier. + operationId: collectFinVoiceCallByExternalId + tags: + - Calls + parameters: + - name: external_id + in: path + required: true + description: The external call identifier from the call provider + schema: + type: string + responses: + '200': + description: successful + content: + application/json: + schema: + $ref: "#/components/schemas/ai_call_response" + '404': + description: not found - external reference not found or not matched + content: + application/json: + schema: + $ref: "#/components/schemas/error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "/fin_voice/phone_number/{phone_number}": + get: + summary: Collect Fin Voice call by phone number + description: | + Retrieve information about a Fin Voice call using the phone number. + + Returns the most recent matched call for the given phone number, ordered by creation date. + operationId: collectFinVoiceCallByPhoneNumber + tags: + - Calls + parameters: + - name: phone_number + in: path + required: true + description: Phone number in E.164 format + schema: + type: string + responses: + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/error" + '404': + description: not found - no call found for phone number or not matched + content: + application/json: + schema: + $ref: "#/components/schemas/error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "/fin_voice/conversation/{conversation_id}": + get: + summary: Collect Fin Voice calls by conversation ID + description: | + Retrieve information about Fin Voice calls associated with a conversation. + + Returns all matched calls for the given conversation ID. A conversation may have multiple associated calls. + operationId: collectFinVoiceCallsByConversationId + tags: + - Calls + parameters: + - name: conversation_id + in: path + required: true + description: The Intercom conversation identifier + schema: + type: string + responses: + '200': + description: successful + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ai_call_response" + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "/export/workflows/{id}": + get: + summary: Export a workflow + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + description: The unique identifier for the workflow + required: true + schema: + type: string + example: "12345" + tags: + - Workflows + operationId: exportWorkflow + description: | + Export a workflow configuration by its ID. This endpoint returns the complete workflow definition including its steps, targeting rules, and attributes. + + This endpoint is designed for EU Data Act compliance, allowing customers to export their workflow configurations. + responses: + '200': + description: Workflow exported successfully + content: + application/json: + examples: + successful: + value: + export_version: "1.0" + exported_at: "2026-01-26T12:00:00Z" + app_id: 12345 + workflow: + id: "67890" + title: "My Workflow" + description: "A workflow that handles customer inquiries" + trigger_type: "inbound_conversation" + state: "live" + target_channels: ["chat"] + preferred_devices: ["desktop", "mobile"] + created_at: "2025-06-15T10:30:00Z" + updated_at: "2026-01-20T14:45:00Z" + targeting: {} + snapshot: {} + attributes: [] + embedded_rules: [] + schema: + "$ref": "#/components/schemas/workflow_export" + '404': + description: Workflow not found + content: + application/json: + examples: + Workflow not found: + value: + type: error.list + request_id: b3c8c472-8478-4f10-a29e-a23dbf921c46 + errors: + - code: not_found + message: Workflow not found + schema: + "$ref": "#/components/schemas/error" + '403': + description: Workflow export is not available for this app + content: + application/json: + examples: + Feature not available: + value: + type: error.list + request_id: d92f7e84-5c31-4a2b-b8e6-9f4c3d2a1b0e + errors: + - code: api_plan_restricted + message: Workflow export is not available for this app + schema: + "$ref": "#/components/schemas/error" +components: + schemas: + datetime: + oneOf: + - title: string + type: string + format: date-time + description: A date and time following the ISO8601 notation. + - title: integer + type: integer + description: A date and time as UNIX timestamp notation. + activity_log: + title: Activity Log + type: object + description: Activities performed by Admins. + nullable: true + properties: + id: + type: string + description: The id representing the activity. + example: '6' + performed_by: + type: object + description: Details about the Admin involved in the activity. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `admin`. + example: admin + id: + type: string + description: The id representing the admin. + example: '1295' + email: + type: string + description: The email of the admin. + example: john@example.com + ip: + type: string + description: The IP address of the admin. + example: 198.51.100.255 + metadata: + "$ref": "#/components/schemas/activity_log_metadata" + created_at: + type: integer + format: date-time + description: The time the activity was created. + example: 1671028894 + activity_type: + type: string + enum: + - admin_conversation_assignment_limit_change + - admin_ticket_assignment_limit_change + - admin_avatar_change + - admin_away_mode_change + - admin_deletion + - admin_deprovisioned + - admin_impersonation_end + - admin_impersonation_start + - admin_impersonation_consent_approved + - admin_impersonation_consent_revoked + - admin_invite_change + - admin_invite_creation + - admin_invite_deletion + - admin_login_failure + - admin_login_success + - admin_logout + - admin_password_reset_request + - admin_password_reset_success + - admin_permission_change + - admin_provisioned + - admin_two_factor_auth_change + - admin_unauthorized_sign_in_method + - app_admin_join + - app_authentication_method_change + - app_data_deletion + - app_data_export + - app_google_sso_domain_change + - app_identity_verification_change + - app_name_change + - app_outbound_address_change + - app_package_installation + - app_package_token_regeneration + - app_package_uninstallation + - app_team_creation + - app_team_deletion + - app_team_membership_modification + - app_timezone_change + - app_webhook_creation + - app_webhook_deletion + - articles_in_messenger_enabled_change + - automatic_away_mode_setting_change + - bulk_delete + - bulk_export + - campaign_deletion + - campaign_state_change + - conversation_deletion_schedule_creation + - conversation_deletion_schedule_deletion + - conversation_deletion_schedule_state_change + - conversation_deletion_schedule_update + - conversation_part_deletion + - conversation_pdf_export + - conversation_topic_change + - conversation_topic_creation + - conversation_topic_deletion + - content_redaction_rule_creation + - content_redaction_rule_deletion + - content_redaction_rule_update + - csv_import_completion + - csv_import_creation + - custom_authentication_token_creation + - help_center_settings_change + - inbound_conversations_change + - inbox_access_change + - macro_creation + - macro_deletion + - macro_update + - macro_usage_export + - malicious_domains_setting_change + - message_deletion + - message_state_change + - messenger_api_secret_creation + - messenger_api_secret_deletion + - messenger_look_and_feel_change + - messenger_search_required_change + - messenger_spaces_change + - oauth_token_revocation + - office_hours_change + - role_change + - role_creation + - role_deletion + - ruleset_activation_title_preview + - ruleset_creation + - ruleset_deletion + - search_browse_enabled_change + - search_browse_required_change + - seat_change + - seat_revoke + - security_settings_change + - series_creation + - series_deletion + - series_settings_update + - series_status_change + - series_update + - strip_inbound_email_links_change + - temporary_expectation_change + - team_assignment_limit_change + - trusted_domains_setting_change + - unassign_unsnoozed_at_capacity_setting_change + - unassign_unsnoozed_when_away_setting_change + - upfront_email_collection_change + - allowed_attachment_filetypes_setting_change + - attach_uploads_inline_setting_change + - teammate_gifs_setting_change + - user_camera_attachments_setting_change + - user_conversation_attachments_setting_change + - user_file_attachments_setting_change + - user_gifs_setting_change + - user_media_attachments_setting_change + - user_voice_notes_setting_change + - welcome_message_change + - workspace_deletion_request + - hide_csat_from_agents_setting_change + example: app_name_change + activity_description: + type: string + description: A sentence or two describing the activity. + example: Admin updated the app's name to "My App". + activity_log_list: + title: Paginated Response + type: object + description: A paginated list of activity logs. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `activity_log.list`. + example: activity_log.list + pages: + "$ref": "#/components/schemas/cursor_pages" + activity_logs: + type: array + description: An array of activity logs + items: + "$ref": "#/components/schemas/activity_log" + activity_log_metadata: + title: Activity Log Metadata + type: object + description: Additional data provided about Admin activity. + nullable: true + properties: + sign_in_method: + type: string + nullable: true + description: The way the admin signed in. + example: email_password + external_id: + type: string + nullable: true + description: The unique identifier for the contact which is provided by + the Client. + example: f3b87a2e09d514c6c2e79b9a + away_mode: + type: boolean + nullable: true + description: The away mode status which is set to true when away and false + when returned. + example: true + away_status_reason: + type: string + nullable: true + description: The reason the Admin is away. + example: "\U0001F60C On a break" + reassign_conversations: + type: boolean + nullable: true + description: Indicates if conversations should be reassigned while an Admin + is away. + example: false + source: + type: string + nullable: true + description: The action that initiated the status change. + example: 'admin update from web - Admin id: 93' + auto_changed: + type: string + nullable: true + description: Indicates if the status was changed automatically or manually. + example: false + update_by: + type: integer + nullable: true + description: The ID of the Admin who initiated the activity. + example: 93 + update_by_name: + type: string + nullable: true + description: The name of the Admin who initiated the activity. + example: Joe Example + conversation_assignment_limit: + type: integer + nullable: true + description: The conversation assignment limit value for an admin. + example: 15 + ticket_assignment_limit: + type: integer + nullable: true + description: The ticket assignment limit value for an admin. + example: 20 + team: + type: object + nullable: true + description: Details about the team whose assignment limit was changed. + properties: + id: + type: integer + description: The ID of the team. + example: 123 + name: + type: string + description: The name of the team. + example: Support Team + team_assignment_limit: + type: integer + nullable: true + description: The team assignment limit value (null if limit was removed). + example: 50 + enabled: + type: boolean + nullable: true + description: Indicates if the setting is enabled or disabled. + example: true + mode: + type: string + nullable: true + description: The mode of the setting (e.g., when_away_only, when_away_and_reassign). + example: when_away_only + consent_id: + type: integer + nullable: true + description: The ID of the impersonation consent. + example: 149673 + expired_at: + type: string + format: date-time + nullable: true + description: The timestamp when the impersonation consent expires. + example: "2025-12-04T09:31:57.000Z" + before: + type: object + nullable: true + description: The state of settings or values before the change. Structure varies by activity type. + after: + type: object + nullable: true + description: The state of settings or values after the change. Structure varies by activity type. + addressable_list: + title: Addressable List + type: object + nullable: false + description: A list used to access other resources from a parent model. + properties: + type: + type: string + format: uri + description: The addressable object type + example: note + id: + type: string + description: The id of the addressable object + example: '123' + url: + type: string + format: uri + description: Url to get more company resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/notes" + admin: + title: Admin + type: object + x-tags: + - Admins + description: Admins are teammate accounts that have access to a workspace. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `admin`. + example: admin + id: + type: string + description: The id representing the admin. + example: '1295' + name: + type: string + description: The name of the admin. + example: Joe Example + email: + type: string + description: The email of the admin. + example: jdoe@example.com + job_title: + type: string + description: The job title of the admin. + example: Associate + away_mode_enabled: + type: boolean + description: Identifies if this admin is currently set in away mode. + example: false + away_mode_reassign: + type: boolean + description: Identifies if this admin is set to automatically reassign new + conversations to the apps default inbox. + example: false + away_status_reason_id: + type: integer + nullable: true + description: The unique identifier of the away status reason + example: 12345 + has_inbox_seat: + type: boolean + description: Identifies if this admin has a paid inbox seat to restrict/allow + features that require them. + example: true + team_ids: + type: array + description: This object represents the avatar associated with the admin. + example: + - 814865 + items: + type: integer + avatar: + type: string + format: uri + nullable: true + description: Image for the associated team or teammate + example: https://picsum.photos/200/300 + team_priority_level: + "$ref": "#/components/schemas/team_priority_level" + admin_list: + title: Admins + type: object + description: A list of admins associated with a given workspace. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `admin.list`. + example: admin.list + admins: + type: array + description: A list of admins associated with a given workspace. + items: + "$ref": "#/components/schemas/admin" + admin_priority_level: + title: Admin Priority Level + type: object + nullable: true + description: Admin priority levels for the team + properties: + primary_admin_ids: + type: array + description: The primary admin ids for the team + nullable: true + example: + - 493881 + items: + type: integer + secondary_admin_ids: + type: array + description: The secondary admin ids for the team + nullable: true + example: + - 814865 + items: + type: integer + admin_reply_conversation_request: + title: Admin Reply + type: object + description: Payload of the request to reply on behalf of an admin + properties: + message_type: + type: string + enum: + - comment + - note + - quick_reply + example: comment + type: + type: string + enum: + - admin + example: admin + body: + type: string + description: The text body of the reply. Notes accept some HTML formatting. + Must be present for comment and note message types. + example: Hello there! + admin_id: + type: string + description: The id of the admin who is authoring the comment. + example: '3156780' + created_at: + type: integer + description: The time the reply was created. If not provided, the current + time will be used. + example: 1590000000 + reply_options: + title: Quick Reply Options + type: array + description: The quick reply options to display to the end user. Must be present for quick_reply + message types. + items: + "$ref": "#/components/schemas/quick_reply_option" + attachment_urls: + type: array + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. + items: + type: string + format: uri + maxItems: 10 + attachment_files: + type: array + description: A list of files that will be added as attachments. You can + include up to 10 files + items: + "$ref": "#/components/schemas/conversation_attachment_files" + maxItems: 10 + skip_notifications: + type: boolean + description: Option to disable notifications when replying to a conversation. + example: true + required: + - message_type + - type + - admin_id + admin_reply_ticket_request: + title: Admin Reply on ticket + type: object + description: Payload of the request to reply on behalf of an admin + properties: + message_type: + type: string + enum: + - comment + - note + - quick_reply + example: comment + type: + type: string + enum: + - admin + example: admin + body: + type: string + description: The text body of the reply. Notes accept some HTML formatting. + Must be present for comment and note message types. + example: Hello there! + admin_id: + type: string + description: The id of the admin who is authoring the comment. + example: '3156780' + created_at: + type: integer + description: The time the reply was created. If not provided, the current + time will be used. + example: 1590000000 + reply_options: + title: Quick Reply Options + type: array + description: The quick reply options to display. Must be present for quick_reply + message types. + items: + title: Quick Reply Option + type: object + properties: + text: + type: string + description: The text to display in this quick reply option. + uuid: + type: string + format: uuid + description: A unique identifier for this quick reply option. This + value will be available within the metadata of the comment ticket + part that is created when a user clicks on this reply option. + required: + - text + - uuid + attachment_urls: + type: array + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. + items: + type: string + format: uri + maxItems: 10 + cross_post: + type: boolean + description: If set to true, the note will be cross-posted to all linked + conversations. Only applicable to note message types on back-office tickets. + example: true + required: + - message_type + - type + - admin_id + admin_with_app: + title: Admin + type: object + description: Admins are the teammate accounts that have access to a workspace + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `admin`. + example: admin + id: + type: string + description: The id representing the admin. + example: '1295' + name: + type: string + description: The name of the admin. + example: Joe Example + email: + type: string + description: The email of the admin. + example: jdoe@example.com + job_title: + type: string + description: The job title of the admin. + example: Associate + away_mode_enabled: + type: boolean + description: Identifies if this admin is currently set in away mode. + example: false + away_mode_reassign: + type: boolean + description: Identifies if this admin is set to automatically reassign new + conversations to the apps default inbox. + example: false + has_inbox_seat: + type: boolean + description: Identifies if this admin has a paid inbox seat to restrict/allow + features that require them. + example: true + team_ids: + type: array + description: This is a list of ids of the teams that this admin is part + of. + example: + - 814865 + items: + type: integer + avatar: + type: object + description: This object represents the avatar associated with the admin. + properties: + type: + type: string + description: This is a string that identifies the type of the object. + It will always have the value `avatar`. + default: avatar + example: avatar + image_url: + type: string + format: uri + nullable: true + description: This object represents the avatar associated with the admin. + example: https://example.com/avatar.png + email_verified: + type: boolean + description: Identifies if this admin's email is verified. + nullable: true + example: true + app: + "$ref": "#/components/schemas/app" + nullable: true + description: App that the admin belongs to. + ai_agent: + title: AI Agent + type: object + x-tags: + - Ai Agent + description: Data related to AI Agent involvement in the conversation. + properties: + source_type: + type: string + nullable: true + description: The type of the source that triggered AI Agent involvement + in the conversation. + enum: + - essentials_plan_setup + - profile + - workflow + - workflow_preview + - fin_preview + example: workflow + source_title: + type: string + description: The title of the source that triggered AI Agent involvement + in the conversation. If this is `essentials_plan_setup` then it will return + `null`. + example: My AI Workflow + nullable: true + last_answer_type: + type: string + description: The type of the last answer delivered by AI Agent. If no answer + was delivered then this will return `null` + enum: + - + - ai_answer + - custom_answer + example: ai_answer + nullable: true + resolution_state: + type: string + description: The resolution state of AI Agent. If no AI or custom answer + has been delivered then this will return `null`. + enum: + - assumed_resolution + - confirmed_resolution + - escalated + - negative_feedback + - procedure_handoff + - + example: assumed_resolution + nullable: true + rating: + type: integer + description: The customer satisfaction rating given to AI Agent, from 1-5. + example: 4 + nullable: true + rating_remark: + type: string + description: The customer satisfaction rating remark given to AI Agent. + example: Very helpful! + nullable: true + created_at: + type: integer + format: date-time + description: The time when the AI agent rating was created. + example: 1663597260 + nullable: true + updated_at: + type: integer + format: date-time + description: The time when the AI agent rating was last updated. + example: 1663597260 + nullable: true + content_sources: + "$ref": "#/components/schemas/content_sources_list" + ai_call_response: + title: AI Call Response + type: object + description: Response containing information about a Fin Voice call + properties: + id: + type: integer + description: The unique identifier for the external reference + example: 12345 + app_id: + type: integer + description: The workspace identifier + example: 12345 + user_phone_number: + type: string + description: Phone number in E.164 format for the call + example: '+1234567890' + status: + type: string + description: Status of the call. Can be "registered", "in-progress", or a resolution state + example: 'registered' + intercom_call_id: + type: string + nullable: true + description: The Intercom call identifier, if the call has been matched + example: '1234' + external_call_id: + type: string + description: The external call identifier from the call provider + example: 'call-123-abc' + intercom_conversation_id: + type: string + nullable: true + description: The Intercom conversation identifier, if a conversation has been created + example: '5678' + call_transcript: + type: array + description: Array of transcript entries for the call + items: + type: object + example: [] + call_summary: + type: string + description: Summary of the call conversation, truncated to 256 characters. Empty string if no summary available. + example: 'Customer called about billing issue...' + intent: + type: array + description: Array of intent classifications for the call + items: + type: object + example: [] + app: + title: App + type: object + description: App is a workspace on Intercom + nullable: true + properties: + type: + type: string + description: '' + default: app + example: app + id_code: + type: string + description: The id of the app. + example: xyz789 + name: + type: string + description: The name of the app. + example: ACME + region: + type: string + description: The Intercom region the app is located in. + example: US + timezone: + type: string + description: The timezone of the region where the app is located. + example: America/Los_Angeles + created_at: + type: integer + description: When the app was created. + example: 1671465577 + identity_verification: + type: boolean + description: Whether or not the app uses identity verification. + example: false + article: + title: Article + type: object + x-tags: + - Articles + description: The Articles API is a central place to gather all information and + take actions on your articles. Articles can live within collections and sections, + or alternatively they can stand alone. + properties: + statistics: + nullable: true + "$ref": "#/components/schemas/article_statistics" + allOf: + - "$ref": "#/components/schemas/article_list_item" + internal_article: + title: Internal Article + type: object + x-tags: + - Articles + description: The Internal Articles API is a central place to gather all information and + take actions on your internal articles. + allOf: + - "$ref": "#/components/schemas/internal_article_list_item" + article_content: + title: Article Content + type: object + description: The Content of an Article. + nullable: true + properties: + type: + type: string + description: The type of object - `article_content` . + enum: + - + - article_content + example: article_content + nullable: true + title: + type: string + description: The title of the article. + example: How to create a new article + description: + type: string + description: The description of the article. + example: This article will show you how to create a new article. + body: + type: string + description: The body of the article. + example: This is the body of the article. + author_id: + type: integer + description: The ID of the author of the article. + example: '5017691' + state: + type: string + description: Whether the article is `published` or is a `draft` . + enum: + - published + - draft + example: draft + created_at: + type: integer + format: date-time + description: The time when the article was created (seconds). + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The time when the article was last updated (seconds). + example: 1663597260 + url: + type: string + description: The URL of the article. + example: http://intercom.test/help/en/articles/3-default-language + internal_article_list: + title: Internal Articles + type: object + description: This will return a list of internal articles for the App. + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of internal articles. + example: 1 + data: + type: array + description: An array of Internal Article objects + items: + "$ref": "#/components/schemas/internal_article_list_item" + article_list: + title: Articles + type: object + description: This will return a list of articles for the App. + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of articles. + example: 1 + data: + type: array + description: An array of Article objects + items: + "$ref": "#/components/schemas/article_list_item" + article_list_item: + title: Articles + type: object + x-tags: + - Articles + description: The data returned about your articles when you list them. + properties: + type: + type: string + description: The type of object - `article`. + enum: + - article + default: article + example: article + id: + type: string + description: The unique identifier for the article which is given by Intercom. + example: '6871119' + workspace_id: + type: string + description: The id of the workspace which the article belongs to. + example: hfi1bx4l + title: + type: string + description: The title of the article. For multilingual articles, this will + be the title of the default language's content. + example: Default language title + description: + type: string + nullable: true + description: The description of the article. For multilingual articles, + this will be the description of the default language's content. + example: Default language description + body: + type: string + nullable: true + description: The body of the article in HTML. For multilingual articles, + this will be the body of the default language's content. + example: Default language body in html + author_id: + type: integer + description: The id of the author of the article. For multilingual articles, + this will be the id of the author of the default language's content. Must + be a teammate on the help center's workspace. + example: '5017691' + state: + type: string + description: Whether the article is `published` or is a `draft`. For multilingual + articles, this will be the state of the default language's content. + enum: + - published + - draft + default: draft + example: published + created_at: + type: integer + format: date-time + description: The time when the article was created. For multilingual articles, + this will be the timestamp of creation of the default language's content + in seconds. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the article was last updated. For multilingual + articles, this will be the timestamp of last update of the default language's + content in seconds. + example: 1672928610 + url: + type: string + nullable: true + description: The URL of the article. For multilingual articles, this will + be the URL of the default language's content. + example: http://intercom.test/help/en/articles/3-default-language + parent_id: + type: integer + nullable: true + description: The id of the article's parent collection or section. An article + without this field stands alone. + example: '125685' + parent_ids: + type: array + description: The ids of the article's parent collections or sections. An + article without this field stands alone. + items: + type: integer + example: + - 18 + - 19 + parent_type: + type: string + nullable: true + description: The type of parent, which can either be a `collection` or `section`. + example: collection + default_locale: + type: string + description: The default locale of the help center. This field is only returned + for multilingual help centers. + example: en + translated_content: + nullable: true + "$ref": "#/components/schemas/article_translated_content" + tags: + "$ref": "#/components/schemas/tags" + internal_article_list_item: + title: Internal Articles + type: object + x-tags: + - Internal Articles + description: The data returned about your internal articles when you list them. + properties: + type: + type: string + description: The type of object - `internal_article`. + enum: + - internal_article + default: internal_article + example: internal_article + id: + type: string + description: The unique identifier for the article which is given by Intercom. + example: '6871119' + title: + type: string + description: The title of the article. + body: + type: string + nullable: true + description: The body of the article in HTML. + example: Default language body in html + owner_id: + type: integer + description: The id of the owner of the article. + example: '5017691' + author_id: + type: integer + description: The id of the author of the article. + example: '5017691' + created_at: + type: integer + format: date-time + description: The time when the article was created. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the article was last updated. + example: 1672928610 + locale: + type: string + description: The default locale of the article. + example: en + article_search_highlights: + title: Article Search Highlights + type: object + x-tags: + - Articles + description: The highlighted results of an Article search. In the examples provided + my search query is always "my query". + properties: + article_id: + type: string + description: The ID of the corresponding article. + example: '123' + highlighted_title: + type: array + description: An Article title highlighted. + items: + type: object + description: A highlighted article title. + properties: + type: + type: string + description: The type of text - `highlight` or `plain`. + enum: + - highlight + - plain + example: 'The highlight is ' + text: + type: string + description: The text of the title. + example: my query + highlighted_summary: + type: array + description: An Article description and body text highlighted. + items: + type: array + description: An array containing the highlighted summary text split into + chunks of plain and highlighted text. + items: + type: object + description: An instance of highlighted summary text. + properties: + type: + type: string + description: The type of text - `highlight` or `plain`. + enum: + - highlight + - plain + example: 'How to highlight ' + text: + type: string + description: The text of the title. + example: my query + article_search_response: + title: Article Search Response + type: object + x-tags: + - Articles + description: The results of an Article search + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + total_count: + type: integer + description: The total number of Articles matching the search query + example: 5 + data: + type: object + description: An object containing the results of the search. + properties: + articles: + type: array + description: An array of Article objects + items: + "$ref": "#/components/schemas/article" + highlights: + type: array + description: A corresponding array of highlighted Article content + items: + "$ref": "#/components/schemas/article_search_highlights" + pages: + "$ref": "#/components/schemas/cursor_pages" + internal_article_search_response: + title: Internal Article Search Response + type: object + x-tags: + - Internal Articles + description: The results of an Internal Article search + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + total_count: + type: integer + description: The total number of Internal Articles matching the search query + example: 5 + data: + type: object + description: An object containing the results of the search. + properties: + internal_articles: + type: array + description: An array of Internal Article objects + items: + "$ref": "#/components/schemas/internal_article" + pages: + "$ref": "#/components/schemas/cursor_pages" + article_statistics: + title: Article Statistics + type: object + description: The statistics of an article. + nullable: true + properties: + type: + type: string + description: The type of object - `article_statistics`. + enum: + - article_statistics + default: article_statistics + example: article_statistics + views: + type: integer + description: The number of total views the article has received. + example: 10 + conversions: + type: integer + description: The number of conversations started from the article. + example: 0 + reactions: + type: integer + description: The number of total reactions the article has received. + example: 10 + happy_reaction_percentage: + type: number + format: float + description: The percentage of happy reactions the article has received + against other types of reaction. + example: 40.0 + neutral_reaction_percentage: + type: number + format: float + description: The percentage of neutral reactions the article has received + against other types of reaction. + example: 40.0 + sad_reaction_percentage: + type: number + format: float + description: The percentage of sad reactions the article has received against + other types of reaction. + example: 20.0 + article_translated_content: + title: Article Translated Content + type: object + description: The Translated Content of an Article. The keys are the locale codes + and the values are the translated content of the article. + nullable: true + properties: + type: + type: string + description: The type of object - article_translated_content. + enum: + - + - article_translated_content + example: article_translated_content + nullable: true + ar: + description: The content of the article in Arabic + "$ref": "#/components/schemas/article_content" + bg: + description: The content of the article in Bulgarian + "$ref": "#/components/schemas/article_content" + bs: + description: The content of the article in Bosnian + "$ref": "#/components/schemas/article_content" + ca: + description: The content of the article in Catalan + "$ref": "#/components/schemas/article_content" + cs: + description: The content of the article in Czech + "$ref": "#/components/schemas/article_content" + da: + description: The content of the article in Danish + "$ref": "#/components/schemas/article_content" + de: + description: The content of the article in German + "$ref": "#/components/schemas/article_content" + el: + description: The content of the article in Greek + "$ref": "#/components/schemas/article_content" + en: + description: The content of the article in English + "$ref": "#/components/schemas/article_content" + es: + description: The content of the article in Spanish + "$ref": "#/components/schemas/article_content" + et: + description: The content of the article in Estonian + "$ref": "#/components/schemas/article_content" + fi: + description: The content of the article in Finnish + "$ref": "#/components/schemas/article_content" + fr: + description: The content of the article in French + "$ref": "#/components/schemas/article_content" + he: + description: The content of the article in Hebrew + "$ref": "#/components/schemas/article_content" + hr: + description: The content of the article in Croatian + "$ref": "#/components/schemas/article_content" + hu: + description: The content of the article in Hungarian + "$ref": "#/components/schemas/article_content" + id: + description: The content of the article in Indonesian + "$ref": "#/components/schemas/article_content" + it: + description: The content of the article in Italian + "$ref": "#/components/schemas/article_content" + ja: + description: The content of the article in Japanese + "$ref": "#/components/schemas/article_content" + ko: + description: The content of the article in Korean + "$ref": "#/components/schemas/article_content" + lt: + description: The content of the article in Lithuanian + "$ref": "#/components/schemas/article_content" + lv: + description: The content of the article in Latvian + "$ref": "#/components/schemas/article_content" + mn: + description: The content of the article in Mongolian + "$ref": "#/components/schemas/article_content" + nb: + description: The content of the article in Norwegian + "$ref": "#/components/schemas/article_content" + nl: + description: The content of the article in Dutch + "$ref": "#/components/schemas/article_content" + pl: + description: The content of the article in Polish + "$ref": "#/components/schemas/article_content" + pt: + description: The content of the article in Portuguese (Portugal) + "$ref": "#/components/schemas/article_content" + ro: + description: The content of the article in Romanian + "$ref": "#/components/schemas/article_content" + ru: + description: The content of the article in Russian + "$ref": "#/components/schemas/article_content" + sl: + description: The content of the article in Slovenian + "$ref": "#/components/schemas/article_content" + sr: + description: The content of the article in Serbian + "$ref": "#/components/schemas/article_content" + sv: + description: The content of the article in Swedish + "$ref": "#/components/schemas/article_content" + tr: + description: The content of the article in Turkish + "$ref": "#/components/schemas/article_content" + vi: + description: The content of the article in Vietnamese + "$ref": "#/components/schemas/article_content" + pt-BR: + description: The content of the article in Portuguese (Brazil) + "$ref": "#/components/schemas/article_content" + zh-CN: + description: The content of the article in Chinese (China) + "$ref": "#/components/schemas/article_content" + zh-TW: + description: The content of the article in Chinese (Taiwan) + "$ref": "#/components/schemas/article_content" + assign_conversation_request: + title: Assign Conversation Request + type: object + description: Payload of the request to assign a conversation + properties: + message_type: + type: string + enum: + - assignment + example: assignment + type: + type: string + enum: + - admin + - team + example: admin + admin_id: + type: string + description: The id of the admin who is performing the action. + example: '12345' + assignee_id: + type: string + description: The `id` of the `admin` or `team` which will be assigned the + conversation. A conversation can be assigned both an admin and a team.\nSet + `0` if you want this assign to no admin or team (ie. Unassigned). + example: '4324241' + body: + type: string + description: Optionally you can send a response in the conversation when + it is assigned. + example: Let me pass you over to one of my colleagues. + required: + - message_type + - type + - admin_id + - assignee_id + attach_contact_to_conversation_request: + title: Assign Conversation Request + type: object + description: Payload of the request to assign a conversation + properties: + admin_id: + type: string + description: The `id` of the admin who is adding the new participant. + example: '12345' + customer: + type: object + oneOf: + - title: Intercom User ID + properties: + intercom_user_id: + type: string + description: The identifier for the contact as given by Intercom. + example: 6329bd9ffe4e2e91dac76188 + customer: + "$ref": "#/components/schemas/customer_request" + required: + - intercom_user_id + - title: User ID + properties: + user_id: + type: string + description: The external_id you have defined for the contact who + is being added as a participant. + example: 6329bd9ffe4e2e91dac76188 + customer: + "$ref": "#/components/schemas/customer_request" + required: + - user_id + - title: Email + properties: + email: + type: string + description: The email you have defined for the contact who is being + added as a participant. + example: winstonsmith@truth.org + customer: + "$ref": "#/components/schemas/customer_request" + required: + - email + brand: + type: object + title: Brand + description: Represents a branding configuration for the workspace + x-tags: + - Brands + properties: + type: + type: string + description: The type of object + example: brand + id: + type: string + description: Unique brand identifier. For default brand, matches the workspace ID + example: "10" + name: + type: string + description: Display name of the brand + example: "Default Brand" + is_default: + type: boolean + description: Whether this is the workspace's default brand + example: true + created_at: + type: integer + format: date-time + description: Unix timestamp of brand creation + example: 1673778600 + updated_at: + type: integer + format: date-time + description: Unix timestamp of last modification + example: 1711031100 + help_center_id: + type: string + description: Associated help center identifier + example: "10" + default_address_settings_id: + type: string + description: Default email settings ID for this brand + example: "15" + brand_list: + type: object + title: Brand List + description: A list of brands + x-tags: + - Brands + properties: + type: + type: string + description: The type of object + example: list + data: + type: array + items: + $ref: "#/components/schemas/brand" + away_status_reason: + type: object + properties: + type: + type: string + example: "away_status_reason" + id: + type: string + description: "The unique identifier for the away status reason" + label: + type: string + description: "The display text for the away status reason" + example: "On a break" + emoji: + type: string + description: "The emoji associated with the status reason" + example: "☕" + order: + type: integer + description: "The display order of the status reason" + example: 1 + deleted: + type: boolean + description: "Whether the status reason has been soft deleted" + example: false + created_at: + type: integer + description: "The Unix timestamp when the status reason was created" + example: 1734537243 + updated_at: + type: integer + description: "The Unix timestamp when the status reason was last updated" + example: 1734537243 + away_status_reason_list: + title: Away Status Reasons + type: object + description: A list of away status reasons. + properties: + type: + type: string + description: The type of the object + enum: + - list + example: list + data: + type: array + description: A list of away status reason objects. + items: + "$ref": "#/components/schemas/away_status_reason" + close_conversation_request: + title: Close Conversation Request + type: object + description: Payload of the request to close a conversation + properties: + message_type: + type: string + enum: + - close + example: close + type: + type: string + enum: + - admin + example: admin + admin_id: + type: string + description: The id of the admin who is performing the action. + example: '12345' + body: + type: string + description: Optionally you can leave a message in the conversation to provide + additional context to the user and other teammates. + example: " This conversation is now closed!" + required: + - message_type + - type + - admin_id + collection: + title: Collection + type: object + x-tags: + - Help Center + description: Collections are top level containers for Articles within the Help + Center. + properties: + id: + type: string + description: The unique identifier for the collection which is given by + Intercom. + example: '6871119' + workspace_id: + type: string + description: The id of the workspace which the collection belongs to. + example: hfi1bx4l + name: + type: string + description: The name of the collection. For multilingual collections, this + will be the name of the default language's content. + example: Default language name + description: + type: string + nullable: true + description: The description of the collection. For multilingual help centers, + this will be the description of the collection for the default language. + example: Default language description + created_at: + type: integer + format: date-time + description: The time when the article was created (seconds). For multilingual + articles, this will be the timestamp of creation of the default language's + content. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the article was last updated (seconds). For multilingual + articles, this will be the timestamp of last update of the default language's + content. + example: 1672928610 + url: + type: string + nullable: true + description: The URL of the collection. For multilingual help centers, this + will be the URL of the collection for the default language. + example: http://intercom.test/help/collection/name + icon: + type: string + nullable: true + description: The icon of the collection. + example: book-bookmark + order: + type: integer + description: The order of the section in relation to others sections within + a collection. Values go from `0` upwards. `0` is the default if there's + no order. + example: '1' + default_locale: + type: string + description: The default locale of the help center. This field is only returned + for multilingual help centers. + example: en + translated_content: + nullable: true + "$ref": "#/components/schemas/group_translated_content" + parent_id: + type: string + nullable: true + description: The id of the parent collection. If `null` then it is the first + level collection. + example: '6871118' + help_center_id: + type: integer + nullable: true + description: The id of the help center the collection is in. + example: '123' + collection_list: + title: Collections + type: object + description: This will return a list of Collections for the App. + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of collections. + example: 1 + data: + type: array + description: An array of collection objects + items: + "$ref": "#/components/schemas/collection" + company: + title: Company + type: object + x-tags: + - Companies + description: Companies allow you to represent organizations using your product. + Each company will have its own description and be associated with contacts. + You can fetch, create, update and list companies. + properties: + type: + type: string + description: Value is `company` + enum: + - company + example: company + id: + type: string + description: The Intercom defined id representing the company. + example: 531ee472cce572a6ec000006 + name: + type: string + description: The name of the company. + example: Blue Sun + app_id: + type: string + description: The Intercom defined code of the workspace the company is associated + to. + example: ecahpwf5 + plan: + type: object + properties: + type: + type: string + description: Value is always "plan" + example: plan + id: + type: string + description: The id of the plan + example: '269315' + name: + type: string + description: The name of the plan + example: Pro + company_id: + type: string + description: The company id you have defined for the company. + example: '6' + remote_created_at: + type: integer + description: The time the company was created by you. + example: 1663597223 + created_at: + type: integer + description: The time the company was added in Intercom. + example: 1663597223 + updated_at: + type: integer + description: The last time the company was updated. + example: 1663597223 + last_request_at: + type: integer + description: The time the company last recorded making a request. + example: 1663597223 + size: + type: integer + description: The number of employees in the company. + example: 100 + website: + type: string + description: The URL for the company website. + example: https://www.intercom.com + industry: + type: string + description: The industry that the company operates in. + example: Software + monthly_spend: + type: integer + description: How much revenue the company generates for your business. + example: 100 + session_count: + type: integer + description: How many sessions the company has recorded. + example: 100 + user_count: + type: integer + description: The number of users in the company. + example: 100 + custom_attributes: + type: object + description: The custom attributes you have set on the company. + additionalProperties: + type: string + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + tags: + type: object + description: The list of tags associated with the company + properties: + type: + type: string + description: The type of the object + enum: + - tag.list + tags: + type: array + items: + "$ref": "#/components/schemas/tag_basic" + segments: + type: object + description: The list of segments associated with the company + properties: + type: + type: string + description: The type of the object + enum: + - segment.list + segments: + type: array + items: + "$ref": "#/components/schemas/segment" + company_attached_contacts: + title: Company Attached Contacts + type: object + description: A list of Contact Objects + properties: + type: + type: string + description: The type of object - `list` + enum: + - list + example: list + data: + type: array + description: An array containing Contact Objects + items: + "$ref": "#/components/schemas/contact" + total_count: + type: integer + description: The total number of contacts + example: 100 + pages: + "$ref": "#/components/schemas/cursor_pages" + company_attached_segments: + title: Company Attached Segments + type: object + description: A list of Segment Objects + properties: + type: + type: string + description: The type of object - `list` + enum: + - list + example: list + data: + type: array + description: An array containing Segment Objects + items: + "$ref": "#/components/schemas/segment" + company_note: + title: Company Note + type: object + x-tags: + - Notes + description: Notes allow you to annotate and comment on companies. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `note`. + example: note + id: + type: string + description: The id of the note. + example: '17495962' + created_at: + type: integer + format: timestamp + description: The time the note was created. + example: 1674589321 + company: + type: object + description: Represents the company that the note was created about. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `company`. + example: company + id: + type: string + description: The id of the company. + example: 6329bd9ffe4e2e91dac76188 + author: + "$ref": "#/components/schemas/admin" + description: Optional. Represents the Admin that created the note. + body: + type: string + description: The body text of the note. + example: "

Text for the note.

" + company_list: + title: Companies + type: object + description: This will return a list of companies for the App. + properties: + type: + type: string + description: The type of object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: The total number of companies. + example: 100 + data: + type: array + description: An array containing Company Objects. + items: + "$ref": "#/components/schemas/company" + company_scroll: + title: Company Scroll + type: object + description: Companies allow you to represent organizations using your product. + Each company will have its own description and be associated with contacts. + You can fetch, create, update and list companies. + nullable: true + properties: + type: + type: string + description: The type of object - `list` + enum: + - list + example: list + data: + type: array + items: + "$ref": "#/components/schemas/company" + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: The total number of companies + nullable: true + example: 100 + scroll_param: + type: string + description: The scroll parameter to use in the next request to fetch the + next page of results. + example: 25b649f7-4d33-4ef6-88f5-60e5b8244309 + contact: + title: Contact + type: object + x-tags: + - Contacts + x-fern-sdk-group-name: contacts + description: Contacts represent your leads and users in Intercom. + properties: + type: + type: string + description: The type of object. + example: contact + id: + type: string + description: The unique identifier for the contact which is given by Intercom. + example: 5ba682d23d7cf92bef87bfd4 + external_id: + type: string + nullable: true + description: The unique identifier for the contact which is provided by + the Client. + example: f3b87a2e09d514c6c2e79b9a + workspace_id: + type: string + description: The id of the workspace which the contact belongs to. + example: ecahpwf5 + role: + type: string + description: The role of the contact. + example: user + email: + type: string + description: The contact's email. + example: joe@example.com + email_domain: + type: string + description: The contact's email domain. + example: example.com + phone: + type: string + nullable: true + description: The contacts phone. + example: "+1123456789" + name: + type: string + nullable: true + description: The contacts name. + example: John Doe + owner_id: + type: integer + nullable: true + description: The id of an admin that has been assigned account ownership + of the contact. + example: 123 + has_hard_bounced: + type: boolean + description: Whether the contact has had an email sent to them hard bounce. + example: true + marked_email_as_spam: + type: boolean + description: Whether the contact has marked an email sent to them as spam. + example: true + unsubscribed_from_emails: + type: boolean + description: Whether the contact is unsubscribed from emails. + example: true + created_at: + type: integer + format: date-time + description: "(Unix timestamp in seconds) The time when the contact was created." + example: 1571672154 + updated_at: + type: integer + format: date-time + description: "(Unix timestamp in seconds) The time when the contact was last updated." + example: 1571672154 + signed_up_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time specified for when a contact signed + up." + example: 1571672154 + last_seen_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time when the contact was last seen (either + where the Intercom Messenger was installed or when specified manually)." + example: 1571672154 + last_replied_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time when the contact last messaged in." + example: 1571672154 + last_contacted_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time when the contact was last messaged." + example: 1571672154 + last_email_opened_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time when the contact last opened an + email." + example: 1571672154 + last_email_clicked_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time when the contact last clicked a + link in an email." + example: 1571672154 + language_override: + type: string + nullable: true + description: A preferred language setting for the contact, used by the Intercom + Messenger even if their browser settings change. + example: en + browser: + type: string + nullable: true + description: The name of the browser which the contact is using. + example: Chrome + browser_version: + type: string + nullable: true + description: The version of the browser which the contact is using. + example: 80.0.3987.132 + browser_language: + type: string + nullable: true + description: The language set by the browser which the contact is using. + example: en-US + os: + type: string + nullable: true + description: The operating system which the contact is using. + example: Mac OS X + android_app_name: + type: string + nullable: true + description: The name of the Android app which the contact is using. + example: Intercom + android_app_version: + type: string + nullable: true + description: The version of the Android app which the contact is using. + example: 5.0.0 + android_device: + type: string + nullable: true + description: The Android device which the contact is using. + example: Pixel 3 + android_os_version: + type: string + nullable: true + description: The version of the Android OS which the contact is using. + example: '10' + android_sdk_version: + type: string + nullable: true + description: The version of the Android SDK which the contact is using. + example: '28' + android_last_seen_at: + type: integer + nullable: true + format: date-time + description: "(Unix timestamp in seconds) The time when the contact was last seen on + an Android device." + example: 1571672154 + ios_app_name: + type: string + nullable: true + description: The name of the iOS app which the contact is using. + example: Intercom + ios_app_version: + type: string + nullable: true + description: The version of the iOS app which the contact is using. + example: 5.0.0 + ios_device: + type: string + nullable: true + description: The iOS device which the contact is using. + example: iPhone 11 + ios_os_version: + type: string + nullable: true + description: The version of iOS which the contact is using. + example: 13.3.1 + ios_sdk_version: + type: string + nullable: true + description: The version of the iOS SDK which the contact is using. + example: 13.3.1 + ios_last_seen_at: + type: integer + nullable: true + format: date-time + description: "(Unix timestamp in seconds) The last time the contact used the iOS app." + example: 1571672154 + custom_attributes: + type: object + description: The custom attributes which are set for the contact. + avatar: + type: object + nullable: true + properties: + type: + type: string + description: The type of object + example: avatar + image_url: + type: string + format: uri + nullable: true + description: An image URL containing the avatar of a contact. + example: https://example.org/128Wash.jpg + tags: + "$ref": "#/components/schemas/contact_tags" + notes: + "$ref": "#/components/schemas/contact_notes" + companies: + "$ref": "#/components/schemas/contact_companies" + location: + "$ref": "#/components/schemas/contact_location" + social_profiles: + "$ref": "#/components/schemas/contact_social_profiles" + contact_attached_companies: + title: Contact Attached Companies + type: object + description: A list of Company Objects + properties: + type: + type: string + description: The type of object + enum: + - list + example: list + companies: + type: array + description: An array containing Company Objects + items: + "$ref": "#/components/schemas/company" + total_count: + type: integer + description: The total number of companies associated to this contact + example: 100 + pages: + "$ref": "#/components/schemas/pages_link" + contact_companies: + title: Contact companies + type: object + nullable: false + description: An object with metadata about companies attached to a contact . Up to 10 will be displayed here. Use the url to get more. + properties: + data: + type: array + description: An array of company data objects attached to the contact. + items: + "$ref": "#/components/schemas/company_data" + url: + type: string + format: uri + description: Url to get more company resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/companies" + total_count: + type: integer + description: Integer representing the total number of companies attached to + this contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + company_data: + title: Company Data + type: object + description: An object containing data about the companies that a contact is associated with. + properties: + id: + type: string + description: The unique identifier for the company which is given by Intercom. + example: 5ba682d23d7cf92bef87bfd4 + type: + type: string + description: The type of the object. Always company. + enum: + - company + example: company + url: + type: string + format: uri + description: The relative URL of the company. + example: "/companies/5ba682d23d7cf92bef87bfd4" + contact_deleted: + title: Contact Deleted + description: deleted contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + deleted: + type: boolean + description: Whether the contact is deleted or not. + example: true + contact_list: + title: Contact List + type: object + description: Contacts are your users in Intercom. + properties: + type: + type: string + description: Always list + enum: + - list + example: list + data: + type: array + description: The list of contact objects + items: + "$ref": "#/components/schemas/contact" + total_count: + type: integer + description: A count of the total number of objects. + example: 100 + pages: + "$ref": "#/components/schemas/cursor_pages" + contact_location: + title: Contact Location + type: object + nullable: false + description: An object containing location meta data about a Intercom contact. + properties: + type: + type: string + nullable: true + description: Always location + example: location + country: + type: string + nullable: true + description: The country that the contact is located in + example: Ireland + region: + type: string + nullable: true + description: The overal region that the contact is located in + example: Dublin + city: + type: string + nullable: true + description: The city that the contact is located in + example: Dublin + contact_notes: + title: Contact notes + type: object + nullable: false + description: An object containing notes meta data about the notes that a contact + has. Up to 10 will be displayed here. Use the url to get more. + properties: + data: + type: array + description: This object represents the notes attached to a contact. + items: + "$ref": "#/components/schemas/addressable_list" + url: + type: string + format: uri + description: Url to get more company resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/notes" + total_count: + type: integer + description: Int representing the total number of companyies attached to + this contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + contact_reference: + title: Contact Reference + type: object + description: reference to contact object + properties: + type: + type: string + description: always contact + enum: + - contact + example: contact + id: + type: string + description: The unique identifier for the contact which is given by Intercom. + example: 5ba682d23d7cf92bef87bfd4 + external_id: + type: string + nullable: true + description: The unique identifier for the contact which is provided by + the Client. + example: "70" + contact_reply_base_request: + title: Contact Reply Base Object + type: object + properties: + message_type: + type: string + enum: + - comment + type: + type: string + enum: + - user + body: + type: string + description: The text body of the comment. + created_at: + type: integer + description: The time the reply was created. If not provided, the current + time will be used. + example: 1590000000 + attachment_urls: + title: Attachment URLs + type: array + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. + items: + type: string + format: uri + maxItems: 10 + reply_options: + title: Contact Quick Reply + type: array + description: The quick reply selection the contact wishes to respond with. + These map to buttons displayed in the Messenger UI if sent by a bot, or the reply options sent by an Admin via the API. + items: + title: Quick Reply Option + type: object + properties: + text: + type: string + description: The text of the chosen reply option. + uuid: + type: string + format: uuid + description: The unique identifier for the quick reply option selected. + required: + - text + - uuid + required: + - message_type + - type + - body + contact_reply_conversation_request: + title: Contact Reply + oneOf: + - "$ref": "#/components/schemas/contact_reply_intercom_user_id_request" + - "$ref": "#/components/schemas/contact_reply_email_request" + - "$ref": "#/components/schemas/contact_reply_user_id_request" + contact_reply_email_request: + title: Email + type: object + description: Payload of the request to reply on behalf of a contact using their + `email` + properties: + email: + type: string + description: The email you have defined for the user. + attachment_files: + type: array + description: A list of files that will be added as attachments. + items: + "$ref": "#/components/schemas/conversation_attachment_files" + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + required: + - email + contact_reply_intercom_user_id_request: + title: Intercom User ID + type: object + description: Payload of the request to reply on behalf of a contact using their + `intercom_user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + properties: + intercom_user_id: + type: string + description: The identifier for the contact as given by Intercom. + attachment_files: + type: array + description: A list of files that will be added as attachments. + items: + "$ref": "#/components/schemas/conversation_attachment_files" + required: + - intercom_user_id + contact_reply_ticket_email_request: + title: Email + type: object + description: Payload of the request to reply on behalf of a contact using their + `email` + properties: + email: + type: string + description: The email you have defined for the user. + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + required: + - email + contact_reply_ticket_intercom_user_id_request: + title: Intercom User ID + type: object + description: Payload of the request to reply on behalf of a contact using their + `intercom_user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + properties: + intercom_user_id: + type: string + description: The identifier for the contact as given by Intercom. + required: + - intercom_user_id + contact_reply_ticket_request: + title: Contact Reply on ticket + oneOf: + - "$ref": "#/components/schemas/contact_reply_ticket_intercom_user_id_request" + - "$ref": "#/components/schemas/contact_reply_ticket_user_id_request" + - "$ref": "#/components/schemas/contact_reply_ticket_email_request" + contact_reply_ticket_user_id_request: + title: User ID + type: object + description: Payload of the request to reply on behalf of a contact using their + `user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + properties: + user_id: + type: string + description: The external_id you have defined for the contact. + required: + - user_id + contact_reply_user_id_request: + title: User ID + type: object + description: Payload of the request to reply on behalf of a contact using their + `user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + properties: + user_id: + type: string + description: The external_id you have defined for the contact. + attachment_files: + type: array + description: A list of files that will be added as attachments. You can + include up to 10 files. + items: + "$ref": "#/components/schemas/conversation_attachment_files" + maxItems: 10 + required: + - user_id + contact_segments: + title: Segments + type: object + description: A list of segments objects attached to a specific contact. + properties: + type: + type: string + description: The type of the object + enum: + - list + example: list + data: + type: array + description: Segment objects associated with the contact. + items: + "$ref": "#/components/schemas/segment" + contact_social_profiles: + title: Social Profile + type: object + nullable: false + description: An object containing social profiles that a contact has. + properties: + data: + type: array + description: A list of social profiles objects associated with the contact. + items: + "$ref": "#/components/schemas/social_profile" + contact_subscription_types: + title: Contact Subscription Types + type: object + nullable: false + description: An object containing Subscription Types meta data about the SubscriptionTypes + that a contact has. + properties: + data: + type: array + description: This object represents the subscriptions attached to a contact. + items: + "$ref": "#/components/schemas/addressable_list" + url: + type: string + format: uri + description: Url to get more subscription type resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/subscriptions" + total_count: + type: integer + description: Int representing the total number of subscription types attached + to this contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + contact_tags: + title: Contact Tags + type: object + nullable: true + description: An object containing tags meta data about the tags that a contact + has. Up to 10 will be displayed here. Use the url to get more. + properties: + data: + type: array + description: This object represents the tags attached to a contact. + items: + "$ref": "#/components/schemas/addressable_list" + url: + type: string + format: uri + description: url to get more tag resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/tags" + total_count: + type: integer + description: Int representing the total number of tags attached to this + contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + contact_archived: + title: Contact Archived + description: archived contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + archived: + type: boolean + description: Whether the contact is archived or not. + example: true + contact_unarchived: + title: Contact Unarchived + description: unarchived contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + archived: + type: boolean + description: Whether the contact is archived or not. + example: false + contact_blocked: + title: Contact Blocked + type: object + description: blocked contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + blocked: + type: boolean + description: Always true. + example: true + content_import_source: + title: Content Import Source + type: object + x-tags: + - AI Content + description: An external source for External Pages that you add to your Fin + Content Library. + nullable: false + properties: + type: + type: string + description: Always external_page + enum: + - content_import_source + default: content_import_source + example: content_import_source + id: + type: integer + description: The unique identifier for the content import source which is + given by Intercom. + example: 1234 + last_synced_at: + type: integer + format: date-time + description: The time when the content import source was last synced. + example: 1672928610 + sync_behavior: + type: string + description: If you intend to create or update External Pages via the API, + this should be set to `api`. + enum: + - api + - automatic + - manual + example: api + status: + type: string + description: The status of the content import source. + enum: + - active + - deactivated + default: active + example: active + url: + type: string + description: The URL of the root of the external source. + example: https://help.example.com/ + created_at: + type: integer + format: date-time + description: The time when the content import source was created. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the content import source was last updated. + example: 1672928610 + audience_ids: + type: array + nullable: true + items: + type: integer + description: The unique identifiers for the audiences associated with this content import source. + example: + - 5678 + required: + - id + - type + - url + - sync_behavior + - status + - created_at + - updated_at + - last_synced_at + content_import_sources_list: + title: Content Import Sources + type: object + x-tags: + - AI Content + description: This will return a list of the content import sources for the App. + nullable: false + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/pages_link" + total_count: + type: integer + description: A count of the total number of content import sources. + example: 1 + data: + type: array + description: An array of Content Import Source objects + items: + "$ref": "#/components/schemas/content_import_source" + content_source: + title: Content Source + type: object + x-tags: + - AI Content Source + description: The content source used by AI Agent in the conversation. + properties: + content_type: + type: string + description: The type of the content source. + example: content_snippet + enum: + - file + - article + - external_content + - content_snippet + - workflow_connector_action + url: + type: string + description: The internal URL linking to the content source for teammates. + example: "/fin-ai-agent/content?content=content_snippet&id=3234924" + title: + type: string + description: The title of the content source. + example: My internal content snippet + locale: + type: string + description: The ISO 639 language code of the content source. + example: en + content_sources_list: + title: Content Source List + nullable: false + properties: + type: + type: string + enum: + - content_source.list + example: content_source.list + total_count: + type: integer + description: The total number of content sources used by AI Agent in the + conversation. + example: 1 + content_sources: + type: array + description: The content sources used by AI Agent in the conversation. + items: + "$ref": "#/components/schemas/content_source" + conversation_list_item: + title: Conversation List Item + type: object + x-tags: + - Conversations + description: The data returned about your conversations when you list or search + them. + properties: + type: + type: string + description: Always conversation. + example: conversation + id: + type: string + description: The id representing the conversation. + example: '1295' + title: + type: string + nullable: true + description: The title given to the conversation. + example: Conversation Title + created_at: + type: integer + format: date-time + description: The time the conversation was created. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the conversation was updated. + example: 1663597260 + waiting_since: + type: integer + format: date-time + nullable: true + description: 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. + example: 1663597260 + snoozed_until: + type: integer + format: date-time + nullable: true + description: 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. + example: 1663597260 + open: + type: boolean + description: Indicates whether a conversation is open (true) or closed (false). + example: true + state: + type: string + enum: + - open + - closed + - snoozed + description: Can be set to "open", "closed" or "snoozed". + example: open + read: + type: boolean + description: Indicates whether a conversation has been read. + example: true + priority: + type: string + enum: + - priority + - not_priority + description: If marked as priority, it will return priority or else not_priority. + example: priority + admin_assignee_id: + type: integer + nullable: true + description: The id of the admin assigned to the conversation. If it's not + assigned to an admin it will return null. + example: 0 + team_assignee_id: + type: integer + nullable: true + description: The id of the team assigned to the conversation. If it's not + assigned to a team it will return null. + example: 5017691 + company: + "$ref": "#/components/schemas/company" + nullable: true + description: The company associated with the conversation. + tags: + "$ref": "#/components/schemas/tags" + conversation_rating: + "$ref": "#/components/schemas/conversation_rating" + source: + "$ref": "#/components/schemas/conversation_source" + contacts: + "$ref": "#/components/schemas/conversation_contacts" + teammates: + "$ref": "#/components/schemas/conversation_teammates" + custom_attributes: + "$ref": "#/components/schemas/custom_attributes" + first_contact_reply: + "$ref": "#/components/schemas/conversation_first_contact_reply" + sla_applied: + "$ref": "#/components/schemas/sla_applied" + statistics: + "$ref": "#/components/schemas/conversation_statistics" + linked_objects: + "$ref": "#/components/schemas/linked_object_list" + ai_agent_participated: + type: boolean + description: Indicates whether the AI Agent participated in the conversation. + example: true + ai_agent: + "$ref": "#/components/schemas/ai_agent" + nullable: true + conversation: + title: Conversation + type: object + x-tags: + - Conversations + description: 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. + properties: + type: + type: string + description: Always conversation. + example: conversation + id: + type: string + description: The id representing the conversation. + example: '1295' + title: + type: string + nullable: true + description: The title given to the conversation. + example: Conversation Title + created_at: + type: integer + format: date-time + description: The time the conversation was created. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the conversation was updated. + example: 1663597260 + waiting_since: + type: integer + format: date-time + nullable: true + description: 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. + example: 1663597260 + snoozed_until: + type: integer + format: date-time + nullable: true + description: 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. + example: 1663597260 + open: + type: boolean + description: Indicates whether a conversation is open (true) or closed (false). + example: true + state: + type: string + enum: + - open + - closed + - snoozed + description: Can be set to "open", "closed" or "snoozed". + example: open + read: + type: boolean + description: Indicates whether a conversation has been read. + example: true + priority: + type: string + enum: + - priority + - not_priority + description: If marked as priority, it will return priority or else not_priority. + example: priority + admin_assignee_id: + type: integer + nullable: true + description: The id of the admin assigned to the conversation. If it's not + assigned to an admin it will return null. + example: 0 + team_assignee_id: + type: integer + nullable: true + description: The id of the team assigned to the conversation. If it's not + assigned to a team it will return null. + example: 5017691 + company: + "$ref": "#/components/schemas/company" + nullable: true + description: The company associated with the conversation. + tags: + "$ref": "#/components/schemas/tags" + conversation_rating: + "$ref": "#/components/schemas/conversation_rating" + source: + "$ref": "#/components/schemas/conversation_source" + contacts: + "$ref": "#/components/schemas/conversation_contacts" + teammates: + "$ref": "#/components/schemas/conversation_teammates" + custom_attributes: + "$ref": "#/components/schemas/custom_attributes" + first_contact_reply: + "$ref": "#/components/schemas/conversation_first_contact_reply" + sla_applied: + "$ref": "#/components/schemas/sla_applied" + statistics: + "$ref": "#/components/schemas/conversation_statistics" + conversation_parts: + "$ref": "#/components/schemas/conversation_parts" + linked_objects: + "$ref": "#/components/schemas/linked_object_list" + ai_agent_participated: + type: boolean + description: Indicates whether the AI Agent participated in the conversation. + example: true + ai_agent: + "$ref": "#/components/schemas/ai_agent" + nullable: true + conversation_attachment_files: + title: Conversation attachment files + type: object + description: Properties of the attachment files in a conversation part + properties: + content_type: + type: string + description: The content type of the file + example: application/json + data: + type: string + description: The base64 encoded file data. + example: ewogICJ0ZXN0IjogMQp9 + name: + type: string + description: The name of the file. + example: test.json + conversation_contacts: + title: Contacts + type: object + description: 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. + properties: + type: + type: string + description: '' + enum: + - contact.list + example: contact.list + contacts: + type: array + description: 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. + items: + "$ref": "#/components/schemas/contact_reference" + conversation_deleted: + title: Conversation Deleted + type: object + description: deleted conversation object + properties: + id: + type: string + description: The unique identifier for the conversation. + example: 5ba682d23d7cf92bef87bfd4 + object: + type: string + description: always conversation + enum: + - conversation + example: conversation + deleted: + type: boolean + description: Whether the conversation is deleted or not. + example: true + conversation_first_contact_reply: + title: First contact reply + type: object + nullable: true + description: An object containing information on the first users message. For + a contact initiated message this will represent the users original message. + properties: + created_at: + type: integer + format: date-time + description: '' + example: 1663597223 + type: + type: string + description: '' + example: conversation + url: + type: string + nullable: true + description: '' + example: https://developers.intercom.com/ + conversation_list: + title: Conversation List + type: object + description: 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. + properties: + type: + type: string + description: Always conversation.list + enum: + - conversation.list + example: conversation.list + conversations: + type: array + description: The list of conversation objects + items: + "$ref": "#/components/schemas/conversation_list_item" + total_count: + type: integer + description: A count of the total number of objects. + example: 12345 + pages: + "$ref": "#/components/schemas/cursor_pages" + conversation_part: + title: Conversation Part + type: object + description: A Conversation Part represents a message in the conversation. + properties: + type: + type: string + description: Always conversation_part + example: conversation_part + id: + type: string + description: The id representing the conversation part. + example: '3' + part_type: + type: string + description: The type of conversation part. + example: comment + body: + type: string + nullable: true + description: The message body, which may contain HTML. For Twitter, this + will show a generic message regarding why the body is obscured. In webhook + payloads for API version 2.15+, this field returns plain text. + example: "

Okay!

" + created_at: + type: integer + format: date-time + description: The time the conversation part was created. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the conversation part was updated. + example: 1663597260 + notified_at: + type: integer + format: date-time + description: The time the user was notified with the conversation part. + example: 1663597260 + assigned_to: + "$ref": "#/components/schemas/reference" + nullable: true + description: The id of the admin that was assigned the conversation by this + conversation_part (null if there has been no change in assignment.) + author: + "$ref": "#/components/schemas/conversation_part_author" + attachments: + title: Conversation part attachments + type: array + description: A list of attachments for the part. + items: + "$ref": "#/components/schemas/part_attachment" + external_id: + type: string + nullable: true + description: The external id of the conversation part + example: abcd1234 + redacted: + type: boolean + description: Whether or not the conversation part has been redacted. + example: false + email_message_metadata: + "$ref": "#/components/schemas/email_message_metadata" + nullable: true + metadata: + "$ref": "#/components/schemas/conversation_part_metadata" + nullable: true + state: + type: string + enum: + - open + - closed + - snoozed + description: Indicates the current state of conversation when the conversation part was created. + example: open + tags: + type: array + description: A list of tags objects associated with the conversation part. + items: + "$ref": "#/components/schemas/tag_basic" + nullable: true + event_details: + "$ref": "#/components/schemas/event_details" + nullable: true + app_package_code: + type: string + nullable: true + example: "test-integration" + description: The app package code if this part was created via API. null if the part was not created via API. + conversation_part_author: + title: Conversation part author + type: object + description: The object who initiated the conversation, which can be a Contact, + Admin or Team. Bots and campaigns send messages on behalf of Admins or Teams. + For Twitter, this will be blank. + properties: + type: + type: string + description: The type of the author + example: admin + id: + type: string + description: The id of the author + example: '274' + name: + type: string + nullable: true + description: The name of the author + example: Operator + email: + type: string + format: email + description: The email of the author + example: operator+abcd1234@intercom.io + from_ai_agent: + type: boolean + description: If this conversation part was sent by the AI Agent + example: true + is_ai_answer: + type: boolean + description: If this conversation part body was generated by the AI Agent + example: false + conversation_parts: + title: Conversation Parts + type: object + description: 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. + properties: + type: + type: string + description: '' + enum: + - conversation_part.list + example: conversation_part.list + conversation_parts: + title: Conversation Parts + type: array + description: 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. + items: + "$ref": "#/components/schemas/conversation_part" + total_count: + type: integer + description: '' + example: 1 + conversation_part_metadata: + title: Conversation Part Metadata + description: Metadata for a conversation part + type: object + properties: + quick_reply_options: + type: array + description: The quick reply options sent by the Admin or bot, presented in this conversation part. + items: + allOf: + - "$ref": "#/components/schemas/quick_reply_option" + properties: + translations: + type: object + nullable: true + description: The translations for the quick reply option. + example: { "en": "Hello", "fr": "Bonjour" } + quick_reply_uuid: + type: string + format: uuid + description: The unique identifier for the quick reply option that was clicked by the end user. + example: '123e4567-e89b-12d3-a456-426614174000' + conversation_rating: + title: Conversation Rating + type: object + nullable: true + description: The Conversation Rating object which contains information on the + rating and/or remark added by a Contact and the Admin assigned to the conversation. + properties: + rating: + type: integer + description: The rating, between 1 and 5, for the conversation. + example: 5 + remark: + type: string + description: An optional field to add a remark to correspond to the number + rating + example: '' + created_at: + type: integer + format: date-time + description: The time the rating was requested in the conversation being + rated. + example: 1671028894 + updated_at: + type: integer + format: date-time + description: The time the rating was last updated. + example: 1671028894 + contact: + "$ref": "#/components/schemas/contact_reference" + teammate: + "$ref": "#/components/schemas/reference" + conversation_response_time: + title: Conversation response time + type: object + description: Details of first response time of assigned team in seconds. + properties: + team_id: + type: integer + description: Id of the assigned team. + example: 100 + team_name: + type: string + description: Name of the assigned Team, null if team does not exist, Unassigned + if no team is assigned. + example: Team One + response_time: + type: integer + description: First response time of assigned team in seconds. + example: 2310 + conversation_source: + title: Conversation source + type: object + description: The type of the conversation part that started this conversation. Can be Contact, Admin, Campaign, Automated or Operator initiated. + properties: + type: + type: string + description: This includes conversation, email, facebook, instagram, phone_call, + phone_switch, push, sms, twitter and whatsapp. + example: conversation + enum: + - conversation + - email + - facebook + - instagram + - phone_call + - phone_switch + - push + - sms + - twitter + - whatsapp + id: + type: string + description: The id representing the message. + example: '3' + delivered_as: + type: string + description: The conversation's initiation type. Possible values are customer_initiated, + campaigns_initiated (legacy campaigns), operator_initiated (Custom bot), + automated (Series and other outbounds with dynamic audience message) and + admin_initiated (fixed audience message, ticket initiated by an admin, + group email). + example: operator_initiated + subject: + type: string + description: Optional. The message subject. For Twitter, this will show + a generic message regarding why the subject is obscured. In webhook + payloads for API version 2.15+, this field returns plain text. + example: '' + body: + type: string + description: The message body, which may contain HTML. For Twitter, this + will show a generic message regarding why the body is obscured. In webhook + payloads for API version 2.15+, this field returns plain text. + example: "

Hey there!

" + author: + "$ref": "#/components/schemas/conversation_part_author" + attachments: + type: array + description: A list of attachments for the part. + items: + "$ref": "#/components/schemas/part_attachment" + url: + type: string + nullable: true + description: The URL where the conversation was started. For Twitter, Email, + and Bots, this will be blank. + example: + redacted: + type: boolean + description: Whether or not the source message has been redacted. Only applicable + for contact initiated messages. + example: false + conversation_statistics: + title: Conversation statistics + type: object + nullable: true + description: A Statistics object containing all information required for reporting, + with timestamps and calculated metrics. + properties: + type: + type: string + description: '' + example: conversation_statistics + time_to_assignment: + type: integer + description: Duration until last assignment before first admin reply. In + seconds. + example: 2310 + time_to_admin_reply: + type: integer + description: Duration until first admin reply. Subtracts out of business + hours. In seconds. + example: 2310 + time_to_first_close: + type: integer + description: Duration until conversation was closed first time. Subtracts + out of business hours. In seconds. + example: 2310 + time_to_last_close: + type: integer + description: Duration until conversation was closed last time. Subtracts + out of business hours. In seconds. + example: 2310 + median_time_to_reply: + type: integer + description: Median based on all admin replies after a contact reply. Subtracts + out of business hours. In seconds. + example: 2310 + first_contact_reply_at: + type: integer + format: date-time + description: Time of first text conversation part from a contact. + example: 1663597233 + first_assignment_at: + type: integer + format: date-time + description: Time of first assignment after first_contact_reply_at. + example: 1663597233 + first_admin_reply_at: + type: integer + format: date-time + description: Time of first admin reply after first_contact_reply_at. + example: 1663597233 + first_close_at: + type: integer + format: date-time + description: Time of first close after first_contact_reply_at. + example: 1663597233 + last_assignment_at: + type: integer + format: date-time + description: Time of last assignment after first_contact_reply_at. + example: 1663597233 + last_assignment_admin_reply_at: + type: integer + format: date-time + description: Time of first admin reply since most recent assignment. + example: 1663597233 + last_contact_reply_at: + type: integer + format: date-time + description: Time of the last conversation part from a contact. + example: 1663597233 + last_admin_reply_at: + type: integer + format: date-time + description: Time of the last conversation part from an admin. + example: 1663597233 + last_close_at: + type: integer + format: date-time + description: Time of the last conversation close. + example: 1663597233 + last_closed_by_id: + type: string + description: The last admin who closed the conversation. Returns a reference + to an Admin object. + example: c3po + count_reopens: + type: integer + description: Number of reopens after first_contact_reply_at. + example: 1 + count_assignments: + type: integer + description: Number of assignments after first_contact_reply_at. + example: 1 + count_conversation_parts: + type: integer + description: Total number of conversation parts. + example: 1 + assigned_team_first_response_time: + type: array + description: An array of conversation response time objects + items: + "$ref": "#/components/schemas/conversation_response_time" + assigned_team_first_response_time_in_office_hours: + type: array + description: An array of conversation response time objects within office + hours + items: + "$ref": "#/components/schemas/conversation_response_time" + handling_time: + type: integer + description: Time from conversation assignment to conversation close in + seconds. + example: 2310 + adjusted_handling_time: + type: integer + nullable: true + description: Adjusted handling time for conversation in seconds. This is the active handling time excluding idle periods when teammates are not actively working on the conversation. + example: 1800 + conversation_teammates: + title: Conversation teammates + type: object + nullable: true + description: The list of teammates who participated in the conversation (wrote + at least one conversation part). + properties: + type: + type: string + description: The type of the object - `admin.list`. + example: admin.list + teammates: + type: array + description: The list of teammates who participated in the conversation + (wrote at least one conversation part). + items: + "$ref": "#/components/schemas/reference" + convert_conversation_to_ticket_request: + description: You can convert a Conversation to a Ticket + type: object + title: Convert Ticket Request Payload + properties: + ticket_type_id: + type: string + description: The ID of the type of ticket you want to convert the conversation + to + example: '1234' + attributes: + "$ref": "#/components/schemas/ticket_request_custom_attributes" + required: + - ticket_type_id + convert_visitor_request: + description: You can merge a Visitor to a Contact of role type lead or user. + type: object + title: Convert Visitor Request Payload + properties: + type: + type: string + description: Represents the role of the Contact model. Accepts `lead` or + `user`. + example: user + user: + type: object + description: The unique identifiers retained after converting or merging. + properties: + id: + type: string + description: The unique identifier for the contact which is given by + Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + user_id: + type: string + description: A unique identifier for the contact which is given to Intercom, + which will be represented as external_id. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + email: + type: string + description: The contact's email, retained by default if one is present. + example: winstonsmith@truth.org + anyOf: + - required: + - id + - required: + - user_id + visitor: + type: object + description: The unique identifiers to convert a single Visitor. + properties: + id: + type: string + description: The unique identifier for the contact which is given by + Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + user_id: + type: string + description: A unique identifier for the contact which is given to Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + email: + type: string + description: The visitor's email. + example: winstonsmith@truth.org + anyOf: + - required: + - id + - required: + - user_id + - required: + - email + required: + - type + - user + - visitor + create_article_request: + description: You can create an Article + type: object + title: Create Article Request Payload + nullable: true + properties: + title: + type: string + description: The title of the article.For multilingual articles, this will + be the title of the default language's content. + example: Thanks for everything + description: + type: string + description: The description of the article. For multilingual articles, + this will be the description of the default language's content. + example: Description of the Article + body: + type: string + description: The content of the article. For multilingual articles, this + will be the body of the default language's content. + example: "

This is the body in html

" + author_id: + type: integer + description: The id of the author of the article. For multilingual articles, + this will be the id of the author of the default language's content. Must + be a teammate on the help center's workspace. + example: 1295 + state: + type: string + description: Whether the article will be `published` or will be a `draft`. + Defaults to draft. For multilingual articles, this will be the state of + the default language's content. + enum: + - published + - draft + example: draft + parent_id: + type: integer + description: The id of the article's parent collection or section. An article + without this field stands alone. + example: 18 + parent_type: + type: string + description: The type of parent, which can either be a `collection` or `section`. + example: collection + translated_content: + "$ref": "#/components/schemas/article_translated_content" + required: + - title + - author_id + create_internal_article_request: + description: You can create an Internal Article + type: object + title: Create Internal Article Request Payload + nullable: true + properties: + title: + type: string + description: The title of the article. + example: Thanks for everything + body: + type: string + description: The content of the article. + example: "

This is the body in html

" + author_id: + type: integer + description: The id of the author of the article. + example: 1295 + owner_id: + type: integer + description: The id of the owner of the article. + example: 1295 + required: + - title + - owner_id + - author_id + create_collection_request: + description: You can create a collection + type: object + title: Create Collection Request Payload + properties: + name: + type: string + description: The name of the collection. For multilingual collections, this + will be the name of the default language's content. + example: collection 51 + description: + type: string + description: The description of the collection. For multilingual collections, + this will be the description of the default language's content. + example: English description + translated_content: + nullable: true + "$ref": "#/components/schemas/group_translated_content" + parent_id: + type: string + nullable: true + description: The id of the parent collection. If `null` then it will be + created as the first level collection. + example: '6871118' + help_center_id: + type: integer + nullable: true + description: The id of the help center where the collection will be created. + If `null` then it will be created in the default help center. + example: '123' + required: + - name + create_contact_request: + description: Payload to create a contact + type: object + title: Create Contact Request Payload + properties: + role: + type: string + description: The role of the contact. + example: user + external_id: + type: string + description: A unique identifier for the contact which is given to Intercom + example: "625e90fc55ab113b6d92175f" + email: + type: string + description: The contacts email + example: jdoe@example.com + phone: + type: string + nullable: true + description: The contacts phone + example: "+353871234567" + name: + type: string + nullable: true + description: The contacts name + example: John Doe + avatar: + type: string + nullable: true + description: An image URL containing the avatar of a contact + example: https://www.example.com/avatar_image.jpg + signed_up_at: + type: integer + format: date-time + nullable: true + description: (Unix timestamp in seconds) The time specified for when a contact signed up. + example: 1571672154 + last_seen_at: + type: integer + format: date-time + nullable: true + description: (Unix timestamp in seconds) The time when the contact was last seen + (either where the Intercom Messenger was installed or when specified manually). + example: 1571672154 + owner_id: + type: integer + nullable: true + description: The id of an admin that has been assigned account ownership + of the contact + example: 123 + unsubscribed_from_emails: + type: boolean + nullable: true + description: Whether the contact is unsubscribed from emails + example: true + custom_attributes: + type: object + nullable: true + description: The custom attributes which are set for the contact + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 1 + anyOf: + - required: + - email + title: Create contact with email + - required: + - external_id + title: Create contact with external_id + - required: + - role + title: Create contact with role + create_content_import_source_request: + title: Create Content Import Source Payload + type: object + description: You can add an Content Import Source to your Fin Content Library. + nullable: false + properties: + sync_behavior: + type: string + description: If you intend to create or update External Pages via the API, + this should be set to `api`. + enum: + - api + example: api + status: + type: string + description: The status of the content import source. + enum: + - active + - deactivated + default: active + example: active + url: + type: string + description: The URL of the content import source. + example: https://help.example.com + audience_ids: + nullable: true + description: The unique identifiers for the audiences to associate with this content import source. Can be a single integer or an array of integers. + example: + - 5678 + oneOf: + - type: integer + - type: array + items: + type: integer + required: + - sync_behavior + - url + create_conversation_request: + description: 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. + type: object + title: Create Conversation Request Payload + properties: + from: + type: object + properties: + type: + type: string + enum: + - lead + - user + - contact + description: The role associated to the contact - user or lead. + example: user + id: + type: string + description: The identifier for the contact which is given by Intercom. + format: uuid + minLength: 24 + maxLength: 24 + example: 536e564f316c83104c000020 + required: + - type + - id + body: + type: string + description: The content of the message. HTML is not supported. + example: Hello + subject: + type: string + description: The title of the email. Only applicable if the message type is email. + example: Thanks for everything + attachment_urls: + type: array + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. + items: + type: string + format: uri + maxItems: 10 + created_at: + type: integer + format: date-time + description: The time the conversation was created as a UTC Unix timestamp. If not provided, the current time will be used. This field is only recommneded for migrating past conversations from another source into Intercom. + example: 1671028894 + required: + - from + - body + create_data_attribute_request: + description: '' + type: object + title: Create Data Attribute Request + properties: + name: + type: string + description: The name of the data attribute. + example: My Data Attribute + model: + type: string + description: The model that the data attribute belongs to. + enum: + - contact + - company + example: contact + description: + type: string + description: The readable description you see in the UI for the attribute. + example: My Data Attribute Description + messenger_writable: + type: boolean + description: Can this attribute be updated by the Messenger + example: false + required: + - name + - model + - data_type + oneOf: + - properties: + data_type: + enum: + - options + options: + type: array + description: Array of objects representing the options of the list, with `value` as the key and the option as the value. At least + two options are required. + items: + type: object + properties: + value: + type: string + example: + - value: 1-10 + - value: 11-50 + required: + - options + title: 'list attribute' + - properties: + data_type: + enum: + - string + - integer + - float + - boolean + - datetime + - date + title: 'other type' + create_data_event_request: + description: '' + type: object + title: Create Data Event Request + properties: + event_name: + type: string + description: The name of the event that occurred. This is presented to your + App's admins when filtering and creating segments - a good event name + is typically a past tense 'verb-noun' combination, to improve readability, + for example `updated-plan`. + example: invited-friend + created_at: + type: integer + format: date-time + description: The time the event occurred as a UTC Unix timestamp + example: 1671028894 + user_id: + type: string + description: Your identifier for the user. + example: '314159' + id: + type: string + description: The unique identifier for the contact (lead or user) which + is given by Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + email: + type: string + description: An email address for your user. An email should only be used + where your application uses email to uniquely identify users. + example: frodo.baggins@example.com + metadata: + type: object + description: Optional metadata about the event. + additionalProperties: + type: string + example: + invite_code: ADDAFRIEND + anyOf: + - title: id required + required: + - event_name + - created_at + - id + - title: user_id required + required: + - event_name + - created_at + - user_id + - title: email required + required: + - event_name + - created_at + - email + create_data_event_summaries_request: + description: You can send a list of event summaries for a user. Each event summary + should contain the event name, the time the event occurred, and the number + of times the event occurred. The event name should be a past tense "verb-noun" + combination, to improve readability, for example `updated-plan`. + type: object + title: Create Data Event Summaries Request + properties: + user_id: + type: string + description: Your identifier for the user. + example: '314159' + event_summaries: + type: object + description: A list of event summaries for the user. Each event summary + should contain the event name, the time the event occurred, and the number + of times the event occurred. The event name should be a past tense 'verb-noun' + combination, to improve readability, for example `updated-plan`. + properties: + event_name: + type: string + description: The name of the event that occurred. A good event name + is typically a past tense 'verb-noun' combination, to improve readability, + for example `updated-plan`. + example: invited-friend + count: + type: integer + description: The number of times the event occurred. + example: 1 + first: + type: integer + format: date-time + description: The first time the event was sent + example: 1671028894 + last: + type: integer + format: date-time + description: The last time the event was sent + example: 1671028894 + create_data_exports_request: + description: Request for creating a data export + type: object + title: Create Data Export Request + properties: + created_at_after: + type: integer + description: The start date that you request data for. It must be formatted + as a unix timestamp. + example: 1527811200 + created_at_before: + type: integer + description: The end date that you request data for. It must be formatted + as a unix timestamp. + example: 1527811200 + required: + - created_at_after + - created_at_before + create_external_page_request: + title: Create External Page Payload + type: object + description: You can add an External Page to your Fin Content Library. + nullable: false + properties: + title: + type: string + description: The title of the external page. + example: Getting started with... + html: + type: string + description: The body of the external page in HTML. + example: "

Hello world!

" + url: + type: string + description: The URL of the external page. This will be used by Fin to link + end users to the page it based its answer on. When a URL is not present, + Fin will not reference the source. + example: https://help.example.com/en/articles/1234-getting-started + ai_agent_availability: + type: boolean + description: Whether the external page should be used to answer questions + by AI Agent. Will not default when updating an existing external page. + default: false + example: true + ai_copilot_availability: + type: boolean + description: Whether the external page should be used to answer questions + by AI Copilot. Will not default when updating an existing external page. + default: false + example: true + locale: + type: string + description: Always en + enum: + - en + default: en + example: en + source_id: + type: integer + description: The unique identifier for the source of the external page which + was given by Intercom. Every external page must be associated with a Content + Import Source which represents the place it comes from and from which + it inherits a default audience (configured in the UI). For a new source, + make a POST request to the Content Import Source endpoint and an ID for + the source will be returned in the response. + example: 1234 + external_id: + type: string + description: The identifier for the external page which was given by the + source. Must be unique for the source. + example: '5678' + required: + - title + - html + - locale + - source_id + - external_id + create_message_request: + description: You can create a message + type: object + title: Create Message Request Payload + nullable: true + properties: + message_type: + type: string + description: 'The kind of message being created. Values: `in_app` or `email`.' + enum: + - in_app + - email + example: in_app + subject: + type: string + description: The title of the email. + example: Thanks for everything + body: + type: string + description: The content of the message. HTML and plaintext are supported. + example: Hello there + template: + type: string + description: The style of the outgoing message. Possible values `plain` + or `personal`. + example: plain + from: + type: object + description: The sender of the message. If not provided, the default sender + will be used. + properties: + type: + type: string + description: Always `admin`. + enum: + - admin + example: admin + id: + type: integer + description: The identifier for the admin which is given by Intercom. + example: 394051 + required: + - type + - id + to: + oneOf: + - $ref: '#/components/schemas/recipient' + - type: array + description: The recipients of the message. + items: + $ref: '#/components/schemas/recipient' + example: + - type: user + id: 536e564f316c83104c000020 + - type: lead + id: 536e564f316c83104c000021 + cc: + oneOf: + - $ref: '#/components/schemas/recipient' + - type: array + description: The CC recipients of the message. + items: + $ref: '#/components/schemas/recipient' + example: + - type: user + id: 536e564f316c83104c000023 + bcc: + oneOf: + - $ref: '#/components/schemas/recipient' + - type: array + description: The BCC recipients of the message. + items: + $ref: '#/components/schemas/recipient' + example: + - type: user + id: 536e564f316c83104c000022 + created_at: + type: integer + description: The time the message was created. If not provided, the current + time will be used. + example: 1590000000 + create_conversation_without_contact_reply: + type: boolean + description: Whether a conversation should be opened in the inbox for the + message without the contact replying. Defaults to false if not provided. + default: false + example: true + anyOf: + - title: 'message_type: `email`.' + required: + - message_type + - subject + - body + - template + - from + - to + - title: 'message_type: `inapp`.' + required: + - message_type + - body + - from + - to + recipient: + type: object + title: Recipient + description: A recipient of a message + properties: + type: + type: string + description: The role associated to the contact - `user` or `lead`. + enum: + - user + - lead + example: user + id: + type: string + description: The identifier for the contact which is given by Intercom. + example: 536e564f316c83104c000020 + required: + - type + - id + create_or_update_company_request: + type: object + title: Create Or Update Company Request Payload + description: You can create or update a Company + nullable: true + properties: + name: + type: string + description: The name of the Company + example: Intercom + company_id: + type: string + description: The company id you have defined for the company. Can't be updated + example: 625e90fc55ab113b6d92175f + plan: + type: string + description: The name of the plan you have associated with the company. + example: Enterprise + size: + type: integer + description: The number of employees in this company. + example: '100' + website: + type: string + description: The URL for this company's website. Please note that the value + specified here is not validated. Accepts any string. + example: https://www.example.com + industry: + type: string + description: The industry that this company operates in. + example: Manufacturing + custom_attributes: + type: object + description: A hash of key/value pairs containing any other data about the + company you want Intercom to store. + additionalProperties: + type: string + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + remote_created_at: + type: integer + description: The time the company was created by you. + example: 1394531169 + monthly_spend: + type: integer + description: How much revenue the company generates for your business. Note + that this will truncate floats. i.e. it only allow for whole integers, + 155.98 will be truncated to 155. Note that this has an upper limit of + 2**31-1 or 2147483647.. + example: 1000 + update_company_request: + type: object + title: Update Company Request Payload + description: You can update a Company + nullable: true + properties: + name: + type: string + description: The name of the Company + example: Intercom + plan: + type: string + description: The name of the plan you have associated with the company. + example: Enterprise + size: + type: integer + description: The number of employees in this company. + example: '100' + website: + type: string + description: The URL for this company's website. Please note that the value + specified here is not validated. Accepts any string. + example: https://www.example.com + industry: + type: string + description: The industry that this company operates in. + example: Manufacturing + custom_attributes: + type: object + description: A hash of key/value pairs containing any other data about the + company you want Intercom to store. + additionalProperties: + type: string + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + monthly_spend: + type: integer + description: How much revenue the company generates for your business. Note + that this will truncate floats. i.e. it only allow for whole integers, + 155.98 will be truncated to 155. Note that this has an upper limit of + 2**31-1 or 2147483647.. + example: 1000 + create_or_update_custom_object_instance_request: + description: Payload to create or update a Custom Object instance + type: object + title: Create Or Update Custom Object Instance Request Payload + properties: + external_id: + type: string + description: A unique identifier for the Custom Object instance in the external + system it originated from. + external_created_at: + type: integer + format: date-time + nullable: true + description: The time when the Custom Object instance was created in the + external system it originated from. + example: 1571672154 + external_updated_at: + type: integer + format: date-time + nullable: true + description: The time when the Custom Object instance was last updated in + the external system it originated from. + example: 1571672154 + custom_attributes: + type: object + nullable: true + description: The custom attributes which are set for the Custom Object instance. + additionalProperties: + type: string + create_or_update_tag_request: + description: You can create or update an existing tag. + type: object + title: Create or Update Tag Request Payload + properties: + name: + type: string + description: The name of the tag, which will be created if not found, or + the new name for the tag if this is an update request. Names are case + insensitive. + example: Independent + id: + type: string + description: The id of tag to updates. + example: '656452352' + required: + - name + create_phone_switch_request: + description: You can create an phone switch + type: object + title: Create Phone Switch Request Payload + nullable: true + properties: + phone: + type: string + description: Phone number in E.164 format, that will receive the SMS to + continue the conversation in the Messenger. + example: "+1 1234567890" + custom_attributes: + "$ref": "#/components/schemas/custom_attributes" + required: + - phone + create_ticket_reply_with_comment_request: + title: Create Ticket Reply Request Payload + oneOf: + - "$ref": "#/components/schemas/contact_reply_ticket_request" + - "$ref": "#/components/schemas/admin_reply_ticket_request" + create_ticket_request: + description: You can create a Ticket + type: object + title: Create Ticket Request Payload + properties: + ticket_type_id: + type: string + description: The ID of the type of ticket you want to create + example: '1234' + contacts: + type: array + description: The list of contacts (users or leads) affected by this ticket. + Currently only one is allowed + items: + type: object + oneOf: + - title: ID + properties: + id: + type: string + description: The identifier for the contact as given by Intercom. + required: + - id + - title: External ID + properties: + external_id: + type: string + description: The external_id you have defined for the contact who + is being added as a participant. + required: + - external_id + - title: Email + properties: + email: + type: string + description: The email you have defined for the contact who is being + added as a participant. If a contact with this email does not + exist, one will be created. + required: + - email + example: + - id: '1234' + conversation_to_link_id: + type: string + description: "The ID of the conversation you want to link to the ticket. + Here are the valid ways of linking two tickets:\n + - conversation | back-office ticket\n + - customer tickets | non-shared back-office ticket\n + - conversation | tracker ticket\n + - customer ticket | tracker ticket" + example: '1234' + company_id: + type: string + description: The ID of the company that the ticket is associated with. The + unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + created_at: + type: integer + description: The time the ticket was created. If not provided, the current + time will be used. + example: 1590000000 + ticket_attributes: + "$ref": "#/components/schemas/ticket_request_custom_attributes" + assignment: + type: object + properties: + admin_assignee_id: + type: string + description: The ID of the admin to which the ticket is assigned. + If not provided, the ticket will be unassigned. + example: '123' + team_assignee_id: + type: string + description: The ID of the team to which the ticket is assigned. + If not provided, the ticket will be unassigned. + example: '8' + required: + - ticket_type_id + - contacts + create_ticket_type_attribute_request: + description: You can create a Ticket Type Attribute + type: object + title: Create Ticket Type Attribute Request Payload + properties: + name: + type: string + description: The name of the ticket type attribute + example: Bug Priority + description: + type: string + description: The description of the attribute presented to the teammate + or contact + example: Priority level of the bug + data_type: + type: string + description: The data type of the attribute + enum: + - string + - list + - integer + - decimal + - boolean + - datetime + - files + example: string + required_to_create: + type: boolean + description: Whether the attribute is required to be filled in when teammates + are creating the ticket in Inbox. + default: false + example: false + required_to_create_for_contacts: + type: boolean + description: Whether the attribute is required to be filled in when contacts + are creating the ticket in Messenger. + default: false + example: false + visible_on_create: + type: boolean + description: Whether the attribute is visible to teammates when creating + a ticket in Inbox. + default: true + example: true + visible_to_contacts: + type: boolean + description: Whether the attribute is visible to contacts when creating + a ticket in Messenger. + default: true + example: true + multiline: + type: boolean + description: Whether the attribute allows multiple lines of text (only applicable + to string attributes) + example: false + list_items: + type: string + description: A comma delimited list of items for the attribute value (only + applicable to list attributes) + example: Low Priority,Medium Priority,High Priority + allow_multiple_values: + type: boolean + description: Whether the attribute allows multiple files to be attached + to it (only applicable to file attributes) + example: false + required: + - name + - description + - data_type + create_ticket_type_request: + description: | + The request payload for creating a ticket type. + You can copy the `icon` property for your ticket type from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/) + type: object + title: Create Ticket Type Request Payload + nullable: true + properties: + name: + type: string + description: The name of the ticket type. + example: Bug + description: + type: string + description: The description of the ticket type. + example: Used for tracking bugs + category: + type: string + description: Category of the Ticket Type. + enum: + - Customer + - Back-office + - Tracker + example: Customer + icon: + type: string + description: The icon of the ticket type. + example: "\U0001F41E" + default: "\U0001F39F️" + is_internal: + type: boolean + description: Whether the tickets associated with this ticket type are intended + for internal use only or will be shared with customers. This is currently + a limited attribute. + example: false + default: false + required: + - name + cursor_pages: + title: Cursor based pages + type: object + description: | + Cursor-based pagination is a technique used in the Intercom API to navigate through large amounts of data. + A "cursor" or pointer is used to keep track of the current position in the result set, allowing the API to return the data in small chunks or "pages" as needed. + nullable: true + properties: + type: + type: string + description: the type of object `pages`. + example: pages + enum: + - pages + page: + type: integer + description: The current page + example: 1 + next: + "$ref": "#/components/schemas/starting_after_paging" + per_page: + type: integer + description: Number of results per page + example: 2 + total_pages: + type: integer + description: Total number of pages + example: 13 + call: + title: Call + type: object + x-tags: + - Calls + description: Represents a phone call in Intercom + properties: + type: + type: string + description: String representing the object's type. Always has the value `call`. + example: call + id: + type: string + description: The id of the call. + example: "123" + conversation_id: + type: string + nullable: true + description: The id of the conversation associated with the call, if any. + example: "456" + admin_id: + type: string + nullable: true + description: The id of the admin associated with the call, if any. + example: "789" + contact_id: + type: string + nullable: true + description: The id of the contact associated with the call, if any. + example: "6762f0dd1bb69f9f2193bb83" + state: + type: string + description: The current state of the call. + example: completed + initiated_at: + "$ref": "#/components/schemas/datetime" + answered_at: + "$ref": "#/components/schemas/datetime" + ended_at: + "$ref": "#/components/schemas/datetime" + created_at: + "$ref": "#/components/schemas/datetime" + updated_at: + "$ref": "#/components/schemas/datetime" + recording_url: + type: string + format: uri + nullable: true + description: API URL to download or redirect to the call recording if available. + example: "https://api.intercom.io/calls/123/recording" + transcription_url: + type: string + format: uri + nullable: true + description: API URL to download or redirect to the call transcript if available. + example: "https://api.intercom.io/calls/123/transcript" + call_type: + type: string + description: The type of call. + example: phone + direction: + type: string + description: The direction of the call. + example: outbound + ended_reason: + type: string + nullable: true + description: The reason for the call end, if applicable. + example: completed + phone: + type: string + nullable: true + description: The phone number involved in the call, in E.164 format. + example: "+15551234567" + fin_recording_url: + type: string + format: uri + nullable: true + description: API URL to the AI Agent (Fin) call recording if available. + fin_transcription_url: + type: string + format: uri + nullable: true + description: API URL to the AI Agent (Fin) call transcript if available. + call_list: + title: Calls + type: object + description: A paginated list of calls. + properties: + type: + type: string + description: String representing the object's type. Always has the value `list`. + example: list + data: + type: array + description: A list of calls. + items: + "$ref": "#/components/schemas/call" + total_count: + type: integer + description: Total number of items available. + example: 0 + pages: + "$ref": "#/components/schemas/cursor_pages" + custom_attributes: + title: Custom Attributes + type: object + description: 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. System-defined attributes + such as "CX Score rating" and "CX Score explanation" may also be included. + additionalProperties: + anyOf: + - type: string + - type: integer + - $ref: "#/components/schemas/datetime" + - "$ref": "#/components/schemas/custom_object_instance_list" + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + start_date_iso8601: "2023-03-04T09:46:14Z" + end_date_timestamp: 1677923174 + CX Score rating: 4 + CX Score explanation: The conversation was resolved quickly and the customer + expressed satisfaction with the outcome. + custom_object_instance: + title: Custom Object Instance + type: object + x-tags: + - Custom Object Instances + nullable: true + description: A Custom Object Instance represents an instance of a custom object + type. This allows you to create and set custom attributes to store data about + your customers that is not already captured by Intercom. The parent object + includes recommended default attributes and you can add your own custom attributes. + properties: + id: + type: string + description: The Intercom defined id representing the custom object instance. + example: 16032025 + external_id: + type: string + description: The id you have defined for the custom object instance. + example: 0001d1c1e65a7a19e9f59ae2 + external_created_at: + type: integer + format: date-time + nullable: true + description: The time when the Custom Object instance was created in the + external system it originated from. + example: 1571672154 + external_updated_at: + type: integer + format: date-time + nullable: true + description: The time when the Custom Object instance was last updated in + the external system it originated from. + example: 1571672154 + created_at: + type: integer + format: date-time + description: The time the attribute was created as a UTC Unix timestamp + example: 1671028894 + updated_at: + type: integer + format: date-time + description: The time the attribute was last updated as a UTC Unix timestamp + example: 1671028894 + type: + type: string + description: The identifier of the custom object type that defines the structure + of the custom object instance. + example: Order + custom_attributes: + type: object + description: The custom attributes you have set on the custom object instance. + additionalProperties: + type: string + custom_object_instance_deleted: + title: Custom Object Instance Deleted + type: object + description: deleted custom object instance object + properties: + object: + type: string + description: The unique identifier of the Custom Object type that defines + the structure of the Custom Object instance. + example: Order + id: + type: string + description: The Intercom defined id representing the Custom Object instance. + example: '123' + deleted: + type: boolean + description: Whether the Custom Object instance is deleted or not. + example: true + custom_object_instance_list: + title: Custom Object Instances + type: object + description: The list of associated custom object instances for a given reference + attribute on the parent object. + properties: + type: + type: string + example: order.list + instances: + type: array + description: The list of associated custom object instances for a given + reference attribute on the parent object. + items: + "$ref": "#/components/schemas/custom_object_instance" + customer_request: + type: object + nullable: true + oneOf: + - title: Intercom User ID + properties: + intercom_user_id: + type: string + description: The identifier for the contact as given by Intercom. + example: 6329bd9ffe4e2e91dac76188 + required: + - intercom_user_id + - title: User ID + properties: + user_id: + type: string + description: The external_id you have defined for the contact who is being + added as a participant. + example: 2e91dac761886329bd9ffe4e + required: + - user_id + - title: Email + properties: + email: + type: string + description: The email you have defined for the contact who is being added + as a participant. + example: sam.sung@example.com + required: + - email + data_attribute: + title: Data Attribute + type: object + x-tags: + - Data Attributes + description: Data Attributes are metadata used to describe your contact, company + and conversation models. These include standard and custom attributes. By + using the data attributes endpoint, you can get the global list of attributes + for your workspace, as well as create and archive custom attributes. + properties: + type: + type: string + description: Value is `data_attribute`. + enum: + - data_attribute + example: data_attribute + id: + type: integer + description: The unique identifier for the data attribute which is given + by Intercom. Only available for custom attributes. + example: 12878 + model: + type: string + description: Value is `contact` for user/lead attributes and `company` for + company attributes. + enum: + - contact + - company + example: contact + name: + type: string + description: Name of the attribute. + example: paid_subscriber + full_name: + type: string + description: Full name of the attribute. Should match the name unless it's + a nested attribute. We can split full_name on `.` to access nested user + object values. + example: custom_attributes.paid_subscriber + label: + type: string + description: Readable name of the attribute (i.e. name you see in the UI) + example: Paid Subscriber + description: + type: string + description: Readable description of the attribute. + example: Whether the user is a paid subscriber. + data_type: + type: string + description: The data type of the attribute. + enum: + - string + - integer + - float + - boolean + - date + example: boolean + options: + type: array + description: List of predefined options for attribute value. + items: + type: string + example: + - 'true' + - 'false' + api_writable: + type: boolean + description: Can this attribute be updated through API + example: true + messenger_writable: + type: boolean + description: Can this attribute be updated by the Messenger + example: false + ui_writable: + type: boolean + description: Can this attribute be updated in the UI + example: true + custom: + type: boolean + description: Set to true if this is a CDA + example: true + archived: + type: boolean + description: Is this attribute archived. (Only applicable to CDAs) + example: false + created_at: + type: integer + format: date-time + description: The time the attribute was created as a UTC Unix timestamp + example: 1671028894 + updated_at: + type: integer + format: date-time + description: The time the attribute was last updated as a UTC Unix timestamp + example: 1671028894 + admin_id: + type: string + description: Teammate who created the attribute. Only applicable to CDAs + example: '5712945' + data_attribute_list: + title: Data Attribute List + type: object + description: A list of all data attributes belonging to a workspace for contacts, + companies or conversations. + properties: + type: + type: string + description: The type of the object + enum: + - list + example: list + data: + type: array + description: A list of data attributes + items: + "$ref": "#/components/schemas/data_attribute" + data_event: + title: Data Event + type: object + x-tags: + - Data Events + description: Data events are used to notify Intercom of changes to your data. + properties: + type: + type: string + description: The type of the object + enum: + - event + example: event + event_name: + type: string + description: The name of the event that occurred. This is presented to your + App's admins when filtering and creating segments - a good event name + is typically a past tense 'verb-noun' combination, to improve readability, + for example `updated-plan`. + example: invited-friend + created_at: + type: integer + format: date-time + description: The time the event occurred as a UTC Unix timestamp + example: 1671028894 + user_id: + type: string + description: Your identifier for the user. + example: '314159' + id: + type: string + description: Your identifier for a lead or a user. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + intercom_user_id: + type: string + description: The Intercom identifier for the user. + example: 63a0979a5eeebeaf28dd56ba + email: + type: string + description: An email address for your user. An email should only be used + where your application uses email to uniquely identify users. + example: frodo.baggins@example.com + metadata: + type: object + description: Optional metadata about the event. + additionalProperties: + type: string + example: + invite_code: ADDAFRIEND + required: + - event_name + - created_at + data_event_list: + title: Data Event List + type: object + description: This will return a list of data events for the App. + properties: + type: + type: string + description: The type of the object + enum: + - event.list + example: event.list + events: + type: array + description: A list of data events + items: + "$ref": "#/components/schemas/data_event" + pages: + type: object + description: Pagination + properties: + next: + type: string + example: https://api.intercom.io/events?per_page=2&before=1389913941064&intercom_user_id=63a0979a5eeebeaf28dd56ba&type=user" + since: + type: string + example: https://api.intercom.io/events?intercom_user_id=63a0979a5eeebeaf28dd56ba&type=user&since=1389913941065 + data_event_summary: + title: Data Event Summary + type: object + description: This will return a summary of data events for the App. + properties: + type: + type: string + description: The type of the object + enum: + - event.summary + example: event.summary + email: + type: string + description: The email address of the user + example: Sam.Sung@example.com + intercom_user_id: + type: string + description: The Intercom user ID of the user + example: 63a0979a5eeebeaf28dd56ba + user_id: + type: string + description: The user ID of the user + example: 62b997f288e14803c5006932 + events: + type: array + description: A summary of data events + items: + "$ref": "#/components/schemas/data_event_summary_item" + data_event_summary_item: + title: Data Event Summary Item + type: object + description: This will return a summary of a data event for the App. + nullable: true + properties: + name: + type: string + description: The name of the event + example: placed-order + first: + type: string + description: The first time the event was sent + example: '2014-01-16T23:12:21.000+00:00' + last: + type: string + description: The last time the event was sent + example: '2014-01-16T23:12:21.000+00:00 ' + count: + type: integer + description: The number of times the event was sent + example: 1 + description: + type: string + description: The description of the event + example: A user placed an order + data_export: + title: Data Export + type: object + x-tags: + - Data Export + description: The data export API is used to export message delivery and engagement + statistics for outbound content (Emails, Posts, Custom Bots, Surveys, Tours, + Series, and more) sent in a given timeframe. The exported data includes who + received each message, when they received it, and how they engaged with it + (opens, clicks, replies, completions, dismissals, unsubscribes, and bounces). + properties: + job_identifier: + type: string + description: The identifier for your job. + example: orzzsbd7hk67xyu + status: + type: string + enum: + - pending + - in_progress + - failed + - completed + - no_data + - canceled + description: The current state of your job. + example: pending + download_expires_at: + type: string + description: The time after which you will not be able to access the data. + example: '1674917488' + download_url: + type: string + description: The location where you can download your data. + example: https://api.intercom.test/download/messages/data/example + data_export_csv: + title: Data Export CSV + type: object + description: A CSV output file + properties: + user_id: + type: string + description: The user_id of the user who was sent the message. + user_external_id: + type: string + description: The external_user_id of the user who was sent the message + company_id: + type: string + description: The company ID of the user in relation to the message that + was sent. Will return -1 if no company is present. + email: + type: string + description: The users email who was sent the message. + name: + type: string + description: The full name of the user receiving the message + ruleset_id: + type: string + description: The id of the message. + content_id: + type: string + description: The specific content that was received. In an A/B test each + version has its own Content ID. + content_type: + type: string + description: Email, Chat, Post etc. + content_title: + type: string + description: The title of the content you see in your Intercom workspace. + ruleset_version_id: + type: string + description: As you edit content we record new versions. This ID can help + you determine which version of a piece of content that was received. + receipt_id: + type: string + description: ID for this receipt. Will be included with any related stats + in other files to identify this specific delivery of a message. + received_at: + type: integer + description: Timestamp for when the receipt was recorded. + series_id: + type: string + description: The id of the series that this content is part of. Will return + -1 if not part of a series. + series_title: + type: string + description: The title of the series that this content is part of. + node_id: + type: string + description: The id of the series node that this ruleset is associated with. + Each block in a series has a corresponding node_id. + first_reply: + type: integer + description: The first time a user replied to this message if the content + was able to receive replies. Only events within the export job's requested date range are counted. + first_completion: + type: integer + description: The first time a user completed this message if the content + was able to be completed e.g. Tours, Surveys. Only events within the export job's requested date range are counted. + first_series_completion: + type: integer + description: The first time the series this message was a part of was completed + by the user. Only events within the export job's requested date range are counted. + first_series_disengagement: + type: integer + description: The first time the series this message was a part of was disengaged + by the user. Only events within the export job's requested date range are counted. + first_series_exit: + type: integer + description: The first time the series this message was a part of was exited + by the user. Only events within the export job's requested date range are counted. + first_goal_success: + type: integer + description: The first time the user met this messages associated goal if + one exists. Only events within the export job's requested date range are counted. + first_open: + type: integer + description: The first time the user opened this message. Only events within + the export job's requested date range are counted. + first_click: + type: integer + description: The first time the series the user clicked on a link within + this message. Only events within the export job's requested date range are counted. + first_dismisall: + type: integer + description: The first time the series the user dismissed this message. Only events within the export job's requested date range are counted. + first_unsubscribe: + type: integer + description: The first time the user unsubscribed from this message. Only events within the export job's requested date range are counted. + first_hard_bounce: + type: integer + description: The first time this message hard bounced for this user. Only events within the export job's requested date range are counted. + deleted_article_object: + title: Deleted Article Object + type: object + description: Response returned when an object is deleted + properties: + id: + type: string + description: The unique identifier for the article which you provided in + the URL. + example: '6890762' + object: + type: string + description: The type of object which was deleted. - article + enum: + - article + example: article + deleted: + type: boolean + description: Whether the article was deleted successfully or not. + example: true + deleted_internal_article_object: + title: Deleted Internal Article Object + type: object + description: Response returned when an object is deleted + properties: + id: + type: string + description: The unique identifier for the internal article which you provided in + the URL. + example: '6890762' + object: + type: string + description: The type of object which was deleted. - internal_article + enum: + - internal_article + example: internal_article + deleted: + type: boolean + description: Whether the internal article was deleted successfully or not. + example: true + deleted_collection_object: + title: Deleted Collection Object + type: object + description: Response returned when an object is deleted + properties: + id: + type: string + description: The unique identifier for the collection which you provided + in the URL. + example: '6890762' + object: + type: string + description: The type of object which was deleted. - `collection` + enum: + - collection + example: collection + deleted: + type: boolean + description: Whether the collection was deleted successfully or not. + example: true + deleted_company_object: + title: Deleted Company Object + type: object + description: Response returned when an object is deleted + properties: + id: + type: string + description: The unique identifier for the company which is given by Intercom. + example: 5b7e8b2f-7a1a-4e6c-8e1b-4f9d4f4c4d4f + object: + type: string + description: The type of object which was deleted. - `company` + enum: + - company + example: company + deleted: + type: boolean + description: Whether the company was deleted successfully or not. + example: true + deleted_object: + title: Deleted Object + type: object + description: Response returned when an object is deleted + properties: + id: + type: string + description: The unique identifier for the news item which you provided + in the URL. + example: '6890762' + object: + type: string + description: The type of object which was deleted - news-item. + enum: + - news-item + example: news-item + deleted: + type: boolean + description: Whether the news item was deleted successfully or not. + example: true + detach_contact_from_conversation_request: + properties: + admin_id: + type: string + description: The `id` of the admin who is performing the action. + example: '5017690' + required: + - admin_id + email_address_header: + title: Email Address Header + type: object + description: Contains data for an email address header for a conversation part + that was sent as an email. + properties: + type: + type: string + description: The type of email address header + example: from + email_address: + type: string + description: The email address + example: jdoe@example.com + name: + type: string + nullable: true + description: The name associated with the email address + example: Joe Example + email_message_metadata: + title: Email Message Metadata + type: object + description: Contains metadata if the message was sent as an email + properties: + subject: + type: string + description: The subject of the email + example: Question about my order + email_address_headers: + title: Email Address Headers + type: array + description: A list of an email address headers. + items: + "$ref": "#/components/schemas/email_address_header" + message_id: + type: string + nullable: true + description: The unique identifier for the email message as specified in the Message-ID header + example: "" + email_setting: + type: object + title: Email Setting + description: Represents a sender email address configuration + x-tags: + - Emails + properties: + type: + type: string + description: The type of object + example: email_setting + id: + type: string + description: Unique email setting identifier + example: "10" + email: + type: string + description: Full sender email address + example: "support@company.com" + verified: + type: boolean + description: Whether the email address has been verified + example: true + domain: + type: string + description: Domain portion of the email address + example: "company.com" + brand_id: + type: string + description: Associated brand identifier + example: "10" + forwarding_enabled: + type: boolean + description: Whether email forwarding is active + example: true + forwarded_email_last_received_at: + type: integer + format: date-time + nullable: true + description: Unix timestamp of last forwarded email received (null if never) + example: 1710498600 + created_at: + type: integer + format: date-time + description: Unix timestamp of creation + example: 1692530400 + updated_at: + type: integer + format: date-time + description: Unix timestamp of last modification + example: 1710498600 + email_list: + type: object + title: Email List + description: A list of email settings + x-tags: + - Emails + properties: + type: + type: string + description: The type of object + example: list + data: + type: array + items: + $ref: "#/components/schemas/email_setting" + metadata: + "$ref": "#/components/schemas/conversation_part_metadata" + conversation_attribute_updated_by_workflow: + title: Part type - conversation_attribute_updated_by_workflow + type: object + description: Contains details about the workflow that was triggered and any Custom Data Attributes (CDAs) that were modified during the workflow execution for conversation part type conversation_attribute_updated_by_workflow. + properties: + workflow: + type: object + properties: + name: + type: string + description: Name of the workflow + example: Workflow 1 + attribute: + type: object + properties: + name: + type: string + description: Name of the CDA updated + example: flight_category + value: + type: object + properties: + name: + type: string + description: Value of the CDA updated + example: vip_status + conversation_attribute_updated_by_admin: + title: Part type - conversation_attribute_updated_by_admin + type: object + description: Contains details about Custom Data Attributes (CDAs) that were modified by an admin (operator) for conversation part type conversation_attribute_updated_by_admin. + properties: + attribute: + type: object + properties: + name: + type: string + description: Name of the CDA updated + example: jira_issue_key + value: + type: object + properties: + name: + type: string + description: Current value of the CDA updated + example: PROJ-007 + previous: + type: string + nullable: true + description: Previous value of the CDA + example: PROJ-006 + conversation_attribute_updated_by_user: + title: Part type - conversation_attribute_updated_by_user + type: object + description: Contains details about Custom Data Attributes (CDAs) that were modified by a user for conversation part type conversation_attribute_updated_by_user. + properties: + attribute: + type: object + properties: + name: + type: string + description: Name of the CDA updated + example: Priority + value: + type: object + properties: + name: + type: string + description: Current value of the CDA updated + example: High + previous: + type: string + nullable: true + description: Previous value of the CDA (null for older events) + example: Medium + custom_action_started: + title: Part type - custom_action_started + type: object + description: Contains details about name of the action that was initiated for conversation part type custom_action_started. + properties: + action: + type: object + properties: + name: + type: string + description: Name of the action + example: Jira Create Issue + custom_action_finished: + title: Part type - custom_action_finished + type: object + description: Contains details about final status of the completed action for conversation part type custom_action_finished. + properties: + action: + type: object + properties: + name: + type: string + description: Name of the action + example: Jira Create Issue + result: + type: string + description: Status of the action + enum: + - success + - failed + example: success + operator_workflow_event: + title: Part type - operator_workflow_event + type: object + description: Contains details about name of the workflow for conversation part type operator_workflow_event. + properties: + workflow: + type: object + properties: + name: + type: string + description: The name of the workflow + example: Custom Bot 1 + event: + type: object + properties: + type: + type: string + description: Type of the workflow event initiated + example: wait_finished + result: + type: string + description: Result of the workflow event + example: Finsihed waiting + event_details: + title: Event details of Workflow & actions + type: object + anyOf: + - "$ref": "#/components/schemas/conversation_attribute_updated_by_workflow" + - "$ref": "#/components/schemas/conversation_attribute_updated_by_admin" + - "$ref": "#/components/schemas/conversation_attribute_updated_by_user" + - "$ref": "#/components/schemas/custom_action_started" + - "$ref": "#/components/schemas/custom_action_finished" + - "$ref": "#/components/schemas/operator_workflow_event" + error: + type: object + title: Error + description: The API will return an Error List for a failed request, which will + contain one or more Error objects. + properties: + type: + type: string + description: The type is error.list + example: error.list + request_id: + type: string + nullable: true + format: uuid + description: '' + example: f93ecfa8-d08a-4325-8694-89aeb89c8f85 + errors: + type: array + description: An array of one or more error objects + items: + properties: + code: + type: string + description: A string indicating the kind of error, used to further + qualify the HTTP response code + example: unauthorized + message: + type: string + nullable: true + description: Optional. Human readable description of the error. + example: Access Token Invalid + field: + type: string + nullable: true + description: Optional. Used to identify a particular field or query + parameter that was in error. + example: email + required: + - code + required: + - type + - errors + external_page: + title: External Page + type: object + x-tags: + - AI Content + description: External pages that you have added to your Fin Content Library. + nullable: false + properties: + type: + type: string + description: Always external_page + enum: + - external_page + default: external_page + example: external_page + id: + type: string + description: The unique identifier for the external page which is given + by Intercom. + example: '1234' + title: + type: string + description: The title of the external page. + example: Getting started with... + html: + type: string + description: The body of the external page in HTML. + example: "

Hello world!

" + url: + type: string + description: The URL of the external page. This will be used by Fin to link + end users to the page it based its answer on. + example: https://help.example.com/en/articles/1234-getting-started + ai_agent_availability: + type: boolean + description: Whether the external page should be used to answer questions + by AI Agent. + example: true + ai_copilot_availability: + type: boolean + description: Whether the external page should be used to answer questions + by AI Copilot. + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the external page should be used to answer questions + by AI Sales Agent. + example: true + fin_availability: + type: boolean + description: Deprecated. Use ai_agent_availability and ai_copilot_availability + instead. + example: true + locale: + type: string + description: Always en + enum: + - en + default: en + example: en + source_id: + type: integer + description: The unique identifier for the source of the external page which + was given by Intercom. Every external page must be associated with a Content + Import Source which represents the place it comes from and from which + it inherits a default audience (configured in the UI). For a new source, + make a POST request to the Content Import Source endpoint and an ID for + the source will be returned in the response. + example: 1234 + external_id: + type: string + description: The identifier for the external page which was given by the + source. Must be unique for the source. + example: '5678' + created_at: + type: integer + format: date-time + description: The time when the external page was created. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the external page was last updated. + example: 1672928610 + last_ingested_at: + type: integer + format: date-time + description: The time when the external page was last ingested. + example: 1672928610 + required: + - id + - type + - title + - html + - ai_agent_availability + - ai_copilot_availability + - locale + - source_id + - created_at + - updated_at + - last_ingested_at + - external_id + external_pages_list: + title: External Pages + type: object + x-tags: + - AI Content + description: This will return a list of external pages for the App. + nullable: false + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/pages_link" + total_count: + type: integer + description: A count of the total number of external pages. + example: 1 + data: + type: array + description: An array of External Page objects + items: + "$ref": "#/components/schemas/external_page" + fin_agent_message: + title: Fin Agent Message + type: object + description: A message exchanged within a Fin Agent conversation. + x-tags: + - Fin Agent + properties: + author: + type: string + enum: + - user + - agent + - fin + description: The author that created the message. + example: user + body: + type: string + description: | + The body of the message. Accepts both plain text and HTML format. + When sending a message to Fin, this should contain the user's message. + Fin's response will be returned as HTML. + example: How can I see my account details? + timestamp: + type: string + format: date-time + description: | + The timestamp when the message was created. + Used to deduplicate messages sent within a 5 minute window. + Ideally should include milliseconds for higher precision. + example: '2025-01-24T10:01:20.000Z' + timestamp_ms: + type: string + format: date-time + description: | + The timestamp when the message was created, with millisecond precision. + Only present in webhook event responses (fin_replied). + example: '2025-01-24T10:01:20.456Z' + required: + - author + - body + - timestamp + fin_agent_user: + title: Fin Agent User + type: object + description: A user object representing the user in a Fin Agent conversation. + x-tags: + - Fin Agent + properties: + id: + type: string + description: | + The ID of the user. This value will be used to uniquely identify the user + during a conversation with Fin. Maps to the user_id field on the Intercom User object. + example: '123456' + name: + type: string + description: The name of the user. + example: John Doe + email: + type: string + format: email + description: The email of the user. + example: john.doe@example.com + attributes: + type: object + description: | + A hash of attributes associated with the user. + Attributes can be used by Fin to target content and responses. + Limit to 10 attributes. + additionalProperties: true + example: + plan_type: Pro + subscription_status: active + required: + - id + fin_agent_attachment: + title: Fin Agent Attachment + type: object + description: | + An attachment object representing a file or URL attachment included with a message. + Attachments can be used to provide additional context to Fin. + Maximum of 10 attachments per request. + x-tags: + - Fin Agent + properties: + type: + type: string + enum: + - url + - file + description: The type of attachment. + example: url + url: + type: string + format: uri + description: The URL of the attachment. Required when type is 'url'. Must be publicly accessible. + example: https://example.com/document.pdf + name: + type: string + description: The name of the file. Required when type is 'file'. + example: screenshot.png + content_type: + type: string + description: The MIME type of the file. Required when type is 'file'. + example: image/png + data: + type: string + format: byte + description: Base64-encoded file data. Required when type is 'file'. + example: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk... + required: + - type + fin_agent_conversation_metadata: + title: Fin Agent Conversation Metadata + type: object + description: Metadata about the conversation, including history and attributes. + x-tags: + - Fin Agent + properties: + history: + type: array + description: | + An array of previous messages in the conversation before Fin is initialized. + This data provides context to Fin and helps generate a better answer. + Limit to the last 10 messages. + maxItems: 10 + items: + "$ref": "#/components/schemas/fin_agent_message" + attributes: + type: object + description: | + A hash of attributes associated with the conversation. + These attributes can be used by Fin to provide more contextual responses. + Limit to 10 attributes. + additionalProperties: true + example: + priority_level: high + department: sales + fin_agent_attribute_errors: + title: Fin Agent Attribute Errors + type: object + description: Contains error details if any user or conversation attribute updates failed. + x-tags: + - Fin Agent + properties: + user: + type: object + description: User-related attribute errors. + properties: + attributes: + type: object + description: Map of user attribute names to error messages. + additionalProperties: + type: string + example: + invalid_attr: User attribute 'invalid_attr' does not exist + conversation: + type: object + description: Conversation-related attribute errors. + properties: + attributes: + type: object + description: Map of conversation attribute names to error messages. + additionalProperties: + type: string + example: + bad_attr: Conversation attribute 'bad_attr' does not exist + fin_agent_status_updated_event: + title: Fin Agent Status Updated Event + type: object + description: | + Event fired when Fin's status changes during a conversation. + Delivered via webhooks or SSE. Fin will report its status to the client via this event. + x-tags: + - Fin Agent + properties: + event_name: + type: string + enum: + - fin_status_updated + description: The name of the event. + example: fin_status_updated + conversation_id: + type: string + description: The ID of the conversation. + example: '123456' + user_id: + type: string + description: The ID of the user. + example: '7891' + status: + type: string + enum: + - escalated + - resolved + - complete + description: | + Fin's current status. + - escalated: The conversation has been escalated to a human + - resolved: The user's query has been resolved + - complete: Fin has completed its workflow + example: escalated + reason: + type: string + description: | + Optional. A human-readable explanation of why the conversation was escalated. + Only present when status is 'escalated'. + Possible values include: + - "Escalation requested by user" + - "Escalation rule: {rule_name}" + - "Escalation rule matched" + - "Routed to team" + - "Conversation finished without resolution" + example: Escalation requested by user + created_at_ms: + type: string + format: date-time + description: The timestamp the event was created at, with millisecond precision. + example: '2025-01-24T10:00:00.123Z' + required: + - event_name + - conversation_id + - user_id + - status + - created_at_ms + fin_agent_replied_event: + title: Fin Agent Replied Event + type: object + description: | + Event fired when Fin replies to a user. + Delivered via webhooks or SSE. The content of the response will be contained in the message object. + Fin's status will update to 'awaiting_user_reply'. + x-tags: + - Fin Agent + properties: + event_name: + type: string + enum: + - fin_replied + description: The name of the event. + example: fin_replied + conversation_id: + type: string + description: The ID of the conversation. + example: '123456' + user_id: + type: string + description: The ID of the user. + example: '7891' + message: + type: object + description: Fin's answer to the user's query. + properties: + id: + type: string + description: A unique identifier for this message. + example: '98765' + author: + type: string + enum: + - fin + description: The author of the message (always 'fin' for this event). + example: fin + body: + type: string + description: The HTML body of Fin's response. + example:

You can see your account details by clicking on the Account tab in the top right corner of the screen.

+ timestamp_ms: + type: string + format: date-time + description: The timestamp the message was created at, with millisecond precision. + example: '2025-01-24T09:01:00.456Z' + required: + - author + - body + - timestamp_ms + status: + type: string + enum: + - awaiting_user_reply + description: Fin's current status (always 'awaiting_user_reply' for this event). + example: awaiting_user_reply + stream_id: + type: string + description: | + Optional. Present when the reply was generated via streaming. + Correlates this event with the fin_reply_chunk events that preceded it. + Use this to know when to replace streamed chunk_text with the final message body. + example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 + created_at_ms: + type: string + format: date-time + description: The timestamp the event was created at, with millisecond precision. + example: '2025-01-24T10:00:00.123Z' + required: + - event_name + - conversation_id + - user_id + - message + - status + - created_at_ms + fin_agent_reply_chunk_event: + title: Fin Agent Reply Chunk Event + type: object + description: | + SSE-only event fired during streaming reply generation. + Each chunk contains the full accumulated plain text of Fin's answer so far (cumulative, not a delta). + Only delivered over SSE when streaming is enabled. Not available via webhooks. + When the fin_replied event arrives with the same stream_id, replace streamed text with the final HTML body. + x-tags: + - Fin Agent + properties: + event_name: + type: string + enum: + - fin_reply_chunk + description: The name of the event. + example: fin_reply_chunk + conversation_id: + type: string + description: The ID of the conversation. + example: '123456' + stream_id: + type: string + description: | + A unique identifier for this streaming response. + Correlates chunks with each other and with the eventual fin_replied event. + example: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 + chunk_index: + type: integer + description: | + 0-based counter for this chunk within the stream. Contiguous. + example: 3 + chunk_text: + type: string + description: | + The full accumulated plain text of Fin's answer so far. + Each chunk supersedes the previous — replace rather than append. + example: You can see your account details by clicking + status: + type: string + enum: + - replying + description: Fin's current status (always 'replying' for this event). + example: replying + created_at_ms: + type: string + format: date-time + description: The timestamp the event was created at, with millisecond precision. + example: '2025-01-24T10:00:00.123Z' + required: + - event_name + - conversation_id + - stream_id + - chunk_index + - chunk_text + - created_at_ms + file_attribute: + title: File + type: object + description: The value describing a file upload set for a custom attribute + properties: + type: + type: string + example: upload + name: + type: string + description: The name of the file + example: Screenshot.png + url: + type: string + description: The url of the file. This is a temporary URL and will expire + after 30 minutes. + example: https://intercom-attachments-1.com/.../Screenshot.png + content_type: + type: string + description: The type of file + example: image/png + filesize: + type: integer + description: The size of the file in bytes + example: 11308309 + width: + type: integer + description: The width of the file in pixels, if applicable + example: 3024 + height: + type: integer + description: The height of the file in pixels, if applicable + example: 1964 + group_content: + title: Group Content + type: object + description: The Content of a Group. + nullable: true + properties: + type: + type: string + description: The type of object - `group_content` . + enum: + - + - group_content + example: group_content + nullable: true + name: + type: string + description: The name of the collection or section. + example: Collection name + description: + type: string + description: The description of the collection. Only available for collections. + example: " Collection description" + group_translated_content: + title: Group Translated Content + type: object + description: The Translated Content of an Group. The keys are the locale codes + and the values are the translated content of the Group. + nullable: true + properties: + type: + type: string + description: The type of object - group_translated_content. + nullable: true + enum: + - + - group_translated_content + example: group_translated_content + ar: + description: The content of the group in Arabic + "$ref": "#/components/schemas/group_content" + bg: + description: The content of the group in Bulgarian + "$ref": "#/components/schemas/group_content" + bs: + description: The content of the group in Bosnian + "$ref": "#/components/schemas/group_content" + ca: + description: The content of the group in Catalan + "$ref": "#/components/schemas/group_content" + cs: + description: The content of the group in Czech + "$ref": "#/components/schemas/group_content" + da: + description: The content of the group in Danish + "$ref": "#/components/schemas/group_content" + de: + description: The content of the group in German + "$ref": "#/components/schemas/group_content" + el: + description: The content of the group in Greek + "$ref": "#/components/schemas/group_content" + en: + description: The content of the group in English + "$ref": "#/components/schemas/group_content" + es: + description: The content of the group in Spanish + "$ref": "#/components/schemas/group_content" + et: + description: The content of the group in Estonian + "$ref": "#/components/schemas/group_content" + fi: + description: The content of the group in Finnish + "$ref": "#/components/schemas/group_content" + fr: + description: The content of the group in French + "$ref": "#/components/schemas/group_content" + he: + description: The content of the group in Hebrew + "$ref": "#/components/schemas/group_content" + hr: + description: The content of the group in Croatian + "$ref": "#/components/schemas/group_content" + hu: + description: The content of the group in Hungarian + "$ref": "#/components/schemas/group_content" + id: + description: The content of the group in Indonesian + "$ref": "#/components/schemas/group_content" + it: + description: The content of the group in Italian + "$ref": "#/components/schemas/group_content" + ja: + description: The content of the group in Japanese + "$ref": "#/components/schemas/group_content" + ko: + description: The content of the group in Korean + "$ref": "#/components/schemas/group_content" + lt: + description: The content of the group in Lithuanian + "$ref": "#/components/schemas/group_content" + lv: + description: The content of the group in Latvian + "$ref": "#/components/schemas/group_content" + mn: + description: The content of the group in Mongolian + "$ref": "#/components/schemas/group_content" + nb: + description: The content of the group in Norwegian + "$ref": "#/components/schemas/group_content" + nl: + description: The content of the group in Dutch + "$ref": "#/components/schemas/group_content" + pl: + description: The content of the group in Polish + "$ref": "#/components/schemas/group_content" + pt: + description: The content of the group in Portuguese (Portugal) + "$ref": "#/components/schemas/group_content" + ro: + description: The content of the group in Romanian + "$ref": "#/components/schemas/group_content" + ru: + description: The content of the group in Russian + "$ref": "#/components/schemas/group_content" + sl: + description: The content of the group in Slovenian + "$ref": "#/components/schemas/group_content" + sr: + description: The content of the group in Serbian + "$ref": "#/components/schemas/group_content" + sv: + description: The content of the group in Swedish + "$ref": "#/components/schemas/group_content" + tr: + description: The content of the group in Turkish + "$ref": "#/components/schemas/group_content" + vi: + description: The content of the group in Vietnamese + "$ref": "#/components/schemas/group_content" + pt-BR: + description: The content of the group in Portuguese (Brazil) + "$ref": "#/components/schemas/group_content" + zh-CN: + description: The content of the group in Chinese (China) + "$ref": "#/components/schemas/group_content" + zh-TW: + description: The content of the group in Chinese (Taiwan) + "$ref": "#/components/schemas/group_content" + handling_event: + title: Handling Event + type: object + description: A pause or resume event for a conversation + required: + - teammate + - type + - timestamp + properties: + teammate: + "$ref": "#/components/schemas/teammate_reference" + type: + type: string + enum: [paused, resumed] + description: The type of handling event + example: paused + timestamp: + type: string + format: date-time + description: ISO8601 timestamp when the event occurred + example: "2026-01-09T09:00:00Z" + reason: + type: string + description: Optional reason for the event (e.g., "Paused", "Away") + example: Paused + nullable: true + handling_event_list: + title: Handling Event List + type: object + description: A list of handling events for a conversation + properties: + handling_events: + type: array + description: Array of handling events + items: + "$ref": "#/components/schemas/handling_event" + help_center: + title: Help Center + type: object + x-tags: + - Help Center + description: Help Centers contain collections + properties: + id: + type: string + description: The unique identifier for the Help Center which is given by + Intercom. + example: '123' + workspace_id: + type: string + description: The id of the workspace which the Help Center belongs to. + example: hfi1bx4l + created_at: + type: integer + format: date-time + description: The time when the Help Center was created. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the Help Center was last updated. + example: 1672928610 + identifier: + type: string + description: The identifier of the Help Center. This is used in the URL + of the Help Center. + example: intercom + website_turned_on: + type: boolean + description: Whether the Help Center is turned on or not. This is controlled + in your Help Center settings. + example: true + display_name: + type: string + description: The display name of the Help Center only seen by teammates. + example: Intercom Help Center + url: + type: string + description: The URL for the help center, if you have a custom domain then this will show the URL using the custom domain. + example: "https://help.mycompany.com" + custom_domain: + type: string + nullable: true + description: Custom domain configured for the help center + example: "help.mycompany.com" + help_center_list: + title: Help Centers + type: object + x-tags: + - Help Center + description: A list of Help Centers belonging to the App + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + data: + type: array + description: An array of Help Center objects + items: + "$ref": "#/components/schemas/help_center" + jobs: + title: Jobs + type: object + x-tags: + - Jobs + description: Jobs are tasks that are processed asynchronously by the Intercom system after being enqueued via the API. This allows for efficient handling of operations that may take time to complete, such as data imports or exports. You can check the status of your jobs to monitor their progress and ensure they are completed successfully. + properties: + type: + type: string + description: The type of the object + enum: + - job + id: + type: string + description: The id of the job that's currently being processed or has completed. + example: 20 + url: + type: string + description: API endpoint URL to check the job status. + example: https://api.intercom.io/jobs/status/20 + status: + type: string + description: The status of the job execution. + enum: + - pending + - success + - failed + resource_type: + type: string + description: The type of resource created during job execution. + example: ticket + resource_id: + type: string + description: The id of the resource created during job execution (e.g. ticket id) + example: 123 + nullable: true + resource_url: + type: string + description: The url of the resource created during job exeuction. Use this url to fetch the resource. + example: http://api.intercom.io/tickets/123 + nullable: true + required: + - id + ip_allowlist: + title: IP Allowlist + type: object + description: IP allowlist settings for the workspace. + properties: + type: + type: string + description: String representing the object's type. Always has the value `ip_allowlist`. + example: ip_allowlist + enabled: + type: boolean + description: Whether the IP allowlist is enabled for the workspace. + example: true + ip_allowlist: + type: array + description: | + List of allowed IP addresses and/or IP ranges in CIDR notation. + Examples: + - Single IP: `192.168.0.1` + - IP range: `192.168.0.1/24` (allows 192.168.0.0 - 192.168.0.255) + items: + type: string + example: + - "192.168.1.0/24" + - "10.0.0.1" + intercom_version: + description: Intercom API version.
By default, it's equal to the version + set in the app package. + type: string + example: '2.15' + default: '2.15' + enum: + - '1.0' + - '1.1' + - '1.2' + - '1.3' + - '1.4' + - '2.0' + - '2.1' + - '2.2' + - '2.3' + - '2.4' + - '2.5' + - '2.6' + - '2.7' + - '2.8' + - '2.9' + - '2.10' + - '2.11' + - '2.12' + - '2.13' + - '2.14' + - '2.15' + linked_object: + title: Linked Object + type: object + description: A linked conversation or ticket. + properties: + type: + type: string + description: ticket or conversation + enum: + - ticket + - conversation + example: ticket + id: + type: string + description: The ID of the linked object + example: '7583' + category: + type: string + description: Category of the Linked Ticket Object. + enum: + - Customer + - Back-office + - Tracker + - + example: Customer + nullable: true + linked_object_list: + title: Linked Objects + type: object + description: An object containing metadata about linked conversations and linked + tickets. Up to 1000 can be returned. + properties: + type: + type: string + description: Always list. + enum: + - list + example: list + total_count: + type: integer + description: The total number of linked objects. + example: 100 + has_more: + type: boolean + description: Whether or not there are more linked objects than returned. + example: false + data: + type: array + description: An array containing the linked conversations and linked tickets. + items: + "$ref": "#/components/schemas/linked_object" + merge_contacts_request: + description: Merge contact data. + type: object + title: Merge contact data + required: + - from + - into + properties: + from: + type: string + description: The unique identifier for the contact to merge away from. Must + be a lead. + example: 5d70dd30de4efd54f42fd526 + into: + type: string + description: The unique identifier for the contact to merge into. Must be + a user. + example: 5ba682d23d7cf92bef87bfd4 + message: + type: object + title: Message + x-tags: + - Messages + description: Message are how you reach out to contacts in Intercom. They are + created when an admin sends an outbound message to a contact. + properties: + type: + type: string + description: The type of the message + example: user_message + id: + type: string + description: The id representing the message. + example: '1488971108' + created_at: + type: integer + format: date-time + description: The time the conversation was created. + example: 1667560812 + subject: + type: string + description: 'The subject of the message. Only present if message_type: + email.' + example: Greetings + body: + type: string + description: The message body, which may contain HTML. + example: Hello + message_type: + type: string + enum: + - email + - inapp + - facebook + - twitter + description: The type of message that was sent. Can be email, inapp, facebook + or twitter. + example: inapp + conversation_id: + type: string + description: The associated conversation_id + example: '64619700005570' + required: + - type + - id + - created_at + - body + - message_type + whatsapp_message_status_list: + type: object + required: + - type + - ruleset_id + - pages + - total_count + - events + properties: + type: + type: string + enum: ["list"] + ruleset_id: + type: string + description: The provided ruleset ID + pages: + type: object + required: + - type + - per_page + - total_pages + properties: + type: + type: string + enum: ["pages"] + per_page: + type: integer + description: Number of results per page + total_pages: + type: integer + description: Total number of pages + next: + type: object + nullable: true + description: Information for fetching next page (null if no more pages) + properties: + starting_after: + type: string + description: Cursor for the next page + total_count: + type: integer + description: Total number of events + events: + type: array + items: + type: object + required: + - id + - conversation_id + - status + - type + - created_at + - updated_at + - whatsapp_message_id + properties: + id: + type: string + description: Event ID + conversation_id: + type: string + description: ID of the conversation + status: + type: string + description: Current status of the message + enum: ["sent", "delivered", "read", "failed"] + type: + type: string + description: Event type + enum: ["broadcast_outbound"] + created_at: + type: integer + description: Creation timestamp + updated_at: + type: integer + description: Last update timestamp + whatsapp_message_id: + type: string + description: WhatsApp's message identifier + template_name: + type: string + description: Name of the WhatsApp template used + multiple_filter_search_request: + title: Multiple Filter Search Request + description: Search using Intercoms Search APIs with more than one filter. + type: object + properties: + operator: + type: string + enum: + - AND + - OR + description: An operator to allow boolean inspection between multiple fields. + example: AND + value: + oneOf: + - type: array + description: Add mutiple filters. + title: multiple filter search request + items: + "$ref": "#/components/schemas/multiple_filter_search_request" + - type: array + description: Add a single filter field. + title: single filter search request + items: + "$ref": "#/components/schemas/single_filter_search_request" + news_item: + title: News Item + type: object + x-tags: + - News + description: A News Item is a content type in Intercom enabling you to announce + product updates, company news, promotions, events and more with your customers. + properties: + type: + type: string + description: The type of object. + enum: + - news-item + example: news-item + id: + type: string + description: The unique identifier for the news item which is given by Intercom. + example: '141' + workspace_id: + type: string + description: The id of the workspace which the news item belongs to. + example: t74hdn32 + title: + type: string + description: The title of the news item. + example: 'New feature: News Items' + body: + type: string + description: The news item body, which may contain HTML. + example: We are excited to announce the launch of News Items, a new content + type in Intercom enabling you to announce product updates, company news, + promotions, events and more with your customers. + sender_id: + type: integer + description: The id of the sender of the news item. Must be a teammate on + the workspace. + example: 123 + state: + type: string + description: News items will not be visible to your users in the assigned + newsfeeds until they are set live. + enum: + - draft + - live + example: live + newsfeed_assignments: + type: array + description: A list of newsfeed_assignments to assign to the specified newsfeed. + items: + "$ref": "#/components/schemas/newsfeed_assignment" + labels: + type: array + description: Label names displayed to users to categorize the news item. + items: + type: string + nullable: true + description: The label name. + example: Product Update + cover_image_url: + type: string + format: uri + nullable: true + description: URL of the image used as cover. Must have .jpg or .png extension. + example: https://example.com/cover.jpg + reactions: + type: array + description: Ordered list of emoji reactions to the news item. When empty, + reactions are disabled. + items: + type: string + nullable: true + description: The emoji reaction to the news item. + example: "\U0001F44D" + deliver_silently: + type: boolean + description: When set to true, the news item will appear in the messenger + newsfeed without showing a notification badge. + example: true + created_at: + type: integer + format: timestamp + description: Timestamp for when the news item was created. + example: 1610589632 + updated_at: + type: integer + format: timestamp + description: Timestamp for when the news item was last updated. + example: 1610589632 + news_item_request: + description: A News Item is a content type in Intercom enabling you to announce + product updates, company news, promotions, events and more with your customers. + type: object + title: Create News Item Request + properties: + title: + type: string + description: The title of the news item. + example: Halloween is here! + body: + type: string + description: The news item body, which may contain HTML. + example: "

New costumes in store for this spooky season

" + sender_id: + type: integer + description: The id of the sender of the news item. Must be a teammate on + the workspace. + example: 123 + state: + type: string + description: News items will not be visible to your users in the assigned + newsfeeds until they are set live. + enum: + - draft + - live + example: live + deliver_silently: + type: boolean + description: When set to `true`, the news item will appear in the messenger + newsfeed without showing a notification badge. + example: true + labels: + type: array + description: Label names displayed to users to categorize the news item. + items: + type: string + example: + - Product + - Update + - New + reactions: + type: array + description: Ordered list of emoji reactions to the news item. When empty, + reactions are disabled. + items: + type: string + nullable: true + example: + - "\U0001F606" + - "\U0001F605" + newsfeed_assignments: + type: array + description: A list of newsfeed_assignments to assign to the specified newsfeed. + items: + "$ref": "#/components/schemas/newsfeed_assignment" + required: + - title + - sender_id + newsfeed: + title: Newsfeed + type: object + x-tags: + - News + description: | + A newsfeed is a collection of news items, targeted to a specific audience. + + Newsfeeds currently cannot be edited through the API, please refer to [this article](https://www.intercom.com/help/en/articles/6362267-getting-started-with-news) to set up your newsfeeds in Intercom. + properties: + id: + type: string + description: The unique identifier for the newsfeed which is given by Intercom. + example: '12312' + type: + type: string + description: The type of object. + enum: + - newsfeed + example: newsfeed + name: + type: string + description: The name of the newsfeed. This name will never be visible to + your users. + example: My Newsfeed + created_at: + type: integer + format: timestamp + description: Timestamp for when the newsfeed was created. + example: 1674917488 + updated_at: + type: integer + format: timestamp + description: Timestamp for when the newsfeed was last updated. + example: 1674917488 + newsfeed_assignment: + title: Newsfeed Assignment + type: object + x-tags: + - News + description: Assigns a news item to a newsfeed. + properties: + newsfeed_id: + type: integer + description: The unique identifier for the newsfeed which is given by Intercom. + Publish dates cannot be in the future, to schedule news items use the + dedicated feature in app (see this article). + example: 198313 + published_at: + type: integer + format: timestamp + description: Publish date of the news item on the newsfeed, use this field + if you want to set a publish date in the past (e.g. when importing existing + news items). On write, this field will be ignored if the news item state + is "draft". + example: 1674917488 + note: + title: Note + type: object + x-tags: + - Notes + description: Notes allow you to annotate and comment on your contacts. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `note`. + example: note + id: + type: string + description: The id of the note. + example: '17495962' + created_at: + type: integer + format: timestamp + description: The time the note was created. + example: 1674589321 + contact: + type: object + description: Represents the contact that the note was created about. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `contact`. + id: + type: string + description: The id of the contact. + example: 214656d0c743eafcfde7f248 + author: + "$ref": "#/components/schemas/admin" + description: Optional. Represents the Admin that created the note. + body: + type: string + description: The body text of the note. + example: "

Text for the note.

" + note_list: + title: Paginated Response + type: object + description: A paginated list of notes associated with a contact. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `list`. + example: list + data: + type: array + description: An array of notes. + items: + "$ref": "#/components/schemas/note" + total_count: + type: integer + description: A count of the total number of notes. + example: 1 + pages: + "$ref": "#/components/schemas/cursor_pages" + open_conversation_request: + title: Open Conversation Request + type: object + description: Payload of the request to open a conversation + properties: + message_type: + type: string + enum: + - open + example: open + admin_id: + type: string + description: The id of the admin who is performing the action. + example: '5017690' + required: + - message_type + - admin_id + pages_link: + title: Pagination Object + type: object + description: | + The majority of list resources in the API are paginated to allow clients to traverse data over multiple requests. + + Their responses are likely to contain a pages object that hosts pagination links which a client can use to paginate through the data without having to construct a query. The link relations for the pages field are as follows. + properties: + type: + type: string + example: pages + enum: + - pages + page: + type: integer + example: 1 + next: + type: string + format: uri + description: A link to the next page of results. A response that does not + contain a next link does not have further data to fetch. + nullable: true + per_page: + type: integer + example: 50 + total_pages: + type: integer + example: 1 + paginated_response: + title: Paginated Response + type: object + description: Paginated Response + properties: + type: + type: string + description: The type of object + enum: + - list + - conversation.list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of objects. + example: 1 + data: + type: array + description: An array of Objects + items: + anyOf: + - "$ref": "#/components/schemas/news_item" + - "$ref": "#/components/schemas/newsfeed" + part_attachment: + title: Part attachment + type: object + description: The file attached to a part + properties: + type: + type: string + description: The type of attachment + example: upload + name: + type: string + description: The name of the attachment + example: example.png + url: + type: string + description: The URL of the attachment + example: https://picsum.photos/200/300 + content_type: + type: string + description: The content type of the attachment + example: image/png + filesize: + type: integer + description: The size of the attachment + example: 100 + width: + type: integer + description: The width of the attachment + example: 100 + height: + type: integer + description: The height of the attachment + example: 100 + phone_switch: + title: Phone Switch + type: object + description: Phone Switch Response + nullable: true + properties: + type: + type: string + description: '' + enum: + - phone_call_redirect + default: phone_call_redirect + example: phone_call_redirect + phone: + type: string + description: Phone number in E.164 format, that has received the SMS to + continue the conversation in the Messenger. + example: "+1 1234567890" + quick_reply_option: + title: Quick Reply Option + type: object + properties: + text: + type: string + description: The text to display in this quick reply option. + uuid: + type: string + format: uuid + description: A unique identifier for this quick reply option. This + value will be available within the metadata of the comment conversation + part that is created when a user clicks on this reply option. + required: + - text + - uuid + register_fin_voice_call_request: + title: Register Fin Voice Call Request Payload + type: object + description: Register a Fin Voice call with Intercom + nullable: true + required: + - phone_number + - call_id + properties: + phone_number: + type: string + description: Phone number in E.164 format for the call + example: '+1234567890' + call_id: + type: string + description: External call identifier from the call provider + example: 'call-123-abc' + source: + type: string + description: Source of the call. Can be "five9", "zoom_phone", or defaults to "aws_connect" + enum: + - five9 + - zoom_phone + - aws_connect + example: 'aws_connect' + data: + type: object + description: Additional metadata about the call + nullable: true + example: + key: value + redact_conversation_request: + oneOf: + - title: Redact Conversation Part Request + type: object + description: Payload of the request to redact a conversation part + properties: + type: + type: string + enum: + - conversation_part + description: The type of resource being redacted. + example: conversation_part + conversation_id: + type: string + description: The id of the conversation. + example: '19894788788' + conversation_part_id: + type: string + description: The id of the conversation_part. + example: '19381789428' + required: + - type + - conversation_id + - conversation_part_id + - title: Redact Conversation Source Request + type: object + description: Payload of the request to redact a conversation source + properties: + type: + type: string + enum: + - source + description: The type of resource being redacted. + example: source + conversation_id: + type: string + description: The id of the conversation. + example: '19894788788' + source_id: + type: string + description: The id of the source. + example: '19894781231' + required: + - type + - conversation_id + - source_id + reference: + title: Reference + type: object + description: reference to another object + properties: + type: + type: string + description: '' + example: contact + id: + type: string + nullable: true + description: '' + example: 1a2b3c + reply_conversation_request: + oneOf: + - "$ref": "#/components/schemas/contact_reply_conversation_request" + - "$ref": "#/components/schemas/admin_reply_conversation_request" + search_request: + description: Search using Intercoms Search APIs. + type: object + title: Search data + properties: + query: + oneOf: + - "$ref": "#/components/schemas/single_filter_search_request" + title: Single filter search request + - "$ref": "#/components/schemas/multiple_filter_search_request" + title: multiple filter search request + pagination: + "$ref": "#/components/schemas/starting_after_paging" + required: + - query + segment: + title: Segment + type: object + x-tags: + - Segments + description: A segment is a group of your contacts defined by the rules that + you set. + properties: + type: + type: string + description: The type of object. + enum: + - segment + example: segment + id: + type: string + description: The unique identifier representing the segment. + example: 56203d253cba154d39010062 + name: + type: string + description: The name of the segment. + example: Active + created_at: + type: integer + description: The time the segment was created. + example: 1394621988 + updated_at: + type: integer + description: The time the segment was updated. + example: 1394622004 + person_type: + type: string + description: 'Type of the contact: contact (lead) or user.' + enum: + - contact + - user + example: contact + count: + type: integer + description: The number of items in the user segment. It's returned when + `include_count=true` is included in the request. + example: 3 + nullable: true + segment_list: + title: Segment List + type: object + description: This will return a list of Segment Objects. The result may also + have a pages object if the response is paginated. + properties: + type: + type: string + description: The type of the object + enum: + - segment.list + example: segment.list + segments: + type: array + description: A list of Segment objects + items: + "$ref": "#/components/schemas/segment" + pages: + type: object + description: A pagination object, which may be empty, indicating no further + pages to fetch. + single_filter_search_request: + title: Single Filter Search Request + description: Search using Intercoms Search APIs with a single filter. + type: object + properties: + field: + type: string + description: The accepted field that you want to search on. + example: created_at + operator: + type: string + enum: + - "=" + - "!=" + - IN + - NIN + - "<" + - ">" + - "~" + - "!~" + - "^" + - "$" + description: The accepted operators you can use to define how you want to + search for the value. + example: ">" + value: + oneOf: + - type: string + - type: integer + - type: boolean + - type: array + items: + oneOf: + - type: string + - type: integer + description: The value that you want to search on. + example: '73732934' + nullable: true + sla_applied: + title: Applied SLA + type: object + nullable: true + description: | + 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. + properties: + type: + type: string + description: object type + example: conversation_sla_summary + sla_name: + type: string + description: The name of the SLA as given by the teammate when it was created. + example: '' + sla_status: + type: string + enum: + - hit + - missed + - cancelled + - active + description: |- + SLA statuses: + - `hit`: If there’s at least one hit event in the underlying sla_events table, and no “missed” or “canceled” events for the conversation. + - `missed`: If there are any missed sla_events for the conversation and no canceled events. If there’s even a single missed sla event, the status will always be missed. A missed status is not applied when the SLA expires, only the next time a teammate replies. + - `active`: An SLA has been applied to a conversation, but has not yet been fulfilled. SLA status is active only if there are no “hit, “missed”, or “canceled” events. + example: hit + snooze_conversation_request: + title: Snooze Conversation Request + type: object + description: Payload of the request to snooze a conversation + properties: + message_type: + type: string + enum: + - snoozed + example: snoozed + admin_id: + type: string + description: The id of the admin who is performing the action. + example: '5017691' + snoozed_until: + type: integer + format: timestamp + description: The time you want the conversation to reopen. + example: 1673609604 + required: + - message_type + - admin_id + - snoozed_until + social_profile: + title: Social Profile + type: object + description: A Social Profile allows you to label your contacts, companies, + and conversations and list them using that Social Profile. + properties: + type: + type: string + description: value is "social_profile" + example: social_profile + name: + type: string + description: The name of the Social media profile + example: Facebook + url: + type: string + format: uri + description: The name of the Social media profile + example: http://twitter.com/th1sland + starting_after_paging: + title: 'Pagination: Starting After' + type: object + nullable: true + properties: + per_page: + type: integer + description: The number of results to fetch per page. + example: 2 + starting_after: + type: string + description: The cursor to use in the next request to get the next page + of results. + nullable: true + example: your-cursor-from-response + subscription_type: + title: Subscription Types + type: object + x-tags: + - Subscription Types + description: A subscription type lets customers easily opt out of non-essential + communications without missing what's important to them. + properties: + type: + type: string + description: The type of the object - subscription + example: subscription + id: + type: string + description: The unique identifier representing the subscription type. + example: '123456' + state: + type: string + description: The state of the subscription type. + enum: + - live + - draft + - archived + example: live + default_translation: + "$ref": "#/components/schemas/translation" + translations: + type: array + description: An array of translations objects with the localised version + of the subscription type in each available locale within your translation + settings. + items: + "$ref": "#/components/schemas/translation" + consent_type: + type: string + description: Describes the type of consent. + enum: + - opt_out + - opt_in + example: opt_in + content_types: + type: array + description: The message types that this subscription supports - can contain + `email` or `sms_message`. + items: + type: string + enum: + - email + - sms_message + example: email + subscription_type_list: + title: Subscription Types + type: object + description: A list of subscription type objects. + properties: + type: + type: string + description: The type of the object + enum: + - list + example: list + data: + type: array + description: A list of subscription type objects associated with the workspace + . + items: + "$ref": "#/components/schemas/subscription_type" + tag: + title: Tag + type: object + x-tags: + - Tags + description: A tag allows you to label your contacts, companies, and conversations + and list them using that tag. + properties: + type: + type: string + description: value is "tag" + example: tag + id: + type: string + description: The id of the tag + example: '123456' + name: + type: string + description: The name of the tag + example: Test tag + applied_at: + type: integer + format: date-time + nullable: true + description: The time when the tag was applied to the object. Only present when the tag is returned as part of a tagging operation on a contact, conversation, or ticket. + example: 1663597223 + applied_by: + type: object + nullable: true + description: The admin who applied the tag. Only present when the tag is returned as part of a tagging operation on a contact, conversation, or ticket. + allOf: + - "$ref": "#/components/schemas/reference" + tag_basic: + title: Tag + type: object + x-tags: + - Tags + description: A tag allows you to label your contacts, companies, and conversations + and list them using that tag. + properties: + type: + type: string + description: value is "tag" + example: tag + id: + type: string + description: The id of the tag + example: '123456' + name: + type: string + description: The name of the tag + example: Test tag + tag_company_request: + description: You can tag a single company or a list of companies. + type: object + title: Tag Company Request Payload + properties: + name: + type: string + description: The name of the tag, which will be created if not found. + example: Independent + companies: + type: array + items: + properties: + id: + type: string + description: The Intercom defined id representing the company. + example: 531ee472cce572a6ec000006 + company_id: + type: string + description: The company id you have defined for the company. + example: '6' + description: The id or company_id of the company can be passed as input + parameters. + required: + - name + - companies + tag_list: + title: Tags + type: object + description: A list of tags objects in the workspace. + properties: + type: + type: string + description: The type of the object + enum: + - list + example: list + data: + type: array + description: A list of tags objects associated with the workspace . + items: + "$ref": "#/components/schemas/tag" + tag_multiple_users_request: + description: You can tag a list of users. + type: object + title: Tag Users Request Payload + properties: + name: + type: string + description: The name of the tag, which will be created if not found. + example: Independent + users: + type: array + items: + properties: + id: + type: string + description: The Intercom defined id representing the user. + example: 5f7f0d217289f8d2f4262080 + required: + - name + - users + tags: + title: Tags + type: object + description: A list of tags objects associated with a conversation + properties: + type: + type: string + description: The type of the object + enum: + - tag.list + example: tag.list + tags: + type: array + description: A list of tags objects associated with the conversation. + items: + "$ref": "#/components/schemas/tag" + team: + title: Team + type: object + x-tags: + - Teams + description: Teams are groups of admins in Intercom. + properties: + type: + type: string + description: Value is always "team" + example: team + id: + type: string + description: The id of the team + example: '814865' + name: + type: string + description: The name of the team + example: Example Team + admin_ids: + type: array + description: The list of admin IDs that are a part of the team. + example: + - 493881 + items: + type: integer + admin_priority_level: + "$ref": "#/components/schemas/admin_priority_level" + assignment_limit: + type: integer + nullable: true + description: The assignment limit for the team. This field is only present when the team's distribution type is load balanced. + example: 10 + distribution_method: + type: string + nullable: true + description: Describes how assignments are distributed among the team members + example: "round_robin" + team_list: + title: Team List + type: object + description: This will return a list of team objects for the App. + properties: + type: + type: string + description: The type of the object + enum: + - team.list + example: team.list + teams: + type: array + description: A list of team objects + items: + "$ref": "#/components/schemas/team" + team_priority_level: + title: Team Priority Level + type: object + nullable: true + description: Admin priority levels for teams + properties: + primary_team_ids: + type: array + description: The primary team ids for the team + nullable: true + example: + - 814865 + items: + type: integer + secondary_team_ids: + type: array + description: The secondary team ids for the team + nullable: true + example: + - 493881 + items: + type: integer + teammate_reference: + title: Teammate Reference + type: object + description: A reference to a teammate + required: + - type + - id + - name + properties: + type: + type: string + enum: [admin, team, bot] + description: The type of teammate + example: admin + id: + type: integer + description: The unique identifier of the teammate + example: 123 + name: + type: string + description: The display name of the teammate + example: Jane Example + email: + type: string + format: email + description: The email address of the teammate (optional for teams/bots) + example: jane@example.com + nullable: true + ticket: + title: Ticket + type: object + x-tags: + - Tickets + description: Tickets are how you track requests from your users. + nullable: true + properties: + type: + type: string + description: Always ticket + enum: + - ticket + default: ticket + example: ticket + id: + type: string + description: The unique identifier for the ticket which is given by Intercom. + example: '1295' + ticket_id: + type: string + description: The ID of the Ticket used in the Intercom Inbox and Messenger. + Do not use ticket_id for API queries. + example: '1390' + category: + type: string + description: Category of the Ticket. + enum: + - Customer + - Back-office + - Tracker + example: Customer + ticket_attributes: + "$ref": "#/components/schemas/ticket_custom_attributes" + ticket_state: + "$ref": "#/components/schemas/ticket_state" + ticket_type: + "$ref": "#/components/schemas/ticket_type" + contacts: + "$ref": "#/components/schemas/ticket_contacts" + admin_assignee_id: + type: string + description: The id representing the admin assigned to the ticket. + example: '1295' + team_assignee_id: + type: string + description: The id representing the team assigned to the ticket. + example: '1295' + created_at: + type: integer + format: date-time + description: The time the ticket was created as a UTC Unix timestamp. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the ticket was updated as a UTC Unix timestamp. + example: 1663597260 + open: + type: boolean + description: Whether or not the ticket is open. If false, the ticket is + closed. + example: true + snoozed_until: + type: integer + format: date-time + description: The time the ticket will be snoozed until as a UTC Unix timestamp. + If null, the ticket is not currently snoozed. + example: 1663597260 + linked_objects: + "$ref": "#/components/schemas/linked_object_list" + ticket_parts: + "$ref": "#/components/schemas/ticket_parts" + is_shared: + type: boolean + description: Whether or not the ticket is shared with the customer. + example: true + ticket_deleted: + title: Ticket Deleted + type: object + description: deleted ticket object + properties: + id: + type: string + description: The unique identifier for the ticket. + example: 5ba682d23d7cf92bef87bfd4 + object: + type: string + description: always ticket + enum: + - ticket + example: ticket + deleted: + type: boolean + description: Whether the ticket is deleted or not. + example: true + ticket_contacts: + title: Contacts + type: object + x-tags: + - Tickets + description: The list of contacts affected by a ticket. + properties: + type: + type: string + description: always contact.list + enum: + - contact.list + example: contact.list + contacts: + type: array + description: The list of contacts affected by this ticket. + items: + "$ref": "#/components/schemas/contact_reference" + ticket_custom_attributes: + title: Ticket Attributes + type: object + description: 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_`. + additionalProperties: + anyOf: + - type: string + nullable: true + - type: number + - type: boolean + - type: array + - "$ref": "#/components/schemas/file_attribute" + example: + _default_title_: Found a bug + _default_description_: The button's not working + ticket_list: + title: Ticket List + type: object + description: Tickets are how you track requests from your users. + properties: + type: + type: string + description: Always ticket.list + enum: + - ticket.list + example: ticket.list + tickets: + type: array + description: The list of ticket objects + items: + "$ref": "#/components/schemas/ticket" + total_count: + type: integer + description: A count of the total number of objects. + example: 12345 + pages: + "$ref": "#/components/schemas/cursor_pages" + ticket_part: + title: Ticket Part + type: object + x-tags: + - Tickets + description: A Ticket Part represents a message in the ticket. + properties: + type: + type: string + description: Always ticket_part + example: ticket_part + id: + type: string + description: The id representing the ticket part. + example: '3' + part_type: + type: string + description: The type of ticket part. + example: comment + body: + type: string + nullable: true + description: The message body, which may contain HTML. + example: "

Okay!

" + previous_ticket_state: + type: string + enum: + - submitted + - in_progress + - waiting_on_customer + - resolved + description: The previous state of the ticket. + example: submitted + ticket_state: + type: string + enum: + - submitted + - in_progress + - waiting_on_customer + - resolved + description: The state of the ticket. + example: submitted + created_at: + type: integer + format: date-time + description: The time the ticket part was created. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the ticket part was updated. + example: 1663597260 + assigned_to: + "$ref": "#/components/schemas/reference" + nullable: true + description: The id of the admin that was assigned the ticket by this ticket_part + (null if there has been no change in assignment.) + author: + "$ref": "#/components/schemas/ticket_part_author" + attachments: + title: Ticket part attachments + type: array + description: A list of attachments for the part. + items: + "$ref": "#/components/schemas/part_attachment" + external_id: + type: string + nullable: true + description: The external id of the ticket part + example: abcd1234 + redacted: + type: boolean + description: Whether or not the ticket part has been redacted. + example: false + app_package_code: + type: string + nullable: false + example: text-integration + description: The app package code if this part was created via API. Note this field won't show if the part was not created via API. + updated_attribute_data: + title: Updated Attribute + type: object + description: The updated attribute data of the ticket part. Only present for attribute update parts. + nullable: true + properties: + attribute: + type: object + description: Information about the attribute that was updated. + properties: + type: + type: string + description: The type of the object. Always 'attribute'. + enum: + - attribute + example: attribute + id: + type: string + description: The unique identifier of the attribute. + example: "7" + label: + type: string + description: The human-readable name of the attribute. + example: "Progress" + required: + - type + - id + - label + value: + type: object + description: The new value of the attribute. + properties: + type: + type: string + description: The type of the object. Always 'value'. + enum: + - value + example: value + id: + oneOf: + - type: string + description: The value for text/number/decimal/boolean/date attributes, or the ID of the list option for list attributes. + nullable: true + example: "Fast" + - type: array + description: Array of file IDs for file attributes. + items: + type: integer + example: [2] + label: + oneOf: + - type: string + description: The display value for text/number/decimal/boolean/date/list attributes. + example: "Fast" + - type: array + description: Array of file names for file attributes. + items: + type: string + example: ["photo.png"] + required: + - type + - id + - label + required: + - attribute + - value + ticket_part_author: + title: Ticket part author + type: object + description: The author that wrote or triggered the part. Can be a bot, admin, + team or user. + properties: + type: + type: string + description: The type of the author + example: admin + enum: + - admin + - bot + - team + - user + id: + type: string + description: The id of the author + example: '274' + name: + type: string + nullable: true + description: The name of the author + example: Operator + email: + type: string + format: email + description: The email of the author + example: operator+abcd1234@intercom.io + ticket_parts: + title: Ticket Parts + type: object + description: A list of Ticket Part objects for each note and event in the ticket. + There is a limit of 500 parts. + properties: + type: + type: string + description: '' + enum: + - ticket_part.list + example: ticket_part.list + ticket_parts: + title: Tickt Parts + type: array + description: A list of Ticket Part objects for each ticket. There is a limit + of 500 parts. + items: + "$ref": "#/components/schemas/ticket_part" + total_count: + type: integer + description: '' + example: 2 + ticket_reply: + title: A Ticket Part representing a note, comment, or quick_reply on a ticket + type: object + description: A Ticket Part representing a note, comment, or quick_reply on a + ticket + properties: + type: + type: string + description: Always ticket_part + example: ticket_part + enum: + - ticket_part + id: + type: string + description: The id representing the part. + example: '3' + part_type: + type: string + description: Type of the part + example: note + enum: + - note + - comment + - quick_reply + body: + type: string + nullable: true + description: The message body, which may contain HTML. + example: "

Okay!

" + created_at: + type: integer + format: date-time + description: The time the note was created. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the note was updated. + example: 1663597260 + author: + "$ref": "#/components/schemas/ticket_part_author" + attachments: + title: Ticket part attachments + type: array + description: A list of attachments for the part. + items: + "$ref": "#/components/schemas/part_attachment" + redacted: + type: boolean + description: Whether or not the ticket part has been redacted. + example: false + ticket_request_custom_attributes: + title: Ticket Attributes + type: object + description: 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](ref:get_ticket-types). + 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`). + additionalProperties: + anyOf: + - type: string + nullable: true + - type: number + - type: boolean + - type: array + example: + _default_title_: Found a bug + _default_description_: The button is not working + ticket_state: + title: Ticket State + type: object + x-tags: + - Tickets + description: A ticket state, used to define the state of a ticket. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `ticket_state`. + example: ticket_state + id: + type: string + description: The id of the ticket state + example: '12' + category: + type: string + description: The category of the ticket state + example: in_progress + enum: + - submitted + - in_progress + - waiting_on_customer + - resolved + internal_label: + type: string + description: The state the ticket is currently in, in a human readable form + - visible in Intercom + example: With Dev Team + external_label: + type: string + description: The state the ticket is currently in, in a human readable form + - visible to customers, in the messenger, email and tickets portal. + example: In Progress + ticket_state_detailed: + title: Ticket State + type: object + x-tags: + - Tickets + description: A ticket state, used to define the state of a ticket. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `ticket_state`. + example: ticket_state + id: + type: string + description: The id of the ticket state + example: '12' + category: + type: string + description: The category of the ticket state + example: in_progress + enum: + - submitted + - in_progress + - waiting_on_customer + - resolved + internal_label: + type: string + description: The state the ticket is currently in, in a human readable form + - visible in Intercom + example: With Dev Team + external_label: + type: string + description: The state the ticket is currently in, in a human readable form + - visible to customers, in the messenger, email and tickets portal. + example: In Progress + archived: + type: boolean + description: Whether the ticket state is archived + example: false + ticket_types: + type: object + description: A list of ticket types associated with a given ticket state. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `list`. + example: list + data: + type: array + description: A list of ticket type attributes associated with a given + ticket type. + items: + "$ref": "#/components/schemas/ticket_type" + ticket_state_list: + title: Ticket States + type: object + description: A list of ticket states associated with a given ticket type. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `list`. + example: list + data: + type: array + description: A list of ticket states associated with a given ticket type. + items: + "$ref": "#/components/schemas/ticket_state_detailed" + ticket_type: + title: Ticket Type + type: object + x-tags: + - Tickets + description: A ticket type, used to define the data fields to be captured in + a ticket. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `ticket_type`. + example: ticket_type + id: + type: string + description: The id representing the ticket type. + example: '1295' + category: + type: string + description: Category of the Ticket Type. + enum: + - Customer + - Back-office + - Tracker + example: Customer + name: + type: string + description: The name of the ticket type + example: Bug + description: + type: string + description: The description of the ticket type + example: A bug that has been reported. + icon: + type: string + description: The icon of the ticket type + example: "\U0001F41E" + workspace_id: + type: string + description: The id of the workspace that the ticket type belongs to. + example: ecahpwf5 + ticket_type_attributes: + "$ref": "#/components/schemas/ticket_type_attribute_list" + ticket_states: + title: Ticket States + type: object + description: A list of ticket states associated with a given ticket type. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `list`. + example: list + data: + type: array + description: A list of ticket states associated with a given ticket + type. + items: + "$ref": "#/components/schemas/ticket_state" + archived: + type: boolean + description: Whether the ticket type is archived or not. + example: false + created_at: + type: integer + format: timestamp + description: The date and time the ticket type was created. + updated_at: + type: integer + format: timestamp + description: The date and time the ticket type was last updated. + ticket_type_attribute: + title: Ticket Type Attribute + type: object + description: Ticket type attribute, used to define each data field to be captured + in a ticket. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `ticket_type_attribute`. + example: ticket_type_attribute + id: + type: string + description: The id representing the ticket type attribute. + example: '1' + workspace_id: + type: string + description: The id of the workspace that the ticket type attribute belongs + to. + example: ecahpwf5 + name: + type: string + description: The name of the ticket type attribute + example: Title + description: + type: string + description: The description of the ticket type attribute + example: Bug title. + data_type: + type: string + description: 'The type of the data attribute (allowed values: "string list + integer decimal boolean datetime files")' + example: string + input_options: + type: object + description: Input options for the attribute + example: 'multiline: true' + order: + type: integer + description: The order of the attribute against other attributes + example: 1 + required_to_create: + type: boolean + description: Whether the attribute is required or not for teammates. + default: false + example: false + required_to_create_for_contacts: + type: boolean + description: Whether the attribute is required or not for contacts. + default: false + example: false + visible_on_create: + type: boolean + description: Whether the attribute is visible or not to teammates. + default: true + example: false + visible_to_contacts: + type: boolean + description: Whether the attribute is visible or not to contacts. + default: true + example: false + default: + type: boolean + description: Whether the attribute is built in or not. + example: true + ticket_type_id: + type: integer + description: The id of the ticket type that the attribute belongs to. + example: 42 + archived: + type: boolean + description: Whether the ticket type attribute is archived or not. + example: false + created_at: + type: integer + format: timestamp + description: The date and time the ticket type attribute was created. + updated_at: + type: integer + format: timestamp + description: The date and time the ticket type attribute was last updated. + ticket_type_attribute_list: + title: Ticket Type Attributes + type: object + description: A list of attributes associated with a given ticket type. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `ticket_type_attributes.list`. + ticket_type_attributes: + type: array + description: A list of ticket type attributes associated with a given ticket + type. + items: + "$ref": "#/components/schemas/ticket_type_attribute" + ticket_type_list: + title: Ticket Types + type: object + description: A list of ticket types associated with a given workspace. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `list`. + example: list + data: + type: array + description: A list of ticket_types associated with a given workspace. + items: + "$ref": "#/components/schemas/ticket_type" + translation: + title: Translation + type: object + description: A translation object contains the localised details of a subscription + type. + properties: + name: + type: string + description: The localised name of the subscription type. + example: Announcements + description: + type: string + description: The localised description of the subscription type. + example: Offers, product and feature announcements + locale: + type: string + description: The two character identifier for the language of the translation + object. + example: en + untag_company_request: + description: You can tag a single company or a list of companies. + type: object + title: Untag Company Request Payload + properties: + name: + type: string + description: The name of the tag which will be untagged from the company + example: Independent + companies: + type: array + items: + properties: + id: + type: string + description: The Intercom defined id representing the company. + example: 531ee472cce572a6ec000006 + company_id: + type: string + description: The company id you have defined for the company. + example: '6' + untag: + type: boolean + description: Always set to true + example: 'true' + description: The id or company_id of the company can be passed as input + parameters. + required: + - name + - companies + update_article_request: + description: You can Update an Article + type: object + title: Update Article Request Payload + nullable: true + properties: + title: + type: string + description: The title of the article.For multilingual articles, this will + be the title of the default language's content. + example: Thanks for everything + description: + type: string + description: The description of the article. For multilingual articles, + this will be the description of the default language's content. + example: Description of the Article + body: + type: string + description: The content of the article. For multilingual articles, this + will be the body of the default language's content. + example: "

This is the body in html

" + author_id: + type: integer + description: The id of the author of the article. For multilingual articles, + this will be the id of the author of the default language's content. Must + be a teammate on the help center's workspace. + example: 1295 + state: + type: string + description: Whether the article will be `published` or will be a `draft`. + Defaults to draft. For multilingual articles, this will be the state of + the default language's content. + enum: + - published + - draft + example: draft + parent_id: + type: string + description: The id of the article's parent collection or section. An article + without this field stands alone. + example: '18' + parent_type: + type: string + description: The type of parent, which can either be a `collection` or `section`. + example: collection + translated_content: + "$ref": "#/components/schemas/article_translated_content" + update_internal_article_request: + description: You can Update an Internal Article + type: object + title: Update Internal Article Request Payload + nullable: true + properties: + title: + type: string + description: The title of the article. + example: Thanks for everything + body: + type: string + description: The content of the article. + author_id: + type: integer + description: The id of the author of the article. + example: 1295 + owner_id: + type: integer + description: The id of the author of the article. + example: 1295 + update_collection_request: + description: You can update a collection + type: object + title: Update Collection Request Payload + properties: + name: + type: string + description: The name of the collection. For multilingual collections, this + will be the name of the default language's content. + example: collection 51 + description: + type: string + description: The description of the collection. For multilingual collections, + this will be the description of the default language's content. + example: English description + translated_content: + nullable: true + "$ref": "#/components/schemas/group_translated_content" + parent_id: + type: string + nullable: true + description: The id of the parent collection. If `null` then it will be + updated as the first level collection. + example: '6871118' + update_contact_request: + description: You can update a contact + type: object + title: Update Contact Request Payload + properties: + role: + type: string + description: The role of the contact. + external_id: + type: string + description: A unique identifier for the contact which is given to Intercom + email: + type: string + description: The contacts email + example: jdoe@example.com + phone: + type: string + nullable: true + description: The contacts phone + example: "+353871234567" + name: + type: string + nullable: true + description: The contacts name + example: John Doe + avatar: + type: string + nullable: true + description: An image URL containing the avatar of a contact + example: https://www.example.com/avatar_image.jpg + signed_up_at: + type: integer + format: date-time + nullable: true + description: (Unix timestamp in seconds) The time specified for when a contact signed up. + example: 1571672154 + last_seen_at: + type: integer + format: date-time + nullable: true + description: (Unix timestamp in seconds) The time when the contact was last seen + (either where the Intercom Messenger was installed or when specified manually). + example: 1571672154 + owner_id: + type: integer + nullable: true + description: The id of an admin that has been assigned account ownership + of the contact + example: 123 + unsubscribed_from_emails: + type: boolean + nullable: true + description: Whether the contact is unsubscribed from emails + example: true + custom_attributes: + type: object + nullable: true + description: The custom attributes which are set for the contact + update_content_import_source_request: + title: Create Content Import Source Payload + type: object + description: You can modify a Content Import Source of your Fin Content Library. + nullable: false + properties: + sync_behavior: + type: string + description: If you intend to create or update External Pages via the API, + this should be set to `api`. You can not change the value to or from api. + enum: + - api + - automated + - manual + example: api + status: + type: string + description: The status of the content import source. + enum: + - active + - deactivated + default: active + example: active + url: + type: string + description: The URL of the content import source. This may only be different + from the existing value if the sync behavior is API. + example: https://help.example.com + audience_ids: + nullable: true + description: The unique identifiers for the audiences to associate with this content import source. Can be a single integer or an array of integers. Set to null or an empty array to remove all audiences. + example: + - 5678 + oneOf: + - type: integer + - type: array + items: + type: integer + apply_audience_to_existing_content: + type: boolean + description: When true, the audience will be applied to all existing external pages belonging to this content import source. + default: false + example: false + required: + - sync_behavior + - url + update_conversation_request: + title: Update Conversation Request + type: object + description: Payload of the request to update a conversation + properties: + read: + type: boolean + description: Mark a conversation as read within Intercom. + example: true + title: + type: string + description: The title given to the conversation + example: Conversation Title + custom_attributes: + "$ref": "#/components/schemas/custom_attributes" + company_id: + type: string + description: The ID of the company that the conversation is associated with. + The unique identifier for the company which is given by Intercom. Set to nil to remove company. + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + update_data_attribute_request: + description: '' + type: object + title: Update Data Attribute Request + properties: + archived: + type: boolean + description: Whether the attribute is to be archived or not. + example: false + description: + type: string + description: The readable description you see in the UI for the attribute. + example: My Data Attribute Description + messenger_writable: + type: boolean + description: Can this attribute be updated by the Messenger + example: false + oneOf: + - properties: + options: + type: array + description: Array of objects representing the options of the list, with `value` as the key and the option as the value. At least + two options are required. + items: + type: object + properties: + value: + type: string + example: + - value: 1-10 + - value: 11-50 + required: + - options + title: 'list attribute' + - title: 'other type' + update_external_page_request: + title: Update External Page Payload + type: object + description: You can update an External Page in your Fin Content Library. + nullable: false + properties: + title: + type: string + description: The title of the external page. + example: Getting started with... + html: + type: string + description: The body of the external page in HTML. + example: "

Hello world!

" + url: + type: string + description: The URL of the external page. This will be used by Fin to link + end users to the page it based its answer on. + example: https://help.example.com/en/articles/1234-getting-started + fin_availability: + type: boolean + description: Whether the external page should be used to answer questions + by Fin. + default: true + example: true + locale: + type: string + description: Always en + enum: + - en + default: en + example: en + source_id: + type: integer + description: The unique identifier for the source of the external page which + was given by Intercom. Every external page must be associated with a Content + Import Source which represents the place it comes from and from which + it inherits a default audience (configured in the UI). For a new source, + make a POST request to the Content Import Source endpoint and an ID for + the source will be returned in the response. + example: 1234 + external_id: + type: string + description: The identifier for the external page which was given by the + source. Must be unique for the source. + example: '5678' + required: + - title + - html + - url + - locale + - source_id + update_ticket_request: + description: You can update a Ticket + type: object + title: Update Ticket Request Payload + properties: + ticket_attributes: + type: object + description: The attributes set on the ticket. + example: + _default_title_: example + _default_description_: having a problem + ticket_state_id: + type: string + description: The ID of the ticket state associated with the ticket type. + example: '123' + company_id: + type: string + description: The ID of the company that the ticket is associated with. The + unique identifier for the company which is given by Intercom. Set to nil to remove company. + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + open: + type: boolean + description: Specify if a ticket is open. Set to false to close a ticket. + Closing a ticket will also unsnooze it. + example: true + is_shared: + type: boolean + description: Specify whether the ticket is visible to users. + example: true + snoozed_until: + type: integer + format: timestamp + description: The time you want the ticket to reopen. + example: 1673609604 + admin_id: + type: integer + description: The ID of the admin performing ticket update. Needed for workflows + execution and attributing actions to specific admins. + example: 123 + assignee_id: + type: string + description: The ID of the admin or team to which the ticket is assigned. + Set this 0 to unassign it. + example: '123' + update_ticket_type_attribute_request: + description: You can update a Ticket Type Attribute + type: object + title: Update Ticket Type Attribute Request Payload + properties: + name: + type: string + description: The name of the ticket type attribute + example: Bug Priority + description: + type: string + description: The description of the attribute presented to the teammate + or contact + example: Priority level of the bug + required_to_create: + type: boolean + description: Whether the attribute is required to be filled in when teammates + are creating the ticket in Inbox. + default: false + example: false + required_to_create_for_contacts: + type: boolean + description: Whether the attribute is required to be filled in when contacts + are creating the ticket in Messenger. + default: false + example: false + visible_on_create: + type: boolean + description: Whether the attribute is visible to teammates when creating + a ticket in Inbox. + default: true + example: true + visible_to_contacts: + type: boolean + description: Whether the attribute is visible to contacts when creating + a ticket in Messenger. + default: true + example: true + multiline: + type: boolean + description: Whether the attribute allows multiple lines of text (only applicable + to string attributes) + example: false + list_items: + type: string + description: A comma delimited list of items for the attribute value (only + applicable to list attributes) + example: Low Priority,Medium Priority,High Priority + allow_multiple_values: + type: boolean + description: Whether the attribute allows multiple files to be attached + to it (only applicable to file attributes) + example: false + archived: + type: boolean + description: Whether the attribute should be archived and not shown during + creation of the ticket (it will still be present on previously created + tickets) + example: false + update_ticket_type_request: + description: | + The request payload for updating a ticket type. + You can copy the `icon` property for your ticket type from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/) + type: object + title: Update Ticket Type Request Payload + nullable: true + properties: + name: + type: string + description: The name of the ticket type. + example: Bug + description: + type: string + description: The description of the ticket type. + example: A bug has been occured + category: + type: string + description: Category of the Ticket Type. + enum: + - Customer + - Back-office + - Tracker + example: Customer + icon: + type: string + description: The icon of the ticket type. + example: "\U0001F41E" + default: "\U0001F39F️" + archived: + type: boolean + description: The archived status of the ticket type. + example: false + is_internal: + type: boolean + description: Whether the tickets associated with this ticket type are intended + for internal use only or will be shared with customers. This is currently + a limited attribute. + example: false + default: false + update_visitor_request: + description: Update an existing visitor. + type: object + title: Update Visitor Request Payload + properties: + id: + type: string + description: A unique identified for the visitor which is given by Intercom. + example: 8a88a590-e + user_id: + type: string + description: A unique identified for the visitor which is given by you. + example: '123' + name: + type: string + description: The visitor's name. + example: Christian Bale + custom_attributes: + type: object + description: The custom attributes which are set for the visitor. + additionalProperties: + type: string + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + anyOf: + - required: + - id + - required: + - user_id + visitor: + title: Visitor + type: object + description: Visitors are useful for representing anonymous people that have + not yet been identified. They usually represent website visitors. Visitors + are not visible in Intercom platform. The Visitors resource provides methods + to fetch, update, convert and delete. + nullable: true + properties: + type: + type: string + description: Value is 'visitor' + default: visitor + example: visitor + id: + type: string + description: The Intercom defined id representing the Visitor. + example: 530370b477ad7120001d + user_id: + type: string + description: Automatically generated identifier for the Visitor. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + anonymous: + type: boolean + description: Identifies if this visitor is anonymous. + example: false + email: + type: string + format: email + description: The email of the visitor. + example: jane.doe@example.com + phone: + type: string + nullable: true + description: The phone number of the visitor. + example: 555-555-5555 + name: + type: string + nullable: true + description: The name of the visitor. + example: Jane Doe + pseudonym: + type: string + nullable: true + description: The pseudonym of the visitor. + example: Red Duck from Dublin + avatar: + type: object + properties: + type: + type: string + description: '' + default: avatar + example: avatar + image_url: + type: string + format: uri + nullable: true + description: This object represents the avatar associated with the visitor. + example: https://example.com/avatar.png + app_id: + type: string + description: The id of the app the visitor is associated with. + example: hfi1bx4l + companies: + type: object + properties: + type: + type: string + description: The type of the object + enum: + - company.list + example: company.list + companies: + type: array + items: + "$ref": "#/components/schemas/company" + location_data: + type: object + properties: + type: + type: string + description: '' + default: location_data + example: location_data + city_name: + type: string + description: The city name of the visitor. + example: Dublin + continent_code: + type: string + description: The continent code of the visitor. + example: EU + country_code: + type: string + description: The country code of the visitor. + example: IRL + country_name: + type: string + description: The country name of the visitor. + example: Ireland + postal_code: + type: string + description: The postal code of the visitor. + example: D02 N960 + region_name: + type: string + description: The region name of the visitor. + example: Leinster + timezone: + type: string + description: The timezone of the visitor. + example: Europe/Dublin + las_request_at: + type: integer + description: The time the Lead last recorded making a request. + example: 1663597260 + created_at: + type: integer + description: The time the Visitor was added to Intercom. + example: 1663597223 + remote_created_at: + type: integer + description: The time the Visitor was added to Intercom. + example: 1663597223 + signed_up_at: + type: integer + description: The time the Visitor signed up for your product. + example: 1663597223 + updated_at: + type: integer + description: The last time the Visitor was updated. + example: 1663597260 + session_count: + type: integer + description: The number of sessions the Visitor has had. + example: 1 + social_profiles: + type: object + properties: + type: + type: string + description: The type of the object + enum: + - social_profile.list + example: social_profile.list + social_profiles: + type: array + items: + type: string + owner_id: + type: string + nullable: true + description: The id of the admin that owns the Visitor. + example: '5169261' + unsubscribed_from_emails: + type: boolean + description: Whether the Visitor is unsubscribed from emails. + example: false + marked_email_as_spam: + type: boolean + description: Identifies if this visitor has marked an email as spam. + example: false + has_hard_bounced: + type: boolean + description: Identifies if this visitor has had a hard bounce. + example: false + tags: + type: object + properties: + type: + type: string + description: The type of the object + enum: + - tag.list + example: tag.list + tags: + type: array + items: + properties: + type: + type: string + description: The type of the object + enum: + - tag + example: tag + id: + type: string + description: The id of the tag. + example: '8482' + name: + type: string + description: The name of the tag. + example: tag_name + segments: + type: object + properties: + type: + type: string + description: The type of the object + enum: + - segment.list + example: segment.list + segments: + type: array + items: + type: string + custom_attributes: + type: object + description: The custom attributes you have set on the Visitor. + additionalProperties: + type: string + referrer: + type: string + nullable: true + description: The referer of the visitor. + example: https://www.google.com/ + utm_campaign: + type: string + nullable: true + description: The utm_campaign of the visitor. + example: intercom-link + utm_content: + type: string + nullable: true + description: The utm_content of the visitor. + example: banner + utm_medium: + type: string + nullable: true + description: The utm_medium of the visitor. + example: email + utm_source: + type: string + nullable: true + description: The utm_source of the visitor. + example: Intercom + utm_term: + type: string + nullable: true + description: The utm_term of the visitor. + example: messenger + do_not_track: + type: boolean + nullable: true + description: Identifies if this visitor has do not track enabled. + example: false + visitor_deleted_object: + title: Visitor Deleted Object + type: object + description: Response returned when an object is deleted + properties: + id: + type: string + description: The unique identifier for the visitor which is given by Intercom. + example: 530370b477ad7120001d + type: + type: string + description: The type of object which was deleted + enum: + - visitor + example: visitor + user_id: + type: string + description: Automatically generated identifier for the Visitor. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + workflow_export: + title: Workflow Export + type: object + description: A workflow export containing the complete workflow configuration. + properties: + export_version: + type: string + description: The version of the export format. + example: "1.0" + exported_at: + type: string + format: date-time + description: The timestamp when the export was generated. + example: "2026-01-26T12:00:00Z" + app_id: + type: integer + description: The workspace identifier. + example: 12345 + workflow: + type: object + description: The workflow configuration. + properties: + id: + type: string + description: The unique identifier for the workflow. + example: "67890" + title: + type: string + description: The title of the workflow. + example: "My Workflow" + description: + type: string + nullable: true + description: The description of the workflow. + example: "A workflow that handles customer inquiries" + trigger_type: + type: string + description: The type of trigger that starts this workflow. + example: "inbound_conversation" + state: + type: string + description: The current state of the workflow. + enum: + - live + - draft + - paused + example: "live" + target_channels: + type: array + items: + type: string + description: The channels this workflow targets. + example: ["chat"] + preferred_devices: + type: array + items: + type: string + description: The preferred devices for this workflow. + example: ["desktop", "mobile"] + created_at: + type: string + format: date-time + description: When the workflow was created. + example: "2025-06-15T10:30:00Z" + updated_at: + type: string + format: date-time + description: When the workflow was last updated. + example: "2026-01-20T14:45:00Z" + targeting: + type: object + nullable: true + description: The targeting rules for this workflow. + snapshot: + type: object + nullable: true + description: The current snapshot of workflow steps and configuration. + attributes: + type: array + items: + type: object + description: Custom attributes defined for this workflow. + embedded_rules: + type: array + items: + type: object + description: Rules embedded within the workflow steps. + securitySchemes: + bearerAuth: + type: http + scheme: bearer + responses: + Unauthorized: + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 12a938a3-314e-4939-b773-5cd45738bd21 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + TypeNotFound: + description: Not Found + content: + application/json: + examples: + TypeNotFound: + value: + type: error.list + request_id: 12a938a3-314e-4939-b773-5cd45738bd21 + errors: + - code: not_found + message: Custom object type `undefined` not found + schema: + "$ref": "#/components/schemas/error" + ObjectNotFound: + description: Not Found + content: + application/json: + examples: + ObjectNotFound: + value: + type: error.list + request_id: 12a938a3-314e-4939-b773-5cd45738bd21 + errors: + - code: not_found + message: Object not found + CustomObjectNotFound: + value: + type: error.list + request_id: 12a938a3-314e-4939-b773-5cd45738bd21 + errors: + - code: not_found + message: Custom object instance not found + IntegrationNotFound: + value: + type: error.list + request_id: 12a938a3-314e-4939-b773-5cd45738bd21 + errors: + - code: data_invalid + message: Integration not found + schema: + "$ref": "#/components/schemas/error" + ValidationError: + description: Validation Error + content: + application/json: + examples: + ValidationError: + value: + type: error.list + request_id: 12a938a3-314e-4939-b773-5cd45738bd21 + errors: + - code: data_invalid + message: Invalid or duplicated record reference + schema: + "$ref": "#/components/schemas/error" + BadRequest: + description: Bad Request + content: + application/json: + examples: + BadRequest: + value: + type: error.list + request_id: 12a938a3-314e-4939-b773-5cd45738bd21 + errors: + - code: data_invalid + message: Contact not found or could not be created + schema: + "$ref": "#/components/schemas/error" +servers: +- url: https://api.intercom.io + description: The production API server +- url: https://api.eu.intercom.io + description: The european API server +- url: https://api.au.intercom.io + description: The australian API server +security: +- bearerAuth: [] +tags: +- name: Admins + description: Everything about your Admins +- name: AI Content + description: | + 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.", +- name: Articles + description: Everything about your Articles +- name: Away Status Reasons + description: Everything about your Away Status Reasons +- name: Brands + description: Everything about your Brands +- name: Companies + description: Everything about your Companies +- name: Contacts + description: Everything about your contacts +- name: Conversations + description: Everything about your Conversations + externalDocs: + description: What is a conversation? + url: https://www.intercom.com/help/en/articles/4323904-what-is-a-conversation +- name: Custom Object Instances + description: | + Everything about your Custom Object instances. + {% admonition type="warning" name="Permission Requirements" %} + From now on, to access this endpoint, you need additional permissions. Please head over to the [Developer Hub](https://app.intercom.com/a/apps/_/developer-hub) app package authentication settings to configure the required permissions. + {% /admonition %} +- name: Data Attributes + description: Everything about your Data Attributes +- name: Data Events + description: Everything about your Data Events +- name: Data Export + description: Export message delivery and engagement statistics (opens, clicks, replies, completions, dismissals, unsubscribes, bounces) for outbound content such as Emails, Posts, Custom Bots, Surveys, Tours, and Series. +- name: Emails + description: Everything about your Email Settings +- name: Fin Agent + description: | + Access Fin programmatically via the Fin Agent API endpoints. + +   + + {% admonition type="warning" %} + Please reach out to your accounts team to discuss access and tailored, hands-on support. + {% /admonition %} + +   + + Integration is centered around two endpoints (`/fin/start` and `/fin/reply`) and a set of events that notify your application of Fin's status and responses. Events can be delivered via webhooks or Server-Sent Events (SSE). + +   + + **Events** + + Configure a webhook endpoint in the Fin Agent API settings to receive events, or use the `sse_subscription_url` from the API response to subscribe via SSE. See the [setup guide](/docs/guides/fin-agent-api/setup) for configuration details. + + - `fin_status_updated` - Fired when Fin's status changes (escalated, resolved, complete) + - `fin_replied` - Fired when Fin sends a reply to the user + - `fin_reply_chunk` - SSE-only streaming event fired during reply generation (requires streaming enabled) + + All webhook requests include an `X-Fin-Agent-API-Webhook-Signature` header for request validation. +- name: Help Center + description: Everything about your Help Center +- name: Internal Articles + description: Everything about your Internal Articles +- name: IP Allowlist + description: | + Manage IP allowlist settings for your workspace. + + The IP Allowlist API allows you to configure which IP addresses are allowed to access the Intercom API and web application for your workspace. This is useful for restricting access to your Intercom workspace to specific corporate networks or VPNs. + + {% admonition type="info" name="Authentication" %} + This endpoint requires the `manage_ip_allowlist` OAuth scope. + {% /admonition %} +- name: Jobs + description: Everything about jobs +- name: Messages + description: Everything about your messages +- name: News + description: Everything about your News + externalDocs: + description: News explained + url: https://www.intercom.com/help/en/articles/6362251-news-explained +- name: Notes + description: Everything about your Notes +- name: Reporting Data Export + description: Everything about Reporting Data Export. See this [article](https://www.intercom.com/help/en/articles/12089688-api-metrics-documentation) for details on using the data to generate various metrics. +- name: Segments + description: Everything about your Segments +- name: Subscription Types + description: Everything about subscription types +- name: Switch + description: Everything about Switch + externalDocs: + description: 'Meet Switch: from on hold to messaging in just a few taps' + url: https://www.intercom.com/switch +- name: Tags + description: Everything about tags +- name: Teams + description: Everything about your Teams +- name: Ticket States + description: Everything about your ticket states +- name: Ticket Type Attributes + description: Everything about your ticket type attributes +- name: Ticket Types + description: Everything about your ticket types +- name: Tickets + description: Everything about your tickets +- name: Visitors + description: Everything about your Visitors +- name: Workflows + description: Everything about your Workflows From 17b1fe344af8aad051f7296a800c4b1cef6cf74e Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Wed, 22 Jul 2026 22:09:18 +0100 Subject: [PATCH 02/22] Graduate 9 breaking changes into v2.16 OpenAPI spec Contact owner_id (string), conversation priority levels, conversation unassigned assignee (0), ticket assignee (integer), article parent_ids, dedicated Conversation Attributes API, tags skip-missing, reporting no-reply conversations, contacts/merge duplicate validation. --- descriptions/2.16/api.intercom.io.yaml | 1724 ++++++++++++++++++++---- 1 file changed, 1494 insertions(+), 230 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index a2881df6..90dbc364 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -1022,8 +1022,6 @@ paths: - id: '39' type: article workspace_id: this_is_an_id64_that_should_be_at_least_4 - parent_id: 143 - parent_type: collection parent_ids: [] tags: type: tag.list @@ -1077,8 +1075,6 @@ paths: id: '42' type: article workspace_id: this_is_an_id68_that_should_be_at_least_4 - parent_id: 145 - parent_type: collection parent_ids: [] statistics: type: article_statistics @@ -1191,8 +1187,6 @@ paths: id: '45' type: article workspace_id: this_is_an_id74_that_should_be_at_least_4 - parent_id: 148 - parent_type: collection parent_ids: [] statistics: type: article_statistics @@ -1276,8 +1270,6 @@ paths: id: '48' type: article workspace_id: this_is_an_id80_that_should_be_at_least_4 - parent_id: 151 - parent_type: collection parent_ids: [] statistics: type: article_statistics @@ -1460,8 +1452,6 @@ paths: - id: '55' type: article workspace_id: this_is_an_id92_that_should_be_at_least_4 - parent_id: - parent_type: parent_ids: [] tags: type: tag.list @@ -1520,6 +1510,7 @@ paths: "/export/reporting_data/enqueue": post: summary: Enqueue a new reporting data export job + description: For the conversation dataset, from this version onward this export returns all conversations, including those that never received a user reply. Earlier versions return only conversations that received at least one user reply. Other datasets are unaffected. tags: [Reporting Data Export] parameters: - name: Intercom-Version @@ -5629,6 +5620,21 @@ paths: nullable: true description: If the user has enabled push messaging. example: true + '400': + description: Bad Request + content: + application/json: + examples: + Not a duplicate: + value: + type: error.list + errors: + - code: invalid_merge + message: Contacts can only be merged when they are duplicates + (matching email or phone). Pass skip_duplicate_validation=true + to override this check. + schema: + "$ref": "#/components/schemas/error" '401': description: Unauthorized content: @@ -5654,6 +5660,12 @@ paths: value: from: 6762f0d51bb69f9f2193bb7f into: 6762f0d51bb69f9f2193bb80 + skip duplicate validation: + summary: skip duplicate validation + value: + from: 6762f0d51bb69f9f2193bb7f + into: 6762f0d51bb69f9f2193bb80 + skip_duplicate_validation: true "/contacts/search": post: summary: Search contacts @@ -6510,7 +6522,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -6751,7 +6763,7 @@ paths: applied_by: type: contact id: '1a2b3c' - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -7000,7 +7012,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -7097,7 +7109,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -7426,7 +7438,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -7534,7 +7546,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -7610,7 +7622,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -7698,7 +7710,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -7777,7 +7789,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -7977,7 +7989,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -8053,7 +8065,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -8129,7 +8141,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -8205,7 +8217,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -8692,7 +8704,7 @@ paths: tags: type: tag.list tags: [] - priority: not_priority + priority: none sla_applied: statistics: conversation_rating: @@ -8732,19 +8744,807 @@ paths: app_package_code: null total_count: 1 schema: - "$ref": "#/components/schemas/conversation" + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: 5b7bb755-4031-4bfe-8897-54d0f1872bbc + errors: + - code: conversation_part_or_message_not_found + message: Conversation part or message not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 4814668f-5d31-4bf7-8f66-b426aac054db + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/redact_conversation_request" + examples: + redact_a_conversation_part: + summary: Redact a conversation part + value: + type: conversation_part + conversation_id: 608 + conversation_part_id: 149 + not_found: + summary: Not found + value: + type: conversation_part + conversation_id: really_123_doesnt_exist + conversation_part_id: really_123_doesnt_exist + "/conversations/{conversation_id}/convert": + post: + summary: Convert a conversation to a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The id of the conversation to target + example: 123 + schema: + type: integer + tags: + - Conversations + description: You can convert a conversation to a ticket. + operationId: convertConversationToTicket + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: ticket + id: '611' + ticket_id: '22' + ticket_attributes: {} + ticket_state: + type: ticket_state + id: '7493' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_type: + type: ticket_type + id: '53' + name: my-ticket-type-1 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id442_that_should_be_at_least_ + archived: false + created_at: 1734537737 + updated_at: 1734537737 + is_internal: false + ticket_type_attributes: + type: list + data: [] + category: Customer + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f2041bb69f9f2193bc0c + external_id: '70' + admin_assignee_id: 0 + team_assignee_id: 0 + created_at: 1734537732 + updated_at: 1734537737 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '151' + part_type: comment + body: "

Comment for message

" + created_at: 1734537732 + updated_at: 1734537732 + author: + id: 6762f2041bb69f9f2193bc0c + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + redacted: false + app_package_code: test-integration + - type: ticket_part + id: '152' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537737 + updated_at: 1734537737 + author: + id: '991267767' + type: bot + name: Fin + email: operator+this_is_an_id442_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + app_package_code: test-integration + total_count: 2 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Customer + is_shared: true + schema: + "$ref": "#/components/schemas/ticket" + '400': + description: Bad request + content: + application/json: + examples: + Bad request: + value: + type: error.list + request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 + errors: + - code: parameter_invalid + message: Ticket type is not a customer ticket type + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/convert_conversation_to_ticket_request" + examples: + successful: + summary: successful + value: + ticket_type_id: '53' + bad_request: + summary: Bad request + value: + ticket_type_id: '54' + "/conversations/attributes": + get: + summary: List all conversation attributes + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: include_archived + in: query + required: false + description: Include archived attributes in the list. Default `false`. + schema: + type: boolean + example: false + tags: + - Conversations Attributes + operationId: listConversationAttributes + description: You can fetch a list of all conversation attributes for your workspace. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: list + data: + - type: conversation_attribute + id: 3 + name: test 2 + description: '' + data_type: string + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777473061 + updated_at: 1777473061 + admin_id: '16' + multiline: false + - type: conversation_attribute + id: 2 + name: test list + description: '' + data_type: list + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777472538 + updated_at: 1777537799 + admin_id: '16' + options: + - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + label: '1' + archived: false + - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 + label: '2' + archived: false + - id: c3d4e5f6-a7b8-9012-cdef-012345678912 + label: '3' + archived: false + - type: conversation_attribute + id: 6 + name: Ref to Test + description: '' + data_type: relationship + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777547482 + updated_at: 1777547482 + admin_id: '16' + reference: + type: many + object_type_id: Test_Object + schema: + "$ref": "#/components/schemas/conversation_attribute_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create a conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Conversations Attributes + operationId: createConversationAttribute + description: Create a new conversation attribute. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 8 + name: api_test_attr + description: Created via API test + data_type: string + required: false + visible_to_team_ids: [] + archived: false + created_at: 1778239701 + updated_at: 1778239701 + admin_id: '16' + multiline: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '422': + description: Invalid data_type + content: + application/json: + examples: + Invalid data_type: + value: + type: error.list + request_id: 4be81317-ba5a-455a-a80d-862fe4ad888b + errors: + - code: parameter_invalid + message: "data_type 'invalid_type' is not valid. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files" + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/create_conversation_attribute_request" + examples: + Create string attribute: + summary: Create a string attribute + value: + name: api_test_attr + data_type: string + description: Created via API test + "/conversations/attributes/{id}": + get: + summary: Get a conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 3 + schema: + type: integer + tags: + - Conversations Attributes + operationId: getConversationAttribute + description: Retrieve a single conversation attribute by ID. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 3 + name: test 2 + description: '' + data_type: string + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777473061 + updated_at: 1777473061 + admin_id: '16' + multiline: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update a conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 8 + schema: + type: integer + tags: + - Conversations Attributes + operationId: updateConversationAttribute + description: Update an existing conversation attribute. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 8 + name: api_test_renamed + description: Updated via API + data_type: string + required: false + visible_to_team_ids: [] + archived: false + created_at: 1778239701 + updated_at: 1778239718 + admin_id: '16' + multiline: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/update_conversation_attribute_request" + examples: + Update name: + summary: Update name and description + value: + name: api_test_renamed + description: Updated via API + delete: + summary: Delete (archive) a conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 8 + schema: + type: integer + tags: + - Conversations Attributes + operationId: deleteConversationAttribute + description: "Archive a conversation attribute (soft delete). The attribute is marked as archived but not permanently deleted." + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 8 + name: api_test_renamed + description: Updated via API + data_type: string + required: false + visible_to_team_ids: [] + archived: true + created_at: 1778239701 + updated_at: 1778239721 + admin_id: '16' + multiline: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/conversations/attributes/{id}/options": + post: + summary: Add an option to a list conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 2 + schema: + type: integer + tags: + - Conversations Attributes + operationId: createConversationAttributeOption + description: Add a new option to a list-type conversation attribute. Returns the full attribute with the updated options array. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 2 + name: test list + description: '' + data_type: list + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777472538 + updated_at: 1778240000 + admin_id: '16' + options: + - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + label: '1' + archived: false + - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 + label: '2' + archived: false + - id: c3d4e5f6-a7b8-9012-cdef-012345678912 + label: '3' + archived: false + - id: d4e5f6a7-b8c9-0123-defa-123456789023 + label: High + archived: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + schema: + "$ref": "#/components/schemas/error" + '422': + description: Unprocessable entity + content: + application/json: + examples: + Not a list type: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: Options can only be managed on list attributes + Label required: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: label is required + Label not a string: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: label must be a string + Unexpected key in body: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: only 'label' is accepted + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/create_conversation_attribute_option_request" + examples: + Add option: + summary: Add a new list option + value: + label: High + "/conversations/attributes/{id}/options/{option_id}": + put: + summary: Update an option on a list conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 2 + schema: + type: integer + - name: option_id + in: path + required: true + description: The UUID of the list option to update (from the `id` field in the options array) + example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + schema: + type: string + tags: + - Conversations Attributes + operationId: updateConversationAttributeOption + description: Update the label of a single option on a list-type conversation attribute. Returns the full attribute with the updated options array. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 2 + name: test list + description: '' + data_type: list + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777472538 + updated_at: 1778240001 + admin_id: '16' + options: + - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + label: Renamed + archived: false + - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 + label: '2' + archived: false + - id: c3d4e5f6-a7b8-9012-cdef-012345678912 + label: '3' + archived: false + schema: + "$ref": "#/components/schemas/conversation_attribute" '404': - description: Not found + description: Conversation attribute or option not found content: application/json: examples: - Not found: + Attribute not found: value: type: error.list - request_id: 5b7bb755-4031-4bfe-8897-54d0f1872bbc + request_id: null errors: - - code: conversation_part_or_message_not_found - message: Conversation part or message not found + - code: conversation_attribute_not_found + message: Conversation attribute not found + Option not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: List option not found + schema: + "$ref": "#/components/schemas/error" + '422': + description: Unprocessable entity + content: + application/json: + examples: + Not a list type: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: Options can only be managed on list attributes + Label required: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: label is required + Label not a string: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: label must be a string + Unexpected key in body: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: only 'label' is accepted schema: "$ref": "#/components/schemas/error" '401': @@ -8755,163 +9555,135 @@ paths: Unauthorized: value: type: error.list - request_id: 4814668f-5d31-4bf7-8f66-b426aac054db + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" requestBody: + required: true content: application/json: schema: - "$ref": "#/components/schemas/redact_conversation_request" + "$ref": "#/components/schemas/update_conversation_attribute_option_request" examples: - redact_a_conversation_part: - summary: Redact a conversation part - value: - type: conversation_part - conversation_id: 608 - conversation_part_id: 149 - not_found: - summary: Not found + Rename option: + summary: Rename an existing option value: - type: conversation_part - conversation_id: really_123_doesnt_exist - conversation_part_id: really_123_doesnt_exist - "/conversations/{conversation_id}/convert": - post: - summary: Convert a conversation to a ticket + label: Renamed + delete: + summary: Archive an option on a list conversation attribute parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: conversation_id + - name: id in: path required: true - description: The id of the conversation to target - example: 123 + description: The conversation attribute id + example: 2 schema: type: integer + - name: option_id + in: path + required: true + description: The UUID of the list option to archive (from the `id` field in the options array) + example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + schema: + type: string tags: - - Conversations - description: You can convert a conversation to a ticket. - operationId: convertConversationToTicket + - Conversations Attributes + operationId: deleteConversationAttributeOption + description: "Archive a single option on a list-type conversation attribute (soft delete). The option remains in the response with `archived: true`. Returns the full attribute with the updated options array." responses: '200': - description: successful + description: Successful response content: application/json: examples: - successful: + Successful response: value: - type: ticket - id: '611' - ticket_id: '22' - ticket_attributes: {} - ticket_state: - type: ticket_state - id: '7493' - category: submitted - internal_label: Submitted - external_label: Submitted - ticket_type: - type: ticket_type - id: '53' - name: my-ticket-type-1 - description: my ticket type description is awesome. - icon: "\U0001F981" - workspace_id: this_is_an_id442_that_should_be_at_least_ + type: conversation_attribute + id: 2 + name: test list + description: '' + data_type: list + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777472538 + updated_at: 1778240002 + admin_id: '16' + options: + - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + label: '1' + archived: true + - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 + label: '2' + archived: false + - id: c3d4e5f6-a7b8-9012-cdef-012345678912 + label: '3' archived: false - created_at: 1734537737 - updated_at: 1734537737 - is_internal: false - ticket_type_attributes: - type: list - data: [] - category: Customer - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f2041bb69f9f2193bc0c - external_id: '70' - admin_assignee_id: '0' - team_assignee_id: '0' - created_at: 1734537732 - updated_at: 1734537737 - ticket_parts: - type: ticket_part.list - ticket_parts: - - type: ticket_part - id: '151' - part_type: comment - body: "

Comment for message

" - created_at: 1734537732 - updated_at: 1734537732 - author: - id: 6762f2041bb69f9f2193bc0c - type: user - name: Joe Bloggs - email: joe@bloggs.com - attachments: [] - redacted: false - app_package_code: test-integration - - type: ticket_part - id: '152' - part_type: ticket_state_updated_by_admin - ticket_state: submitted - previous_ticket_state: submitted - created_at: 1734537737 - updated_at: 1734537737 - author: - id: '991267767' - type: bot - name: Fin - email: operator+this_is_an_id442_that_should_be_at_least_@intercom.io - attachments: [] - redacted: false - app_package_code: test-integration - total_count: 2 - open: true - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - category: Customer - is_shared: true schema: - "$ref": "#/components/schemas/ticket" - '400': - description: Bad request + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute or option not found content: application/json: examples: - Bad request: + Attribute not found: value: type: error.list - request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + Option not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: List option not found + schema: + "$ref": "#/components/schemas/error" + '422': + description: Unprocessable entity + content: + application/json: + examples: + Not a list type: + value: + type: error.list + request_id: null errors: - code: parameter_invalid - message: Ticket type is not a customer ticket type + message: Options can only be managed on list attributes + Minimum options: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: A list attribute must have at least 2 active options + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/convert_conversation_to_ticket_request" - examples: - successful: - summary: successful - value: - ticket_type_id: '53' - bad_request: - summary: Bad request - value: - ticket_type_id: '54' "/custom_object_instances/{custom_object_type_identifier}": parameters: - name: custom_object_type_identifier @@ -9160,13 +9932,12 @@ paths: - name: model in: query required: false - description: Specify the data attribute model to return. + description: "Specify the data attribute model to return. For conversation attributes, use GET /conversations/attributes instead." schema: type: string enum: - contact - company - - conversation example: company - name: include_archived in: query @@ -9179,8 +9950,12 @@ paths: tags: - Data Attributes operationId: lisDataAttributes - description: You can fetch a list of all data attributes belonging to a workspace - for contacts, companies or conversations. + description: | + You can fetch a list of all data attributes belonging to a workspace for contacts or companies. + + {% admonition type="warning" %} + Conversation attributes are no longer returned by this endpoint. Calling without a `model` parameter no longer includes them, and `model=conversation` returns a `422` error. Use `GET /conversations/attributes` instead. + {% /admonition %} responses: '200': description: Successful response @@ -9422,6 +10197,20 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + '422': + description: Unprocessable entity - model=conversation is no longer supported + content: + application/json: + examples: + Deprecated conversation model: + value: + type: error.list + request_id: b7912266-b12e-4d12-b2ce-9cd44d33f0c0 + errors: + - code: parameter_invalid + message: model=conversation is no longer supported. Use GET /conversations/attributes instead + schema: + "$ref": "#/components/schemas/error" post: summary: Create a data attribute parameters: @@ -11638,8 +12427,12 @@ paths: type: tag id: '105' name: test + users: [] + companies: + - id: valid-123 + tagged: true schema: - "$ref": "#/components/schemas/tag_basic" + "$ref": "#/components/schemas/tag_create_response" '400': description: Invalid parameters content: @@ -11654,27 +12447,6 @@ paths: message: invalid tag parameters schema: "$ref": "#/components/schemas/error" - '404': - description: User not found - content: - application/json: - examples: - Company not found: - value: - type: error.list - request_id: 23c998cc-32b8-435d-9653-932c15809460 - errors: - - code: company_not_found - message: Company Not Found - User not found: - value: - type: error.list - request_id: 7358f78d-f122-45dd-a2e1-c2261300c38a - errors: - - code: not_found - message: User Not Found - schema: - "$ref": "#/components/schemas/error" '401': description: Unauthorized content: @@ -13297,8 +14069,8 @@ paths: - type: contact id: 6762f2d81bb69f9f2193bc54 external_id: '70' - admin_assignee_id: '0' - team_assignee_id: '0' + admin_assignee_id: 0 + team_assignee_id: 0 created_at: 1734537944 updated_at: 1734537946 ticket_parts: @@ -13539,8 +14311,8 @@ paths: - type: contact id: 6762f2dd1bb69f9f2193bc55 external_id: 8df1fa21-b41d-4621-9229-d6f7a3a590ce - admin_assignee_id: '991268013' - team_assignee_id: '0' + admin_assignee_id: 991268013 + team_assignee_id: 0 created_at: 1734537950 updated_at: 1734537955 ticket_parts: @@ -13845,8 +14617,8 @@ paths: - type: contact id: 6762f2f61bb69f9f2193bc59 external_id: b16afa36-2637-4880-adee-a46d145bc27f - admin_assignee_id: '0' - team_assignee_id: '0' + admin_assignee_id: 0 + team_assignee_id: 0 created_at: 1734537974 updated_at: 1734537976 ticket_parts: @@ -14137,8 +14909,8 @@ paths: - type: contact id: 6762f3061bb69f9f2193bc5b external_id: 9b913927-c084-4391-b1db-098341b5ffe3 - admin_assignee_id: '0' - team_assignee_id: '0' + admin_assignee_id: 0 + team_assignee_id: 0 created_at: 1734537990 updated_at: 1734537992 ticket_parts: @@ -15983,12 +16755,6 @@ components: description: The URL of the article. For multilingual articles, this will be the URL of the default language's content. example: http://intercom.test/help/en/articles/3-default-language - parent_id: - type: integer - nullable: true - description: The id of the article's parent collection or section. An article - without this field stands alone. - example: '125685' parent_ids: type: array description: The ids of the article's parent collections or sections. An @@ -15996,13 +16762,8 @@ components: items: type: integer example: - - 18 - - 19 - parent_type: - type: string - nullable: true - description: The type of parent, which can either be a `collection` or `section`. - example: collection + - 18 + - 19 default_locale: type: string description: The default locale of the help center. This field is only returned @@ -16959,11 +17720,11 @@ components: description: The contacts name. example: John Doe owner_id: - type: integer + type: string nullable: true description: The id of an admin that has been assigned account ownership of the contact. - example: 123 + example: "321" has_hard_bounced: type: boolean description: Whether the contact has had an email sent to them hard bounce. @@ -17800,21 +18561,23 @@ components: priority: type: string enum: - - priority - - not_priority - description: If marked as priority, it will return priority or else not_priority. - example: priority + - none + - low + - medium + - high + - urgent + description: The priority level of the conversation. Returns one of none, + low, medium, high, or urgent. + example: high admin_assignee_id: type: integer - nullable: true description: The id of the admin assigned to the conversation. If it's not - assigned to an admin it will return null. + assigned to an admin it will return 0. example: 0 team_assignee_id: type: integer - nullable: true description: The id of the team assigned to the conversation. If it's not - assigned to a team it will return null. + assigned to a team it will return 0. example: 5017691 company: "$ref": "#/components/schemas/company" @@ -17914,21 +18677,23 @@ components: priority: type: string enum: - - priority - - not_priority - description: If marked as priority, it will return priority or else not_priority. - example: priority + - none + - low + - medium + - high + - urgent + description: The priority level of the conversation. Returns one of none, + low, medium, high, or urgent. + example: high admin_assignee_id: type: integer - nullable: true description: The id of the admin assigned to the conversation. If it's not - assigned to an admin it will return null. + assigned to an admin it will return 0. example: 0 team_assignee_id: type: integer - nullable: true description: The id of the team assigned to the conversation. If it's not - assigned to a team it will return null. + assigned to a team it will return 0. example: 5017691 company: "$ref": "#/components/schemas/company" @@ -18710,11 +19475,11 @@ components: (either where the Intercom Messenger was installed or when specified manually). example: 1571672154 owner_id: - type: integer + type: string nullable: true description: The id of an admin that has been assigned account ownership of the contact - example: 123 + example: "321" unsubscribed_from_emails: type: boolean nullable: true @@ -19800,10 +20565,10 @@ components: type: object x-tags: - Data Attributes - description: Data Attributes are metadata used to describe your contact, company - and conversation models. These include standard and custom attributes. By - using the data attributes endpoint, you can get the global list of attributes - for your workspace, as well as create and archive custom attributes. + description: Data Attributes are metadata used to describe your contact and + company models. These include standard and custom attributes. By using the + data attributes endpoint, you can get the global list of attributes for your + workspace, as well as create and archive custom attributes. properties: type: type: string @@ -19897,8 +20662,8 @@ components: data_attribute_list: title: Data Attribute List type: object - description: A list of all data attributes belonging to a workspace for contacts, - companies or conversations. + description: A list of all data attributes belonging to a workspace for contacts + or companies. properties: type: type: string @@ -19911,6 +20676,460 @@ components: description: A list of data attributes items: "$ref": "#/components/schemas/data_attribute" + conversation_attribute_base: + title: Conversation Attribute Base + type: object + properties: + type: + type: string + description: "Value is `conversation_attribute`." + enum: + - conversation_attribute + example: conversation_attribute + id: + type: integer + description: The unique identifier for the conversation attribute. + example: 8 + name: + type: string + description: Name of the attribute. + example: api_test_attr + description: + type: string + description: Readable description of the attribute. + example: Created via API test + data_type: + type: string + description: "The data type of the attribute. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files." + enum: + - string + - integer + - list + - decimal + - boolean + - datetime + - relationship + - files + example: string + required: + type: boolean + description: Whether this attribute is required. + example: false + visible_to_team_ids: + type: array + description: Team IDs that can see this attribute. Empty array means all teams. + items: + type: string + example: [] + archived: + type: boolean + description: Whether this attribute is archived. + example: false + created_at: + type: integer + format: date-time + description: The time the attribute was created as a UTC Unix timestamp. + example: 1778239701 + updated_at: + type: integer + format: date-time + description: The time the attribute was last updated as a UTC Unix timestamp. + example: 1778239701 + admin_id: + type: string + description: ID of the admin who created the attribute. + example: '16' + conversation_attribute_string_type: + title: Conversation Attribute (String) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - string + multiline: + type: boolean + description: Whether this string attribute is multiline. + example: false + conversation_attribute_integer_type: + title: Conversation Attribute (Integer) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - integer + conversation_attribute_list_type: + title: Conversation Attribute (List) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - list + options: + type: array + description: Predefined options for this attribute. Each option has a unique UUID used to identify it in the options management endpoints. + items: + "$ref": "#/components/schemas/conversation_attribute_option" + conversation_attribute_decimal_type: + title: Conversation Attribute (Decimal) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - decimal + conversation_attribute_boolean_type: + title: Conversation Attribute (Boolean) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - boolean + conversation_attribute_datetime_type: + title: Conversation Attribute (Datetime) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - datetime + conversation_attribute_relationship_type: + title: Conversation Attribute (Relationship) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - relationship + reference: + type: object + description: Reference configuration for related objects. + properties: + type: + type: string + description: "The cardinality of the relationship: `one` or `many`." + enum: + - one + - many + example: many + object_type_id: + type: string + description: The ID of the related custom object type. + example: Test_Object + conversation_attribute_files_type: + title: Conversation Attribute (Files) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - files + conversation_attribute: + title: Conversation Attribute + x-tags: + - Conversations Attributes + description: "Conversation Attributes represent custom metadata fields for conversations. They support type-specific properties: strings (multiline), lists (options), and relationships (reference)." + discriminator: + propertyName: data_type + mapping: + string: "#/components/schemas/conversation_attribute_string_type" + integer: "#/components/schemas/conversation_attribute_integer_type" + list: "#/components/schemas/conversation_attribute_list_type" + decimal: "#/components/schemas/conversation_attribute_decimal_type" + boolean: "#/components/schemas/conversation_attribute_boolean_type" + datetime: "#/components/schemas/conversation_attribute_datetime_type" + relationship: "#/components/schemas/conversation_attribute_relationship_type" + files: "#/components/schemas/conversation_attribute_files_type" + oneOf: + - "$ref": "#/components/schemas/conversation_attribute_string_type" + - "$ref": "#/components/schemas/conversation_attribute_integer_type" + - "$ref": "#/components/schemas/conversation_attribute_list_type" + - "$ref": "#/components/schemas/conversation_attribute_decimal_type" + - "$ref": "#/components/schemas/conversation_attribute_boolean_type" + - "$ref": "#/components/schemas/conversation_attribute_datetime_type" + - "$ref": "#/components/schemas/conversation_attribute_relationship_type" + - "$ref": "#/components/schemas/conversation_attribute_files_type" + conversation_attribute_list: + title: Conversation Attribute List + type: object + description: A list of all conversation attributes belonging to a workspace. + properties: + type: + type: string + description: The type of the object. + enum: + - list + example: list + data: + type: array + description: A list of conversation attributes. + items: + "$ref": "#/components/schemas/conversation_attribute" + conversation_attribute_option: + title: Conversation Attribute Option + type: object + description: A single option on a list-type conversation attribute. + properties: + id: + type: string + description: The unique UUID identifier for this option. Use this value as `option_id` in the options management endpoints. + example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + label: + type: string + description: The display label for the option. + example: High + archived: + type: boolean + description: Whether this option is archived (soft-deleted). + example: false + create_conversation_attribute_option_request: + title: Create Conversation Attribute Option Request + type: object + description: Payload for adding a new option to a list-type conversation attribute. + required: + - label + properties: + label: + type: string + description: The label for the new option. + example: High + update_conversation_attribute_option_request: + title: Update Conversation Attribute Option Request + type: object + description: Payload for renaming a list option on a conversation attribute. + required: + - label + properties: + label: + type: string + description: The updated label for the option. + example: Renamed + create_conversation_attribute_request_base: + title: Create Conversation Attribute Request Base + type: object + required: + - name + - data_type + properties: + name: + type: string + description: Name of the attribute. + example: api_test_attr + description: + type: string + description: Readable description of the attribute. + example: Created via API test + data_type: + type: string + description: "The data type of the attribute. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files." + enum: + - string + - integer + - list + - decimal + - boolean + - datetime + - relationship + - files + example: string + required: + type: boolean + description: Whether this attribute is required. + example: false + visible_to_team_ids: + type: array + description: Team IDs that can see this attribute. Empty array means all teams. + items: + type: string + example: [] + create_conversation_attribute_string_request: + title: Create Conversation Attribute Request (String) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - string + multiline: + type: boolean + description: Whether this string attribute is multiline. + example: false + create_conversation_attribute_integer_request: + title: Create Conversation Attribute Request (Integer) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - integer + create_conversation_attribute_list_request: + title: Create Conversation Attribute Request (List) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - list + options: + type: array + description: Initial options for this list attribute. Each option must have a `label`. + items: + "$ref": "#/components/schemas/create_conversation_attribute_option_request" + create_conversation_attribute_decimal_request: + title: Create Conversation Attribute Request (Decimal) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - decimal + create_conversation_attribute_boolean_request: + title: Create Conversation Attribute Request (Boolean) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - boolean + create_conversation_attribute_datetime_request: + title: Create Conversation Attribute Request (Datetime) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - datetime + create_conversation_attribute_relationship_request: + title: Create Conversation Attribute Request (Relationship) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - relationship + reference: + type: object + description: Reference configuration for related objects. + required: + - type + properties: + type: + type: string + description: "The cardinality of the relationship: `one` or `many`." + enum: + - one + - many + object_type_id: + type: string + description: The ID of the related custom object type. + create_conversation_attribute_files_request: + title: Create Conversation Attribute Request (Files) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - files + create_conversation_attribute_request: + title: Create Conversation Attribute Request + description: Payload for creating a new conversation attribute. + discriminator: + propertyName: data_type + mapping: + string: "#/components/schemas/create_conversation_attribute_string_request" + integer: "#/components/schemas/create_conversation_attribute_integer_request" + list: "#/components/schemas/create_conversation_attribute_list_request" + decimal: "#/components/schemas/create_conversation_attribute_decimal_request" + boolean: "#/components/schemas/create_conversation_attribute_boolean_request" + datetime: "#/components/schemas/create_conversation_attribute_datetime_request" + relationship: "#/components/schemas/create_conversation_attribute_relationship_request" + files: "#/components/schemas/create_conversation_attribute_files_request" + oneOf: + - "$ref": "#/components/schemas/create_conversation_attribute_string_request" + - "$ref": "#/components/schemas/create_conversation_attribute_integer_request" + - "$ref": "#/components/schemas/create_conversation_attribute_list_request" + - "$ref": "#/components/schemas/create_conversation_attribute_decimal_request" + - "$ref": "#/components/schemas/create_conversation_attribute_boolean_request" + - "$ref": "#/components/schemas/create_conversation_attribute_datetime_request" + - "$ref": "#/components/schemas/create_conversation_attribute_relationship_request" + - "$ref": "#/components/schemas/create_conversation_attribute_files_request" + update_conversation_attribute_request: + title: Update Conversation Attribute Request + type: object + description: Payload for updating a conversation attribute. + properties: + name: + type: string + description: Name of the attribute. + example: api_test_renamed + description: + type: string + description: Readable description of the attribute. + example: Updated via API + multiline: + type: boolean + description: "(String data type only) Whether this string attribute is multiline." + example: false + required: + type: boolean + description: Whether this attribute is required. + example: false + visible_to_team_ids: + type: array + description: Team IDs that can see this attribute. Empty array means all teams. + items: + type: string + example: [] + reference: + type: object + description: "(Relationship data type only) Reference configuration for related objects." + required: + - type + properties: + type: + type: string + description: "The cardinality of the relationship: `one` or `many`." + enum: + - one + - many + object_type_id: + type: string + description: The ID of the related custom object type. data_event: title: Data Event type: object @@ -21501,6 +22720,11 @@ components: description: The unique identifier for the contact to merge into. Must be a user. example: 5ba682d23d7cf92bef87bfd4 + skip_duplicate_validation: + type: boolean + description: Set to `true` to merge two contacts that are not duplicates + (they share no matching email or phone). + example: true message: type: object title: Message @@ -22475,6 +23699,46 @@ components: type: string description: The name of the tag example: Test tag + tag_create_response: + title: Create or Update Tag Response + description: The response for creating or updating a tag, including the entities + that were tagged or untagged. + allOf: + - "$ref": "#/components/schemas/tag_basic" + - type: object + properties: + users: + type: array + nullable: true + description: The users that were tagged or untagged. + items: + type: object + properties: + id: + type: string + description: The Intercom ID of the user. + example: '6329e838deab40166d1a53f7' + tagged: + type: boolean + description: Whether the user was tagged (true) or untagged (false). + example: true + example: [] + companies: + type: array + nullable: true + description: The companies that were tagged or untagged. + items: + type: object + properties: + id: + type: string + description: The Intercom ID of the company. + example: '6329e838deab40166d1a5400' + tagged: + type: boolean + description: Whether the company was tagged (true) or untagged (false). + example: true + example: [] tag_company_request: description: You can tag a single company or a list of companies. type: object @@ -22698,13 +23962,13 @@ components: contacts: "$ref": "#/components/schemas/ticket_contacts" admin_assignee_id: - type: string - description: The id representing the admin assigned to the ticket. - example: '1295' + type: integer + description: The id representing the admin assigned to the ticket. If it's not assigned to an admin it will return 0. + example: 1295 team_assignee_id: - type: string - description: The id representing the team assigned to the ticket. - example: '1295' + type: integer + description: The id representing the team assigned to the ticket. If it's not assigned to a team it will return 0. + example: 1295 created_at: type: integer format: date-time @@ -23554,11 +24818,11 @@ components: (either where the Intercom Messenger was installed or when specified manually). example: 1571672154 owner_id: - type: integer + type: string nullable: true description: The id of an admin that has been assigned account ownership of the contact - example: 123 + example: "321" unsubscribed_from_emails: type: boolean nullable: true From ca8f95b4e4cbfb15feea3a5b7775f3dd6eb1b5d9 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 10:05:05 +0100 Subject: [PATCH 03/22] Graduate ticket non-breaking changes into v2.16 OpenAPI spec - Attachment files on admin ticket reply - Change ticket type endpoint - Link/unlink conversation to ticket endpoints - previous_ticket_state_id on ticket response - ticket_state_id on convert-conversation-to-ticket request Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 502 +++++++++++++++++++++++++ 1 file changed, 502 insertions(+) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index 90dbc364..e82b99b4 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -13982,6 +13982,292 @@ paths: summary: Tag not found value: admin_id: 991267983 + "/tickets/{ticket_id}/linked_conversations": + post: + summary: Link a conversation to a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_id + in: path + description: The unique identifier for the tracker ticket which is given + by Intercom. + example: '64619700005694' + required: true + schema: + type: string + tags: + - Tickets + operationId: linkConversationToTicket + description: | + Link a conversation to an existing tracker ticket. The conversation can be + a regular conversation or one that has been converted into a customer ticket. + + Use this when related conversations surface after a tracker ticket has + already been created. The ticket in the path must be a tracker ticket, and + `conversation_id` in the body is the conversation (or customer ticket) to + link to it. This returns the linked conversation. + + A tracker ticket can have up to 2,500 linked conversations; once that + limit is reached, further requests return `linked_conversation_limit_exceeded`. + + Requires the `write_tickets` OAuth scope. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: conversation + id: '204' + created_at: 1734537715 + updated_at: 1734537740 + source: + type: conversation + id: '403918350' + delivered_as: admin_initiated + subject: '' + body: "

Customer report

" + author: + type: admin + id: '991267645' + name: Ciaran176 Lee + email: admin176@email.com + attachments: [] + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1261bb69f9f2193bba7 + external_id: '70' + open: true + state: open + linked_objects: + type: list + total_count: 1 + has_more: false + data: + - type: ticket + id: '207' + category: Tracker + schema: + "$ref": "#/components/schemas/conversation" + '400': + description: Bad request + content: + application/json: + examples: + Not a tracker ticket: + value: + type: error.list + request_id: 4f2d9c1a-7b3e-4a6c-9d21-8e5f0c2b1a34 + errors: + - code: invalid_ticket_type + message: Only tracker tickets support linking conversations + Already linked to a tracker: + value: + type: error.list + request_id: 5a3e0d2b-8c4f-4b7d-ae32-9f6a1d3c2b45 + errors: + - code: already_linked_to_tracker + message: A conversation can only have one tracker ticket + Linked conversation limit exceeded: + value: + type: error.list + request_id: 6b4f1e3c-9d50-4c8e-bf43-0a7b2e4d3c56 + errors: + - code: linked_conversation_limit_exceeded + message: Ticket has reached the maximum number of conversations + that can be linked + Missing conversation_id: + value: + type: error.list + request_id: 7c5a2f4d-ae61-4d9f-c054-1b8c3f5e4d67 + errors: + - code: parameter_not_found + message: conversation_id not specified + schema: + "$ref": "#/components/schemas/error" + '404': + description: Not found + content: + application/json: + examples: + Ticket not found: + value: + type: error.list + request_id: 8d6b3a5e-bf72-4ea0-d165-2c9d4a6f5e78 + errors: + - code: ticket_not_found + message: Ticket not found + Conversation not found: + value: + type: error.list + request_id: 9e7c4b6f-c083-4fb1-e276-3d0e5b7a6f89 + errors: + - code: conversation_not_found + message: Conversation not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: af8d5c70-d194-40c2-f387-4e1f6c8b7091 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - conversation_id + properties: + conversation_id: + type: string + description: The unique identifier (given by Intercom) for the + conversation or customer ticket to link to the tracker ticket. + example: '204' + examples: + successful: + summary: Link a conversation to a tracker ticket + value: + conversation_id: '204' + "/tickets/{ticket_id}/linked_conversations/{id}": + delete: + summary: Unlink a conversation from a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_id + in: path + description: The unique identifier for the tracker ticket which is given + by Intercom. + example: '64619700005694' + required: true + schema: + type: string + - name: id + in: path + description: The unique identifier (given by Intercom) for the linked conversation + or customer ticket to unlink. + example: '204' + required: true + schema: + type: string + tags: + - Tickets + operationId: unlinkConversationFromTicket + description: | + Unlink a conversation (or converted customer ticket) from a tracker ticket + it is currently linked to. The ticket in the path must be a tracker ticket. + This returns the conversation that was unlinked. + + Requires the `write_tickets` OAuth scope. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: conversation + id: '204' + created_at: 1734537715 + updated_at: 1734537752 + source: + type: conversation + id: '403918350' + delivered_as: admin_initiated + subject: '' + body: "

Customer report

" + author: + type: admin + id: '991267645' + name: Ciaran176 Lee + email: admin176@email.com + attachments: [] + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1261bb69f9f2193bba7 + external_id: '70' + open: true + state: open + linked_objects: + type: list + total_count: 0 + has_more: false + data: [] + schema: + "$ref": "#/components/schemas/conversation" + '400': + description: Bad request + content: + application/json: + examples: + Not a tracker ticket: + value: + type: error.list + request_id: b09e6d81-e2a5-41d3-9498-5f2a7d9c8102 + errors: + - code: invalid_ticket_type + message: Only tracker tickets support unlinking conversations + schema: + "$ref": "#/components/schemas/error" + '404': + description: Not found + content: + application/json: + examples: + Ticket not found: + value: + type: error.list + request_id: c1af7e92-f3b6-42e4-8509-6a3b8e0d9213 + errors: + - code: ticket_not_found + message: Ticket not found + Conversation not linked: + value: + type: error.list + request_id: d2b08fa3-04c7-43f5-9610-7b4c9f1e0324 + errors: + - code: conversation_not_found + message: Conversation is not linked to this ticket + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e3c19fb4-150d-44a6-a721-8c5daf2f1435 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" "/tickets": post: summary: Create a ticket @@ -14745,6 +15031,179 @@ paths: message: Active subscription needed. schema: "$ref": "#/components/schemas/error" + "/tickets/{ticket_id}/change_type": + post: + summary: Change ticket type + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: ticket_id + in: path + required: true + description: The unique identifier for the ticket which is given by Intercom. + schema: + type: string + tags: + - Tickets + operationId: changeTicketType + description: You can change the type of a ticket. The new ticket type must + be in the same category as the current type. Attributes matching by name + and type are automatically transferred from the old type; values provided + in ticket_attributes override transferred values. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: ticket + id: '494' + ticket_id: '53' + ticket_attributes: + _default_title_: example + _default_description_: having a problem + ticket_state: submitted + ticket_type: + type: ticket_type + id: '1234' + name: my-new-ticket-type + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id664_that_should_be_at_least_ + archived: false + created_at: 1719493065 + updated_at: 1719493065 + is_internal: false + ticket_type_attributes: + type: list + data: [] + category: Back-office + contacts: + type: contact.list + contacts: + - type: contact + id: 667d61c88a68186f43bafe93 + external_id: '71' + admin_assignee_id: 0 + team_assignee_id: 0 + created_at: 1719493065 + updated_at: 1719493068 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '136' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1719493065 + updated_at: 1719493065 + author: + id: '991267920' + type: bot + name: Operator + email: operator+this_is_an_id664_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + total_count: 1 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Back-office + is_shared: false + ticket_state_internal_label: Submitted + ticket_state_external_label: Submitted + schema: + "$ref": "#/components/schemas/ticket" + '400': + description: Bad request + content: + application/json: + examples: + Missing ticket_type_id: + value: + type: error.list + request_id: a35b00e4-97b2-4b5d-a6f9-e82c4d8f7e12 + errors: + - code: parameter_not_found + message: ticket_type_id is a required parameter + Missing ticket_state_id: + value: + type: error.list + request_id: b46c11f5-08c3-5c6e-b7a3-f93d5e8f9f23 + errors: + - code: parameter_not_found + message: ticket_state_id is a required parameter + Same ticket type: + value: + type: error.list + request_id: f90a55j9-42g7-9g0i-f1e7-jd7h9i2j3j67 + errors: + - code: parameter_invalid + message: Cannot change to the same ticket type + Ticket state not in new ticket type: + value: + type: error.list + request_id: g01b66k0-53h8-0h1j-g2f8-ke8i0j3k4k78 + errors: + - code: parameter_invalid + message: Ticket custom state doesn't belong to the new ticket type + Unknown ticket attribute: + value: + type: error.list + request_id: h12c77l1-64i9-1i2k-h3g9-lf9j1k4l5l89 + errors: + - code: parameter_invalid + message: 'Extra attributes provided that are not found on ticket type: + Priority' + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c57d22g6-19d4-6d7f-c8b4-ga4e6f9g0g34 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '404': + description: Ticket not found + content: + application/json: + examples: + Ticket not found: + value: + type: error.list + request_id: e79f44i8-31f6-8f9h-e0d6-ic6g8h1i2i56 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/change_ticket_type_request" + examples: + successful_response: + summary: Successful response + value: + ticket_type_id: '1234' + ticket_state_id: '5678' "/tickets/search": post: summary: Search tickets @@ -16321,6 +16780,14 @@ components: type: string format: uri maxItems: 10 + attachment_files: + type: array + description: A list of files that will be added as attachments. You can + include up to 10 files. If both attachment_files and attachment_urls are + provided, attachment_files takes precedence. + items: + "$ref": "#/components/schemas/conversation_attachment_files" + maxItems: 10 cross_post: type: boolean description: If set to true, the note will be cross-posted to all linked @@ -17289,6 +17756,31 @@ components: description: A list of away status reason objects. items: "$ref": "#/components/schemas/away_status_reason" + change_ticket_type_request: + title: Change Ticket Type Request + description: You can change the type of a Ticket + type: object + properties: + ticket_type_id: + type: string + description: The ID of the new ticket type. Must be in the same category + as the current type. + example: '1234' + ticket_state_id: + type: string + description: The ID of the ticket state for the new ticket type. + example: '5678' + ticket_attributes: + type: object + description: The attributes to set on the ticket for the new type. Attributes + matching by name and type are transferred automatically from the old type; + values provided here override the transferred values. + example: + _default_title_: example + _default_description_: having a problem + required: + - ticket_type_id + - ticket_state_id close_conversation_request: title: Close Conversation Request type: object @@ -19256,6 +19748,9 @@ components: description: The ID of the type of ticket you want to convert the conversation to example: '1234' + ticket_state_id: + type: string + description: The ID of the ticket state associated with the ticket type. attributes: "$ref": "#/components/schemas/ticket_request_custom_attributes" required: @@ -23998,6 +24493,13 @@ components: type: boolean description: Whether or not the ticket is shared with the customer. example: true + previous_ticket_state_id: + type: string + nullable: true + description: The ID of the previous ticket state from the most recent state + change. Returns null if no state change history exists. Useful for tracking + state transitions for reporting and compliance. + example: '7493' ticket_deleted: title: Ticket Deleted type: object From 08a0ce7874f770075045d07c78a0e1c61daf4f3d Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 10:16:17 +0100 Subject: [PATCH 04/22] Graduate content & audiences non-breaking changes into v2.16 OpenAPI spec - Content Snippets API (with agent-availability, audience_ids, markdown fields) - Content Search API - Content bulk actions API - Content tagging endpoints (articles, internal articles, content snippets) - Audiences API - Data Connectors API Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 19074 ++++++++++++++--------- 1 file changed, 11555 insertions(+), 7519 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index e82b99b4..ce041c5d 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -1157,6 +1157,197 @@ paths: body: Body of the Article state: published "/articles/{article_id}": + "/articles/{article_id}/tags": + post: + summary: Add a tag to an article + tags: + - Articles + - Tags + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: article_id + in: path + required: true + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + operationId: attachTagToArticle + description: | + Apply an existing tag to an article. Returns the tag that was applied. + + The tag must already exist in the workspace (create tags with the Tags API), + and the authenticating teammate must have the `manage_knowledge_base_content` + permission. + + Requires the `read_write_articles_scope` OAuth scope. + requestBody: + content: + application/json: + schema: + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier of the tag to apply, as given by + Intercom. + example: '7522907' + admin_id: + type: string + nullable: true + description: Optional id of the teammate to attribute the tagging to. + Defaults to the authenticating teammate. Does not affect authorization. + example: '1234' + examples: + successful: + summary: Apply a tag + value: + id: '7522907' + responses: + '200': + description: Tag applied + content: + application/json: + examples: + Tag applied: + value: + type: tag + id: '7522907' + name: Independent + applied_at: 1663597223 + applied_by: + type: admin + id: '1234' + schema: + "$ref": "#/components/schemas/tag" + '403': + description: Forbidden + content: + application/json: + examples: + Forbidden: + value: + type: error.list + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + errors: + - code: forbidden + message: Not authorized to manage knowledge base content + schema: + "$ref": "#/components/schemas/error" + '404': + description: Article or tag not found + content: + application/json: + examples: + Article not found: + value: + type: error.list + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 + errors: + - code: article_not_found + message: Article not found + Tag not found: + value: + type: error.list + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + errors: + - code: tag_not_found + message: Tag not found + schema: + "$ref": "#/components/schemas/error" + '401': + "$ref": "#/components/responses/Unauthorized" + "/articles/{article_id}/tags/{id}": + delete: + summary: Remove a tag from an article + tags: + - Articles + - Tags + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: article_id + in: path + required: true + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + - name: id + in: path + required: true + description: The unique identifier of the tag to remove, as given by Intercom. + example: '7522907' + schema: + type: string + operationId: detachTagFromArticle + description: | + Remove a tag from an article. Returns the tag that was removed, with null + `applied_at` and `applied_by`. + + The authenticating teammate must have the `manage_knowledge_base_content` + permission. + + Requires the `read_write_articles_scope` OAuth scope. + responses: + '200': + description: Tag removed + content: + application/json: + examples: + Tag removed: + value: + type: tag + id: '7522907' + name: Independent + applied_at: null + applied_by: null + schema: + "$ref": "#/components/schemas/tag" + '403': + description: Forbidden + content: + application/json: + examples: + Forbidden: + value: + type: error.list + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + errors: + - code: forbidden + message: Not authorized to manage knowledge base content + schema: + "$ref": "#/components/schemas/error" + '404': + description: Article or tag not found + content: + application/json: + examples: + Article not found: + value: + type: error.list + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 + errors: + - code: article_not_found + message: Article not found + Tag not found: + value: + type: error.list + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + errors: + - code: tag_not_found + message: Tag not found + schema: + "$ref": "#/components/schemas/error" + '401': + "$ref": "#/components/responses/Unauthorized" get: summary: Retrieve an article parameters: @@ -1487,112 +1678,508 @@ paths: schema: "$ref": "#/components/schemas/error" "/away_status_reasons": + "/audiences": get: - summary: List all away status reasons + summary: List all audiences parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: page + in: query + required: false + description: The page of results to fetch. Defaults to first page. + example: 1 + schema: + type: integer + - name: per_page + in: query + required: false + description: The number of results to return per page. Defaults to 50. Maximum + is 50. + example: 50 + schema: + type: integer + maximum: 50 tags: - - Away Status Reasons - operationId: listAwayStatusReasons - description: "Returns a list of all away status reasons configured for the workspace, including deleted ones." + - Audiences + operationId: listAudiences + description: You can fetch a list of all audiences for the workspace. responses: '200': description: Successful response content: application/json: + examples: + Successful response: + value: + type: list + data: + - type: audience + id: '123' + name: VIP Customers + predicates: + - attribute: company.name + type: string + comparison: contains + value: Acme + role_predicates: + - attribute: role + type: role + comparison: eq + value: user + created_at: 1717200000 + updated_at: 1717200000 + - type: audience + id: '456' + name: Enterprise Accounts + predicates: + - attribute: custom_attributes.plan + type: string + comparison: eq + value: enterprise + role_predicates: + - attribute: role + type: role + comparison: eq + value: user + created_at: 1717200000 + updated_at: 1717200000 + total_count: 2 + page: 1 + per_page: 50 + total_pages: 1 schema: - "$ref": "#/components/schemas/away_status_reason_list" + "$ref": "#/components/schemas/audience_list" '401': - "$ref": "#/components/responses/Unauthorized" - "/export/reporting_data/enqueue": + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b1939528-98f0-4a63-a442-2cc9203fc8c7 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" post: - summary: Enqueue a new reporting data export job - description: For the conversation dataset, from this version onward this export returns all conversations, including those that never received a user reply. Earlier versions return only conversations that received at least one user reply. Other datasets are unaffected. - tags: [Reporting Data Export] + summary: Create an audience parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + tags: + - Audiences + operationId: createAudience + description: You can create a new audience by making a POST request to `https://api.intercom.io/audiences`. requestBody: required: true content: application/json: schema: - type: object - required: [dataset_id, attribute_ids, start_time, end_time] - properties: - dataset_id: - type: string - example: conversation - attribute_ids: - type: array - items: + "$ref": "#/components/schemas/create_audience_request" + examples: + audience_created: + summary: Audience created + value: + name: VIP Customers + predicates: + - attribute: company.name type: string - example: [conversation_id, conversation_started_at] - start_time: - type: integer - format: int64 - example: 1717490000 - end_time: - type: integer - format: int64 - example: 1717510000 + comparison: contains + value: Acme + role_predicates: + - attribute: role + type: role + comparison: eq + value: user responses: - '200': - description: Job enqueued successfully - content: - application/json: - schema: - type: object - properties: - job_identifier: - type: string - example: job1 - status: - type: string - example: pending - download_url: - type: string - download_expires_at: - type: string - '400': - description: Bad request (e.g. validation errors) + '201': + description: Audience created + content: + application/json: + examples: + Audience created: + value: + type: audience + id: '789' + name: VIP Customers + predicates: + - attribute: company.name + type: string + comparison: contains + value: Acme + role_predicates: + - attribute: role + type: role + comparison: eq + value: user + created_at: 1717200000 + updated_at: 1717200000 + schema: + "$ref": "#/components/schemas/audience" + '422': + description: Validation error content: application/json: examples: - No dataset_id: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: bad_request - message: "'dataset_id' is a required parameter" - Invalid dataset_id: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: bad_request - message: imaginary is not a valid dataset_id - No attribute_ids: + Validation error: value: type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + request_id: a3e6b0c1-4f2d-4e8a-9c7b-1d2e3f4a5b6c errors: - - code: bad_request - message: "'attribute_ids' is a required parameter" - Empty attribute_ids: + - code: validation_error + message: Name is required + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: value: type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + request_id: c1d2e3f4-5a6b-7c8d-9e0f-1a2b3c4d5e6f errors: - - code: bad_request - message: attribute_ids must contain at least one attribute_id - Non array attribute_ids: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/audiences/{id}": + get: + summary: Retrieve an audience + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the audience. + example: '123' + schema: + type: string + tags: + - Audiences + operationId: retrieveAudience + description: You can fetch the details of a single audience by making a GET request + to `https://api.intercom.io/audiences/{id}`. + responses: + '200': + description: Audience found + content: + application/json: + examples: + Audience found: + value: + type: audience + id: '123' + name: VIP Customers + predicates: + - attribute: company.name + type: string + comparison: contains + value: Acme + role_predicates: + - attribute: role + type: role + comparison: eq + value: user + created_at: 1717200000 + updated_at: 1717200000 + schema: + "$ref": "#/components/schemas/audience" + '404': + description: Audience not found + content: + application/json: + examples: + Audience not found: + value: + type: error.list + request_id: d5e6f7a8-1b2c-3d4e-5f6a-7b8c9d0e1f2a + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c4d5e6f7-8a9b-0c1d-2e3f-4a5b6c7d8e9f + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update an audience + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the audience. + example: '123' + schema: + type: string + tags: + - Audiences + operationId: updateAudience + description: You can update the details of a single audience by making a PUT request + to `https://api.intercom.io/audiences/{id}`. + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_audience_request" + examples: + audience_updated: + summary: Audience updated + value: + name: Enterprise Accounts + predicates: + - attribute: custom_attributes.plan + type: string + comparison: eq + value: enterprise + responses: + '200': + description: Audience updated + content: + application/json: + examples: + Audience updated: + value: + type: audience + id: '123' + name: Enterprise Accounts + predicates: + - attribute: custom_attributes.plan + type: string + comparison: eq + value: enterprise + role_predicates: + - attribute: role + type: role + comparison: eq + value: user + created_at: 1717200000 + updated_at: 1717200100 + schema: + "$ref": "#/components/schemas/audience" + '404': + description: Audience not found + content: + application/json: + examples: + Audience not found: + value: + type: error.list + request_id: e7f8a9b0-1c2d-3e4f-5a6b-7c8d9e0f1a2b + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '422': + description: Validation error + content: + application/json: + examples: + Validation error: + value: + type: error.list + request_id: f0a1b2c3-4d5e-6f7a-8b9c-0d1e2f3a4b5c + errors: + - code: validation_error + message: Name must not be blank + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: f8a9b0c1-2d3e-4f5a-6b7c-8d9e0f1a2b3c + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + delete: + summary: Delete an audience + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the audience. + example: '123' + schema: + type: string + tags: + - Audiences + operationId: deleteAudience + description: You can delete a single audience by making a DELETE request to `https://api.intercom.io/audiences/{id}`. + responses: + '204': + description: Audience deleted + '404': + description: Audience not found + content: + application/json: + examples: + Audience not found: + value: + type: error.list + request_id: a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + get: + summary: List all away status reasons + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Away Status Reasons + operationId: listAwayStatusReasons + description: "Returns a list of all away status reasons configured for the workspace, including deleted ones." + responses: + '200': + description: Successful response + content: + application/json: + schema: + "$ref": "#/components/schemas/away_status_reason_list" + '401': + "$ref": "#/components/responses/Unauthorized" + "/export/reporting_data/enqueue": + post: + summary: Enqueue a new reporting data export job + description: For the conversation dataset, from this version onward this export returns all conversations, including those that never received a user reply. Earlier versions return only conversations that received at least one user reply. Other datasets are unaffected. + tags: [Reporting Data Export] + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + requestBody: + required: true + content: + application/json: + schema: + type: object + required: [dataset_id, attribute_ids, start_time, end_time] + properties: + dataset_id: + type: string + example: conversation + attribute_ids: + type: array + items: + type: string + example: [conversation_id, conversation_started_at] + start_time: + type: integer + format: int64 + example: 1717490000 + end_time: + type: integer + format: int64 + example: 1717510000 + responses: + '200': + description: Job enqueued successfully + content: + application/json: + schema: + type: object + properties: + job_identifier: + type: string + example: job1 + status: + type: string + example: pending + download_url: + type: string + download_expires_at: + type: string + '400': + description: Bad request (e.g. validation errors) + content: + application/json: + examples: + No dataset_id: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: "'dataset_id' is a required parameter" + Invalid dataset_id: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: imaginary is not a valid dataset_id + No attribute_ids: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: "'attribute_ids' is a required parameter" + Empty attribute_ids: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: attribute_ids must contain at least one attribute_id + Non array attribute_ids: value: type: error.list request_id: b68959ea-6328-4f70-83cb-e7913dba1542 @@ -2741,8 +3328,201 @@ paths: title: Thanks for everything body: Body of the Internal Article "/internal_articles/{internal_article_id}": - get: - summary: Retrieve an internal article + "/internal_articles/{internal_article_id}/tags": + post: + summary: Add a tag to an internal article + tags: + - Internal Articles + - Tags + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: internal_article_id + in: path + required: true + description: The unique identifier for the internal article which is given by + Intercom. + example: 123 + schema: + type: integer + operationId: attachTagToInternalArticle + description: | + Apply an existing tag to an internal article. Returns the tag that was applied. + + The tag must already exist in the workspace (create tags with the Tags API), + and the authenticating teammate must have the `manage_knowledge_base_content` + permission. + + Requires the `read_write_articles_scope` OAuth scope. + requestBody: + content: + application/json: + schema: + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier of the tag to apply, as given by + Intercom. + example: '7522907' + admin_id: + type: string + nullable: true + description: Optional id of the teammate to attribute the tagging to. + Defaults to the authenticating teammate. Does not affect authorization. + example: '1234' + examples: + successful: + summary: Apply a tag + value: + id: '7522907' + responses: + '200': + description: Tag applied + content: + application/json: + examples: + Tag applied: + value: + type: tag + id: '7522907' + name: Independent + applied_at: 1663597223 + applied_by: + type: admin + id: '1234' + schema: + "$ref": "#/components/schemas/tag" + '403': + description: Forbidden + content: + application/json: + examples: + Forbidden: + value: + type: error.list + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + errors: + - code: forbidden + message: Not authorized to manage knowledge base content + schema: + "$ref": "#/components/schemas/error" + '404': + description: Internal article or tag not found + content: + application/json: + examples: + Internal article not found: + value: + type: error.list + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 + errors: + - code: internal_article_not_found + message: Internal article not found + Tag not found: + value: + type: error.list + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + errors: + - code: tag_not_found + message: Tag not found + schema: + "$ref": "#/components/schemas/error" + '401': + "$ref": "#/components/responses/Unauthorized" + "/internal_articles/{internal_article_id}/tags/{id}": + delete: + summary: Remove a tag from an internal article + tags: + - Internal Articles + - Tags + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: internal_article_id + in: path + required: true + description: The unique identifier for the internal article which is given by + Intercom. + example: 123 + schema: + type: integer + - name: id + in: path + required: true + description: The unique identifier of the tag to remove, as given by Intercom. + example: '7522907' + schema: + type: string + operationId: detachTagFromInternalArticle + description: | + Remove a tag from an internal article. Returns the tag that was removed, with + null `applied_at` and `applied_by`. + + The authenticating teammate must have the `manage_knowledge_base_content` + permission. + + Requires the `read_write_articles_scope` OAuth scope. + responses: + '200': + description: Tag removed + content: + application/json: + examples: + Tag removed: + value: + type: tag + id: '7522907' + name: Independent + applied_at: null + applied_by: null + schema: + "$ref": "#/components/schemas/tag" + '403': + description: Forbidden + content: + application/json: + examples: + Forbidden: + value: + type: error.list + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + errors: + - code: forbidden + message: Not authorized to manage knowledge base content + schema: + "$ref": "#/components/schemas/error" + '404': + description: Internal article or tag not found + content: + application/json: + examples: + Internal article not found: + value: + type: error.list + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 + errors: + - code: internal_article_not_found + message: Internal article not found + Tag not found: + value: + type: error.list + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + errors: + - code: tag_not_found + message: Tag not found + schema: + "$ref": "#/components/schemas/error" + '401': + "$ref": "#/components/responses/Unauthorized" + get: + summary: Retrieve an internal article parameters: - name: Intercom-Version in: header @@ -6236,58 +7016,50 @@ paths: application/json: schema: "$ref": "#/components/schemas/contact_blocked" - "/conversations/{conversation_id}/tags": + "/content/bulk_actions": post: - summary: Add tag to a conversation + summary: Run a bulk action on Knowledge Hub content parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: conversation_id - in: path - description: conversation_id - example: '64619700005694' - required: true - schema: - type: string tags: - - Tags - - Conversations - operationId: attachTagToConversation - description: You can tag a specific conversation. This will return a tag object - for the tag that was added to the conversation. + - Content + operationId: bulkContentActions + description: | + Asynchronously run a bulk action over up to 1,000 Knowledge Hub content items. + + Six actions are supported: + * `publish` and `unpublish` — apply to `article_content` only. + * `delete` — permanently delete content (excludes synced sources and `external_content`). + * `set_availability` — toggle Fin AI Agent, Copilot, and Sales Agent availability flags. + * `set_audience` — manage segment membership on content. + * `update_tags` — apply and/or remove existing tags on content. Unlike the other + actions, `update_tags` addresses articles by the parent `article` id, not + `article_content`. Tags must already exist and not be archived; supply at least one of + `add_tag_ids` / `remove_tag_ids`. + + The endpoint validates the request, enqueues background work, and returns 202 with a + placeholder envelope. Items whose `type` is not in the action's allowlist are silently + dropped before processing. Articles imported from synced sources (Confluence, Notion, + Zendesk, Salesforce Knowledge, etc.) are silently skipped on `delete` — they can only be + removed by disconnecting the underlying import source. + + Requires the `write_content` OAuth scope. responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: tag - id: '86' - name: Manual tag - applied_at: 1663597223 - applied_by: - type: admin - id: '456' - schema: - "$ref": "#/components/schemas/tag" - '404': - description: Conversation not found + '202': + description: Accepted — work has been enqueued content: application/json: examples: - Conversation not found: + Queued: + summary: Queued value: - type: error.list - request_id: c6e8c74f-a354-4dfd-a5be-6061d2d26341 - errors: - - code: not_found - message: Conversation not found + type: content_bulk_action + status: queued schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/content_bulk_action_response" '401': description: Unauthorized content: @@ -6296,925 +7068,916 @@ paths: Unauthorized: value: type: error.list - request_id: 617bb25d-4dea-4a68-ae74-2fb8f4e87b39 + request_id: 2e760b85-9020-471b-89dc-f579ec8a0104 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + '403': + description: Forbidden — token is missing the `write_content` OAuth scope + content: + application/json: + schema: + "$ref": "#/components/schemas/error" + '422': + description: Invalid action, content_ids, or action-specific parameters + content: + application/json: + schema: + "$ref": "#/components/schemas/error" requestBody: + required: true content: application/json: schema: - type: object - required: - - id - - admin_id - properties: - id: - type: string - description: The unique identifier for the tag which is given by - Intercom - example: '7522907' - admin_id: - type: string - description: The unique identifier for the admin which is given - by Intercom. - example: '780' + "$ref": "#/components/schemas/content_bulk_action_request" examples: - successful: - summary: successful + publish: + summary: Publish articles value: - id: 86 - admin_id: 991267618 - conversation_not_found: - summary: Conversation not found + action: publish + content_ids: + - type: article_content + id: '12345678' + - type: article_content + id: '12345679' + unpublish: + summary: Unpublish articles value: - id: 87 - admin_id: 991267620 - "/conversations/{conversation_id}/tags/{tag_id}": - delete: - summary: Remove tag from a conversation + action: unpublish + content_ids: + - type: article_content + id: '12345678' + delete: + summary: Delete content across types + value: + action: delete + content_ids: + - type: article_content + id: '12345678' + - type: internal_article + id: '12345679' + - type: content_snippet + id: '12345680' + set_availability: + summary: Toggle Fin AI Agent on, Copilot off + value: + action: set_availability + content_ids: + - type: article_content + id: '12345678' + availability: + ai_agent: true + copilot: false + set_audience: + summary: Add and remove segments + value: + action: set_audience + content_ids: + - type: article_content + id: '12345678' + audience: + add_segment_ids: + - 100 + remove_segment_ids: + - 200 + update_tags: + summary: Apply and remove tags on an article + value: + action: update_tags + content_ids: + - type: article + id: '12345678' + tags: + add_tag_ids: + - 100 + remove_tag_ids: + - 200 + "/content/search": + get: + summary: Search knowledge base contents parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: conversation_id - in: path - description: conversation_id - example: '64619700005694' - required: true + - name: query + in: query + required: false + description: A free-text search term matched against the title and body of + each content item. When omitted, returns the most recent content items. + example: billing schema: type: string - - name: tag_id - in: path - description: tag_id - example: '7522907' - required: true + maxLength: 500 + - name: page + in: query + required: false + description: The page number to fetch. Defaults to 1. Values below 1 are + clamped to 1. + example: 1 schema: - type: string - tags: - - Tags - - Conversations - operationId: detachTagFromConversation - description: You can remove tag from a specific conversation. This will return - a tag object for the tag that was removed from the conversation. - responses: - '200': - description: successful + type: integer + default: 1 + minimum: 1 + - name: per_page + in: query + required: false + description: Number of results per page. Defaults to 10. Maximum 50. + example: 10 + schema: + type: integer + default: 10 + minimum: 1 + maximum: 50 + - name: states + in: query + required: false + description: Filter by publication state. Accepts a comma-separated list + or repeated params. + example: published,draft + schema: + type: array + items: + type: string + enum: + - published + - draft + style: form + explode: false + - name: locales + in: query + required: false + description: Filter by locale codes (e.g. `en`, `fr`, `de`). Accepts a + comma-separated list or repeated params. + example: en,fr + schema: + type: array + items: + type: string + style: form + explode: false + - name: tag_ids + in: query + required: false + description: Filter by tag IDs. Pairs with `tag_operator` to control match + semantics. Accepts a comma-separated list or repeated params. + example: 1,2,3 + schema: + type: array + items: + type: integer + style: form + explode: false + - name: tag_operator + in: query + required: false + description: Match operator paired with `tag_ids`. `IN` returns content + matching any of the given tags; `NIN` excludes content matching any + of them. + example: IN + schema: + type: string + enum: + - IN + - NIN + - name: any_tag_ids + in: query + required: false + description: Filter by tag IDs using OR semantics — returns content + matching any of the given tags. Alternative to `tag_ids` + `tag_operator`. + Accepts a comma-separated list or repeated params. + example: 1,2,3 + schema: + type: array + items: + type: integer + style: form + explode: false + - name: folder_ids + in: query + required: false + description: Filter by folder IDs. Must be sent together with + `folder_entity_type`. Accepts a comma-separated list or repeated params. + example: 10,20 + schema: + type: array + items: + type: integer + style: form + explode: false + - name: folder_entity_type + in: query + required: false + description: Required when `folder_ids` is provided. Identifies the entity + type the folder IDs refer to. + example: folder + schema: + type: string + enum: + - folder + - name: content_types + in: query + required: false + description: Restrict the search to specific content types. When provided, + this REPLACES the default content type set rather than filtering on top + of it. Accepts a comma-separated list or repeated params. + example: article,snippet + schema: + type: array + items: + type: string + enum: + - snippet + - external_content + - file_source_content + - internal_article + - article + style: form + explode: false + - name: copilot_state + in: query + required: false + description: Filter by whether the content is enabled for Copilot. + example: 'on' + schema: + type: string + enum: + - 'on' + - 'off' + - name: fin_service_state + in: query + required: false + description: Filter by whether the content is enabled for Fin AI Agent + (customer-facing service). + example: 'on' + schema: + type: string + enum: + - 'on' + - 'off' + - name: fin_sales_state + in: query + required: false + description: Filter by whether the content is enabled for Fin Sales Agent. + example: 'on' + schema: + type: string + enum: + - 'on' + - 'off' + - name: created_by_ids + in: query + required: false + description: Filter by the admin IDs that created the content. Accepts a + comma-separated list or repeated params. + example: 991267464,991267465 + schema: + type: array + items: + type: integer + style: form + explode: false + - name: last_updated_by_ids + in: query + required: false + description: Filter by the admin IDs that last updated the content. + Accepts a comma-separated list or repeated params. + example: 991267464,991267465 + schema: + type: array + items: + type: integer + style: form + explode: false + - name: created_at_after + in: query + required: false + description: Return content created at or after this time. Unix epoch + seconds. + example: 1677253093 + schema: + type: integer + - name: created_at_before + in: query + required: false + description: Return content created at or before this time. Unix epoch + seconds. + example: 1677861493 + schema: + type: integer + - name: updated_at_after + in: query + required: false + description: Return content last updated at or after this time. Unix + epoch seconds. + example: 1677253093 + schema: + type: integer + - name: updated_at_before + in: query + required: false + description: Return content last updated at or before this time. Unix + epoch seconds. + example: 1677861493 + schema: + type: integer + tags: + - Content + operationId: searchContent + description: | + Search the knowledge base contents — articles, snippets, external pages, uploaded files, and internal articles — using a keyword query. + + Each result row has a `type` discriminator. Most types (`content_snippet`, `external_content`, `file_source_content`, `internal_article`) return a flat `{ type, id, title }` shape. Help center articles return a nested shape with a `contents[]` array, one entry per locale. + + Requires the `read_content` OAuth scope. + responses: + '200': + description: Search successful content: application/json: examples: - successful: + Search successful: value: - type: tag - id: '89' - name: Manual tag - applied_at: 1663597223 - applied_by: - type: admin + type: list + total_count: 5 + pages: + type: pages + page: 1 + per_page: 10 + total_pages: 1 + next: + prev: + data: + - type: content_snippet + id: '123' + title: Billing FAQ + - type: external_content id: '456' + title: How to reset your password + - type: file_source_content + id: '789' + title: billing-guide.pdf + - type: internal_article + id: '012' + title: 'Internal SOP: Refunds' + - type: article + id: '345' + title: Billing FAQ + contents: + - type: article_content + id: '678' + title: Billing FAQ + locale: en + - type: article_content + id: '910' + title: Facturation FAQ + locale: fr schema: - "$ref": "#/components/schemas/tag" - '404': - description: Tag not found + "$ref": "#/components/schemas/content_search_response" + '401': + $ref: "#/components/responses/Unauthorized" + '422': + $ref: "#/components/responses/ValidationError" + "/content_snippets": + get: + summary: List all content snippets + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: page + in: query + required: false + description: The page of results to fetch. + schema: + type: integer + example: 1 + - name: per_page + in: query + required: false + description: The number of results to return per page. Max value of 50. + schema: + type: integer + example: 20 + tags: + - Content Snippets + operationId: listContentSnippets + description: You can fetch a list of all content snippets for a workspace. + responses: + '200': + description: Successful response content: application/json: examples: - Conversation not found: + Successful response: value: - type: error.list - request_id: 84db22c5-0fef-465a-a909-2643d8a22c69 - errors: - - code: not_found - message: Conversation not found - Tag not found: + type: list + data: + - type: content_snippet + id: '123' + title: How to reset your password + locale: en + json_blocks: + - type: paragraph + text: Navigate to Settings > Security > Reset password. + body_markdown: "# How to reset your password\n\nNavigate to Settings > Security > Reset password.\n" + chatbot_availability: 1 + copilot_availability: 1 + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + created_at: 1663597223 + updated_at: 1663597223 + audience_ids: + - 1 + - 2 + total_count: 1 + page: 1 + per_page: 50 + total_pages: 1 + schema: + "$ref": "#/components/schemas/content_snippet_list" + post: + summary: Create a content snippet + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Content Snippets + operationId: createContentSnippet + description: You can create a new content snippet. + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/content_snippet_create_request" + examples: + Create a content snippet: + value: + title: How to reset your password + json_blocks: + - type: paragraph + text: Navigate to Settings > Security > Reset password. + locale: en + audience_ids: + - 1 + - 2 + responses: + '201': + description: Content snippet created + content: + application/json: + examples: + Content snippet created: + value: + type: content_snippet + id: '456' + title: How to reset your password + locale: en + json_blocks: + - type: paragraph + text: Navigate to Settings > Security > Reset password. + body_markdown: "# How to reset your password\n\nNavigate to Settings > Security > Reset password.\n" + chatbot_availability: 1 + copilot_availability: 1 + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + created_at: 1663597223 + updated_at: 1663597223 + audience_ids: + - 1 + - 2 + schema: + "$ref": "#/components/schemas/content_snippet" + '404': + description: Unknown audience IDs + content: + application/json: + examples: + Unknown audience IDs: value: type: error.list - request_id: 1fe3e9ec-6a5b-4abc-b51c-a515f77d9577 errors: - - code: tag_not_found - message: Tag not found + - code: parameter_invalid + message: 'audience_ids contains unknown audience IDs: 999' schema: "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '422': + description: Validation error content: application/json: examples: - Unauthorized: + Validation error: value: type: error.list - request_id: df73b7b4-2352-44fd-8d14-4ea8536ad138 errors: - - code: unauthorized - message: Access Token Invalid + - code: validation_error + message: The language is not currently supported for Fin schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - type: object - required: - - admin_id - properties: - admin_id: - type: string - description: The unique identifier for the admin which is given - by Intercom. - example: '123' - examples: - successful: - summary: successful - value: - admin_id: 991267622 - conversation_not_found: - summary: Conversation not found - value: - admin_id: 991267624 - tag_not_found: - summary: Tag not found - value: - admin_id: 991267625 - "/conversations": + "/content_snippets/{id}": get: - summary: List all conversations + summary: Retrieve a content snippet parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: per_page - in: query - schema: - type: integer - default: 20 - maximum: 150 - required: false - description: How many results per page - - name: starting_after - in: query - required: false - description: String used to get the next page of conversations. + - name: id + in: path + required: true + description: The unique identifier for the content snippet. schema: type: string + example: '123' tags: - - Conversations - operationId: listConversations - description: | - 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. - {% admonition type="warning" name="Pagination" %} - You can use pagination to limit the number of results returned. The default is `20` results per page. - See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#pagination-for-list-apis) for more details on how to use the `starting_after` param. - {% /admonition %} + - Content Snippets + operationId: getContentSnippet + description: You can fetch a single content snippet by its id. responses: '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: conversation.list - pages: - type: pages - page: 1 - per_page: 20 - total_pages: 1 - total_count: 1 - conversations: - - type: conversation - id: '471' - created_at: 1734537460 - updated_at: 1734537460 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918320' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267628' - name: Ciaran166 Lee - email: admin166@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f0f31bb69f9f2193bb8b - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_agent: - ai_agent_participated: false - schema: - "$ref": "#/components/schemas/conversation_list" - '401': - description: Unauthorized + description: Successful response content: application/json: examples: - Unauthorized: + Successful response: value: - type: error.list - request_id: b14d75ab-7d26-4191-b33f-77ca0a4d4ede - errors: - - code: unauthorized - message: Access Token Invalid + type: content_snippet + id: '123' + title: How to reset your password + locale: en + json_blocks: + - type: paragraph + text: Navigate to Settings > Security > Reset password. + body_markdown: "# How to reset your password\n\nNavigate to Settings > Security > Reset password.\n" + chatbot_availability: 1 + copilot_availability: 1 + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + created_at: 1663597223 + updated_at: 1663597223 + audience_ids: + - 1 + - 2 schema: - "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + "$ref": "#/components/schemas/content_snippet" + '404': + description: Content snippet not found content: application/json: examples: - API plan restricted: + Content snippet not found: value: type: error.list - request_id: 591a0c2f-78b3-41bb-bfa7-f1fae15107b9 errors: - - code: api_plan_restricted - message: Active subscription needed. + - code: not_found + message: Content snippet not found schema: "$ref": "#/components/schemas/error" - post: - summary: Creates a conversation + put: + summary: Update a content snippet parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the content snippet. + schema: + type: string + example: '123' tags: - - Conversations - operationId: createConversation - description: |+ - 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. - - {% admonition type="info" name="Sending for visitors" %} - 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. - {% /admonition %} - - This will return the Message model that has been created. - + - Content Snippets + operationId: updateContentSnippet + description: You can update an existing content snippet. + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/content_snippet_update_request" + examples: + Update a content snippet: + value: + title: How to reset your password (updated) + json_blocks: + - type: paragraph + text: Go to Settings > Security > Reset password and follow the steps. + audience_ids: + - 1 + - 2 responses: '200': - description: conversation created + description: Content snippet updated content: application/json: examples: - conversation created: + Content snippet updated: value: - type: user_message - id: '403918330' - created_at: 1734537501 - body: Hello there - message_type: inapp - conversation_id: '499' + type: content_snippet + id: '123' + title: How to reset your password (updated) + locale: en + json_blocks: + - type: paragraph + text: Go to Settings > Security > Reset password and follow the steps. + body_markdown: "# How to reset your password (updated)\n\nGo to Settings > Security > Reset password and follow the steps.\n" + chatbot_availability: 1 + copilot_availability: 1 + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + created_at: 1663597223 + updated_at: 1663597300 + audience_ids: + - 1 + - 2 schema: - allOf: - - "$ref": "#/components/schemas/message" - required: - - conversation_id + "$ref": "#/components/schemas/content_snippet" '404': - description: Contact Not Found + description: Content snippet or audience ID not found content: application/json: examples: - Contact Not Found: + Content snippet not found: value: type: error.list - request_id: d7eb553e-74ae-4341-820b-5d38a94d4a99 errors: - code: not_found - message: User Not Found + message: Content snippet not found + Unknown audience IDs: + value: + type: error.list + errors: + - code: parameter_invalid + message: 'audience_ids contains unknown audience IDs: 999' schema: "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '422': + description: Validation error content: application/json: examples: - Unauthorized: + Validation error: value: type: error.list - request_id: 68e42c33-8220-48ea-906f-75584c3ec440 errors: - - code: unauthorized - message: Access Token Invalid + - code: validation_error + message: The language is not currently supported for Fin schema: "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + delete: + summary: Delete a content snippet + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the content snippet. + schema: + type: string + example: '123' + tags: + - Content Snippets + operationId: deleteContentSnippet + description: You can delete a single content snippet by its id. + responses: + '204': + description: Content snippet deleted + '404': + description: Content snippet not found content: application/json: examples: - API plan restricted: + Content snippet not found: value: type: error.list - request_id: dcf1b373-3e66-4026-a987-98c16f00a908 errors: - - code: api_plan_restricted - message: Active subscription needed. + - code: not_found + message: Content snippet not found schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_conversation_request" - examples: - conversation_created: - summary: conversation created - value: - from: - type: user - id: 6762f11b1bb69f9f2193bba3 - body: Hello there - contact_not_found: - summary: Contact Not Found - value: - from: - type: user - id: 123_doesnt_exist - body: Hello there - "/conversations/{conversation_id}": - get: - summary: Retrieve a conversation + '422': + description: Content snippet has procedure dependencies + content: + application/json: + examples: + Content snippet has procedure dependencies: + value: + type: error.list + errors: + - code: content_has_procedure_dependencies + message: Content snippet has dependent procedures and cannot + be deleted + schema: + "$ref": "#/components/schemas/error" + "/content_snippets/{content_snippet_id}/tags": + post: + summary: Add a tag to a content snippet + tags: + - Content Snippets + - Tags parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: conversation_id + - name: content_snippet_id in: path required: true - description: The id of the conversation to target - example: 123 - schema: - type: integer - - name: display_as - in: query - required: false - description: Set to plaintext to retrieve conversation messages in plain text. - example: plaintext + description: The unique identifier for the content snippet. + example: '123' schema: type: string - - name: include_translations - in: query - required: false - description: If set to true, conversation parts will be translated to the detected language of the conversation. - example: true - schema: - type: boolean - tags: - - Conversations - operationId: retrieveConversation - description: |2 - - You can fetch the details of a single conversation. - - This will return a single Conversation model with all its conversation parts. + operationId: attachTagToContentSnippet + description: | + Apply an existing tag to a content snippet. Returns the tag that was applied. - {% admonition type="warning" name="Hard limit of 500 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. - {% /admonition %} + The tag must already exist in the workspace (create tags with the Tags API), + and the authenticating teammate must have the `manage_knowledge_base_content` + permission. - For AI agent conversation metadata, please note that you need to have the agent enabled in your workspace, which is a [paid feature](https://www.intercom.com/help/en/articles/8205718-fin-resolutions#h_97f8c2e671). - responses: - '200': - description: conversation found - content: + Requires the `read_write_content_snippets` OAuth scope. + requestBody: + content: + application/json: + schema: + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier of the tag to apply, as given by + Intercom. + example: '7522907' + admin_id: + type: string + nullable: true + description: Optional id of the teammate to attribute the tagging to. + Defaults to the authenticating teammate. Does not affect authorization. + example: '1234' + examples: + successful: + summary: Apply a tag + value: + id: '7522907' + responses: + '200': + description: Tag applied + content: application/json: examples: - conversation found: + Tag applied: value: - type: conversation - id: '503' - created_at: 1734537511 - updated_at: 1734537511 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918334' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267645' - name: Ciaran176 Lee - email: admin176@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1261bb69f9f2193bba7 - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: - - type: tag - id: '123456' - name: Test tag - applied_at: 1663597223 - applied_by: - type: contact - id: '1a2b3c' - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_agent: - ai_agent_participated: false - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: 1 - part_type: comment - body:

Okay!

- created_at: 1663597223 - updated_at: 1663597260 - notified_at: 1663597260 - assigned_to: - type: contact - id: '1a2b3c' - author: - type: admin - id: '274' - name: Operator - email: operator+abcd1234@intercom.io - attachments: [] - external_id: 'abcd1234' - redacted: false - email_message_metadata: null - state: open - tags: - - type: tag - id: '123456' - name: Test tag - event_details: - app_package_code: null - - type: conversation_part - id: 2 - part_type: custom_action_started - body: - created_at: 1740141842 - updated_at: 1740141842 - notified_at: 1740141842 - assigned_to: - author: - type: admin - id: '274' - name: Jamie Oliver - email: jamie+abcd1234@intercom.io - attachments: [] - external_id: - redacted: false - email_message_metadata: null - state: open - tags: [] - event_details: - action: - name: Jira Create Issue - app_package_code: test-integration - - type: conversation_part - id: 3 - part_type: conversation_attribute_updated_by_admin - body: - created_at: 1740141851 - updated_at: 1740141851 - notified_at: 1740141851 - assigned_to: - author: - type: bot - id: '278' - name: Fin - email: operator+abcd1234@intercom.io - attachments: [] - external_id: - redacted: false - email_message_metadata: null - state: open - tags: [] - event_details: - attribute: - name: jira_issue_key - value: - name: PROJ-007 - app_package_code: null - - type: conversation_part - id: 4 - part_type: custom_action_finished - body: - created_at: 1740141857 - updated_at: 1740141857 - notified_at: 1740141857 - assigned_to: - author: - type: admin - id: '274' - name: Jamie Oliver - email: jamie+abcd1234@intercom.io - attachments: [] - external_id: - redacted: false - email_message_metadata: null - state: closed - tags: [] - event_details: - action: - name: Jira Create Issue - result: success - app_package_code: null - total_count: 4 + type: tag + id: '7522907' + name: Independent + applied_at: 1663597223 + applied_by: + type: admin + id: '1234' schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Not found + "$ref": "#/components/schemas/tag" + '403': + description: Forbidden content: application/json: examples: - Not found: + Forbidden: value: type: error.list - request_id: 8c288c4f-b699-4209-9de4-064398f02785 + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f errors: - - code: not_found - message: Resource Not Found + - code: forbidden + message: Not authorized to manage knowledge base content schema: "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '404': + description: Content snippet or tag not found content: application/json: examples: - Unauthorized: + Content snippet not found: value: type: error.list - request_id: 1350c241-0f22-48ca-bab9-169080340870 + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '403': - description: API plan restricted - content: - application/json: - examples: - API plan restricted: + - code: content_snippet_not_found + message: Content snippet not found + Tag not found: value: type: error.list - request_id: 8b3deed3-fd8b-43d6-b6a8-428c9e17aabb + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 errors: - - code: api_plan_restricted - message: Active subscription needed. + - code: tag_not_found + message: Tag not found schema: "$ref": "#/components/schemas/error" - put: - summary: Update a conversation + '401': + "$ref": "#/components/responses/Unauthorized" + "/content_snippets/{content_snippet_id}/tags/{id}": + delete: + summary: Remove a tag from a content snippet + tags: + - Content Snippets + - Tags parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: conversation_id + - name: content_snippet_id in: path required: true - description: The id of the conversation to target - example: 123 + description: The unique identifier for the content snippet. + example: '123' schema: - type: integer - - name: display_as - in: query - required: false - description: Set to plaintext to retrieve conversation messages in plain text. - example: plaintext + type: string + - name: id + in: path + required: true + description: The unique identifier of the tag to remove, as given by Intercom. + example: '7522907' schema: type: string - tags: - - Conversations - - Custom Object Instances - operationId: updateConversation - description: |2+ - - You can update an existing conversation. - - {% admonition type="info" name="Replying and other actions" %} - If you want to reply to a coveration or take an action such as assign, unassign, open, close or snooze, take a look at the reply and manage endpoints. - {% /admonition %} - - {% admonition type="info" %} - This endpoint handles both **conversation updates** and **custom object associations**. + operationId: detachTagFromContentSnippet + description: | + Remove a tag from a content snippet. Returns the tag that was removed, with + null `applied_at` and `applied_by`. - See _`update a conversation with an association to a custom object instance`_ in the request/response examples to see the custom object association format. - {% /admonition %} - - {% admonition type="danger" name="Breaking change: duplicate custom attribute names" %} - The `PUT /conversations/{id}` endpoint now returns a `400 INVALID_PARAMETER` error when the request includes `custom_attributes` and your workspace contains multiple non-archived conversation custom attributes with the same name. Previously, the update would silently apply to a non-deterministic attribute. To resolve, rename or archive the duplicate attribute in your workspace settings, then retry the request. - {% /admonition %} + The authenticating teammate must have the `manage_knowledge_base_content` + permission. + Requires the `read_write_content_snippets` OAuth scope. responses: '200': - description: update a conversation with an association to a custom object - instance + description: Tag removed content: application/json: examples: - conversation found: - value: - type: conversation - id: '507' - created_at: 1734537521 - updated_at: 1734537523 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918338' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267653' - name: Ciaran180 Lee - email: admin180@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1301bb69f9f2193bbab - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: true - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: - issue_type: Billing - priority: High - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_agent: - ai_agent_participated: false - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '129' - part_type: conversation_attribute_updated_by_admin - body: - created_at: 1734537523 - updated_at: 1734537523 - notified_at: 1734537523 - assigned_to: - author: - id: '991267654' - type: bot - name: Fin - email: operator+this_is_an_id354_that_should_be_at_least_@intercom.io - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - - type: conversation_part - id: '130' - part_type: conversation_attribute_updated_by_admin - body: - created_at: 1734537523 - updated_at: 1734537523 - notified_at: 1734537523 - assigned_to: - author: - id: '991267654' - type: bot - name: Fin - email: operator+this_is_an_id354_that_should_be_at_least_@intercom.io - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 2 - update a conversation with an association to a custom object instance: + Tag removed: value: - type: conversation - id: '508' - created_at: 1734537525 - updated_at: 1734537525 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918339' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267659' - name: Ciaran185 Lee - email: admin185@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1341bb69f9f2193bbac - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: - order: - type: Order.list - instances: - - id: '21' - external_id: '123' - external_created_at: 1392036272 - external_updated_at: 1392036272 - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - type: Order - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_agent: - ai_agent_participated: false - conversation_parts: - type: conversation_part.list - conversation_parts: [] - total_count: 0 + type: tag + id: '7522907' + name: Independent + applied_at: null + applied_by: null schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Not found + "$ref": "#/components/schemas/tag" + '403': + description: Forbidden content: application/json: examples: - Not found: + Forbidden: value: type: error.list - request_id: de1be01d-a0d3-48a6-9ea6-9789931a6887 + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f errors: - - code: not_found - message: Resource Not Found + - code: forbidden + message: Not authorized to manage knowledge base content schema: "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '404': + description: Content snippet or tag not found content: application/json: examples: - Unauthorized: + Content snippet not found: value: type: error.list - request_id: de63ddb2-c525-4ebf-ad38-82ed8b44c896 + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '403': - description: API plan restricted - content: - application/json: - examples: - API plan restricted: + - code: content_snippet_not_found + message: Content snippet not found + Tag not found: value: type: error.list - request_id: 34072e07-6b70-4f59-96bf-3106a3563a24 + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 errors: - - code: api_plan_restricted - message: Active subscription needed. + - code: tag_not_found + message: Tag not found schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_conversation_request" - examples: - conversation_found: - summary: conversation found - value: - read: true - title: new conversation title - custom_attributes: - issue_type: Billing - priority: High - update_a_conversation_with_an_association_to_a_custom_object_instance: - summary: update a conversation with an association to a custom object - instance - value: - custom_attributes: - order: - - '21' - not_found: - summary: Not found - value: - read: true - title: new conversation title - custom_attributes: - issue_type: Billing - priority: High - delete: - summary: Delete a conversation + '401': + "$ref": "#/components/responses/Unauthorized" + "/conversations/{conversation_id}/tags": + post: + summary: Add tag to a conversation parameters: - name: Intercom-Version in: header @@ -7222,19 +7985,17 @@ paths: "$ref": "#/components/schemas/intercom_version" - name: conversation_id in: path - description: id + description: conversation_id + example: '64619700005694' required: true schema: - type: integer + type: string tags: + - Tags - Conversations - operationId: deleteConversation - description: | - {% admonition type="warning" name="Irreversible operation" %} - Deleting a conversation is permanent and cannot be reversed. - {% /admonition %} - - Deleting a conversation permanently removes it from the inbox. All sensitive data is deleted, including admin and user replies, conversation attributes, uploads, and related content. The conversation will still appear in reporting, though some data may be incomplete due to the deletion. + operationId: attachTagToConversation + description: You can tag a specific conversation. This will return a tag object + for the tag that was added to the conversation. responses: '200': description: successful @@ -7243,239 +8004,76 @@ paths: examples: successful: value: - id: '512' - object: conversation - deleted: true + type: tag + id: '86' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' schema: - "$ref": "#/components/schemas/conversation_deleted" - '401': - description: Unauthorized + "$ref": "#/components/schemas/tag" + '404': + description: Conversation not found content: application/json: examples: - Unauthorized: + Conversation not found: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: c6e8c74f-a354-4dfd-a5be-6061d2d26341 errors: - - code: unauthorized - message: Access Token Invalid + - code: not_found + message: Conversation not found schema: "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + '401': + description: Unauthorized content: application/json: examples: - API plan restricted: + Unauthorized: value: type: error.list - request_id: 7a80b950-b392-499f-85db-ea7c6c424d37 + request_id: 617bb25d-4dea-4a68-ae74-2fb8f4e87b39 errors: - - code: api_plan_restricted - message: Active subscription needed. + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/conversations/search": - post: - summary: Search conversations - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Conversations - operationId: searchConversations - description: | - 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. - {% admonition type="warning" name="Optimizing search queries" %} - 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](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#example-search-conversations-request) for more details on how to use the `starting_after` param. - {% /admonition %} - - ### Nesting & Limitations - - 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: - - There's a limit of max 2 nested filters - - There's a limit of max 15 filters for each AND or OR group - - ### Accepted Fields - - Most keys listed in the conversation model are 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"`). - The `source.body` field is unique as the search will not be performed against the entire value, but instead against every element of the value separately. For example, when searching for a conversation with a `"I need support"` body - the query should contain a `=` operator with the value `"support"` for such conversation to be returned. A query with a `=` operator and a `"need support"` value will not yield a result. - - | 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 | Integer | - | team_assignee_id | Integer | - | 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 | - - ### Accepted Operators - - 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 | - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: conversation.list - pages: - type: pages - page: 1 - per_page: 5 - total_pages: 1 - total_count: 1 - conversations: - - type: conversation - id: '515' - created_at: 1734537546 - updated_at: 1734537546 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918346' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267691' - name: Ciaran210 Lee - email: admin210@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f14a1bb69f9f2193bbb3 - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_agent: - ai_agent_participated: false - schema: - "$ref": "#/components/schemas/conversation_list" requestBody: content: application/json: schema: - "$ref": "#/components/schemas/search_request" + type: object + required: + - id + - admin_id + properties: + id: + type: string + description: The unique identifier for the tag which is given by + Intercom + example: '7522907' + admin_id: + type: string + description: The unique identifier for the admin which is given + by Intercom. + example: '780' examples: successful: summary: successful value: - query: - operator: AND - value: - - field: created_at - operator: ">" - value: '1306054154' - pagination: - per_page: 5 - "/conversations/{conversation_id}/reply": - post: - summary: Reply to a conversation + id: 86 + admin_id: 991267618 + conversation_not_found: + summary: Conversation not found + value: + id: 87 + admin_id: 991267620 + "/conversations/{conversation_id}/tags/{tag_id}": + delete: + summary: Remove tag from a conversation parameters: - name: Intercom-Version in: header @@ -7483,135 +8081,410 @@ paths: "$ref": "#/components/schemas/intercom_version" - name: conversation_id in: path + description: conversation_id + example: '64619700005694' + required: true + schema: + type: string + - name: tag_id + in: path + description: tag_id + example: '7522907' required: true - description: The Intercom provisioned identifier for the conversation or the - string "last" to reply to the last part of the conversation - example: 123 or "last" schema: type: string tags: + - Tags - Conversations - operationId: replyConversation - description: |- - You can reply to a conversation with a message from an admin or on behalf of a contact, or with a note for admins. - - {% admonition type="warning" name="Bot replies to inbound email" %} - By default, bot or Operator replies to an inbound email conversation aren't sent to your customer. The reply is stored as an unnotifiable bot comment, and no `seen` receipt is generated until an email is actually delivered. + operationId: detachTagFromConversation + description: You can remove tag from a specific conversation. This will return + a tag object for the tag that was removed from the conversation. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: tag + id: '89' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' + schema: + "$ref": "#/components/schemas/tag" + '404': + description: Tag not found + content: + application/json: + examples: + Conversation not found: + value: + type: error.list + request_id: 84db22c5-0fef-465a-a909-2643d8a22c69 + errors: + - code: not_found + message: Conversation not found + Tag not found: + value: + type: error.list + request_id: 1fe3e9ec-6a5b-4abc-b51c-a515f77d9577 + errors: + - code: tag_not_found + message: Tag not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: df73b7b4-2352-44fd-8d14-4ea8536ad138 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - admin_id + properties: + admin_id: + type: string + description: The unique identifier for the admin which is given + by Intercom. + example: '123' + examples: + successful: + summary: successful + value: + admin_id: 991267622 + conversation_not_found: + summary: Conversation not found + value: + admin_id: 991267624 + tag_not_found: + summary: Tag not found + value: + admin_id: 991267625 + "/conversations": + get: + summary: List all conversations + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: per_page + in: query + schema: + type: integer + default: 20 + maximum: 150 + required: false + description: How many results per page + - name: starting_after + in: query + required: false + description: String used to get the next page of conversations. + schema: + type: string + tags: + - Conversations + operationId: listConversations + description: | + You can fetch a list of all conversations. - To send these replies as outbound emails, reach out to your accounts team to enable the email-reply feature flag for your workspace. + You can optionally request the result page size and the cursor to start after to fetch the result. + {% admonition type="warning" name="Pagination" %} + You can use pagination to limit the number of results returned. The default is `20` results per page. + See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#pagination-for-list-apis) for more details on how to use the `starting_after` param. {% /admonition %} responses: '200': - description: User last conversation reply + description: successful content: application/json: examples: - User reply: + successful: value: - type: conversation - id: '524' - created_at: 1734537559 - updated_at: 1734537561 - waiting_since: 1734537561 - snoozed_until: - source: - type: conversation - id: '403918349' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267694' - name: Ciaran212 Lee - email: admin212@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1571bb69f9f2193bbbb - external_id: '70' - first_contact_reply: - created_at: 1734537561 - type: conversation - url: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: true - state: open - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_agent: - ai_agent_participated: false - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '132' - part_type: open - body: "

Thanks again :)

" - created_at: 1734537561 - updated_at: 1734537561 - notified_at: 1734537561 - assigned_to: + type: conversation.list + pages: + type: pages + page: 1 + per_page: 20 + total_pages: 1 + total_count: 1 + conversations: + - type: conversation + id: '471' + created_at: 1734537460 + updated_at: 1734537460 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918320' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" author: - id: 6762f1571bb69f9f2193bbbb - type: user - name: Joe Bloggs - email: joe@bloggs.com + type: admin + id: '991267628' + name: Ciaran166 Lee + email: admin166@email.com attachments: [] - external_id: + url: redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 - Admin Reply with a Note: - value: - type: conversation - id: '525' - created_at: 1734537563 - updated_at: 1734537565 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918350' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267696' - name: Ciaran213 Lee - email: admin213@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list contacts: - - type: contact - id: 6762f15b1bb69f9f2193bbbc + type: contact.list + contacts: + - type: contact + id: 6762f0f31bb69f9f2193bb8b + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + schema: + "$ref": "#/components/schemas/conversation_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b14d75ab-7d26-4191-b33f-77ca0a4d4ede + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 591a0c2f-78b3-41bb-bfa7-f1fae15107b9 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + post: + summary: Creates a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Conversations + operationId: createConversation + description: |+ + 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. + + {% admonition type="info" name="Sending for visitors" %} + 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. + {% /admonition %} + + This will return the Message model that has been created. + + responses: + '200': + description: conversation created + content: + application/json: + examples: + conversation created: + value: + type: user_message + id: '403918330' + created_at: 1734537501 + body: Hello there + message_type: inapp + conversation_id: '499' + schema: + allOf: + - "$ref": "#/components/schemas/message" + required: + - conversation_id + '404': + description: Contact Not Found + content: + application/json: + examples: + Contact Not Found: + value: + type: error.list + request_id: d7eb553e-74ae-4341-820b-5d38a94d4a99 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 68e42c33-8220-48ea-906f-75584c3ec440 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: dcf1b373-3e66-4026-a987-98c16f00a908 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_conversation_request" + examples: + conversation_created: + summary: conversation created + value: + from: + type: user + id: 6762f11b1bb69f9f2193bba3 + body: Hello there + contact_not_found: + summary: Contact Not Found + value: + from: + type: user + id: 123_doesnt_exist + body: Hello there + "/conversations/{conversation_id}": + get: + summary: Retrieve a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The id of the conversation to target + example: 123 + schema: + type: integer + - name: display_as + in: query + required: false + description: Set to plaintext to retrieve conversation messages in plain text. + example: plaintext + schema: + type: string + - name: include_translations + in: query + required: false + description: If set to true, conversation parts will be translated to the detected language of the conversation. + example: true + schema: + type: boolean + tags: + - Conversations + operationId: retrieveConversation + description: |2 + + You can fetch the details of a single conversation. + + This will return a single Conversation model with all its conversation parts. + + {% admonition type="warning" name="Hard limit of 500 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. + {% /admonition %} + + For AI agent conversation metadata, please note that you need to have the agent enabled in your workspace, which is a [paid feature](https://www.intercom.com/help/en/articles/8205718-fin-resolutions#h_97f8c2e671). + responses: + '200': + description: conversation found + content: + application/json: + examples: + conversation found: + value: + type: conversation + id: '503' + created_at: 1734537511 + updated_at: 1734537511 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918334' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267645' + name: Ciaran176 Lee + email: admin176@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1261bb69f9f2193bba7 external_id: '70' first_contact_reply: admin_assignee_id: 991267715 @@ -7621,7 +8494,14 @@ paths: read: false tags: type: tag.list - tags: [] + tags: + - type: tag + id: '123456' + name: Test tag + applied_at: 1663597223 + applied_by: + type: contact + id: '1a2b3c' priority: none sla_applied: statistics: @@ -7642,192 +8522,104 @@ paths: type: conversation_part.list conversation_parts: - type: conversation_part - id: '133' - part_type: note - body: |- -

An Unordered HTML List

-
    -
  • Coffee
  • -
  • Tea
  • -
  • Milk
  • -
-

An Ordered HTML List

-
    -
  1. Coffee
  2. -
  3. Tea
  4. -
  5. Milk
  6. -
- created_at: 1734537565 - updated_at: 1734537565 - notified_at: 1734537565 + id: 1 + part_type: comment + body:

Okay!

+ created_at: 1663597223 + updated_at: 1663597260 + notified_at: 1663597260 assigned_to: + type: contact + id: '1a2b3c' author: - id: '991267696' type: admin - name: Ciaran213 Lee - email: admin213@email.com + id: '274' + name: Operator + email: operator+abcd1234@intercom.io attachments: [] - external_id: + external_id: 'abcd1234' redacted: false - metadata: {} - email_message_metadata: + email_message_metadata: null + state: open + tags: + - type: tag + id: '123456' + name: Test tag + event_details: app_package_code: null - total_count: 1 - Admin Reply to send Quick Reply Options: - value: - type: conversation - id: '526' - created_at: 1734537567 - updated_at: 1734537568 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918351' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267698' - name: Ciaran214 Lee - email: admin214@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f15e1bb69f9f2193bbbd - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_agent: - ai_agent_participated: false - conversation_parts: - type: conversation_part.list - conversation_parts: - type: conversation_part - id: '134' - part_type: quick_reply + id: 2 + part_type: custom_action_started body: - created_at: 1734537568 - updated_at: 1734537568 - notified_at: 1734537568 + created_at: 1740141842 + updated_at: 1740141842 + notified_at: 1740141842 assigned_to: author: - id: '991267698' type: admin - name: Ciaran214 Lee - email: admin214@email.com + id: '274' + name: Jamie Oliver + email: jamie+abcd1234@intercom.io attachments: [] external_id: redacted: false - metadata: {} - email_message_metadata: + email_message_metadata: null + state: open + tags: [] + event_details: + action: + name: Jira Create Issue + app_package_code: test-integration + - type: conversation_part + id: 3 + part_type: conversation_attribute_updated_by_admin + body: + created_at: 1740141851 + updated_at: 1740141851 + notified_at: 1740141851 + assigned_to: + author: + type: bot + id: '278' + name: Fin + email: operator+abcd1234@intercom.io + attachments: [] + external_id: + redacted: false + email_message_metadata: null + state: open + tags: [] + event_details: + attribute: + name: jira_issue_key + value: + name: PROJ-007 app_package_code: null - total_count: 1 - User last conversation reply: - value: - type: conversation - id: '527' - created_at: 1734537571 - updated_at: 1734537572 - waiting_since: 1734537572 - snoozed_until: - source: - type: conversation - id: '403918352' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267700' - name: Ciaran215 Lee - email: admin215@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1621bb69f9f2193bbbe - external_id: '70' - first_contact_reply: - created_at: 1734537572 - type: conversation - url: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: true - state: open - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_agent: - ai_agent_participated: false - conversation_parts: - type: conversation_part.list - conversation_parts: - type: conversation_part - id: '135' - part_type: open - body: "

Thanks again :)

" - created_at: 1734537572 - updated_at: 1734537572 - notified_at: 1734537572 + id: 4 + part_type: custom_action_finished + body: + created_at: 1740141857 + updated_at: 1740141857 + notified_at: 1740141857 assigned_to: author: - id: 6762f1621bb69f9f2193bbbe - type: user - name: Joe Bloggs - email: joe@bloggs.com + type: admin + id: '274' + name: Jamie Oliver + email: jamie+abcd1234@intercom.io attachments: [] external_id: redacted: false - metadata: {} - email_message_metadata: + email_message_metadata: null + state: closed + tags: [] + event_details: + action: + name: Jira Create Issue + result: success app_package_code: null - total_count: 1 + total_count: 4 schema: "$ref": "#/components/schemas/conversation" '404': @@ -7838,7 +8630,7 @@ paths: Not found: value: type: error.list - request_id: '06234918-c245-4caa-a2cc-90247983c6ff' + request_id: 8c288c4f-b699-4209-9de4-064398f02785 errors: - code: not_found message: Resource Not Found @@ -7852,7 +8644,7 @@ paths: Unauthorized: value: type: error.list - request_id: 50f1e8d1-cf1a-450c-a7b5-87a264076241 + request_id: 1350c241-0f22-48ca-bab9-169080340870 errors: - code: unauthorized message: Access Token Invalid @@ -7866,65 +8658,14 @@ paths: API plan restricted: value: type: error.list - request_id: 48ad16d0-525c-40bf-b733-89239feb70e3 + request_id: 8b3deed3-fd8b-43d6-b6a8-428c9e17aabb errors: - code: api_plan_restricted message: Active subscription needed. schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/reply_conversation_request" - examples: - user_reply: - summary: User reply - value: - message_type: comment - type: user - intercom_user_id: 6762f1571bb69f9f2193bbbb - body: Thanks again :) - admin_note_reply: - summary: Admin Reply with a Note - value: - message_type: note - type: admin - admin_id: 991267696 - body: "

An Unordered HTML List

  • Coffee
  • - \
  • Tea
  • Milk

An Ordered HTML List

- \
  1. Coffee
  2. Tea
  3. Milk
- \ " - admin_quick_reply_reply: - summary: Admin Reply to send Quick Reply Options - value: - message_type: quick_reply - type: admin - admin_id: 991267698 - reply_options: - - text: 'Yes' - uuid: a5e1c524-5ddd-4c3e-9328-6bca5d6e3edb - - text: 'No' - uuid: f4a98af1-be56-4948-a57e-e1a83f8484c6 - contact_quick_reply_reply: - summary: User reply with quick reply selection - value: - message_type: quick_reply - type: user - intercom_user_id: 6762f1621bb69f9f2193bbbe - reply_options: - - text: 'Yes' - uuid: a5e1c524-5ddd-4c3e-9328-6bca5d6e3edb - user_last_conversation_reply: - summary: User last conversation reply - value: - message_type: comment - type: user - intercom_user_id: 6762f1661bb69f9f2193bbbf - body: Thanks again :) - "/conversations/{conversation_id}/parts": - post: - summary: Manage a conversation + put: + summary: Update a conversation parameters: - name: Intercom-Version in: header @@ -7933,44 +8674,65 @@ paths: - name: conversation_id in: path required: true - description: The identifier for the conversation as given by Intercom. - example: '123' + description: The id of the conversation to target + example: 123 + schema: + type: integer + - name: display_as + in: query + required: false + description: Set to plaintext to retrieve conversation messages in plain text. + example: plaintext schema: type: string tags: - Conversations - operationId: manageConversation - description: | - For managing conversations you can: - - Close a conversation - - Snooze a conversation to reopen on a future date - - Open a conversation which is `snoozed` or `closed` - - Assign a conversation to an admin and/or team. + - Custom Object Instances + operationId: updateConversation + description: |2+ + + You can update an existing conversation. + + {% admonition type="info" name="Replying and other actions" %} + If you want to reply to a coveration or take an action such as assign, unassign, open, close or snooze, take a look at the reply and manage endpoints. + {% /admonition %} + + {% admonition type="info" %} + This endpoint handles both **conversation updates** and **custom object associations**. + + See _`update a conversation with an association to a custom object instance`_ in the request/response examples to see the custom object association format. + {% /admonition %} + + {% admonition type="danger" name="Breaking change: duplicate custom attribute names" %} + The `PUT /conversations/{id}` endpoint now returns a `400 INVALID_PARAMETER` error when the request includes `custom_attributes` and your workspace contains multiple non-archived conversation custom attributes with the same name. Previously, the update would silently apply to a non-deterministic attribute. To resolve, rename or archive the duplicate attribute in your workspace settings, then retry the request. + {% /admonition %} + responses: '200': - description: Assign a conversation + description: update a conversation with an association to a custom object + instance content: application/json: examples: - Close a conversation: + conversation found: value: type: conversation - id: '531' - created_at: 1734537582 - updated_at: 1734537584 + id: '507' + created_at: 1734537521 + updated_at: 1734537523 waiting_since: snoozed_until: source: type: conversation - id: '403918356' + id: '403918338' delivered_as: admin_initiated subject: '' body: "

this is the message body

" author: type: admin - id: '991267708' - name: Ciaran219 Lee - email: admin219@email.com + id: '991267653' + name: Ciaran180 Lee + email: admin180@email.com attachments: [] url: redacted: false @@ -7978,14 +8740,14 @@ paths: type: contact.list contacts: - type: contact - id: 6762f16e1bb69f9f2193bbc2 + id: 6762f1301bb69f9f2193bbab external_id: '70' first_contact_reply: admin_assignee_id: 991267715 team_assignee_id: 5017691 open: false state: closed - read: false + read: true tags: type: tag.list tags: [] @@ -7995,7 +8757,9 @@ paths: conversation_rating: teammates: title: - custom_attributes: {} + custom_attributes: + issue_type: Billing + priority: High topics: {} ticket: linked_objects: @@ -8009,120 +8773,63 @@ paths: type: conversation_part.list conversation_parts: - type: conversation_part - id: '136' - part_type: close - body: "

Goodbye :)

" - created_at: 1734537584 - updated_at: 1734537584 - notified_at: 1734537584 + id: '129' + part_type: conversation_attribute_updated_by_admin + body: + created_at: 1734537523 + updated_at: 1734537523 + notified_at: 1734537523 assigned_to: author: - id: '991267708' - type: admin - name: Ciaran219 Lee - email: admin219@email.com + id: '991267654' + type: bot + name: Fin + email: operator+this_is_an_id354_that_should_be_at_least_@intercom.io attachments: [] external_id: redacted: false metadata: {} email_message_metadata: app_package_code: null - total_count: 1 - Snooze a conversation: - value: - type: conversation - id: '532' - created_at: 1734537586 - updated_at: 1734537587 - waiting_since: - snoozed_until: 1734541187 - source: - type: conversation - id: '403918357' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267710' - name: Ciaran220 Lee - email: admin220@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1711bb69f9f2193bbc3 - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: true - state: snoozed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_agent: - ai_agent_participated: false - conversation_parts: - type: conversation_part.list - conversation_parts: - type: conversation_part - id: '137' - part_type: snoozed + id: '130' + part_type: conversation_attribute_updated_by_admin body: - created_at: 1734537587 - updated_at: 1734537587 - notified_at: 1734537587 + created_at: 1734537523 + updated_at: 1734537523 + notified_at: 1734537523 assigned_to: author: - id: '991267710' - type: admin - name: Ciaran220 Lee - email: admin220@email.com + id: '991267654' + type: bot + name: Fin + email: operator+this_is_an_id354_that_should_be_at_least_@intercom.io attachments: [] external_id: redacted: false metadata: {} email_message_metadata: app_package_code: null - total_count: 1 - Open a conversation: + total_count: 2 + update a conversation with an association to a custom object instance: value: type: conversation - id: '537' - created_at: 1734537587 - updated_at: 1734537601 + id: '508' + created_at: 1734537525 + updated_at: 1734537525 waiting_since: snoozed_until: source: type: conversation - id: '403918358' + id: '403918339' delivered_as: admin_initiated subject: '' body: "

this is the message body

" author: type: admin - id: '991267712' - name: Ciaran221 Lee - email: admin221@email.com + id: '991267659' + name: Ciaran185 Lee + email: admin185@email.com attachments: [] url: redacted: false @@ -8130,14 +8837,14 @@ paths: type: contact.list contacts: - type: contact - id: 6762f1781bb69f9f2193bbc8 - external_id: '74' + id: 6762f1341bb69f9f2193bbac + external_id: '70' first_contact_reply: admin_assignee_id: 991267715 team_assignee_id: 5017691 - open: true - state: open - read: true + open: false + state: closed + read: false tags: type: tag.list tags: [] @@ -8146,8 +8853,19 @@ paths: statistics: conversation_rating: teammates: - title: '' - custom_attributes: {} + title: + custom_attributes: + order: + type: Order.list + instances: + - id: '21' + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + type: Order topics: {} ticket: linked_objects: @@ -8159,105 +8877,8 @@ paths: ai_agent_participated: false conversation_parts: type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '139' - part_type: open - body: - created_at: 1734537601 - updated_at: 1734537601 - notified_at: 1734537601 - assigned_to: - author: - id: '991267712' - type: admin - name: Ciaran221 Lee - email: admin221@email.com - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 - Assign a conversation: - value: - type: conversation - id: '542' - created_at: 1734537603 - updated_at: 1734537605 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918361' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267715' - name: Ciaran223 Lee - email: admin223@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1831bb69f9f2193bbcc - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: true - state: open - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] + conversation_parts: [] total_count: 0 - has_more: false - ai_agent: - ai_agent_participated: false - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '140' - part_type: assign_and_reopen - body: - created_at: 1734537605 - updated_at: 1734537605 - notified_at: 1734537605 - assigned_to: - type: admin - id: '991267715' - author: - id: '991267715' - type: admin - name: Ciaran223 Lee - email: admin223@email.com - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 schema: "$ref": "#/components/schemas/conversation" '404': @@ -8268,7 +8889,7 @@ paths: Not found: value: type: error.list - request_id: e056b3c3-fae3-4a3c-9bcf-836b84efa331 + request_id: de1be01d-a0d3-48a6-9ea6-9789931a6887 errors: - code: not_found message: Resource Not Found @@ -8282,7 +8903,7 @@ paths: Unauthorized: value: type: error.list - request_id: 623bbbb8-f6fb-45f3-a2e2-4106ff3a4349 + request_id: de63ddb2-c525-4ebf-ad38-82ed8b44c896 errors: - code: unauthorized message: Access Token Invalid @@ -8296,7 +8917,7 @@ paths: API plan restricted: value: type: error.list - request_id: a57737d0-63a7-42bd-aa65-8380ef828124 + request_id: 34072e07-6b70-4f59-96bf-3106a3563a24 errors: - code: api_plan_restricted message: Active subscription needed. @@ -8306,47 +8927,33 @@ paths: content: application/json: schema: - oneOf: - - "$ref": "#/components/schemas/close_conversation_request" - - "$ref": "#/components/schemas/snooze_conversation_request" - - "$ref": "#/components/schemas/open_conversation_request" - - "$ref": "#/components/schemas/assign_conversation_request" + "$ref": "#/components/schemas/update_conversation_request" examples: - close_a_conversation: - summary: Close a conversation - value: - message_type: close - type: admin - admin_id: 991267708 - body: Goodbye :) - snooze_a_conversation: - summary: Snooze a conversation - value: - message_type: snoozed - admin_id: 991267710 - snoozed_until: 1734541187 - open_a_conversation: - summary: Open a conversation + conversation_found: + summary: conversation found value: - message_type: open - admin_id: 991267712 - assign_a_conversation: - summary: Assign a conversation + read: true + title: new conversation title + custom_attributes: + issue_type: Billing + priority: High + update_a_conversation_with_an_association_to_a_custom_object_instance: + summary: update a conversation with an association to a custom object + instance value: - message_type: assignment - type: admin - admin_id: 991267715 - assignee_id: 991267715 + custom_attributes: + order: + - '21' not_found: summary: Not found value: - message_type: close - type: admin - admin_id: 991267717 - body: Goodbye :) - "/conversations/{conversation_id}/customers": - post: - summary: Attach a contact to a conversation + read: true + title: new conversation title + custom_attributes: + issue_type: Billing + priority: High + delete: + summary: Delete a conversation parameters: - name: Intercom-Version in: header @@ -8354,48 +8961,32 @@ paths: "$ref": "#/components/schemas/intercom_version" - name: conversation_id in: path + description: id required: true - description: The identifier for the conversation as given by Intercom. - example: '123' schema: - type: string + type: integer tags: - Conversations - operationId: attachContactToConversation - description: |+ - You can add participants who are contacts to a conversation, on behalf of either another contact or an admin. - - {% admonition type="warning" name="Contacts without an email" %} - 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`. + operationId: deleteConversation + description: | + {% admonition type="warning" name="Irreversible operation" %} + Deleting a conversation is permanent and cannot be reversed. {% /admonition %} + Deleting a conversation permanently removes it from the inbox. All sensitive data is deleted, including admin and user replies, conversation attributes, uploads, and related content. The conversation will still appear in reporting, though some data may be incomplete due to the deletion. responses: '200': - description: Attach a contact to a conversation - content: - application/json: - examples: - Attach a contact to a conversation: - value: - customers: - - type: user - id: 6762f19b1bb69f9f2193bbd4 - schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Not found + description: successful content: application/json: examples: - Not found: + successful: value: - type: error.list - request_id: 86fd8b2e-7048-4fbd-9fb0-d73085d7210b - errors: - - code: not_found - message: Resource Not Found + id: '512' + object: conversation + deleted: true schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/conversation_deleted" '401': description: Unauthorized content: @@ -8404,7 +8995,7 @@ paths: Unauthorized: value: type: error.list - request_id: 9dc7c1a0-b818-472c-adf6-3e327f22f541 + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 errors: - code: unauthorized message: Access Token Invalid @@ -8418,271 +9009,261 @@ paths: API plan restricted: value: type: error.list - request_id: 99f72599-ac98-4b1e-af96-808654b6383e + request_id: 7a80b950-b392-499f-85db-ea7c6c424d37 errors: - code: api_plan_restricted message: Active subscription needed. schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/attach_contact_to_conversation_request" - examples: - attach_a_contact_to_a_conversation: - summary: Attach a contact to a conversation - value: - admin_id: 991267731 - customer: - intercom_user_id: 6762f19b1bb69f9f2193bbd4 - not_found: - summary: Not found - value: - admin_id: 991267733 - customer: - intercom_user_id: 6762f19e1bb69f9f2193bbd5 - "/conversations/{conversation_id}/customers/{contact_id}": - delete: - summary: Detach a contact from a group conversation + "/conversations/search": + post: + summary: Search conversations parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: conversation_id - in: path - required: true - description: The identifier for the conversation as given by Intercom. - example: '123' - schema: - type: string - - name: contact_id - in: path - required: true - description: The identifier for the contact as given by Intercom. - example: '123' - schema: - type: string tags: - Conversations - operationId: detachContactFromConversation - description: |+ - You can remove participants who are contacts from a group conversation, on behalf of an admin. + operationId: searchConversations + description: | + You can search for multiple conversations by the value of their attributes in order to fetch exactly which ones you want. - {% admonition type="warning" name="Removing the last participant" %} - You cannot remove the last remaining contact from a conversation. + 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. + {% admonition type="warning" name="Optimizing search queries" %} + 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](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#example-search-conversations-request) for more details on how to use the `starting_after` param. {% /admonition %} - responses: - '200': - description: Detach a contact from a group conversation - content: - application/json: - examples: - Detach a contact from a group conversation: - value: - customers: - - type: user - id: 6762f1b41bb69f9f2193bbe0 - schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Contact not found - content: - application/json: - examples: - Conversation not found: - value: - type: error.list - request_id: 89835b60-6756-4d2a-b148-26ca0cb49f9f - errors: - - code: not_found - message: Resource Not Found - Contact not found: - value: - type: error.list - request_id: ab1b9371-3185-417f-a53a-dcae35892980 - errors: - - code: not_found - message: User Not Found - schema: - "$ref": "#/components/schemas/error" - '422': - description: Last customer - content: - application/json: - examples: - Last customer: - value: - type: error.list - request_id: 8275e92f-66b7-40f9-82a8-9647ca8d7eb4 - errors: - - code: parameter_invalid - message: Removing the last customer is not allowed - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 89ef64b2-d1f9-40c3-89e9-d39175d3d647 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + ### Nesting & Limitations + + 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: + - There's a limit of max 2 nested filters + - There's a limit of max 15 filters for each AND or OR group + + ### Accepted Fields + + Most keys listed in the conversation model are 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"`). + The `source.body` field is unique as the search will not be performed against the entire value, but instead against every element of the value separately. For example, when searching for a conversation with a `"I need support"` body - the query should contain a `=` operator with the value `"support"` for such conversation to be returned. A query with a `=` operator and a `"need support"` value will not yield a result. + + | 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 | Integer | + | team_assignee_id | Integer | + | 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 | + + ### Accepted Operators + + 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 | + responses: + '200': + description: successful content: application/json: examples: - API plan restricted: + successful: value: - type: error.list - request_id: 6fe4106b-967a-46ba-b1c9-9996aff6e8c3 - errors: - - code: api_plan_restricted - message: Active subscription needed. + type: conversation.list + pages: + type: pages + page: 1 + per_page: 5 + total_pages: 1 + total_count: 1 + conversations: + - type: conversation + id: '515' + created_at: 1734537546 + updated_at: 1734537546 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918346' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267691' + name: Ciaran210 Lee + email: admin210@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f14a1bb69f9f2193bbb3 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/conversation_list" requestBody: content: application/json: schema: - "$ref": "#/components/schemas/detach_contact_from_conversation_request" + "$ref": "#/components/schemas/search_request" examples: - detach_a_contact_from_a_group_conversation: - summary: Detach a contact from a group conversation - value: - admin_id: 991267739 - customer: - intercom_user_id: 6762f1a61bb69f9f2193bbd8 - conversation_not_found: - summary: Conversation not found - value: - admin_id: 991267742 - customer: - intercom_user_id: 6762f1b61bb69f9f2193bbe1 - contact_not_found: - summary: Contact not found - value: - admin_id: 991267745 - customer: - intercom_user_id: 6762f1c41bb69f9f2193bbe9 - last_customer: - summary: Last customer + successful: + summary: successful value: - admin_id: 991267748 - customer: - intercom_user_id: 6762f1d11bb69f9f2193bbf1 - "/conversations/{id}/handling_events": - get: - summary: List handling events + query: + operator: AND + value: + - field: created_at + operator: ">" + value: '1306054154' + pagination: + per_page: 5 + "/conversations/{conversation_id}/reply": + post: + summary: Reply to a conversation parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id + - name: conversation_id in: path required: true - description: The identifier for the conversation as given by Intercom. - example: '123' + description: The Intercom provisioned identifier for the conversation or the + string "last" to reply to the last part of the conversation + example: 123 or "last" schema: type: string tags: - Conversations - operationId: listHandlingEvents - description: | - List all pause/resume events for a conversation. These events track when teammates paused or resumed handling a conversation. + operationId: replyConversation + description: |- + You can reply to a conversation with a message from an admin or on behalf of a contact, or with a note for admins. - Requires the `read_conversations` OAuth scope. - responses: - '200': - description: Successful response - content: - application/json: - schema: - "$ref": "#/components/schemas/handling_event_list" - examples: - Successful response: - value: - handling_events: - - teammate: - type: admin - id: 123 - name: Jane Example - email: jane@example.com - type: paused - timestamp: "2026-01-09T09:00:00Z" - reason: Paused - - teammate: - type: admin - id: 123 - name: Jane Example - email: jane@example.com - type: resumed - timestamp: "2026-01-09T09:10:00Z" - '401': - description: Unauthorized - content: - application/json: - schema: - "$ref": "#/components/schemas/error" - '404': - description: Conversation not found - content: - application/json: - schema: - "$ref": "#/components/schemas/error" - "/conversations/redact": - post: - summary: Redact a conversation part - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Conversations - operationId: redactConversation - description: |+ - You can redact a conversation part or the source message of a conversation (as seen in the source object). + {% admonition type="warning" name="Bot replies to inbound email" %} + By default, bot or Operator replies to an inbound email conversation aren't sent to your customer. The reply is stored as an unnotifiable bot comment, and no `seen` receipt is generated until an email is actually delivered. - {% admonition type="info" name="Redacting parts and messages" %} - 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. + To send these replies as outbound emails, reach out to your accounts team to enable the email-reply feature flag for your workspace. {% /admonition %} - responses: '200': - description: Redact a conversation part + description: User last conversation reply content: application/json: examples: - Redact a conversation part: + User reply: value: type: conversation - id: '608' - created_at: 1734537721 - updated_at: 1734537724 - waiting_since: 1734537722 + id: '524' + created_at: 1734537559 + updated_at: 1734537561 + waiting_since: 1734537561 snoozed_until: source: type: conversation - id: '403918391' + id: '403918349' delivered_as: admin_initiated subject: '' body: "

this is the message body

" author: type: admin - id: '991267757' - name: Ciaran247 Lee - email: admin247@email.com + id: '991267694' + name: Ciaran212 Lee + email: admin212@email.com attachments: [] url: redacted: false @@ -8690,17 +9271,17 @@ paths: type: contact.list contacts: - type: contact - id: 6762f1f81bb69f9f2193bc09 + id: 6762f1571bb69f9f2193bbbb external_id: '70' first_contact_reply: - created_at: 1734537722 + created_at: 1734537561 type: conversation url: admin_assignee_id: 991267715 team_assignee_id: 5017691 open: true state: open - read: true + read: false tags: type: tag.list tags: [] @@ -8724,284 +9305,284 @@ paths: type: conversation_part.list conversation_parts: - type: conversation_part - id: '149' + id: '132' part_type: open - body: "

This message was deleted

" - created_at: 1734537722 - updated_at: 1734537724 - notified_at: 1734537722 + body: "

Thanks again :)

" + created_at: 1734537561 + updated_at: 1734537561 + notified_at: 1734537561 assigned_to: author: - id: 6762f1f81bb69f9f2193bc09 + id: 6762f1571bb69f9f2193bbbb type: user name: Joe Bloggs email: joe@bloggs.com attachments: [] external_id: - redacted: true + redacted: false metadata: {} email_message_metadata: app_package_code: null total_count: 1 - schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Not found - content: - application/json: - examples: - Not found: - value: - type: error.list - request_id: 5b7bb755-4031-4bfe-8897-54d0f1872bbc - errors: - - code: conversation_part_or_message_not_found - message: Conversation part or message not found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 4814668f-5d31-4bf7-8f66-b426aac054db - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/redact_conversation_request" - examples: - redact_a_conversation_part: - summary: Redact a conversation part - value: - type: conversation_part - conversation_id: 608 - conversation_part_id: 149 - not_found: - summary: Not found - value: - type: conversation_part - conversation_id: really_123_doesnt_exist - conversation_part_id: really_123_doesnt_exist - "/conversations/{conversation_id}/convert": - post: - summary: Convert a conversation to a ticket - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: conversation_id - in: path - required: true - description: The id of the conversation to target - example: 123 - schema: - type: integer - tags: - - Conversations - description: You can convert a conversation to a ticket. - operationId: convertConversationToTicket - responses: - '200': - description: successful - content: - application/json: - examples: - successful: + Admin Reply with a Note: value: - type: ticket - id: '611' - ticket_id: '22' - ticket_attributes: {} - ticket_state: - type: ticket_state - id: '7493' - category: submitted - internal_label: Submitted - external_label: Submitted - ticket_type: - type: ticket_type - id: '53' - name: my-ticket-type-1 - description: my ticket type description is awesome. - icon: "\U0001F981" - workspace_id: this_is_an_id442_that_should_be_at_least_ - archived: false - created_at: 1734537737 - updated_at: 1734537737 - is_internal: false - ticket_type_attributes: - type: list - data: [] - category: Customer + type: conversation + id: '525' + created_at: 1734537563 + updated_at: 1734537565 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918350' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267696' + name: Ciaran213 Lee + email: admin213@email.com + attachments: [] + url: + redacted: false contacts: type: contact.list contacts: - type: contact - id: 6762f2041bb69f9f2193bc0c + id: 6762f15b1bb69f9f2193bbbc external_id: '70' - admin_assignee_id: 0 - team_assignee_id: 0 - created_at: 1734537732 - updated_at: 1734537737 - ticket_parts: - type: ticket_part.list - ticket_parts: - - type: ticket_part - id: '151' - part_type: comment - body: "

Comment for message

" - created_at: 1734537732 - updated_at: 1734537732 - author: - id: 6762f2041bb69f9f2193bc0c - type: user - name: Joe Bloggs - email: joe@bloggs.com - attachments: [] - redacted: false - app_package_code: test-integration - - type: ticket_part - id: '152' - part_type: ticket_state_updated_by_admin - ticket_state: submitted - previous_ticket_state: submitted - created_at: 1734537737 - updated_at: 1734537737 + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '133' + part_type: note + body: |- +

An Unordered HTML List

+
    +
  • Coffee
  • +
  • Tea
  • +
  • Milk
  • +
+

An Ordered HTML List

+
    +
  1. Coffee
  2. +
  3. Tea
  4. +
  5. Milk
  6. +
+ created_at: 1734537565 + updated_at: 1734537565 + notified_at: 1734537565 + assigned_to: author: - id: '991267767' - type: bot - name: Fin - email: operator+this_is_an_id442_that_should_be_at_least_@intercom.io + id: '991267696' + type: admin + name: Ciaran213 Lee + email: admin213@email.com attachments: [] + external_id: redacted: false - app_package_code: test-integration - total_count: 2 + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Admin Reply to send Quick Reply Options: + value: + type: conversation + id: '526' + created_at: 1734537567 + updated_at: 1734537568 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918351' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267698' + name: Ciaran214 Lee + email: admin214@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f15e1bb69f9f2193bbbd + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '134' + part_type: quick_reply + body: + created_at: 1734537568 + updated_at: 1734537568 + notified_at: 1734537568 + assigned_to: + author: + id: '991267698' + type: admin + name: Ciaran214 Lee + email: admin214@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + User last conversation reply: + value: + type: conversation + id: '527' + created_at: 1734537571 + updated_at: 1734537572 + waiting_since: 1734537572 + snoozed_until: + source: + type: conversation + id: '403918352' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267700' + name: Ciaran215 Lee + email: admin215@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1621bb69f9f2193bbbe + external_id: '70' + first_contact_reply: + created_at: 1734537572 + type: conversation + url: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 open: true + state: open + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: linked_objects: type: list data: [] total_count: 0 has_more: false - category: Customer - is_shared: true + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '135' + part_type: open + body: "

Thanks again :)

" + created_at: 1734537572 + updated_at: 1734537572 + notified_at: 1734537572 + assigned_to: + author: + id: 6762f1621bb69f9f2193bbbe + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 schema: - "$ref": "#/components/schemas/ticket" - '400': - description: Bad request + "$ref": "#/components/schemas/conversation" + '404': + description: Not found content: application/json: examples: - Bad request: + Not found: value: type: error.list - request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 + request_id: '06234918-c245-4caa-a2cc-90247983c6ff' errors: - - code: parameter_invalid - message: Ticket type is not a customer ticket type + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/convert_conversation_to_ticket_request" - examples: - successful: - summary: successful - value: - ticket_type_id: '53' - bad_request: - summary: Bad request - value: - ticket_type_id: '54' - "/conversations/attributes": - get: - summary: List all conversation attributes - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: include_archived - in: query - required: false - description: Include archived attributes in the list. Default `false`. - schema: - type: boolean - example: false - tags: - - Conversations Attributes - operationId: listConversationAttributes - description: You can fetch a list of all conversation attributes for your workspace. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: list - data: - - type: conversation_attribute - id: 3 - name: test 2 - description: '' - data_type: string - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777473061 - updated_at: 1777473061 - admin_id: '16' - multiline: false - - type: conversation_attribute - id: 2 - name: test list - description: '' - data_type: list - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777472538 - updated_at: 1777537799 - admin_id: '16' - options: - - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - label: '1' - archived: false - - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 - label: '2' - archived: false - - id: c3d4e5f6-a7b8-9012-cdef-012345678912 - label: '3' - archived: false - - type: conversation_attribute - id: 6 - name: Ref to Test - description: '' - data_type: relationship - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777547482 - updated_at: 1777547482 - admin_id: '16' - reference: - type: many - object_type_id: Test_Object - schema: - "$ref": "#/components/schemas/conversation_attribute_list" '401': description: Unauthorized content: @@ -9010,209 +9591,2337 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: 50f1e8d1-cf1a-450c-a7b5-87a264076241 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - post: - summary: Create a conversation attribute - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Conversations Attributes - operationId: createConversationAttribute - description: Create a new conversation attribute. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: conversation_attribute - id: 8 - name: api_test_attr - description: Created via API test - data_type: string - required: false - visible_to_team_ids: [] - archived: false - created_at: 1778239701 - updated_at: 1778239701 - admin_id: '16' - multiline: false - schema: - "$ref": "#/components/schemas/conversation_attribute" - '422': - description: Invalid data_type - content: - application/json: - examples: - Invalid data_type: - value: - type: error.list - request_id: 4be81317-ba5a-455a-a80d-862fe4ad888b - errors: - - code: parameter_invalid - message: "data_type 'invalid_type' is not valid. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files" - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '403': + description: API plan restricted content: application/json: examples: - Unauthorized: + API plan restricted: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: 48ad16d0-525c-40bf-b733-89239feb70e3 errors: - - code: unauthorized - message: Access Token Invalid + - code: api_plan_restricted + message: Active subscription needed. schema: "$ref": "#/components/schemas/error" requestBody: - required: true content: application/json: schema: - "$ref": "#/components/schemas/create_conversation_attribute_request" + "$ref": "#/components/schemas/reply_conversation_request" examples: - Create string attribute: - summary: Create a string attribute + user_reply: + summary: User reply value: - name: api_test_attr - data_type: string - description: Created via API test - "/conversations/attributes/{id}": - get: - summary: Get a conversation attribute + message_type: comment + type: user + intercom_user_id: 6762f1571bb69f9f2193bbbb + body: Thanks again :) + admin_note_reply: + summary: Admin Reply with a Note + value: + message_type: note + type: admin + admin_id: 991267696 + body: "

An Unordered HTML List

  • Coffee
  • + \
  • Tea
  • Milk

An Ordered HTML List

+ \
  1. Coffee
  2. Tea
  3. Milk
+ \ " + admin_quick_reply_reply: + summary: Admin Reply to send Quick Reply Options + value: + message_type: quick_reply + type: admin + admin_id: 991267698 + reply_options: + - text: 'Yes' + uuid: a5e1c524-5ddd-4c3e-9328-6bca5d6e3edb + - text: 'No' + uuid: f4a98af1-be56-4948-a57e-e1a83f8484c6 + contact_quick_reply_reply: + summary: User reply with quick reply selection + value: + message_type: quick_reply + type: user + intercom_user_id: 6762f1621bb69f9f2193bbbe + reply_options: + - text: 'Yes' + uuid: a5e1c524-5ddd-4c3e-9328-6bca5d6e3edb + user_last_conversation_reply: + summary: User last conversation reply + value: + message_type: comment + type: user + intercom_user_id: 6762f1661bb69f9f2193bbbf + body: Thanks again :) + "/conversations/{conversation_id}/parts": + post: + summary: Manage a conversation parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id + - name: conversation_id in: path required: true - description: The conversation attribute id - example: 3 + description: The identifier for the conversation as given by Intercom. + example: '123' schema: - type: integer + type: string tags: - - Conversations Attributes - operationId: getConversationAttribute - description: Retrieve a single conversation attribute by ID. + - Conversations + operationId: manageConversation + description: | + For managing conversations you can: + - Close a conversation + - Snooze a conversation to reopen on a future date + - Open a conversation which is `snoozed` or `closed` + - Assign a conversation to an admin and/or team. responses: '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: conversation_attribute - id: 3 - name: test 2 - description: '' - data_type: string - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777473061 - updated_at: 1777473061 - admin_id: '16' - multiline: false - schema: - "$ref": "#/components/schemas/conversation_attribute" - '404': - description: Conversation attribute not found - content: - application/json: - examples: - Not found: - value: - type: error.list - request_id: null - errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + description: Assign a conversation content: application/json: examples: - Unauthorized: + Close a conversation: value: - type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - put: - summary: Update a conversation attribute - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id + type: conversation + id: '531' + created_at: 1734537582 + updated_at: 1734537584 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918356' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267708' + name: Ciaran219 Lee + email: admin219@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f16e1bb69f9f2193bbc2 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '136' + part_type: close + body: "

Goodbye :)

" + created_at: 1734537584 + updated_at: 1734537584 + notified_at: 1734537584 + assigned_to: + author: + id: '991267708' + type: admin + name: Ciaran219 Lee + email: admin219@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Snooze a conversation: + value: + type: conversation + id: '532' + created_at: 1734537586 + updated_at: 1734537587 + waiting_since: + snoozed_until: 1734541187 + source: + type: conversation + id: '403918357' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267710' + name: Ciaran220 Lee + email: admin220@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1711bb69f9f2193bbc3 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: snoozed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '137' + part_type: snoozed + body: + created_at: 1734537587 + updated_at: 1734537587 + notified_at: 1734537587 + assigned_to: + author: + id: '991267710' + type: admin + name: Ciaran220 Lee + email: admin220@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Open a conversation: + value: + type: conversation + id: '537' + created_at: 1734537587 + updated_at: 1734537601 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918358' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267712' + name: Ciaran221 Lee + email: admin221@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1781bb69f9f2193bbc8 + external_id: '74' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: true + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: '' + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '139' + part_type: open + body: + created_at: 1734537601 + updated_at: 1734537601 + notified_at: 1734537601 + assigned_to: + author: + id: '991267712' + type: admin + name: Ciaran221 Lee + email: admin221@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Assign a conversation: + value: + type: conversation + id: '542' + created_at: 1734537603 + updated_at: 1734537605 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918361' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267715' + name: Ciaran223 Lee + email: admin223@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1831bb69f9f2193bbcc + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '140' + part_type: assign_and_reopen + body: + created_at: 1734537605 + updated_at: 1734537605 + notified_at: 1734537605 + assigned_to: + type: admin + id: '991267715' + author: + id: '991267715' + type: admin + name: Ciaran223 Lee + email: admin223@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: e056b3c3-fae3-4a3c-9bcf-836b84efa331 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 623bbbb8-f6fb-45f3-a2e2-4106ff3a4349 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: a57737d0-63a7-42bd-aa65-8380ef828124 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + oneOf: + - "$ref": "#/components/schemas/close_conversation_request" + - "$ref": "#/components/schemas/snooze_conversation_request" + - "$ref": "#/components/schemas/open_conversation_request" + - "$ref": "#/components/schemas/assign_conversation_request" + examples: + close_a_conversation: + summary: Close a conversation + value: + message_type: close + type: admin + admin_id: 991267708 + body: Goodbye :) + snooze_a_conversation: + summary: Snooze a conversation + value: + message_type: snoozed + admin_id: 991267710 + snoozed_until: 1734541187 + open_a_conversation: + summary: Open a conversation + value: + message_type: open + admin_id: 991267712 + assign_a_conversation: + summary: Assign a conversation + value: + message_type: assignment + type: admin + admin_id: 991267715 + assignee_id: 991267715 + not_found: + summary: Not found + value: + message_type: close + type: admin + admin_id: 991267717 + body: Goodbye :) + "/conversations/{conversation_id}/customers": + post: + summary: Attach a contact to a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The identifier for the conversation as given by Intercom. + example: '123' + schema: + type: string + tags: + - Conversations + operationId: attachContactToConversation + description: |+ + You can add participants who are contacts to a conversation, on behalf of either another contact or an admin. + + {% admonition type="warning" name="Contacts without an email" %} + 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`. + {% /admonition %} + + responses: + '200': + description: Attach a contact to a conversation + content: + application/json: + examples: + Attach a contact to a conversation: + value: + customers: + - type: user + id: 6762f19b1bb69f9f2193bbd4 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: 86fd8b2e-7048-4fbd-9fb0-d73085d7210b + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 9dc7c1a0-b818-472c-adf6-3e327f22f541 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 99f72599-ac98-4b1e-af96-808654b6383e + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/attach_contact_to_conversation_request" + examples: + attach_a_contact_to_a_conversation: + summary: Attach a contact to a conversation + value: + admin_id: 991267731 + customer: + intercom_user_id: 6762f19b1bb69f9f2193bbd4 + not_found: + summary: Not found + value: + admin_id: 991267733 + customer: + intercom_user_id: 6762f19e1bb69f9f2193bbd5 + "/conversations/{conversation_id}/customers/{contact_id}": + delete: + summary: Detach a contact from a group conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The identifier for the conversation as given by Intercom. + example: '123' + schema: + type: string + - name: contact_id + in: path + required: true + description: The identifier for the contact as given by Intercom. + example: '123' + schema: + type: string + tags: + - Conversations + operationId: detachContactFromConversation + description: |+ + You can remove participants who are contacts from a group conversation, on behalf of an admin. + + {% admonition type="warning" name="Removing the last participant" %} + You cannot remove the last remaining contact from a conversation. + {% /admonition %} + + responses: + '200': + description: Detach a contact from a group conversation + content: + application/json: + examples: + Detach a contact from a group conversation: + value: + customers: + - type: user + id: 6762f1b41bb69f9f2193bbe0 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Contact not found + content: + application/json: + examples: + Conversation not found: + value: + type: error.list + request_id: 89835b60-6756-4d2a-b148-26ca0cb49f9f + errors: + - code: not_found + message: Resource Not Found + Contact not found: + value: + type: error.list + request_id: ab1b9371-3185-417f-a53a-dcae35892980 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + '422': + description: Last customer + content: + application/json: + examples: + Last customer: + value: + type: error.list + request_id: 8275e92f-66b7-40f9-82a8-9647ca8d7eb4 + errors: + - code: parameter_invalid + message: Removing the last customer is not allowed + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 89ef64b2-d1f9-40c3-89e9-d39175d3d647 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 6fe4106b-967a-46ba-b1c9-9996aff6e8c3 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/detach_contact_from_conversation_request" + examples: + detach_a_contact_from_a_group_conversation: + summary: Detach a contact from a group conversation + value: + admin_id: 991267739 + customer: + intercom_user_id: 6762f1a61bb69f9f2193bbd8 + conversation_not_found: + summary: Conversation not found + value: + admin_id: 991267742 + customer: + intercom_user_id: 6762f1b61bb69f9f2193bbe1 + contact_not_found: + summary: Contact not found + value: + admin_id: 991267745 + customer: + intercom_user_id: 6762f1c41bb69f9f2193bbe9 + last_customer: + summary: Last customer + value: + admin_id: 991267748 + customer: + intercom_user_id: 6762f1d11bb69f9f2193bbf1 + "/conversations/{id}/handling_events": + get: + summary: List handling events + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The identifier for the conversation as given by Intercom. + example: '123' + schema: + type: string + tags: + - Conversations + operationId: listHandlingEvents + description: | + List all pause/resume events for a conversation. These events track when teammates paused or resumed handling a conversation. + + Requires the `read_conversations` OAuth scope. + responses: + '200': + description: Successful response + content: + application/json: + schema: + "$ref": "#/components/schemas/handling_event_list" + examples: + Successful response: + value: + handling_events: + - teammate: + type: admin + id: 123 + name: Jane Example + email: jane@example.com + type: paused + timestamp: "2026-01-09T09:00:00Z" + reason: Paused + - teammate: + type: admin + id: 123 + name: Jane Example + email: jane@example.com + type: resumed + timestamp: "2026-01-09T09:10:00Z" + '401': + description: Unauthorized + content: + application/json: + schema: + "$ref": "#/components/schemas/error" + '404': + description: Conversation not found + content: + application/json: + schema: + "$ref": "#/components/schemas/error" + "/conversations/redact": + post: + summary: Redact a conversation part + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Conversations + operationId: redactConversation + description: |+ + You can redact a conversation part or the source message of a conversation (as seen in the source object). + + {% admonition type="info" name="Redacting parts and messages" %} + 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. + {% /admonition %} + + responses: + '200': + description: Redact a conversation part + content: + application/json: + examples: + Redact a conversation part: + value: + type: conversation + id: '608' + created_at: 1734537721 + updated_at: 1734537724 + waiting_since: 1734537722 + snoozed_until: + source: + type: conversation + id: '403918391' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267757' + name: Ciaran247 Lee + email: admin247@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1f81bb69f9f2193bc09 + external_id: '70' + first_contact_reply: + created_at: 1734537722 + type: conversation + url: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: true + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '149' + part_type: open + body: "

This message was deleted

" + created_at: 1734537722 + updated_at: 1734537724 + notified_at: 1734537722 + assigned_to: + author: + id: 6762f1f81bb69f9f2193bc09 + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + external_id: + redacted: true + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: 5b7bb755-4031-4bfe-8897-54d0f1872bbc + errors: + - code: conversation_part_or_message_not_found + message: Conversation part or message not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 4814668f-5d31-4bf7-8f66-b426aac054db + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/redact_conversation_request" + examples: + redact_a_conversation_part: + summary: Redact a conversation part + value: + type: conversation_part + conversation_id: 608 + conversation_part_id: 149 + not_found: + summary: Not found + value: + type: conversation_part + conversation_id: really_123_doesnt_exist + conversation_part_id: really_123_doesnt_exist + "/conversations/{conversation_id}/convert": + post: + summary: Convert a conversation to a ticket + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The id of the conversation to target + example: 123 + schema: + type: integer + tags: + - Conversations + description: You can convert a conversation to a ticket. + operationId: convertConversationToTicket + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: ticket + id: '611' + ticket_id: '22' + ticket_attributes: {} + ticket_state: + type: ticket_state + id: '7493' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_type: + type: ticket_type + id: '53' + name: my-ticket-type-1 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id442_that_should_be_at_least_ + archived: false + created_at: 1734537737 + updated_at: 1734537737 + is_internal: false + ticket_type_attributes: + type: list + data: [] + category: Customer + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f2041bb69f9f2193bc0c + external_id: '70' + admin_assignee_id: 0 + team_assignee_id: 0 + created_at: 1734537732 + updated_at: 1734537737 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '151' + part_type: comment + body: "

Comment for message

" + created_at: 1734537732 + updated_at: 1734537732 + author: + id: 6762f2041bb69f9f2193bc0c + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + redacted: false + app_package_code: test-integration + - type: ticket_part + id: '152' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537737 + updated_at: 1734537737 + author: + id: '991267767' + type: bot + name: Fin + email: operator+this_is_an_id442_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + app_package_code: test-integration + total_count: 2 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Customer + is_shared: true + schema: + "$ref": "#/components/schemas/ticket" + '400': + description: Bad request + content: + application/json: + examples: + Bad request: + value: + type: error.list + request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 + errors: + - code: parameter_invalid + message: Ticket type is not a customer ticket type + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/convert_conversation_to_ticket_request" + examples: + successful: + summary: successful + value: + ticket_type_id: '53' + bad_request: + summary: Bad request + value: + ticket_type_id: '54' + "/conversations/attributes": + get: + summary: List all conversation attributes + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: include_archived + in: query + required: false + description: Include archived attributes in the list. Default `false`. + schema: + type: boolean + example: false + tags: + - Conversations Attributes + operationId: listConversationAttributes + description: You can fetch a list of all conversation attributes for your workspace. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: list + data: + - type: conversation_attribute + id: 3 + name: test 2 + description: '' + data_type: string + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777473061 + updated_at: 1777473061 + admin_id: '16' + multiline: false + - type: conversation_attribute + id: 2 + name: test list + description: '' + data_type: list + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777472538 + updated_at: 1777537799 + admin_id: '16' + options: + - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + label: '1' + archived: false + - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 + label: '2' + archived: false + - id: c3d4e5f6-a7b8-9012-cdef-012345678912 + label: '3' + archived: false + - type: conversation_attribute + id: 6 + name: Ref to Test + description: '' + data_type: relationship + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777547482 + updated_at: 1777547482 + admin_id: '16' + reference: + type: many + object_type_id: Test_Object + schema: + "$ref": "#/components/schemas/conversation_attribute_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create a conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Conversations Attributes + operationId: createConversationAttribute + description: Create a new conversation attribute. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 8 + name: api_test_attr + description: Created via API test + data_type: string + required: false + visible_to_team_ids: [] + archived: false + created_at: 1778239701 + updated_at: 1778239701 + admin_id: '16' + multiline: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '422': + description: Invalid data_type + content: + application/json: + examples: + Invalid data_type: + value: + type: error.list + request_id: 4be81317-ba5a-455a-a80d-862fe4ad888b + errors: + - code: parameter_invalid + message: "data_type 'invalid_type' is not valid. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files" + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/create_conversation_attribute_request" + examples: + Create string attribute: + summary: Create a string attribute + value: + name: api_test_attr + data_type: string + description: Created via API test + "/conversations/attributes/{id}": + get: + summary: Get a conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 3 + schema: + type: integer + tags: + - Conversations Attributes + operationId: getConversationAttribute + description: Retrieve a single conversation attribute by ID. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 3 + name: test 2 + description: '' + data_type: string + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777473061 + updated_at: 1777473061 + admin_id: '16' + multiline: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update a conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 8 + schema: + type: integer + tags: + - Conversations Attributes + operationId: updateConversationAttribute + description: Update an existing conversation attribute. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 8 + name: api_test_renamed + description: Updated via API + data_type: string + required: false + visible_to_team_ids: [] + archived: false + created_at: 1778239701 + updated_at: 1778239718 + admin_id: '16' + multiline: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/update_conversation_attribute_request" + examples: + Update name: + summary: Update name and description + value: + name: api_test_renamed + description: Updated via API + delete: + summary: Delete (archive) a conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 8 + schema: + type: integer + tags: + - Conversations Attributes + operationId: deleteConversationAttribute + description: "Archive a conversation attribute (soft delete). The attribute is marked as archived but not permanently deleted." + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 8 + name: api_test_renamed + description: Updated via API + data_type: string + required: false + visible_to_team_ids: [] + archived: true + created_at: 1778239701 + updated_at: 1778239721 + admin_id: '16' + multiline: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/conversations/attributes/{id}/options": + post: + summary: Add an option to a list conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 2 + schema: + type: integer + tags: + - Conversations Attributes + operationId: createConversationAttributeOption + description: Add a new option to a list-type conversation attribute. Returns the full attribute with the updated options array. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 2 + name: test list + description: '' + data_type: list + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777472538 + updated_at: 1778240000 + admin_id: '16' + options: + - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + label: '1' + archived: false + - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 + label: '2' + archived: false + - id: c3d4e5f6-a7b8-9012-cdef-012345678912 + label: '3' + archived: false + - id: d4e5f6a7-b8c9-0123-defa-123456789023 + label: High + archived: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + schema: + "$ref": "#/components/schemas/error" + '422': + description: Unprocessable entity + content: + application/json: + examples: + Not a list type: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: Options can only be managed on list attributes + Label required: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: label is required + Label not a string: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: label must be a string + Unexpected key in body: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: only 'label' is accepted + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/create_conversation_attribute_option_request" + examples: + Add option: + summary: Add a new list option + value: + label: High + "/conversations/attributes/{id}/options/{option_id}": + put: + summary: Update an option on a list conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 2 + schema: + type: integer + - name: option_id + in: path + required: true + description: The UUID of the list option to update (from the `id` field in the options array) + example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + schema: + type: string + tags: + - Conversations Attributes + operationId: updateConversationAttributeOption + description: Update the label of a single option on a list-type conversation attribute. Returns the full attribute with the updated options array. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 2 + name: test list + description: '' + data_type: list + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777472538 + updated_at: 1778240001 + admin_id: '16' + options: + - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + label: Renamed + archived: false + - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 + label: '2' + archived: false + - id: c3d4e5f6-a7b8-9012-cdef-012345678912 + label: '3' + archived: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute or option not found + content: + application/json: + examples: + Attribute not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + Option not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: List option not found + schema: + "$ref": "#/components/schemas/error" + '422': + description: Unprocessable entity + content: + application/json: + examples: + Not a list type: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: Options can only be managed on list attributes + Label required: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: label is required + Label not a string: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: label must be a string + Unexpected key in body: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: only 'label' is accepted + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/update_conversation_attribute_option_request" + examples: + Rename option: + summary: Rename an existing option + value: + label: Renamed + delete: + summary: Archive an option on a list conversation attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The conversation attribute id + example: 2 + schema: + type: integer + - name: option_id + in: path + required: true + description: The UUID of the list option to archive (from the `id` field in the options array) + example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + schema: + type: string + tags: + - Conversations Attributes + operationId: deleteConversationAttributeOption + description: "Archive a single option on a list-type conversation attribute (soft delete). The option remains in the response with `archived: true`. Returns the full attribute with the updated options array." + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: conversation_attribute + id: 2 + name: test list + description: '' + data_type: list + required: false + visible_to_team_ids: [] + archived: false + created_at: 1777472538 + updated_at: 1778240002 + admin_id: '16' + options: + - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + label: '1' + archived: true + - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 + label: '2' + archived: false + - id: c3d4e5f6-a7b8-9012-cdef-012345678912 + label: '3' + archived: false + schema: + "$ref": "#/components/schemas/conversation_attribute" + '404': + description: Conversation attribute or option not found + content: + application/json: + examples: + Attribute not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: Conversation attribute not found + Option not found: + value: + type: error.list + request_id: null + errors: + - code: conversation_attribute_not_found + message: List option not found + schema: + "$ref": "#/components/schemas/error" + '422': + description: Unprocessable entity + content: + application/json: + examples: + Not a list type: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: Options can only be managed on list attributes + Minimum options: + value: + type: error.list + request_id: null + errors: + - code: parameter_invalid + message: A list attribute must have at least 2 active options + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/custom_object_instances/{custom_object_type_identifier}": + parameters: + - name: custom_object_type_identifier + in: path + description: The unique identifier of the custom object type that defines the + structure of the custom object instance. + example: Order + required: true + schema: + type: string + post: + summary: Create or Update a Custom Object Instance + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: createCustomObjectInstances + description: Create or update a custom object instance + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '22' + type: Order + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + created_at: 1734537745 + updated_at: 1734537745 + schema: + "$ref": "#/components/schemas/custom_object_instance" + '401': + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/TypeNotFound" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_or_update_custom_object_instance_request" + examples: + successful: + summary: successful + value: + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + get: + summary: Get Custom Object Instance by External ID + parameters: + - name: external_id + in: query + style: form + required: true + schema: + type: string + description: The unique identifier for the instance in the external system + it originated from. + title: Find by external_id + properties: + external_id: + type: string + required: + - external_id + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: getCustomObjectInstancesByExternalId + description: Fetch a Custom Object Instance by external_id. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '24' + type: Order + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + external_id: '123' + external_created_at: + external_updated_at: + created_at: 1734537748 + updated_at: 1734537748 + schema: + "$ref": "#/components/schemas/custom_object_instance" + '401': + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/ObjectNotFound" + delete: + summary: Delete a Custom Object Instance by External ID + parameters: + - name: external_id + in: query + style: form + required: true + schema: + type: string + description: The unique identifier for the instance in the external system + it originated from. + title: Find by external_id + properties: + external_id: + type: string + required: + - external_id + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: deleteCustomObjectInstancesById + description: Delete a single Custom Object instance by external_id. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + id: '26' + object: Order + deleted: true + schema: + "$ref": "#/components/schemas/custom_object_instance_deleted" + '401': + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/ObjectNotFound" + "/custom_object_instances/{custom_object_type_identifier}/{custom_object_instance_id}": + parameters: + - name: custom_object_type_identifier + in: path + description: The unique identifier of the custom object type that defines the + structure of the custom object instance. + example: Order + required: true + schema: + type: string + get: + summary: Get Custom Object Instance by ID + parameters: + - name: custom_object_instance_id in: path + description: The id or external_id of the custom object instance required: true - description: The conversation attribute id - example: 8 schema: - type: integer + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" tags: - - Conversations Attributes - operationId: updateConversationAttribute - description: Update an existing conversation attribute. + - Custom Object Instances + operationId: getCustomObjectInstancesById + description: Fetch a Custom Object Instance by id. responses: '200': - description: Successful response + description: successful content: application/json: examples: - Successful response: + successful: value: - type: conversation_attribute - id: 8 - name: api_test_renamed - description: Updated via API - data_type: string - required: false - visible_to_team_ids: [] - archived: false - created_at: 1778239701 - updated_at: 1778239718 - admin_id: '16' - multiline: false + id: '25' + type: Order + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + external_id: '123' + external_created_at: + external_updated_at: + created_at: 1734537750 + updated_at: 1734537750 schema: - "$ref": "#/components/schemas/conversation_attribute" + "$ref": "#/components/schemas/custom_object_instance" + '401': + $ref: "#/components/responses/Unauthorized" '404': - description: Conversation attribute not found + $ref: "#/components/responses/ObjectNotFound" + delete: + summary: Delete a Custom Object Instance by ID + parameters: + - name: custom_object_instance_id + in: path + description: The Intercom defined id of the custom object instance + required: true + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: deleteCustomObjectInstancesByExternalId + description: Delete a single Custom Object instance using the Intercom defined + id. + responses: + '200': + description: successful content: application/json: examples: - Not found: + successful: value: - type: error.list - request_id: null - errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found + id: '26' + object: Order + deleted: true + schema: + "$ref": "#/components/schemas/custom_object_instance_deleted" + '401': + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/ObjectNotFound" + "/data_attributes": + get: + summary: List all data attributes + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: model + in: query + required: false + description: "Specify the data attribute model to return. For conversation attributes, use GET /conversations/attributes instead." + schema: + type: string + enum: + - contact + - company + example: company + - name: include_archived + in: query + required: false + description: Include archived attributes in the list. By default we return + only non archived data attributes. + example: false + schema: + type: boolean + tags: + - Data Attributes + operationId: lisDataAttributes + description: | + You can fetch a list of all data attributes belonging to a workspace for contacts or companies. + + {% admonition type="warning" %} + Conversation attributes are no longer returned by this endpoint. Calling without a `model` parameter no longer includes them, and `model=conversation` returns a `422` error. Use `GET /conversations/attributes` instead. + {% /admonition %} + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: list + data: + - type: data_attribute + name: name + full_name: name + label: Company name + description: The name of a company + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: company_id + full_name: company_id + label: Company ID + description: A number identifying a company + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: last_request_at + full_name: last_request_at + label: Company last seen + description: The last day anyone from a company visited your + site or app + data_type: date + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: remote_created_at + full_name: remote_created_at + label: Company created at + description: The day a company was added to Intercom + data_type: date + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: user_count + full_name: user_count + label: People + description: The number of people in a company + data_type: integer + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: session_count + full_name: session_count + label: Company web sessions + description: All visits from anyone in a company to your product's + site or app + data_type: integer + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: name + full_name: plan.name + label: Plan + description: A specific plan or level within your product that + companies have signed up to + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: monthly_spend + full_name: monthly_spend + label: Monthly Spend + description: The monthly revenue you receive from a company + data_type: float + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: size + full_name: size + label: Company size + description: The number of people employed in this company, + expressed as a single number + data_type: integer + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: industry + full_name: industry + label: Company industry + description: The category or domain this company belongs to + e.g. 'ecommerce' or 'SaaS' + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: website + full_name: website + label: Company website + description: The web address for the company's primary marketing + site + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - id: 34 + type: data_attribute + name: The One Ring + full_name: custom_attributes.The One Ring + label: The One Ring + description: One ring to rule them all, one ring to find them, + One ring to bring them all and in the darkness bind them. + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: true + archived: false + admin_id: '991267784' + created_at: 1734537753 + updated_at: 1734537753 + model: company + - type: data_attribute + name: id + full_name: id + label: ID + description: The Intercom defined id representing the company + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: created_at + full_name: created_at + label: Created at + description: The time the company was added to Intercom + data_type: date + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: updated_at + full_name: updated_at + label: Updated at + description: The last time the company was updated + data_type: date + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: id + full_name: plan.id + label: Plan ID + description: The Intercom defined id representing the plan + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: app_id + full_name: app_id + label: App ID + description: The Intercom defined id representing the app + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/data_attribute_list" '401': description: Unauthorized content: @@ -9221,192 +11930,106 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: 6d231766-b44b-4e78-bc9e-9c268ff19671 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - required: true - content: - application/json: - schema: - "$ref": "#/components/schemas/update_conversation_attribute_request" - examples: - Update name: - summary: Update name and description - value: - name: api_test_renamed - description: Updated via API - delete: - summary: Delete (archive) a conversation attribute - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The conversation attribute id - example: 8 - schema: - type: integer - tags: - - Conversations Attributes - operationId: deleteConversationAttribute - description: "Archive a conversation attribute (soft delete). The attribute is marked as archived but not permanently deleted." - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: conversation_attribute - id: 8 - name: api_test_renamed - description: Updated via API - data_type: string - required: false - visible_to_team_ids: [] - archived: true - created_at: 1778239701 - updated_at: 1778239721 - admin_id: '16' - multiline: false - schema: - "$ref": "#/components/schemas/conversation_attribute" - '404': - description: Conversation attribute not found - content: - application/json: - examples: - Not found: - value: - type: error.list - request_id: null - errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '422': + description: Unprocessable entity - model=conversation is no longer supported content: application/json: examples: - Unauthorized: + Deprecated conversation model: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: b7912266-b12e-4d12-b2ce-9cd44d33f0c0 errors: - - code: unauthorized - message: Access Token Invalid + - code: parameter_invalid + message: model=conversation is no longer supported. Use GET /conversations/attributes instead schema: "$ref": "#/components/schemas/error" - "/conversations/attributes/{id}/options": post: - summary: Add an option to a list conversation attribute + summary: Create a data attribute parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The conversation attribute id - example: 2 - schema: - type: integer tags: - - Conversations Attributes - operationId: createConversationAttributeOption - description: Add a new option to a list-type conversation attribute. Returns the full attribute with the updated options array. + - Data Attributes + operationId: createDataAttribute + description: You can create a data attributes for a `contact` or a `company`. responses: '200': - description: Successful response + description: Successful content: application/json: examples: - Successful response: + Successful: value: - type: conversation_attribute - id: 2 - name: test list - description: '' - data_type: list - required: false - visible_to_team_ids: [] + id: 37 + type: data_attribute + name: Mithril Shirt + full_name: custom_attributes.Mithril Shirt + label: Mithril Shirt + data_type: string + api_writable: true + ui_writable: false + messenger_writable: false + custom: true archived: false - created_at: 1777472538 - updated_at: 1778240000 - admin_id: '16' - options: - - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - label: '1' - archived: false - - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 - label: '2' - archived: false - - id: c3d4e5f6-a7b8-9012-cdef-012345678912 - label: '3' - archived: false - - id: d4e5f6a7-b8c9-0123-defa-123456789023 - label: High - archived: false + admin_id: '991267786' + created_at: 1734537756 + updated_at: 1734537756 + model: company schema: - "$ref": "#/components/schemas/conversation_attribute" - '404': - description: Conversation attribute not found + "$ref": "#/components/schemas/data_attribute" + '400': + description: Too few options for list content: application/json: examples: - Not found: + Same name already exists: value: type: error.list - request_id: null + request_id: da2a7037-11f4-4fcc-8d19-27da3b3a4336 errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found - schema: - "$ref": "#/components/schemas/error" - '422': - description: Unprocessable entity - content: - application/json: - examples: - Not a list type: + - code: parameter_invalid + message: You already have 'The One Ring' in your company data. + To save this as new people data, use a different name. + Invalid name: value: type: error.list - request_id: null + request_id: 1c45cfd9-ffd1-4e3e-9f7a-2ac99abdf03d errors: - code: parameter_invalid - message: Options can only be managed on list attributes - Label required: + message: Your name for this attribute must only contain alphanumeric + characters, currency symbols, and hyphens + Attribute already exists: value: type: error.list - request_id: null + request_id: 55999605-a170-4894-a3d0-090c4fee8d11 errors: - code: parameter_invalid - message: label is required - Label not a string: + message: You already have 'The One Ring' in your company data. + To save this as new company data, use a different name. + Invalid Data Type: value: type: error.list - request_id: null + request_id: e0a9ccc7-a540-4ef0-8ffc-28ab86658b04 errors: - code: parameter_invalid - message: label must be a string - Unexpected key in body: + message: Data Type isn't an option + Too few options for list: value: type: error.list - request_id: null + request_id: 6544ccf8-435d-49e1-91ed-e49356f14255 errors: - code: parameter_invalid - message: only 'label' is accepted + message: The Data Attribute model field must be either contact + or company schema: "$ref": "#/components/schemas/error" '401': @@ -9417,134 +12040,213 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: fa71b91c-4a25-4fe6-88a9-884f6950860e errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" requestBody: - required: true content: application/json: schema: - "$ref": "#/components/schemas/create_conversation_attribute_option_request" + "$ref": "#/components/schemas/create_data_attribute_request" examples: - Add option: - summary: Add a new list option + successful: + summary: Successful value: - label: High - "/conversations/attributes/{id}/options/{option_id}": - put: - summary: Update an option on a list conversation attribute + name: Mithril Shirt + model: company + data_type: string + same_name_already_exists: + summary: Same name already exists + value: + name: The One Ring + model: contact + data_type: integer + invalid_name: + summary: Invalid name + value: + name: "!nv@l!d n@me" + model: company + data_type: string + attribute_already_exists: + summary: Attribute already exists + value: + name: The One Ring + model: company + data_type: string + invalid_data_type: + summary: Invalid Data Type + value: + name: The Second Ring + model: company + data_type: mithril + too_few_options_for_list: + summary: Too few options for list + value: + description: Just a plain old ring + options: + - value: 1-10 + archived: false + "/data_attributes/{data_attribute_id}": + "/data_connectors": + get: + summary: List all data connectors parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The conversation attribute id - example: 2 + - name: per_page + in: query + required: false + description: The number of results to return per page. Defaults to 20, minimum 1, maximum 50. schema: type: integer - - name: option_id - in: path - required: true - description: The UUID of the list option to update (from the `id` field in the options array) - example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + default: 20 + minimum: 1 + maximum: 50 + - name: starting_after + in: query + required: false + description: The cursor value from `pages.next.starting_after` in a previous response. Used to paginate through results. schema: type: string tags: - - Conversations Attributes - operationId: updateConversationAttributeOption - description: Update the label of a single option on a list-type conversation attribute. Returns the full attribute with the updated options array. + - Data Connectors + operationId: listDataConnectors + description: | + Returns a paginated list of all data connectors for the workspace, ordered by most recently updated first. Data connectors allow workflows and AI agents to make HTTP requests to external APIs. responses: '200': - description: Successful response + description: successful content: application/json: examples: - Successful response: + successful: value: - type: conversation_attribute - id: 2 - name: test list - description: '' - data_type: list - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777472538 - updated_at: 1778240001 - admin_id: '16' - options: - - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - label: Renamed - archived: false - - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 - label: '2' - archived: false - - id: c3d4e5f6-a7b8-9012-cdef-012345678912 - label: '3' - archived: false + type: list + data: + - type: data_connector + id: '12345' + name: Order Status Service + description: Fetches order status from external fulfillment API + state: live + http_method: post + direct_fin_usage: false + created_by_admin_id: '128' + updated_by_admin_id: '128' + created_at: '2025-11-15T09:30:00Z' + updated_at: '2026-01-20T14:22:15Z' + execution_results_url: "/data_connectors/12345/execution_results" + pages: + type: pages + per_page: 20 + next: + starting_after: WzE3MDc1OTQ3MTUuMCwxMjM0NV0= schema: - "$ref": "#/components/schemas/conversation_attribute" - '404': - description: Conversation attribute or option not found + "$ref": "#/components/schemas/data_connector_list" + '400': + description: Bad Request content: application/json: examples: - Attribute not found: + Invalid cursor: value: type: error.list - request_id: null + request_id: test-uuid-replacement errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found - Option not found: + - code: client_error + message: Invalid starting_after param. Please try again using a starting_after value from a paginated response + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: value: type: error.list - request_id: null + request_id: test-uuid-replacement errors: - - code: conversation_attribute_not_found - message: List option not found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + post: + summary: Create a data connector + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Data Connectors + operationId: createDataConnector + description: | + Create a new data connector. The connector is created in `draft` state. Configure its URL, headers, data inputs, and other settings, then set it to `live` when ready. + responses: + '201': + description: Data connector created + content: + application/json: + examples: + Data connector created: + value: + type: data_connector + id: '125' + name: Get Order Status + description: Looks up order status from an external service + state: draft + http_method: get + direct_fin_usage: true + audiences: + - leads + - visitors + execution_type: server_side + configuration_response_type: test_response_type + data_transformation_type: full_access + client_function_timeout_ms: 30000 + data_inputs: + - name: order_id + type: string + description: The order ID to look up + required: true + default_value: '' + response_fields: [] + object_mappings: [] + token_ids: [] + customer_authentication: true + bypass_authentication: false + validate_missing_attributes: true + created_by_admin_id: '128' + updated_by_admin_id: '128' + created_at: '2026-03-19T11:27:36Z' + updated_at: '2026-03-19T11:27:36Z' + execution_results_url: "/data_connectors/125/execution_results" + schema: + "$ref": "#/components/schemas/data_connector_detail" '422': - description: Unprocessable entity + description: Invalid parameter content: application/json: examples: - Not a list type: - value: - type: error.list - request_id: null - errors: - - code: parameter_invalid - message: Options can only be managed on list attributes - Label required: - value: - type: error.list - request_id: null - errors: - - code: parameter_invalid - message: label is required - Label not a string: + Missing name: value: type: error.list - request_id: null + request_id: b4a45e2c-7a8d-4f3e-9c1a-2d5e8f7a6b3c errors: - - code: parameter_invalid - message: label must be a string - Unexpected key in body: + - code: parameter_not_found + message: Name is required + Invalid audiences: value: type: error.list - request_id: null + request_id: c5b56f3d-8b9e-5g4f-0d2b-3e6f9g8b7c4d errors: - code: parameter_invalid - message: only 'label' is accepted + message: "Invalid audiences. Must be a subset of: leads, users, visitors" schema: "$ref": "#/components/schemas/error" '401': @@ -9555,25 +12257,56 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: test-uuid-replacement errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" requestBody: - required: true content: application/json: schema: - "$ref": "#/components/schemas/update_conversation_attribute_option_request" + "$ref": "#/components/schemas/create_data_connector_request" examples: - Rename option: - summary: Rename an existing option + data_connector_created: + summary: Data connector created value: - label: Renamed - delete: - summary: Archive an option on a list conversation attribute + name: Get Order Status + description: Looks up order status from an external service + http_method: get + url: "https://api.example.com/orders/{{order_id}}/status" + direct_fin_usage: true + audiences: + - leads + - visitors + headers: + - name: Content-Type + value: application/json + data_inputs: + - name: order_id + type: string + description: The order ID to look up + required: true + default_value: '' + customer_authentication: true + bypass_authentication: false + validate_missing_attributes: true + minimal: + summary: Minimal - name only + value: + name: My Connector + with_mock_response: + summary: With mock response + value: + name: Order Lookup + mock_response: + order: + id: 12345 + status: shipped + "/data_connectors/{id}": + get: + summary: Retrieve a data connector parameters: - name: Intercom-Version in: header @@ -9581,93 +12314,100 @@ paths: "$ref": "#/components/schemas/intercom_version" - name: id in: path + description: The unique identifier of the data connector. + example: '12345' required: true - description: The conversation attribute id - example: 2 schema: - type: integer - - name: option_id - in: path - required: true - description: The UUID of the list option to archive (from the `id` field in the options array) - example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + type: string + - name: state_version + in: query + required: false + description: Which version of the data connector to return. Defaults to live. schema: type: string + enum: + - draft + - live + default: live tags: - - Conversations Attributes - operationId: deleteConversationAttributeOption - description: "Archive a single option on a list-type conversation attribute (soft delete). The option remains in the response with `archived: true`. Returns the full attribute with the updated options array." + - Data Connectors + operationId: RetrieveDataConnector + description: | + You can retrieve the full detail of a single data connector by its ID. + + The response includes configuration, data inputs, response fields, and object mappings. responses: '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: conversation_attribute - id: 2 - name: test list - description: '' - data_type: list - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777472538 - updated_at: 1778240002 - admin_id: '16' - options: - - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - label: '1' - archived: true - - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 - label: '2' - archived: false - - id: c3d4e5f6-a7b8-9012-cdef-012345678912 - label: '3' - archived: false - schema: - "$ref": "#/components/schemas/conversation_attribute" - '404': - description: Conversation attribute or option not found + description: Data connector found content: application/json: examples: - Attribute not found: - value: - type: error.list - request_id: null - errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found - Option not found: + Data connector found: value: - type: error.list - request_id: null - errors: - - code: conversation_attribute_not_found - message: List option not found - schema: - "$ref": "#/components/schemas/error" - '422': - description: Unprocessable entity + type: data_connector + id: '12345' + name: Order Status Service + description: Fetches order status from external fulfillment API + state: live + http_method: post + direct_fin_usage: false + audiences: + - users + - leads + execution_type: server_side + configuration_response_type: test_response_type + data_transformation_type: + client_function_name: + client_function_timeout_ms: + data_inputs: + - name: conversation_id + type: string + description: The Intercom conversation ID + required: true + default_value: '' + response_fields: + - path: status + type: string + example_value: ok + redacted: false + object_mappings: [] + token_ids: [] + customer_authentication: false + bypass_authentication: false + validate_missing_attributes: + created_by_admin_id: '456' + updated_by_admin_id: '456' + created_at: '2025-11-15T09:30:00Z' + updated_at: '2026-01-20T14:22:15Z' + execution_results_url: "/data_connectors/12345/execution_results" + schema: + "$ref": "#/components/schemas/data_connector_detail" + '400': + description: Invalid state_version parameter content: application/json: examples: - Not a list type: + Invalid state_version: value: type: error.list - request_id: null + request_id: b4a45e2c-7a8d-4f3e-9c1a-2d5e8f7a6b3c errors: - code: parameter_invalid - message: Options can only be managed on list attributes - Minimum options: + message: "Invalid state_version. Must be one of: live, draft" + schema: + "$ref": "#/components/schemas/error" + '404': + description: Data connector not found + content: + application/json: + examples: + Data connector not found: value: type: error.list - request_id: null + request_id: b4a45e2c-7a8d-4f3e-9c1a-2d5e8f7a6b3c errors: - - code: parameter_invalid - message: A list attribute must have at least 2 active options + - code: data_connector_not_found + message: Data connector not found schema: "$ref": "#/components/schemas/error" '401': @@ -9678,621 +12418,477 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: test-uuid-replacement errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/custom_object_instances/{custom_object_type_identifier}": - parameters: - - name: custom_object_type_identifier - in: path - description: The unique identifier of the custom object type that defines the - structure of the custom object instance. - example: Order - required: true - schema: - type: string - post: - summary: Create or Update a Custom Object Instance + delete: + summary: Delete a data connector parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - tags: - - Custom Object Instances - operationId: createCustomObjectInstances - description: Create or update a custom object instance - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - id: '22' - type: Order - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - external_id: '123' - external_created_at: 1392036272 - external_updated_at: 1392036272 - created_at: 1734537745 - updated_at: 1734537745 - schema: - "$ref": "#/components/schemas/custom_object_instance" - '401': - $ref: "#/components/responses/Unauthorized" - '404': - $ref: "#/components/responses/TypeNotFound" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_or_update_custom_object_instance_request" - examples: - successful: - summary: successful - value: - external_id: '123' - external_created_at: 1392036272 - external_updated_at: 1392036272 - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - get: - summary: Get Custom Object Instance by External ID - parameters: - - name: external_id - in: query - style: form + - name: id + in: path required: true + description: The unique identifier of the data connector + example: '12345' schema: type: string - description: The unique identifier for the instance in the external system - it originated from. - title: Find by external_id - properties: - external_id: - type: string - required: - - external_id - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" tags: - - Custom Object Instances - operationId: getCustomObjectInstancesByExternalId - description: Fetch a Custom Object Instance by external_id. + - Data Connectors + operationId: deleteDataConnector + description: | + Delete an existing data connector. The connector must be in `draft` state and must not be in use by any workflows or AI agents. responses: '200': - description: successful + description: Data connector deleted content: application/json: examples: - successful: + Data connector deleted: value: - id: '24' - type: Order - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - external_id: '123' - external_created_at: - external_updated_at: - created_at: 1734537748 - updated_at: 1734537748 + id: '125' + object: data_connector + deleted: true schema: - "$ref": "#/components/schemas/custom_object_instance" - '401': - $ref: "#/components/responses/Unauthorized" + "$ref": "#/components/schemas/deleted_data_connector_object" '404': - $ref: "#/components/responses/ObjectNotFound" - delete: - summary: Delete a Custom Object Instance by External ID - parameters: - - name: external_id - in: query - style: form - required: true - schema: - type: string - description: The unique identifier for the instance in the external system - it originated from. - title: Find by external_id - properties: - external_id: - type: string - required: - - external_id - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Custom Object Instances - operationId: deleteCustomObjectInstancesById - description: Delete a single Custom Object instance by external_id. - responses: - '200': - description: successful + description: Data connector not found content: application/json: examples: - successful: + Data connector not found: value: - id: '26' - object: Order - deleted: true + type: error.list + request_id: b4a45e2c-7a8d-4f3e-9c1a-2d5e8f7a6b3c + errors: + - code: data_connector_not_found + message: Data connector not found schema: - "$ref": "#/components/schemas/custom_object_instance_deleted" - '401': - $ref: "#/components/responses/Unauthorized" - '404': - $ref: "#/components/responses/ObjectNotFound" - "/custom_object_instances/{custom_object_type_identifier}/{custom_object_instance_id}": - parameters: - - name: custom_object_type_identifier - in: path - description: The unique identifier of the custom object type that defines the - structure of the custom object instance. - example: Order - required: true - schema: - type: string - get: - summary: Get Custom Object Instance by ID - parameters: - - name: custom_object_instance_id - in: path - description: The id or external_id of the custom object instance - required: true - schema: - type: string - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Custom Object Instances - operationId: getCustomObjectInstancesById - description: Fetch a Custom Object Instance by id. - responses: - '200': - description: successful + "$ref": "#/components/schemas/error" + '409': + description: Conflict content: application/json: examples: - successful: + Data connector in use: value: - id: '25' - type: Order - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - external_id: '123' - external_created_at: - external_updated_at: - created_at: 1734537750 - updated_at: 1734537750 + type: error.list + request_id: d6c78e4f-1a2b-3c4d-5e6f-7a8b9c0d1e2f + errors: + - code: data_connector_in_use + message: Data connector is in use by other resources and cannot be deleted + Data connector not in draft: + value: + type: error.list + request_id: e7d89f5g-2b3c-4d5e-6f7g-8a9b0c1d2e3f + errors: + - code: conflict + message: Data connector must be in draft state to be deleted schema: - "$ref": "#/components/schemas/custom_object_instance" + "$ref": "#/components/schemas/error" '401': - $ref: "#/components/responses/Unauthorized" - '404': - $ref: "#/components/responses/ObjectNotFound" - delete: - summary: Delete a Custom Object Instance by ID - parameters: - - name: custom_object_instance_id - in: path - description: The Intercom defined id of the custom object instance - required: true - schema: - type: string - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Custom Object Instances - operationId: deleteCustomObjectInstancesByExternalId - description: Delete a single Custom Object instance using the Intercom defined - id. - responses: - '200': - description: successful + description: Unauthorized content: application/json: examples: - successful: + Unauthorized: value: - id: '26' - object: Order - deleted: true - schema: - "$ref": "#/components/schemas/custom_object_instance_deleted" - '401': - $ref: "#/components/responses/Unauthorized" - '404': - $ref: "#/components/responses/ObjectNotFound" - "/data_attributes": - get: - summary: List all data attributes + type: error.list + request_id: test-uuid-replacement + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + patch: + summary: Update a data connector parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: model - in: query - required: false - description: "Specify the data attribute model to return. For conversation attributes, use GET /conversations/attributes instead." - schema: - type: string - enum: - - contact - - company - example: company - - name: include_archived - in: query - required: false - description: Include archived attributes in the list. By default we return - only non archived data attributes. - example: false - schema: - type: boolean - tags: - - Data Attributes - operationId: lisDataAttributes - description: | - You can fetch a list of all data attributes belonging to a workspace for contacts or companies. - - {% admonition type="warning" %} - Conversation attributes are no longer returned by this endpoint. Calling without a `model` parameter no longer includes them, and `model=conversation` returns a `422` error. Use `GET /conversations/attributes` instead. - {% /admonition %} - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: list - data: - - type: data_attribute - name: name - full_name: name - label: Company name - description: The name of a company - data_type: string - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: company_id - full_name: company_id - label: Company ID - description: A number identifying a company - data_type: string - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: last_request_at - full_name: last_request_at - label: Company last seen - description: The last day anyone from a company visited your - site or app - data_type: date - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: remote_created_at - full_name: remote_created_at - label: Company created at - description: The day a company was added to Intercom - data_type: date - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: user_count - full_name: user_count - label: People - description: The number of people in a company - data_type: integer - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: session_count - full_name: session_count - label: Company web sessions - description: All visits from anyone in a company to your product's - site or app - data_type: integer - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: name - full_name: plan.name - label: Plan - description: A specific plan or level within your product that - companies have signed up to - data_type: string - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: monthly_spend - full_name: monthly_spend - label: Monthly Spend - description: The monthly revenue you receive from a company - data_type: float - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: size - full_name: size - label: Company size - description: The number of people employed in this company, - expressed as a single number - data_type: integer - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: industry - full_name: industry - label: Company industry - description: The category or domain this company belongs to - e.g. 'ecommerce' or 'SaaS' - data_type: string - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: website - full_name: website - label: Company website - description: The web address for the company's primary marketing - site - data_type: string - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - id: 34 - type: data_attribute - name: The One Ring - full_name: custom_attributes.The One Ring - label: The One Ring - description: One ring to rule them all, one ring to find them, - One ring to bring them all and in the darkness bind them. - data_type: string - api_writable: true - ui_writable: false - messenger_writable: true - custom: true - archived: false - admin_id: '991267784' - created_at: 1734537753 - updated_at: 1734537753 - model: company - - type: data_attribute - name: id - full_name: id - label: ID - description: The Intercom defined id representing the company - data_type: string - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: created_at - full_name: created_at - label: Created at - description: The time the company was added to Intercom - data_type: date - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: updated_at - full_name: updated_at - label: Updated at - description: The last time the company was updated - data_type: date - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: id - full_name: plan.id - label: Plan ID - description: The Intercom defined id representing the plan - data_type: string - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: app_id - full_name: app_id - label: App ID - description: The Intercom defined id representing the app - data_type: string - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company + - name: id + in: path + required: true + description: The unique identifier of the data connector. + example: '12345' + schema: + type: string + tags: + - Data Connectors + operationId: updateDataConnector + description: | + Update an existing data connector. Only provided fields are changed. Set `state` to `live` or `draft` to change the connector's state. + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_data_connector_request" + examples: + Update name and description: + summary: Update basic fields + value: + name: Updated Connector Name + description: Updated description + Set state to live: + summary: Set a connector to live + value: + state: live + Set state to draft: + summary: Set a connector to draft + value: + state: draft + with_mock_response: + summary: Update with mock response + value: + mock_response: + user: + name: Alice + email: alice@example.com + responses: + '200': + description: Data connector updated + content: + application/json: + examples: + Data connector updated: + value: + type: data_connector + id: '12345' + name: Updated Connector Name + description: Updated description + state: draft + http_method: post + direct_fin_usage: false + audiences: + - users + - leads + execution_type: server_side + configuration_response_type: test_response_type + data_transformation_type: + client_function_name: + client_function_timeout_ms: + data_inputs: + - name: conversation_id + type: string + description: The Intercom conversation ID + required: true + default_value: '' + response_fields: [] + object_mappings: [] + token_ids: [] + customer_authentication: false + bypass_authentication: false + validate_missing_attributes: false + created_by_admin_id: '456' + updated_by_admin_id: '456' + created_at: '2025-11-15T09:30:00Z' + updated_at: '2026-03-24T14:22:15Z' + execution_results_url: "/data_connectors/12345/execution_results" + schema: + "$ref": "#/components/schemas/data_connector_detail" + '404': + description: Data connector not found + content: + application/json: + examples: + Data connector not found: + value: + type: error.list + request_id: b4a45e2c-7a8d-4f3e-9c1a-2d5e8f7a6b3c + errors: + - code: data_connector_not_found + message: Data connector not found schema: - "$ref": "#/components/schemas/data_attribute_list" - '401': - description: Unauthorized + "$ref": "#/components/schemas/error" + '409': + description: Conflict content: application/json: examples: - Unauthorized: + Data connector in use: value: type: error.list - request_id: 6d231766-b44b-4e78-bc9e-9c268ff19671 + request_id: d6c78e4f-1a2b-3c4d-5e6f-7a8b9c0d1e2f errors: - - code: unauthorized - message: Access Token Invalid + - code: data_connector_in_use + message: Data connector is in use by other resources and cannot be set to draft schema: "$ref": "#/components/schemas/error" '422': - description: Unprocessable entity - model=conversation is no longer supported + description: Invalid parameter content: application/json: examples: - Deprecated conversation model: + Invalid audiences: value: type: error.list - request_id: b7912266-b12e-4d12-b2ce-9cd44d33f0c0 + request_id: a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d errors: - code: parameter_invalid - message: model=conversation is no longer supported. Use GET /conversations/attributes instead + message: "Invalid audiences. Must be a subset of: leads, users, visitors" + Invalid field value: + value: + type: error.list + request_id: a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d + errors: + - code: parameter_invalid + message: "Http Method isn't an option" + Invalid state: + value: + type: error.list + request_id: a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d + errors: + - code: parameter_invalid + message: "Invalid state. Must be one of: draft, live" schema: "$ref": "#/components/schemas/error" - post: - summary: Create a data attribute + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/data_connectors/{data_connector_id}/execution_results": + get: + summary: List execution results for a data connector parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: data_connector_id + in: path + required: true + description: The unique identifier for the data connector. + schema: + type: string + example: '12345' + - name: per_page + in: query + required: false + description: The number of results per page (1-30, default 10). + schema: + type: integer + default: 10 + minimum: 1 + maximum: 30 + - name: starting_after + in: query + required: false + description: Cursor for pagination. Use the value from `pages.next.starting_after` in a previous response. + schema: + type: string + - name: success + in: query + required: false + description: Filter by success status. Use `true`, `false`, or omit for all. + schema: + type: string + enum: + - 'true' + - 'false' + - name: error_type + in: query + required: false + description: Filter by error type. + schema: + type: string + enum: + - request_configuration_error + - faraday_error + - 3rd_party_error + - response_mapping_error + - token_refresh_error + - fin_action_response_formatting_error + - fin_action_identity_verification_error + - email_verification_error + - non_fin_standalone_action_identity_verification_error + - request_validation_error + - client_side_action_error + - name: start_ts + in: query + required: false + description: Unix timestamp for start of time range (default 1 hour ago). + schema: + type: integer + - name: end_ts + in: query + required: false + description: Unix timestamp for end of time range (default now). + schema: + type: integer + - name: include_bodies + in: query + required: false + description: Include request/response bodies in the response (default false). + schema: + type: string + enum: + - 'true' + - 'false' tags: - - Data Attributes - operationId: createDataAttribute - description: You can create a data attributes for a `contact` or a `company`. + - Data Connectors + operationId: listDataConnectorExecutionResults + description: | + Retrieve paginated execution logs for a specific data connector. + Results from the last hour are returned by default. Use `start_ts` and `end_ts` to customize the time range. + + Request/response bodies are excluded by default. Use `include_bodies=true` to include them. responses: '200': - description: Successful + description: successful content: application/json: examples: - Successful: + successful: value: - id: 37 - type: data_attribute - name: Mithril Shirt - full_name: custom_attributes.Mithril Shirt - label: Mithril Shirt - data_type: string - api_writable: true - ui_writable: false - messenger_writable: false - custom: true - archived: false - admin_id: '991267786' - created_at: 1734537756 - updated_at: 1734537756 - model: company + type: list + data: + - type: data_connector.execution + id: '99001' + data_connector_id: '12345' + success: true + http_status: 200 + http_method: post + request_url: https://api.vendor.com/webhook + execution_time_ms: 150 + source_type: workflow + source_id: '5001' + conversation_id: '8001' + created_at: '2026-02-10T18:15:32Z' + - type: data_connector.execution + id: '99000' + data_connector_id: '12345' + success: false + http_status: + http_method: post + error_type: 3rd_party_error + error_message: Connection refused + source_type: inbox + created_at: '2026-02-10T17:45:15Z' + pages: + type: pages + per_page: 10 + next: + starting_after: WzE3MDc1OTQ3MTUuMCw5OTAwMF0= schema: - "$ref": "#/components/schemas/data_attribute" - '400': - description: Too few options for list + "$ref": "#/components/schemas/data_connector_execution_result_list" + '401': + description: Unauthorized content: application/json: examples: - Same name already exists: - value: - type: error.list - request_id: da2a7037-11f4-4fcc-8d19-27da3b3a4336 - errors: - - code: parameter_invalid - message: You already have 'The One Ring' in your company data. - To save this as new people data, use a different name. - Invalid name: + Unauthorized: value: type: error.list - request_id: 1c45cfd9-ffd1-4e3e-9f7a-2ac99abdf03d + request_id: test-uuid-replacement errors: - - code: parameter_invalid - message: Your name for this attribute must only contain alphanumeric - characters, currency symbols, and hyphens - Attribute already exists: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '400': + description: Invalid parameter + content: + application/json: + examples: + Invalid error_type: value: type: error.list - request_id: 55999605-a170-4894-a3d0-090c4fee8d11 + request_id: test-uuid-replacement errors: - code: parameter_invalid - message: You already have 'The One Ring' in your company data. - To save this as new company data, use a different name. - Invalid Data Type: + message: "Invalid error_type. Must be one of: request_configuration_error, faraday_error, 3rd_party_error, response_mapping_error, token_refresh_error, fin_action_response_formatting_error, fin_action_identity_verification_error, email_verification_error, non_fin_standalone_action_identity_verification_error, request_validation_error, client_side_action_error" + Invalid timestamp: value: type: error.list - request_id: e0a9ccc7-a540-4ef0-8ffc-28ab86658b04 + request_id: test-uuid-replacement errors: - code: parameter_invalid - message: Data Type isn't an option - Too few options for list: + message: start_ts must be a Unix timestamp (integer) + schema: + "$ref": "#/components/schemas/error" + '404': + description: Data connector not found + content: + application/json: + examples: + Data connector not found: value: type: error.list - request_id: 6544ccf8-435d-49e1-91ed-e49356f14255 + request_id: test-uuid-replacement errors: - - code: parameter_invalid - message: The Data Attribute model field must be either contact - or company + - code: data_connector_not_found + message: Data connector not found schema: "$ref": "#/components/schemas/error" + "/data_connectors/{data_connector_id}/execution_results/{id}": + get: + summary: Retrieve an execution result + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: data_connector_id + in: path + required: true + description: The unique identifier for the data connector. + schema: + type: string + example: '12345' + - name: id + in: path + required: true + description: The unique identifier for the execution result. + schema: + type: string + example: '99001' + tags: + - Data Connectors + operationId: showDataConnectorExecutionResult + description: | + Retrieve details for a specific data connector execution result. + Always includes request/response bodies and the sanitised request URL. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: data_connector.execution + id: '99001' + data_connector_id: '12345' + success: true + http_status: 200 + http_method: post + execution_time_ms: 150 + source_type: workflow + source_id: '5001' + conversation_id: '8001' + created_at: '2026-02-10T18:15:32Z' + request_url: https://api.example.com/webhook + request_body: '{"channel": "#alerts", "text": "Conversation updated"}' + response_body: '{"ok": true}' + raw_response_body: '{"ok": true}' + schema: + "$ref": "#/components/schemas/data_connector_execution_result" '401': description: Unauthorized content: @@ -10300,57 +12896,34 @@ paths: examples: Unauthorized: value: - type: error.list - request_id: fa71b91c-4a25-4fe6-88a9-884f6950860e - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_data_attribute_request" - examples: - successful: - summary: Successful - value: - name: Mithril Shirt - model: company - data_type: string - same_name_already_exists: - summary: Same name already exists - value: - name: The One Ring - model: contact - data_type: integer - invalid_name: - summary: Invalid name - value: - name: "!nv@l!d n@me" - model: company - data_type: string - attribute_already_exists: - summary: Attribute already exists - value: - name: The One Ring - model: company - data_type: string - invalid_data_type: - summary: Invalid Data Type - value: - name: The Second Ring - model: company - data_type: mithril - too_few_options_for_list: - summary: Too few options for list - value: - description: Just a plain old ring - options: - - value: 1-10 - archived: false - "/data_attributes/{data_attribute_id}": + type: error.list + request_id: test-uuid-replacement + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '404': + description: Execution result not found + content: + application/json: + examples: + Data connector not found: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: data_connector_not_found + message: Data connector not found + Execution result not found: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: execution_result_not_found + message: Execution result not found + schema: + "$ref": "#/components/schemas/error" put: summary: Update a data attribute parameters: @@ -16409,5181 +18982,6613 @@ components: example: app_name_change activity_description: type: string - description: A sentence or two describing the activity. - example: Admin updated the app's name to "My App". - activity_log_list: - title: Paginated Response + description: A sentence or two describing the activity. + example: Admin updated the app's name to "My App". + activity_log_list: + title: Paginated Response + type: object + description: A paginated list of activity logs. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `activity_log.list`. + example: activity_log.list + pages: + "$ref": "#/components/schemas/cursor_pages" + activity_logs: + type: array + description: An array of activity logs + items: + "$ref": "#/components/schemas/activity_log" + activity_log_metadata: + title: Activity Log Metadata + type: object + description: Additional data provided about Admin activity. + nullable: true + properties: + sign_in_method: + type: string + nullable: true + description: The way the admin signed in. + example: email_password + external_id: + type: string + nullable: true + description: The unique identifier for the contact which is provided by + the Client. + example: f3b87a2e09d514c6c2e79b9a + away_mode: + type: boolean + nullable: true + description: The away mode status which is set to true when away and false + when returned. + example: true + away_status_reason: + type: string + nullable: true + description: The reason the Admin is away. + example: "\U0001F60C On a break" + reassign_conversations: + type: boolean + nullable: true + description: Indicates if conversations should be reassigned while an Admin + is away. + example: false + source: + type: string + nullable: true + description: The action that initiated the status change. + example: 'admin update from web - Admin id: 93' + auto_changed: + type: string + nullable: true + description: Indicates if the status was changed automatically or manually. + example: false + update_by: + type: integer + nullable: true + description: The ID of the Admin who initiated the activity. + example: 93 + update_by_name: + type: string + nullable: true + description: The name of the Admin who initiated the activity. + example: Joe Example + conversation_assignment_limit: + type: integer + nullable: true + description: The conversation assignment limit value for an admin. + example: 15 + ticket_assignment_limit: + type: integer + nullable: true + description: The ticket assignment limit value for an admin. + example: 20 + team: + type: object + nullable: true + description: Details about the team whose assignment limit was changed. + properties: + id: + type: integer + description: The ID of the team. + example: 123 + name: + type: string + description: The name of the team. + example: Support Team + team_assignment_limit: + type: integer + nullable: true + description: The team assignment limit value (null if limit was removed). + example: 50 + enabled: + type: boolean + nullable: true + description: Indicates if the setting is enabled or disabled. + example: true + mode: + type: string + nullable: true + description: The mode of the setting (e.g., when_away_only, when_away_and_reassign). + example: when_away_only + consent_id: + type: integer + nullable: true + description: The ID of the impersonation consent. + example: 149673 + expired_at: + type: string + format: date-time + nullable: true + description: The timestamp when the impersonation consent expires. + example: "2025-12-04T09:31:57.000Z" + before: + type: object + nullable: true + description: The state of settings or values before the change. Structure varies by activity type. + after: + type: object + nullable: true + description: The state of settings or values after the change. Structure varies by activity type. + addressable_list: + title: Addressable List + type: object + nullable: false + description: A list used to access other resources from a parent model. + properties: + type: + type: string + format: uri + description: The addressable object type + example: note + id: + type: string + description: The id of the addressable object + example: '123' + url: + type: string + format: uri + description: Url to get more company resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/notes" + admin: + title: Admin + type: object + x-tags: + - Admins + description: Admins are teammate accounts that have access to a workspace. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `admin`. + example: admin + id: + type: string + description: The id representing the admin. + example: '1295' + name: + type: string + description: The name of the admin. + example: Joe Example + email: + type: string + description: The email of the admin. + example: jdoe@example.com + job_title: + type: string + description: The job title of the admin. + example: Associate + away_mode_enabled: + type: boolean + description: Identifies if this admin is currently set in away mode. + example: false + away_mode_reassign: + type: boolean + description: Identifies if this admin is set to automatically reassign new + conversations to the apps default inbox. + example: false + away_status_reason_id: + type: integer + nullable: true + description: The unique identifier of the away status reason + example: 12345 + has_inbox_seat: + type: boolean + description: Identifies if this admin has a paid inbox seat to restrict/allow + features that require them. + example: true + team_ids: + type: array + description: This object represents the avatar associated with the admin. + example: + - 814865 + items: + type: integer + avatar: + type: string + format: uri + nullable: true + description: Image for the associated team or teammate + example: https://picsum.photos/200/300 + team_priority_level: + "$ref": "#/components/schemas/team_priority_level" + admin_list: + title: Admins + type: object + description: A list of admins associated with a given workspace. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `admin.list`. + example: admin.list + admins: + type: array + description: A list of admins associated with a given workspace. + items: + "$ref": "#/components/schemas/admin" + admin_priority_level: + title: Admin Priority Level + type: object + nullable: true + description: Admin priority levels for the team + properties: + primary_admin_ids: + type: array + description: The primary admin ids for the team + nullable: true + example: + - 493881 + items: + type: integer + secondary_admin_ids: + type: array + description: The secondary admin ids for the team + nullable: true + example: + - 814865 + items: + type: integer + admin_reply_conversation_request: + title: Admin Reply + type: object + description: Payload of the request to reply on behalf of an admin + properties: + message_type: + type: string + enum: + - comment + - note + - quick_reply + example: comment + type: + type: string + enum: + - admin + example: admin + body: + type: string + description: The text body of the reply. Notes accept some HTML formatting. + Must be present for comment and note message types. + example: Hello there! + admin_id: + type: string + description: The id of the admin who is authoring the comment. + example: '3156780' + created_at: + type: integer + description: The time the reply was created. If not provided, the current + time will be used. + example: 1590000000 + reply_options: + title: Quick Reply Options + type: array + description: The quick reply options to display to the end user. Must be present for quick_reply + message types. + items: + "$ref": "#/components/schemas/quick_reply_option" + attachment_urls: + type: array + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. + items: + type: string + format: uri + maxItems: 10 + attachment_files: + type: array + description: A list of files that will be added as attachments. You can + include up to 10 files + items: + "$ref": "#/components/schemas/conversation_attachment_files" + maxItems: 10 + skip_notifications: + type: boolean + description: Option to disable notifications when replying to a conversation. + example: true + required: + - message_type + - type + - admin_id + admin_reply_ticket_request: + title: Admin Reply on ticket type: object - description: A paginated list of activity logs. + description: Payload of the request to reply on behalf of an admin properties: + message_type: + type: string + enum: + - comment + - note + - quick_reply + example: comment type: type: string - description: String representing the object's type. Always has the value - `activity_log.list`. - example: activity_log.list - pages: - "$ref": "#/components/schemas/cursor_pages" - activity_logs: + enum: + - admin + example: admin + body: + type: string + description: The text body of the reply. Notes accept some HTML formatting. + Must be present for comment and note message types. + example: Hello there! + admin_id: + type: string + description: The id of the admin who is authoring the comment. + example: '3156780' + created_at: + type: integer + description: The time the reply was created. If not provided, the current + time will be used. + example: 1590000000 + reply_options: + title: Quick Reply Options type: array - description: An array of activity logs + description: The quick reply options to display. Must be present for quick_reply + message types. items: - "$ref": "#/components/schemas/activity_log" - activity_log_metadata: - title: Activity Log Metadata + title: Quick Reply Option + type: object + properties: + text: + type: string + description: The text to display in this quick reply option. + uuid: + type: string + format: uuid + description: A unique identifier for this quick reply option. This + value will be available within the metadata of the comment ticket + part that is created when a user clicks on this reply option. + required: + - text + - uuid + attachment_urls: + type: array + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. + items: + type: string + format: uri + maxItems: 10 + attachment_files: + type: array + description: A list of files that will be added as attachments. You can + include up to 10 files. If both attachment_files and attachment_urls are + provided, attachment_files takes precedence. + items: + "$ref": "#/components/schemas/conversation_attachment_files" + maxItems: 10 + cross_post: + type: boolean + description: If set to true, the note will be cross-posted to all linked + conversations. Only applicable to note message types on back-office tickets. + example: true + required: + - message_type + - type + - admin_id + admin_with_app: + title: Admin type: object - description: Additional data provided about Admin activity. + description: Admins are the teammate accounts that have access to a workspace nullable: true properties: - sign_in_method: + type: type: string - nullable: true - description: The way the admin signed in. - example: email_password - external_id: + description: String representing the object's type. Always has the value + `admin`. + example: admin + id: type: string - nullable: true - description: The unique identifier for the contact which is provided by - the Client. - example: f3b87a2e09d514c6c2e79b9a - away_mode: + description: The id representing the admin. + example: '1295' + name: + type: string + description: The name of the admin. + example: Joe Example + email: + type: string + description: The email of the admin. + example: jdoe@example.com + job_title: + type: string + description: The job title of the admin. + example: Associate + away_mode_enabled: + type: boolean + description: Identifies if this admin is currently set in away mode. + example: false + away_mode_reassign: + type: boolean + description: Identifies if this admin is set to automatically reassign new + conversations to the apps default inbox. + example: false + has_inbox_seat: + type: boolean + description: Identifies if this admin has a paid inbox seat to restrict/allow + features that require them. + example: true + team_ids: + type: array + description: This is a list of ids of the teams that this admin is part + of. + example: + - 814865 + items: + type: integer + avatar: + type: object + description: This object represents the avatar associated with the admin. + properties: + type: + type: string + description: This is a string that identifies the type of the object. + It will always have the value `avatar`. + default: avatar + example: avatar + image_url: + type: string + format: uri + nullable: true + description: This object represents the avatar associated with the admin. + example: https://example.com/avatar.png + email_verified: type: boolean + description: Identifies if this admin's email is verified. nullable: true - description: The away mode status which is set to true when away and false - when returned. example: true - away_status_reason: + app: + "$ref": "#/components/schemas/app" + nullable: true + description: App that the admin belongs to. + ai_agent: + title: AI Agent + type: object + x-tags: + - Ai Agent + description: Data related to AI Agent involvement in the conversation. + properties: + source_type: + type: string + nullable: true + description: The type of the source that triggered AI Agent involvement + in the conversation. + enum: + - essentials_plan_setup + - profile + - workflow + - workflow_preview + - fin_preview + example: workflow + source_title: type: string + description: The title of the source that triggered AI Agent involvement + in the conversation. If this is `essentials_plan_setup` then it will return + `null`. + example: My AI Workflow nullable: true - description: The reason the Admin is away. - example: "\U0001F60C On a break" - reassign_conversations: - type: boolean - nullable: true - description: Indicates if conversations should be reassigned while an Admin - is away. - example: false - source: + last_answer_type: type: string + description: The type of the last answer delivered by AI Agent. If no answer + was delivered then this will return `null` + enum: + - + - ai_answer + - custom_answer + example: ai_answer nullable: true - description: The action that initiated the status change. - example: 'admin update from web - Admin id: 93' - auto_changed: + resolution_state: type: string + description: The resolution state of AI Agent. If no AI or custom answer + has been delivered then this will return `null`. + enum: + - assumed_resolution + - confirmed_resolution + - escalated + - negative_feedback + - procedure_handoff + - + example: assumed_resolution nullable: true - description: Indicates if the status was changed automatically or manually. - example: false - update_by: + rating: type: integer + description: The customer satisfaction rating given to AI Agent, from 1-5. + example: 4 nullable: true - description: The ID of the Admin who initiated the activity. - example: 93 - update_by_name: + rating_remark: type: string + description: The customer satisfaction rating remark given to AI Agent. + example: Very helpful! nullable: true - description: The name of the Admin who initiated the activity. - example: Joe Example - conversation_assignment_limit: + created_at: type: integer + format: date-time + description: The time when the AI agent rating was created. + example: 1663597260 nullable: true - description: The conversation assignment limit value for an admin. - example: 15 - ticket_assignment_limit: + updated_at: type: integer + format: date-time + description: The time when the AI agent rating was last updated. + example: 1663597260 nullable: true - description: The ticket assignment limit value for an admin. - example: 20 - team: - type: object - nullable: true - description: Details about the team whose assignment limit was changed. - properties: - id: - type: integer - description: The ID of the team. - example: 123 - name: - type: string - description: The name of the team. - example: Support Team - team_assignment_limit: + content_sources: + "$ref": "#/components/schemas/content_sources_list" + ai_call_response: + title: AI Call Response + type: object + description: Response containing information about a Fin Voice call + properties: + id: type: integer + description: The unique identifier for the external reference + example: 12345 + app_id: + type: integer + description: The workspace identifier + example: 12345 + user_phone_number: + type: string + description: Phone number in E.164 format for the call + example: '+1234567890' + status: + type: string + description: Status of the call. Can be "registered", "in-progress", or a resolution state + example: 'registered' + intercom_call_id: + type: string nullable: true - description: The team assignment limit value (null if limit was removed). - example: 50 - enabled: - type: boolean - nullable: true - description: Indicates if the setting is enabled or disabled. - example: true - mode: + description: The Intercom call identifier, if the call has been matched + example: '1234' + external_call_id: + type: string + description: The external call identifier from the call provider + example: 'call-123-abc' + intercom_conversation_id: type: string nullable: true - description: The mode of the setting (e.g., when_away_only, when_away_and_reassign). - example: when_away_only - consent_id: + description: The Intercom conversation identifier, if a conversation has been created + example: '5678' + call_transcript: + type: array + description: Array of transcript entries for the call + items: + type: object + example: [] + call_summary: + type: string + description: Summary of the call conversation, truncated to 256 characters. Empty string if no summary available. + example: 'Customer called about billing issue...' + intent: + type: array + description: Array of intent classifications for the call + items: + type: object + example: [] + app: + audience: + title: Audience + type: object + x-tags: + - Audiences + description: An audience represents a group of contacts that can be targeted + by Fin. + properties: + type: + type: string + description: The type of object. + enum: + - audience + example: audience + readOnly: true + id: + type: string + description: The unique identifier representing the audience. + example: '123' + readOnly: true + name: + type: string + description: The name of the audience. + example: VIP Customers + predicates: + type: array + description: The predicates that define which contacts belong to the audience. + items: + "$ref": "#/components/schemas/predicate" + example: + - attribute: company.name + type: string + comparison: contains + value: Acme + role_predicates: + type: array + description: Role-based predicates that further filter audience membership by + contact role. + items: + "$ref": "#/components/schemas/predicate" + example: + - attribute: role + type: role + comparison: eq + value: user + created_at: type: integer - nullable: true - description: The ID of the impersonation consent. - example: 149673 - expired_at: + description: The time the audience was created as a Unix timestamp. + example: 1717200000 + readOnly: true + updated_at: + type: integer + description: The time the audience was last updated as a Unix timestamp. + example: 1717200000 + readOnly: true + audience_list: + title: Audience List + type: object + description: A paginated list of audience objects. + properties: + type: type: string - format: date-time - nullable: true - description: The timestamp when the impersonation consent expires. - example: "2025-12-04T09:31:57.000Z" - before: - type: object - nullable: true - description: The state of settings or values before the change. Structure varies by activity type. - after: - type: object - nullable: true - description: The state of settings or values after the change. Structure varies by activity type. - addressable_list: - title: Addressable List + description: The type of the object. + enum: + - list + example: list + data: + type: array + description: A list of audience objects. + items: + "$ref": "#/components/schemas/audience" + total_count: + type: integer + description: The total number of audiences. + example: 2 + page: + type: integer + description: The current page number. + example: 1 + per_page: + type: integer + description: The number of results per page. + example: 50 + total_pages: + type: integer + description: The total number of pages. + example: 1 + predicate: + title: Predicate type: object - nullable: false - description: A list used to access other resources from a parent model. + description: A condition used to filter contacts in an audience. + properties: + attribute: + type: string + description: The attribute to filter on. + example: company.name + type: + type: string + description: The type of the attribute. + example: string + comparison: + type: string + description: The comparison operator. + example: contains + value: + type: string + description: The value to compare against. + example: Acme + title: App + type: object + description: App is a workspace on Intercom + nullable: true + properties: + type: + type: string + description: '' + default: app + example: app + id_code: + type: string + description: The id of the app. + example: xyz789 + name: + type: string + description: The name of the app. + example: ACME + region: + type: string + description: The Intercom region the app is located in. + example: US + timezone: + type: string + description: The timezone of the region where the app is located. + example: America/Los_Angeles + created_at: + type: integer + description: When the app was created. + example: 1671465577 + identity_verification: + type: boolean + description: Whether or not the app uses identity verification. + example: false + article: + title: Article + type: object + x-tags: + - Articles + description: The Articles API is a central place to gather all information and + take actions on your articles. Articles can live within collections and sections, + or alternatively they can stand alone. properties: - type: - type: string - format: uri - description: The addressable object type - example: note - id: - type: string - description: The id of the addressable object - example: '123' - url: - type: string - format: uri - description: Url to get more company resources for this contact - example: "/contacts/5ba682d23d7cf92bef87bfd4/notes" - admin: - title: Admin + statistics: + nullable: true + "$ref": "#/components/schemas/article_statistics" + allOf: + - "$ref": "#/components/schemas/article_list_item" + internal_article: + title: Internal Article type: object x-tags: - - Admins - description: Admins are teammate accounts that have access to a workspace. + - Articles + description: The Internal Articles API is a central place to gather all information and + take actions on your internal articles. + allOf: + - "$ref": "#/components/schemas/internal_article_list_item" + article_content: + title: Article Content + type: object + description: The Content of an Article. nullable: true properties: type: type: string - description: String representing the object's type. Always has the value - `admin`. - example: admin - id: + description: The type of object - `article_content` . + enum: + - + - article_content + example: article_content + nullable: true + title: type: string - description: The id representing the admin. - example: '1295' - name: + description: The title of the article. + example: How to create a new article + description: type: string - description: The name of the admin. - example: Joe Example - email: + description: The description of the article. + example: This article will show you how to create a new article. + body: type: string - description: The email of the admin. - example: jdoe@example.com - job_title: + description: The body of the article. + example: This is the body of the article. + author_id: + type: integer + description: The ID of the author of the article. + example: '5017691' + state: type: string - description: The job title of the admin. - example: Associate - away_mode_enabled: - type: boolean - description: Identifies if this admin is currently set in away mode. - example: false - away_mode_reassign: - type: boolean - description: Identifies if this admin is set to automatically reassign new - conversations to the apps default inbox. - example: false - away_status_reason_id: + description: Whether the article is `published` or is a `draft` . + enum: + - published + - draft + example: draft + created_at: type: integer - nullable: true - description: The unique identifier of the away status reason - example: 12345 - has_inbox_seat: - type: boolean - description: Identifies if this admin has a paid inbox seat to restrict/allow - features that require them. - example: true - team_ids: - type: array - description: This object represents the avatar associated with the admin. - example: - - 814865 - items: - type: integer - avatar: + format: date-time + description: The time when the article was created (seconds). + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The time when the article was last updated (seconds). + example: 1663597260 + url: type: string - format: uri - nullable: true - description: Image for the associated team or teammate - example: https://picsum.photos/200/300 - team_priority_level: - "$ref": "#/components/schemas/team_priority_level" - admin_list: - title: Admins + description: The URL of the article. + example: http://intercom.test/help/en/articles/3-default-language + internal_article_list: + title: Internal Articles type: object - description: A list of admins associated with a given workspace. + description: This will return a list of internal articles for the App. properties: type: type: string - description: String representing the object's type. Always has the value - `admin.list`. - example: admin.list - admins: - type: array - description: A list of admins associated with a given workspace. - items: - "$ref": "#/components/schemas/admin" - admin_priority_level: - title: Admin Priority Level - type: object - nullable: true - description: Admin priority levels for the team - properties: - primary_admin_ids: - type: array - description: The primary admin ids for the team - nullable: true - example: - - 493881 - items: - type: integer - secondary_admin_ids: + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of internal articles. + example: 1 + data: type: array - description: The secondary admin ids for the team - nullable: true - example: - - 814865 + description: An array of Internal Article objects items: - type: integer - admin_reply_conversation_request: - title: Admin Reply + "$ref": "#/components/schemas/internal_article_list_item" + article_list: + title: Articles type: object - description: Payload of the request to reply on behalf of an admin + description: This will return a list of articles for the App. properties: - message_type: - type: string - enum: - - comment - - note - - quick_reply - example: comment type: type: string + description: The type of the object - `list`. enum: - - admin - example: admin - body: - type: string - description: The text body of the reply. Notes accept some HTML formatting. - Must be present for comment and note message types. - example: Hello there! - admin_id: - type: string - description: The id of the admin who is authoring the comment. - example: '3156780' - created_at: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: type: integer - description: The time the reply was created. If not provided, the current - time will be used. - example: 1590000000 - reply_options: - title: Quick Reply Options - type: array - description: The quick reply options to display to the end user. Must be present for quick_reply - message types. - items: - "$ref": "#/components/schemas/quick_reply_option" - attachment_urls: - type: array - description: A list of image URLs that will be added as attachments. You - can include up to 10 URLs. - items: - type: string - format: uri - maxItems: 10 - attachment_files: + description: A count of the total number of articles. + example: 1 + data: type: array - description: A list of files that will be added as attachments. You can - include up to 10 files + description: An array of Article objects items: - "$ref": "#/components/schemas/conversation_attachment_files" - maxItems: 10 - skip_notifications: - type: boolean - description: Option to disable notifications when replying to a conversation. - example: true - required: - - message_type - - type - - admin_id - admin_reply_ticket_request: - title: Admin Reply on ticket + "$ref": "#/components/schemas/article_list_item" + article_list_item: + title: Articles type: object - description: Payload of the request to reply on behalf of an admin + x-tags: + - Articles + description: The data returned about your articles when you list them. properties: - message_type: + type: type: string + description: The type of object - `article`. enum: - - comment - - note - - quick_reply - example: comment - type: + - article + default: article + example: article + id: + type: string + description: The unique identifier for the article which is given by Intercom. + example: '6871119' + workspace_id: type: string - enum: - - admin - example: admin + description: The id of the workspace which the article belongs to. + example: hfi1bx4l + title: + type: string + description: The title of the article. For multilingual articles, this will + be the title of the default language's content. + example: Default language title + description: + type: string + nullable: true + description: The description of the article. For multilingual articles, + this will be the description of the default language's content. + example: Default language description body: type: string - description: The text body of the reply. Notes accept some HTML formatting. - Must be present for comment and note message types. - example: Hello there! - admin_id: + nullable: true + description: The body of the article in HTML. For multilingual articles, + this will be the body of the default language's content. + example: Default language body in html + author_id: + type: integer + description: The id of the author of the article. For multilingual articles, + this will be the id of the author of the default language's content. Must + be a teammate on the help center's workspace. + example: '5017691' + state: type: string - description: The id of the admin who is authoring the comment. - example: '3156780' + description: Whether the article is `published` or is a `draft`. For multilingual + articles, this will be the state of the default language's content. + enum: + - published + - draft + default: draft + example: published created_at: type: integer - description: The time the reply was created. If not provided, the current - time will be used. - example: 1590000000 - reply_options: - title: Quick Reply Options - type: array - description: The quick reply options to display. Must be present for quick_reply - message types. - items: - title: Quick Reply Option - type: object - properties: - text: - type: string - description: The text to display in this quick reply option. - uuid: - type: string - format: uuid - description: A unique identifier for this quick reply option. This - value will be available within the metadata of the comment ticket - part that is created when a user clicks on this reply option. - required: - - text - - uuid - attachment_urls: - type: array - description: A list of image URLs that will be added as attachments. You - can include up to 10 URLs. - items: - type: string - format: uri - maxItems: 10 - attachment_files: + format: date-time + description: The time when the article was created. For multilingual articles, + this will be the timestamp of creation of the default language's content + in seconds. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the article was last updated. For multilingual + articles, this will be the timestamp of last update of the default language's + content in seconds. + example: 1672928610 + url: + type: string + nullable: true + description: The URL of the article. For multilingual articles, this will + be the URL of the default language's content. + example: http://intercom.test/help/en/articles/3-default-language + parent_ids: type: array - description: A list of files that will be added as attachments. You can - include up to 10 files. If both attachment_files and attachment_urls are - provided, attachment_files takes precedence. + description: The ids of the article's parent collections or sections. An + article without this field stands alone. items: - "$ref": "#/components/schemas/conversation_attachment_files" - maxItems: 10 - cross_post: - type: boolean - description: If set to true, the note will be cross-posted to all linked - conversations. Only applicable to note message types on back-office tickets. - example: true - required: - - message_type - - type - - admin_id - admin_with_app: - title: Admin + type: integer + example: + - 18 + - 19 + default_locale: + type: string + description: The default locale of the help center. This field is only returned + for multilingual help centers. + example: en + translated_content: + nullable: true + "$ref": "#/components/schemas/article_translated_content" + tags: + "$ref": "#/components/schemas/tags" + internal_article_list_item: + title: Internal Articles type: object - description: Admins are the teammate accounts that have access to a workspace - nullable: true + x-tags: + - Internal Articles + description: The data returned about your internal articles when you list them. properties: type: type: string - description: String representing the object's type. Always has the value - `admin`. - example: admin + description: The type of object - `internal_article`. + enum: + - internal_article + default: internal_article + example: internal_article id: type: string - description: The id representing the admin. - example: '1295' - name: + description: The unique identifier for the article which is given by Intercom. + example: '6871119' + title: type: string - description: The name of the admin. - example: Joe Example - email: + description: The title of the article. + body: type: string - description: The email of the admin. - example: jdoe@example.com - job_title: + nullable: true + description: The body of the article in HTML. + example: Default language body in html + owner_id: + type: integer + description: The id of the owner of the article. + example: '5017691' + author_id: + type: integer + description: The id of the author of the article. + example: '5017691' + created_at: + type: integer + format: date-time + description: The time when the article was created. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the article was last updated. + example: 1672928610 + locale: type: string - description: The job title of the admin. - example: Associate - away_mode_enabled: - type: boolean - description: Identifies if this admin is currently set in away mode. - example: false - away_mode_reassign: - type: boolean - description: Identifies if this admin is set to automatically reassign new - conversations to the apps default inbox. - example: false - has_inbox_seat: - type: boolean - description: Identifies if this admin has a paid inbox seat to restrict/allow - features that require them. - example: true - team_ids: + description: The default locale of the article. + example: en + article_search_highlights: + title: Article Search Highlights + type: object + x-tags: + - Articles + description: The highlighted results of an Article search. In the examples provided + my search query is always "my query". + properties: + article_id: + type: string + description: The ID of the corresponding article. + example: '123' + highlighted_title: type: array - description: This is a list of ids of the teams that this admin is part - of. - example: - - 814865 + description: An Article title highlighted. items: - type: integer - avatar: - type: object - description: This object represents the avatar associated with the admin. - properties: - type: - type: string - description: This is a string that identifies the type of the object. - It will always have the value `avatar`. - default: avatar - example: avatar - image_url: - type: string - format: uri - nullable: true - description: This object represents the avatar associated with the admin. - example: https://example.com/avatar.png - email_verified: - type: boolean - description: Identifies if this admin's email is verified. - nullable: true - example: true - app: - "$ref": "#/components/schemas/app" - nullable: true - description: App that the admin belongs to. - ai_agent: - title: AI Agent + type: object + description: A highlighted article title. + properties: + type: + type: string + description: The type of text - `highlight` or `plain`. + enum: + - highlight + - plain + example: 'The highlight is ' + text: + type: string + description: The text of the title. + example: my query + highlighted_summary: + type: array + description: An Article description and body text highlighted. + items: + type: array + description: An array containing the highlighted summary text split into + chunks of plain and highlighted text. + items: + type: object + description: An instance of highlighted summary text. + properties: + type: + type: string + description: The type of text - `highlight` or `plain`. + enum: + - highlight + - plain + example: 'How to highlight ' + text: + type: string + description: The text of the title. + example: my query + article_search_response: + title: Article Search Response type: object x-tags: - - Ai Agent - description: Data related to AI Agent involvement in the conversation. + - Articles + description: The results of an Article search properties: - source_type: + type: type: string - nullable: true - description: The type of the source that triggered AI Agent involvement - in the conversation. + description: The type of the object - `list`. enum: - - essentials_plan_setup - - profile - - workflow - - workflow_preview - - fin_preview - example: workflow - source_title: - type: string - description: The title of the source that triggered AI Agent involvement - in the conversation. If this is `essentials_plan_setup` then it will return - `null`. - example: My AI Workflow - nullable: true - last_answer_type: + - list + example: list + total_count: + type: integer + description: The total number of Articles matching the search query + example: 5 + data: + type: object + description: An object containing the results of the search. + properties: + articles: + type: array + description: An array of Article objects + items: + "$ref": "#/components/schemas/article" + highlights: + type: array + description: A corresponding array of highlighted Article content + items: + "$ref": "#/components/schemas/article_search_highlights" + pages: + "$ref": "#/components/schemas/cursor_pages" + internal_article_search_response: + title: Internal Article Search Response + type: object + x-tags: + - Internal Articles + description: The results of an Internal Article search + properties: + type: type: string - description: The type of the last answer delivered by AI Agent. If no answer - was delivered then this will return `null` + description: The type of the object - `list`. enum: - - - - ai_answer - - custom_answer - example: ai_answer - nullable: true - resolution_state: + - list + example: list + total_count: + type: integer + description: The total number of Internal Articles matching the search query + example: 5 + data: + type: object + description: An object containing the results of the search. + properties: + internal_articles: + type: array + description: An array of Internal Article objects + items: + "$ref": "#/components/schemas/internal_article" + pages: + "$ref": "#/components/schemas/cursor_pages" + article_statistics: + title: Article Statistics + type: object + description: The statistics of an article. + nullable: true + properties: + type: type: string - description: The resolution state of AI Agent. If no AI or custom answer - has been delivered then this will return `null`. + description: The type of object - `article_statistics`. enum: - - assumed_resolution - - confirmed_resolution - - escalated - - negative_feedback - - procedure_handoff - - - example: assumed_resolution - nullable: true - rating: + - article_statistics + default: article_statistics + example: article_statistics + views: type: integer - description: The customer satisfaction rating given to AI Agent, from 1-5. - example: 4 - nullable: true - rating_remark: - type: string - description: The customer satisfaction rating remark given to AI Agent. - example: Very helpful! - nullable: true - created_at: + description: The number of total views the article has received. + example: 10 + conversions: type: integer - format: date-time - description: The time when the AI agent rating was created. - example: 1663597260 - nullable: true - updated_at: + description: The number of conversations started from the article. + example: 0 + reactions: type: integer - format: date-time - description: The time when the AI agent rating was last updated. - example: 1663597260 + description: The number of total reactions the article has received. + example: 10 + happy_reaction_percentage: + type: number + format: float + description: The percentage of happy reactions the article has received + against other types of reaction. + example: 40.0 + neutral_reaction_percentage: + type: number + format: float + description: The percentage of neutral reactions the article has received + against other types of reaction. + example: 40.0 + sad_reaction_percentage: + type: number + format: float + description: The percentage of sad reactions the article has received against + other types of reaction. + example: 20.0 + article_translated_content: + title: Article Translated Content + type: object + description: The Translated Content of an Article. The keys are the locale codes + and the values are the translated content of the article. + nullable: true + properties: + type: + type: string + description: The type of object - article_translated_content. + enum: + - + - article_translated_content + example: article_translated_content nullable: true - content_sources: - "$ref": "#/components/schemas/content_sources_list" - ai_call_response: - title: AI Call Response + ar: + description: The content of the article in Arabic + "$ref": "#/components/schemas/article_content" + bg: + description: The content of the article in Bulgarian + "$ref": "#/components/schemas/article_content" + bs: + description: The content of the article in Bosnian + "$ref": "#/components/schemas/article_content" + ca: + description: The content of the article in Catalan + "$ref": "#/components/schemas/article_content" + cs: + description: The content of the article in Czech + "$ref": "#/components/schemas/article_content" + da: + description: The content of the article in Danish + "$ref": "#/components/schemas/article_content" + de: + description: The content of the article in German + "$ref": "#/components/schemas/article_content" + el: + description: The content of the article in Greek + "$ref": "#/components/schemas/article_content" + en: + description: The content of the article in English + "$ref": "#/components/schemas/article_content" + es: + description: The content of the article in Spanish + "$ref": "#/components/schemas/article_content" + et: + description: The content of the article in Estonian + "$ref": "#/components/schemas/article_content" + fi: + description: The content of the article in Finnish + "$ref": "#/components/schemas/article_content" + fr: + description: The content of the article in French + "$ref": "#/components/schemas/article_content" + he: + description: The content of the article in Hebrew + "$ref": "#/components/schemas/article_content" + hr: + description: The content of the article in Croatian + "$ref": "#/components/schemas/article_content" + hu: + description: The content of the article in Hungarian + "$ref": "#/components/schemas/article_content" + id: + description: The content of the article in Indonesian + "$ref": "#/components/schemas/article_content" + it: + description: The content of the article in Italian + "$ref": "#/components/schemas/article_content" + ja: + description: The content of the article in Japanese + "$ref": "#/components/schemas/article_content" + ko: + description: The content of the article in Korean + "$ref": "#/components/schemas/article_content" + lt: + description: The content of the article in Lithuanian + "$ref": "#/components/schemas/article_content" + lv: + description: The content of the article in Latvian + "$ref": "#/components/schemas/article_content" + mn: + description: The content of the article in Mongolian + "$ref": "#/components/schemas/article_content" + nb: + description: The content of the article in Norwegian + "$ref": "#/components/schemas/article_content" + nl: + description: The content of the article in Dutch + "$ref": "#/components/schemas/article_content" + pl: + description: The content of the article in Polish + "$ref": "#/components/schemas/article_content" + pt: + description: The content of the article in Portuguese (Portugal) + "$ref": "#/components/schemas/article_content" + ro: + description: The content of the article in Romanian + "$ref": "#/components/schemas/article_content" + ru: + description: The content of the article in Russian + "$ref": "#/components/schemas/article_content" + sl: + description: The content of the article in Slovenian + "$ref": "#/components/schemas/article_content" + sr: + description: The content of the article in Serbian + "$ref": "#/components/schemas/article_content" + sv: + description: The content of the article in Swedish + "$ref": "#/components/schemas/article_content" + tr: + description: The content of the article in Turkish + "$ref": "#/components/schemas/article_content" + vi: + description: The content of the article in Vietnamese + "$ref": "#/components/schemas/article_content" + pt-BR: + description: The content of the article in Portuguese (Brazil) + "$ref": "#/components/schemas/article_content" + zh-CN: + description: The content of the article in Chinese (China) + "$ref": "#/components/schemas/article_content" + zh-TW: + description: The content of the article in Chinese (Taiwan) + "$ref": "#/components/schemas/article_content" + assign_conversation_request: + title: Assign Conversation Request type: object - description: Response containing information about a Fin Voice call + description: Payload of the request to assign a conversation properties: - id: - type: integer - description: The unique identifier for the external reference - example: 12345 - app_id: - type: integer - description: The workspace identifier - example: 12345 - user_phone_number: - type: string - description: Phone number in E.164 format for the call - example: '+1234567890' - status: - type: string - description: Status of the call. Can be "registered", "in-progress", or a resolution state - example: 'registered' - intercom_call_id: - type: string - nullable: true - description: The Intercom call identifier, if the call has been matched - example: '1234' - external_call_id: - type: string - description: The external call identifier from the call provider - example: 'call-123-abc' - intercom_conversation_id: - type: string - nullable: true - description: The Intercom conversation identifier, if a conversation has been created - example: '5678' - call_transcript: - type: array - description: Array of transcript entries for the call - items: - type: object - example: [] - call_summary: + message_type: type: string - description: Summary of the call conversation, truncated to 256 characters. Empty string if no summary available. - example: 'Customer called about billing issue...' - intent: - type: array - description: Array of intent classifications for the call - items: - type: object - example: [] - app: - title: App - type: object - description: App is a workspace on Intercom - nullable: true - properties: + enum: + - assignment + example: assignment type: type: string - description: '' - default: app - example: app - id_code: - type: string - description: The id of the app. - example: xyz789 - name: + enum: + - admin + - team + example: admin + admin_id: type: string - description: The name of the app. - example: ACME - region: + description: The id of the admin who is performing the action. + example: '12345' + assignee_id: type: string - description: The Intercom region the app is located in. - example: US - timezone: + description: The `id` of the `admin` or `team` which will be assigned the + conversation. A conversation can be assigned both an admin and a team.\nSet + `0` if you want this assign to no admin or team (ie. Unassigned). + example: '4324241' + body: type: string - description: The timezone of the region where the app is located. - example: America/Los_Angeles - created_at: - type: integer - description: When the app was created. - example: 1671465577 - identity_verification: - type: boolean - description: Whether or not the app uses identity verification. - example: false - article: - title: Article + description: Optionally you can send a response in the conversation when + it is assigned. + example: Let me pass you over to one of my colleagues. + required: + - message_type + - type + - admin_id + - assignee_id + attach_contact_to_conversation_request: + title: Assign Conversation Request type: object - x-tags: - - Articles - description: The Articles API is a central place to gather all information and - take actions on your articles. Articles can live within collections and sections, - or alternatively they can stand alone. + description: Payload of the request to assign a conversation properties: - statistics: - nullable: true - "$ref": "#/components/schemas/article_statistics" - allOf: - - "$ref": "#/components/schemas/article_list_item" - internal_article: - title: Internal Article + admin_id: + type: string + description: The `id` of the admin who is adding the new participant. + example: '12345' + customer: + type: object + oneOf: + - title: Intercom User ID + properties: + intercom_user_id: + type: string + description: The identifier for the contact as given by Intercom. + example: 6329bd9ffe4e2e91dac76188 + customer: + "$ref": "#/components/schemas/customer_request" + required: + - intercom_user_id + - title: User ID + properties: + user_id: + type: string + description: The external_id you have defined for the contact who + is being added as a participant. + example: 6329bd9ffe4e2e91dac76188 + customer: + "$ref": "#/components/schemas/customer_request" + required: + - user_id + - title: Email + properties: + email: + type: string + description: The email you have defined for the contact who is being + added as a participant. + example: winstonsmith@truth.org + customer: + "$ref": "#/components/schemas/customer_request" + required: + - email + brand: type: object + title: Brand + description: Represents a branding configuration for the workspace x-tags: - - Articles - description: The Internal Articles API is a central place to gather all information and - take actions on your internal articles. - allOf: - - "$ref": "#/components/schemas/internal_article_list_item" - article_content: - title: Article Content - type: object - description: The Content of an Article. - nullable: true + - Brands properties: type: type: string - description: The type of object - `article_content` . - enum: - - - - article_content - example: article_content - nullable: true - title: - type: string - description: The title of the article. - example: How to create a new article - description: - type: string - description: The description of the article. - example: This article will show you how to create a new article. - body: + description: The type of object + example: brand + id: type: string - description: The body of the article. - example: This is the body of the article. - author_id: - type: integer - description: The ID of the author of the article. - example: '5017691' - state: + description: Unique brand identifier. For default brand, matches the workspace ID + example: "10" + name: type: string - description: Whether the article is `published` or is a `draft` . - enum: - - published - - draft - example: draft + description: Display name of the brand + example: "Default Brand" + is_default: + type: boolean + description: Whether this is the workspace's default brand + example: true created_at: type: integer format: date-time - description: The time when the article was created (seconds). - example: 1663597223 + description: Unix timestamp of brand creation + example: 1673778600 updated_at: type: integer format: date-time - description: The time when the article was last updated (seconds). - example: 1663597260 - url: + description: Unix timestamp of last modification + example: 1711031100 + help_center_id: type: string - description: The URL of the article. - example: http://intercom.test/help/en/articles/3-default-language - internal_article_list: - title: Internal Articles + description: Associated help center identifier + example: "10" + default_address_settings_id: + type: string + description: Default email settings ID for this brand + example: "15" + brand_list: type: object - description: This will return a list of internal articles for the App. + title: Brand List + description: A list of brands + x-tags: + - Brands properties: type: type: string - description: The type of the object - `list`. - enum: - - list + description: The type of object example: list - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: A count of the total number of internal articles. - example: 1 data: type: array - description: An array of Internal Article objects items: - "$ref": "#/components/schemas/internal_article_list_item" - article_list: - title: Articles + $ref: "#/components/schemas/brand" + away_status_reason: type: object - description: This will return a list of articles for the App. properties: type: type: string - description: The type of the object - `list`. + example: "away_status_reason" + id: + type: string + description: "The unique identifier for the away status reason" + label: + type: string + description: "The display text for the away status reason" + example: "On a break" + emoji: + type: string + description: "The emoji associated with the status reason" + example: "☕" + order: + type: integer + description: "The display order of the status reason" + example: 1 + deleted: + type: boolean + description: "Whether the status reason has been soft deleted" + example: false + created_at: + type: integer + description: "The Unix timestamp when the status reason was created" + example: 1734537243 + updated_at: + type: integer + description: "The Unix timestamp when the status reason was last updated" + example: 1734537243 + away_status_reason_list: + title: Away Status Reasons + type: object + description: A list of away status reasons. + properties: + type: + type: string + description: The type of the object enum: - list example: list - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: A count of the total number of articles. - example: 1 data: type: array - description: An array of Article objects + description: A list of away status reason objects. items: - "$ref": "#/components/schemas/article_list_item" - article_list_item: - title: Articles + "$ref": "#/components/schemas/away_status_reason" + change_ticket_type_request: + title: Change Ticket Type Request + description: You can change the type of a Ticket type: object - x-tags: - - Articles - description: The data returned about your articles when you list them. properties: + ticket_type_id: + type: string + description: The ID of the new ticket type. Must be in the same category + as the current type. + example: '1234' + ticket_state_id: + type: string + description: The ID of the ticket state for the new ticket type. + example: '5678' + ticket_attributes: + type: object + description: The attributes to set on the ticket for the new type. Attributes + matching by name and type are transferred automatically from the old type; + values provided here override the transferred values. + example: + _default_title_: example + _default_description_: having a problem + required: + - ticket_type_id + - ticket_state_id + close_conversation_request: + title: Close Conversation Request + type: object + description: Payload of the request to close a conversation + properties: + message_type: + type: string + enum: + - close + example: close type: type: string - description: The type of object - `article`. enum: - - article - default: article - example: article + - admin + example: admin + admin_id: + type: string + description: The id of the admin who is performing the action. + example: '12345' + body: + type: string + description: Optionally you can leave a message in the conversation to provide + additional context to the user and other teammates. + example: " This conversation is now closed!" + required: + - message_type + - type + - admin_id + collection: + title: Collection + type: object + x-tags: + - Help Center + description: Collections are top level containers for Articles within the Help + Center. + properties: id: type: string - description: The unique identifier for the article which is given by Intercom. + description: The unique identifier for the collection which is given by + Intercom. example: '6871119' workspace_id: type: string - description: The id of the workspace which the article belongs to. + description: The id of the workspace which the collection belongs to. example: hfi1bx4l - title: + name: type: string - description: The title of the article. For multilingual articles, this will - be the title of the default language's content. - example: Default language title + description: The name of the collection. For multilingual collections, this + will be the name of the default language's content. + example: Default language name description: type: string nullable: true - description: The description of the article. For multilingual articles, - this will be the description of the default language's content. + description: The description of the collection. For multilingual help centers, + this will be the description of the collection for the default language. example: Default language description - body: - type: string - nullable: true - description: The body of the article in HTML. For multilingual articles, - this will be the body of the default language's content. - example: Default language body in html - author_id: - type: integer - description: The id of the author of the article. For multilingual articles, - this will be the id of the author of the default language's content. Must - be a teammate on the help center's workspace. - example: '5017691' - state: - type: string - description: Whether the article is `published` or is a `draft`. For multilingual - articles, this will be the state of the default language's content. - enum: - - published - - draft - default: draft - example: published created_at: type: integer format: date-time - description: The time when the article was created. For multilingual articles, - this will be the timestamp of creation of the default language's content - in seconds. + description: The time when the article was created (seconds). For multilingual + articles, this will be the timestamp of creation of the default language's + content. example: 1672928359 updated_at: type: integer format: date-time - description: The time when the article was last updated. For multilingual + description: The time when the article was last updated (seconds). For multilingual articles, this will be the timestamp of last update of the default language's - content in seconds. + content. example: 1672928610 url: type: string nullable: true - description: The URL of the article. For multilingual articles, this will - be the URL of the default language's content. - example: http://intercom.test/help/en/articles/3-default-language - parent_ids: + description: The URL of the collection. For multilingual help centers, this + will be the URL of the collection for the default language. + example: http://intercom.test/help/collection/name + icon: + type: string + nullable: true + description: The icon of the collection. + example: book-bookmark + order: + type: integer + description: The order of the section in relation to others sections within + a collection. Values go from `0` upwards. `0` is the default if there's + no order. + example: '1' + default_locale: + type: string + description: The default locale of the help center. This field is only returned + for multilingual help centers. + example: en + translated_content: + nullable: true + "$ref": "#/components/schemas/group_translated_content" + parent_id: + type: string + nullable: true + description: The id of the parent collection. If `null` then it is the first + level collection. + example: '6871118' + help_center_id: + type: integer + nullable: true + description: The id of the help center the collection is in. + example: '123' + collection_list: + title: Collections + type: object + description: This will return a list of Collections for the App. + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of collections. + example: 1 + data: type: array - description: The ids of the article's parent collections or sections. An - article without this field stands alone. + description: An array of collection objects items: - type: integer - example: - - 18 - - 19 - default_locale: - type: string - description: The default locale of the help center. This field is only returned - for multilingual help centers. - example: en - translated_content: - nullable: true - "$ref": "#/components/schemas/article_translated_content" - tags: - "$ref": "#/components/schemas/tags" - internal_article_list_item: - title: Internal Articles + "$ref": "#/components/schemas/collection" + company: + title: Company type: object x-tags: - - Internal Articles - description: The data returned about your internal articles when you list them. + - Companies + description: Companies allow you to represent organizations using your product. + Each company will have its own description and be associated with contacts. + You can fetch, create, update and list companies. properties: type: type: string - description: The type of object - `internal_article`. + description: Value is `company` enum: - - internal_article - default: internal_article - example: internal_article + - company + example: company id: type: string - description: The unique identifier for the article which is given by Intercom. - example: '6871119' - title: + description: The Intercom defined id representing the company. + example: 531ee472cce572a6ec000006 + name: type: string - description: The title of the article. - body: + description: The name of the company. + example: Blue Sun + app_id: type: string - nullable: true - description: The body of the article in HTML. - example: Default language body in html - owner_id: - type: integer - description: The id of the owner of the article. - example: '5017691' - author_id: + description: The Intercom defined code of the workspace the company is associated + to. + example: ecahpwf5 + plan: + type: object + properties: + type: + type: string + description: Value is always "plan" + example: plan + id: + type: string + description: The id of the plan + example: '269315' + name: + type: string + description: The name of the plan + example: Pro + company_id: + type: string + description: The company id you have defined for the company. + example: '6' + remote_created_at: type: integer - description: The id of the author of the article. - example: '5017691' + description: The time the company was created by you. + example: 1663597223 created_at: type: integer - format: date-time - description: The time when the article was created. - example: 1672928359 + description: The time the company was added in Intercom. + example: 1663597223 updated_at: type: integer - format: date-time - description: The time when the article was last updated. - example: 1672928610 - locale: - type: string - description: The default locale of the article. - example: en - article_search_highlights: - title: Article Search Highlights - type: object - x-tags: - - Articles - description: The highlighted results of an Article search. In the examples provided - my search query is always "my query". - properties: - article_id: + description: The last time the company was updated. + example: 1663597223 + last_request_at: + type: integer + description: The time the company last recorded making a request. + example: 1663597223 + size: + type: integer + description: The number of employees in the company. + example: 100 + website: type: string - description: The ID of the corresponding article. - example: '123' - highlighted_title: - type: array - description: An Article title highlighted. - items: - type: object - description: A highlighted article title. - properties: - type: - type: string - description: The type of text - `highlight` or `plain`. - enum: - - highlight - - plain - example: 'The highlight is ' - text: - type: string - description: The text of the title. - example: my query - highlighted_summary: - type: array - description: An Article description and body text highlighted. - items: - type: array - description: An array containing the highlighted summary text split into - chunks of plain and highlighted text. - items: - type: object - description: An instance of highlighted summary text. - properties: - type: - type: string - description: The type of text - `highlight` or `plain`. - enum: - - highlight - - plain - example: 'How to highlight ' - text: - type: string - description: The text of the title. - example: my query - article_search_response: - title: Article Search Response - type: object - x-tags: - - Articles - description: The results of an Article search - properties: - type: + description: The URL for the company website. + example: https://www.intercom.com + industry: type: string - description: The type of the object - `list`. - enum: - - list - example: list - total_count: + description: The industry that the company operates in. + example: Software + monthly_spend: type: integer - description: The total number of Articles matching the search query - example: 5 - data: + description: How much revenue the company generates for your business. + example: 100 + session_count: + type: integer + description: How many sessions the company has recorded. + example: 100 + user_count: + type: integer + description: The number of users in the company. + example: 100 + custom_attributes: type: object - description: An object containing the results of the search. + description: The custom attributes you have set on the company. + additionalProperties: + type: string + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + tags: + type: object + description: The list of tags associated with the company properties: - articles: + type: + type: string + description: The type of the object + enum: + - tag.list + tags: type: array - description: An array of Article objects items: - "$ref": "#/components/schemas/article" - highlights: + "$ref": "#/components/schemas/tag_basic" + segments: + type: object + description: The list of segments associated with the company + properties: + type: + type: string + description: The type of the object + enum: + - segment.list + segments: type: array - description: A corresponding array of highlighted Article content items: - "$ref": "#/components/schemas/article_search_highlights" - pages: - "$ref": "#/components/schemas/cursor_pages" - internal_article_search_response: - title: Internal Article Search Response + "$ref": "#/components/schemas/segment" + company_attached_contacts: + title: Company Attached Contacts type: object - x-tags: - - Internal Articles - description: The results of an Internal Article search + description: A list of Contact Objects properties: type: type: string - description: The type of the object - `list`. + description: The type of object - `list` enum: - list example: list + data: + type: array + description: An array containing Contact Objects + items: + "$ref": "#/components/schemas/contact" total_count: type: integer - description: The total number of Internal Articles matching the search query - example: 5 - data: - type: object - description: An object containing the results of the search. - properties: - internal_articles: - type: array - description: An array of Internal Article objects - items: - "$ref": "#/components/schemas/internal_article" + description: The total number of contacts + example: 100 pages: - "$ref": "#/components/schemas/cursor_pages" - article_statistics: - title: Article Statistics + "$ref": "#/components/schemas/cursor_pages" + company_attached_segments: + title: Company Attached Segments type: object - description: The statistics of an article. - nullable: true + description: A list of Segment Objects properties: type: type: string - description: The type of object - `article_statistics`. + description: The type of object - `list` enum: - - article_statistics - default: article_statistics - example: article_statistics - views: - type: integer - description: The number of total views the article has received. - example: 10 - conversions: - type: integer - description: The number of conversations started from the article. - example: 0 - reactions: - type: integer - description: The number of total reactions the article has received. - example: 10 - happy_reaction_percentage: - type: number - format: float - description: The percentage of happy reactions the article has received - against other types of reaction. - example: 40.0 - neutral_reaction_percentage: - type: number - format: float - description: The percentage of neutral reactions the article has received - against other types of reaction. - example: 40.0 - sad_reaction_percentage: - type: number - format: float - description: The percentage of sad reactions the article has received against - other types of reaction. - example: 20.0 - article_translated_content: - title: Article Translated Content + - list + example: list + data: + type: array + description: An array containing Segment Objects + items: + "$ref": "#/components/schemas/segment" + company_note: + title: Company Note type: object - description: The Translated Content of an Article. The keys are the locale codes - and the values are the translated content of the article. - nullable: true + x-tags: + - Notes + description: Notes allow you to annotate and comment on companies. properties: type: type: string - description: The type of object - article_translated_content. - enum: - - - - article_translated_content - example: article_translated_content - nullable: true - ar: - description: The content of the article in Arabic - "$ref": "#/components/schemas/article_content" - bg: - description: The content of the article in Bulgarian - "$ref": "#/components/schemas/article_content" - bs: - description: The content of the article in Bosnian - "$ref": "#/components/schemas/article_content" - ca: - description: The content of the article in Catalan - "$ref": "#/components/schemas/article_content" - cs: - description: The content of the article in Czech - "$ref": "#/components/schemas/article_content" - da: - description: The content of the article in Danish - "$ref": "#/components/schemas/article_content" - de: - description: The content of the article in German - "$ref": "#/components/schemas/article_content" - el: - description: The content of the article in Greek - "$ref": "#/components/schemas/article_content" - en: - description: The content of the article in English - "$ref": "#/components/schemas/article_content" - es: - description: The content of the article in Spanish - "$ref": "#/components/schemas/article_content" - et: - description: The content of the article in Estonian - "$ref": "#/components/schemas/article_content" - fi: - description: The content of the article in Finnish - "$ref": "#/components/schemas/article_content" - fr: - description: The content of the article in French - "$ref": "#/components/schemas/article_content" - he: - description: The content of the article in Hebrew - "$ref": "#/components/schemas/article_content" - hr: - description: The content of the article in Croatian - "$ref": "#/components/schemas/article_content" - hu: - description: The content of the article in Hungarian - "$ref": "#/components/schemas/article_content" + description: String representing the object's type. Always has the value + `note`. + example: note id: - description: The content of the article in Indonesian - "$ref": "#/components/schemas/article_content" - it: - description: The content of the article in Italian - "$ref": "#/components/schemas/article_content" - ja: - description: The content of the article in Japanese - "$ref": "#/components/schemas/article_content" - ko: - description: The content of the article in Korean - "$ref": "#/components/schemas/article_content" - lt: - description: The content of the article in Lithuanian - "$ref": "#/components/schemas/article_content" - lv: - description: The content of the article in Latvian - "$ref": "#/components/schemas/article_content" - mn: - description: The content of the article in Mongolian - "$ref": "#/components/schemas/article_content" - nb: - description: The content of the article in Norwegian - "$ref": "#/components/schemas/article_content" - nl: - description: The content of the article in Dutch - "$ref": "#/components/schemas/article_content" - pl: - description: The content of the article in Polish - "$ref": "#/components/schemas/article_content" - pt: - description: The content of the article in Portuguese (Portugal) - "$ref": "#/components/schemas/article_content" - ro: - description: The content of the article in Romanian - "$ref": "#/components/schemas/article_content" - ru: - description: The content of the article in Russian - "$ref": "#/components/schemas/article_content" - sl: - description: The content of the article in Slovenian - "$ref": "#/components/schemas/article_content" - sr: - description: The content of the article in Serbian - "$ref": "#/components/schemas/article_content" - sv: - description: The content of the article in Swedish - "$ref": "#/components/schemas/article_content" - tr: - description: The content of the article in Turkish - "$ref": "#/components/schemas/article_content" - vi: - description: The content of the article in Vietnamese - "$ref": "#/components/schemas/article_content" - pt-BR: - description: The content of the article in Portuguese (Brazil) - "$ref": "#/components/schemas/article_content" - zh-CN: - description: The content of the article in Chinese (China) - "$ref": "#/components/schemas/article_content" - zh-TW: - description: The content of the article in Chinese (Taiwan) - "$ref": "#/components/schemas/article_content" - assign_conversation_request: - title: Assign Conversation Request + type: string + description: The id of the note. + example: '17495962' + created_at: + type: integer + format: timestamp + description: The time the note was created. + example: 1674589321 + company: + type: object + description: Represents the company that the note was created about. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `company`. + example: company + id: + type: string + description: The id of the company. + example: 6329bd9ffe4e2e91dac76188 + author: + "$ref": "#/components/schemas/admin" + description: Optional. Represents the Admin that created the note. + body: + type: string + description: The body text of the note. + example: "

Text for the note.

" + company_list: + title: Companies type: object - description: Payload of the request to assign a conversation + description: This will return a list of companies for the App. properties: - message_type: - type: string - enum: - - assignment - example: assignment type: type: string + description: The type of object - `list`. enum: - - admin - - team - example: admin - admin_id: - type: string - description: The id of the admin who is performing the action. - example: '12345' - assignee_id: - type: string - description: The `id` of the `admin` or `team` which will be assigned the - conversation. A conversation can be assigned both an admin and a team.\nSet - `0` if you want this assign to no admin or team (ie. Unassigned). - example: '4324241' - body: - type: string - description: Optionally you can send a response in the conversation when - it is assigned. - example: Let me pass you over to one of my colleagues. - required: - - message_type - - type - - admin_id - - assignee_id - attach_contact_to_conversation_request: - title: Assign Conversation Request + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: The total number of companies. + example: 100 + data: + type: array + description: An array containing Company Objects. + items: + "$ref": "#/components/schemas/company" + company_scroll: + title: Company Scroll type: object - description: Payload of the request to assign a conversation + description: Companies allow you to represent organizations using your product. + Each company will have its own description and be associated with contacts. + You can fetch, create, update and list companies. + nullable: true properties: - admin_id: + type: type: string - description: The `id` of the admin who is adding the new participant. - example: '12345' - customer: - type: object - oneOf: - - title: Intercom User ID - properties: - intercom_user_id: - type: string - description: The identifier for the contact as given by Intercom. - example: 6329bd9ffe4e2e91dac76188 - customer: - "$ref": "#/components/schemas/customer_request" - required: - - intercom_user_id - - title: User ID - properties: - user_id: - type: string - description: The external_id you have defined for the contact who - is being added as a participant. - example: 6329bd9ffe4e2e91dac76188 - customer: - "$ref": "#/components/schemas/customer_request" - required: - - user_id - - title: Email - properties: - email: - type: string - description: The email you have defined for the contact who is being - added as a participant. - example: winstonsmith@truth.org - customer: - "$ref": "#/components/schemas/customer_request" - required: - - email - brand: + description: The type of object - `list` + enum: + - list + example: list + data: + type: array + items: + "$ref": "#/components/schemas/company" + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: The total number of companies + nullable: true + example: 100 + scroll_param: + type: string + description: The scroll parameter to use in the next request to fetch the + next page of results. + example: 25b649f7-4d33-4ef6-88f5-60e5b8244309 + contact: + title: Contact type: object - title: Brand - description: Represents a branding configuration for the workspace x-tags: - - Brands + - Contacts + x-fern-sdk-group-name: contacts + description: Contacts represent your leads and users in Intercom. properties: type: type: string - description: The type of object - example: brand + description: The type of object. + example: contact id: type: string - description: Unique brand identifier. For default brand, matches the workspace ID - example: "10" - name: + description: The unique identifier for the contact which is given by Intercom. + example: 5ba682d23d7cf92bef87bfd4 + external_id: + type: string + nullable: true + description: The unique identifier for the contact which is provided by + the Client. + example: f3b87a2e09d514c6c2e79b9a + workspace_id: + type: string + description: The id of the workspace which the contact belongs to. + example: ecahpwf5 + role: + type: string + description: The role of the contact. + example: user + email: + type: string + description: The contact's email. + example: joe@example.com + email_domain: + type: string + description: The contact's email domain. + example: example.com + phone: + type: string + nullable: true + description: The contacts phone. + example: "+1123456789" + name: + type: string + nullable: true + description: The contacts name. + example: John Doe + owner_id: + type: string + nullable: true + description: The id of an admin that has been assigned account ownership + of the contact. + example: "321" + has_hard_bounced: + type: boolean + description: Whether the contact has had an email sent to them hard bounce. + example: true + marked_email_as_spam: + type: boolean + description: Whether the contact has marked an email sent to them as spam. + example: true + unsubscribed_from_emails: + type: boolean + description: Whether the contact is unsubscribed from emails. + example: true + created_at: + type: integer + format: date-time + description: "(Unix timestamp in seconds) The time when the contact was created." + example: 1571672154 + updated_at: + type: integer + format: date-time + description: "(Unix timestamp in seconds) The time when the contact was last updated." + example: 1571672154 + signed_up_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time specified for when a contact signed + up." + example: 1571672154 + last_seen_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time when the contact was last seen (either + where the Intercom Messenger was installed or when specified manually)." + example: 1571672154 + last_replied_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time when the contact last messaged in." + example: 1571672154 + last_contacted_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time when the contact was last messaged." + example: 1571672154 + last_email_opened_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time when the contact last opened an + email." + example: 1571672154 + last_email_clicked_at: + type: integer + format: date-time + nullable: true + description: "(Unix timestamp in seconds) The time when the contact last clicked a + link in an email." + example: 1571672154 + language_override: + type: string + nullable: true + description: A preferred language setting for the contact, used by the Intercom + Messenger even if their browser settings change. + example: en + browser: + type: string + nullable: true + description: The name of the browser which the contact is using. + example: Chrome + browser_version: + type: string + nullable: true + description: The version of the browser which the contact is using. + example: 80.0.3987.132 + browser_language: + type: string + nullable: true + description: The language set by the browser which the contact is using. + example: en-US + os: + type: string + nullable: true + description: The operating system which the contact is using. + example: Mac OS X + android_app_name: + type: string + nullable: true + description: The name of the Android app which the contact is using. + example: Intercom + android_app_version: + type: string + nullable: true + description: The version of the Android app which the contact is using. + example: 5.0.0 + android_device: + type: string + nullable: true + description: The Android device which the contact is using. + example: Pixel 3 + android_os_version: + type: string + nullable: true + description: The version of the Android OS which the contact is using. + example: '10' + android_sdk_version: + type: string + nullable: true + description: The version of the Android SDK which the contact is using. + example: '28' + android_last_seen_at: + type: integer + nullable: true + format: date-time + description: "(Unix timestamp in seconds) The time when the contact was last seen on + an Android device." + example: 1571672154 + ios_app_name: + type: string + nullable: true + description: The name of the iOS app which the contact is using. + example: Intercom + ios_app_version: + type: string + nullable: true + description: The version of the iOS app which the contact is using. + example: 5.0.0 + ios_device: + type: string + nullable: true + description: The iOS device which the contact is using. + example: iPhone 11 + ios_os_version: + type: string + nullable: true + description: The version of iOS which the contact is using. + example: 13.3.1 + ios_sdk_version: type: string - description: Display name of the brand - example: "Default Brand" - is_default: - type: boolean - description: Whether this is the workspace's default brand - example: true - created_at: - type: integer - format: date-time - description: Unix timestamp of brand creation - example: 1673778600 - updated_at: + nullable: true + description: The version of the iOS SDK which the contact is using. + example: 13.3.1 + ios_last_seen_at: type: integer + nullable: true format: date-time - description: Unix timestamp of last modification - example: 1711031100 - help_center_id: - type: string - description: Associated help center identifier - example: "10" - default_address_settings_id: - type: string - description: Default email settings ID for this brand - example: "15" - brand_list: + description: "(Unix timestamp in seconds) The last time the contact used the iOS app." + example: 1571672154 + custom_attributes: + type: object + description: The custom attributes which are set for the contact. + avatar: + type: object + nullable: true + properties: + type: + type: string + description: The type of object + example: avatar + image_url: + type: string + format: uri + nullable: true + description: An image URL containing the avatar of a contact. + example: https://example.org/128Wash.jpg + tags: + "$ref": "#/components/schemas/contact_tags" + notes: + "$ref": "#/components/schemas/contact_notes" + companies: + "$ref": "#/components/schemas/contact_companies" + location: + "$ref": "#/components/schemas/contact_location" + social_profiles: + "$ref": "#/components/schemas/contact_social_profiles" + contact_attached_companies: + title: Contact Attached Companies type: object - title: Brand List - description: A list of brands - x-tags: - - Brands + description: A list of Company Objects properties: type: type: string description: The type of object + enum: + - list example: list - data: + companies: type: array + description: An array containing Company Objects items: - $ref: "#/components/schemas/brand" - away_status_reason: + "$ref": "#/components/schemas/company" + total_count: + type: integer + description: The total number of companies associated to this contact + example: 100 + pages: + "$ref": "#/components/schemas/pages_link" + contact_companies: + title: Contact companies type: object + nullable: false + description: An object with metadata about companies attached to a contact . Up to 10 will be displayed here. Use the url to get more. properties: - type: + data: + type: array + description: An array of company data objects attached to the contact. + items: + "$ref": "#/components/schemas/company_data" + url: type: string - example: "away_status_reason" + format: uri + description: Url to get more company resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/companies" + total_count: + type: integer + description: Integer representing the total number of companies attached to + this contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + company_data: + title: Company Data + type: object + description: An object containing data about the companies that a contact is associated with. + properties: id: type: string - description: "The unique identifier for the away status reason" - label: + description: The unique identifier for the company which is given by Intercom. + example: 5ba682d23d7cf92bef87bfd4 + type: type: string - description: "The display text for the away status reason" - example: "On a break" - emoji: + description: The type of the object. Always company. + enum: + - company + example: company + url: type: string - description: "The emoji associated with the status reason" - example: "☕" - order: - type: integer - description: "The display order of the status reason" - example: 1 + format: uri + description: The relative URL of the company. + example: "/companies/5ba682d23d7cf92bef87bfd4" + contact_deleted: + title: Contact Deleted + description: deleted contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: deleted: type: boolean - description: "Whether the status reason has been soft deleted" - example: false - created_at: - type: integer - description: "The Unix timestamp when the status reason was created" - example: 1734537243 - updated_at: - type: integer - description: "The Unix timestamp when the status reason was last updated" - example: 1734537243 - away_status_reason_list: - title: Away Status Reasons + description: Whether the contact is deleted or not. + example: true + contact_list: + title: Contact List type: object - description: A list of away status reasons. + description: Contacts are your users in Intercom. properties: type: type: string - description: The type of the object + description: Always list enum: - list example: list data: type: array - description: A list of away status reason objects. + description: The list of contact objects items: - "$ref": "#/components/schemas/away_status_reason" - change_ticket_type_request: - title: Change Ticket Type Request - description: You can change the type of a Ticket - type: object - properties: - ticket_type_id: - type: string - description: The ID of the new ticket type. Must be in the same category - as the current type. - example: '1234' - ticket_state_id: - type: string - description: The ID of the ticket state for the new ticket type. - example: '5678' - ticket_attributes: - type: object - description: The attributes to set on the ticket for the new type. Attributes - matching by name and type are transferred automatically from the old type; - values provided here override the transferred values. - example: - _default_title_: example - _default_description_: having a problem - required: - - ticket_type_id - - ticket_state_id - close_conversation_request: - title: Close Conversation Request - type: object - description: Payload of the request to close a conversation - properties: - message_type: - type: string - enum: - - close - example: close - type: - type: string - enum: - - admin - example: admin - admin_id: - type: string - description: The id of the admin who is performing the action. - example: '12345' - body: - type: string - description: Optionally you can leave a message in the conversation to provide - additional context to the user and other teammates. - example: " This conversation is now closed!" - required: - - message_type - - type - - admin_id - collection: - title: Collection - type: object - x-tags: - - Help Center - description: Collections are top level containers for Articles within the Help - Center. - properties: - id: - type: string - description: The unique identifier for the collection which is given by - Intercom. - example: '6871119' - workspace_id: - type: string - description: The id of the workspace which the collection belongs to. - example: hfi1bx4l - name: - type: string - description: The name of the collection. For multilingual collections, this - will be the name of the default language's content. - example: Default language name - description: - type: string - nullable: true - description: The description of the collection. For multilingual help centers, - this will be the description of the collection for the default language. - example: Default language description - created_at: - type: integer - format: date-time - description: The time when the article was created (seconds). For multilingual - articles, this will be the timestamp of creation of the default language's - content. - example: 1672928359 - updated_at: + "$ref": "#/components/schemas/contact" + total_count: type: integer - format: date-time - description: The time when the article was last updated (seconds). For multilingual - articles, this will be the timestamp of last update of the default language's - content. - example: 1672928610 - url: + description: A count of the total number of objects. + example: 100 + pages: + "$ref": "#/components/schemas/cursor_pages" + contact_location: + title: Contact Location + type: object + nullable: false + description: An object containing location meta data about a Intercom contact. + properties: + type: type: string nullable: true - description: The URL of the collection. For multilingual help centers, this - will be the URL of the collection for the default language. - example: http://intercom.test/help/collection/name - icon: + description: Always location + example: location + country: type: string nullable: true - description: The icon of the collection. - example: book-bookmark - order: - type: integer - description: The order of the section in relation to others sections within - a collection. Values go from `0` upwards. `0` is the default if there's - no order. - example: '1' - default_locale: + description: The country that the contact is located in + example: Ireland + region: type: string - description: The default locale of the help center. This field is only returned - for multilingual help centers. - example: en - translated_content: nullable: true - "$ref": "#/components/schemas/group_translated_content" - parent_id: + description: The overal region that the contact is located in + example: Dublin + city: type: string nullable: true - description: The id of the parent collection. If `null` then it is the first - level collection. - example: '6871118' - help_center_id: - type: integer - nullable: true - description: The id of the help center the collection is in. - example: '123' - collection_list: - title: Collections + description: The city that the contact is located in + example: Dublin + contact_notes: + title: Contact notes type: object - description: This will return a list of Collections for the App. + nullable: false + description: An object containing notes meta data about the notes that a contact + has. Up to 10 will be displayed here. Use the url to get more. properties: - type: - type: string - description: The type of the object - `list`. - enum: - - list - example: list - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: A count of the total number of collections. - example: 1 data: type: array - description: An array of collection objects + description: This object represents the notes attached to a contact. items: - "$ref": "#/components/schemas/collection" - company: - title: Company + "$ref": "#/components/schemas/addressable_list" + url: + type: string + format: uri + description: Url to get more company resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/notes" + total_count: + type: integer + description: Int representing the total number of companyies attached to + this contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + contact_reference: + title: Contact Reference type: object - x-tags: - - Companies - description: Companies allow you to represent organizations using your product. - Each company will have its own description and be associated with contacts. - You can fetch, create, update and list companies. + description: reference to contact object properties: type: type: string - description: Value is `company` + description: always contact enum: - - company - example: company + - contact + example: contact id: type: string - description: The Intercom defined id representing the company. - example: 531ee472cce572a6ec000006 - name: + description: The unique identifier for the contact which is given by Intercom. + example: 5ba682d23d7cf92bef87bfd4 + external_id: type: string - description: The name of the company. - example: Blue Sun - app_id: + nullable: true + description: The unique identifier for the contact which is provided by + the Client. + example: "70" + contact_reply_base_request: + title: Contact Reply Base Object + type: object + properties: + message_type: type: string - description: The Intercom defined code of the workspace the company is associated - to. - example: ecahpwf5 - plan: - type: object - properties: - type: - type: string - description: Value is always "plan" - example: plan - id: - type: string - description: The id of the plan - example: '269315' - name: - type: string - description: The name of the plan - example: Pro - company_id: + enum: + - comment + type: type: string - description: The company id you have defined for the company. - example: '6' - remote_created_at: - type: integer - description: The time the company was created by you. - example: 1663597223 + enum: + - user + body: + type: string + description: The text body of the comment. created_at: type: integer - description: The time the company was added in Intercom. - example: 1663597223 - updated_at: - type: integer - description: The last time the company was updated. - example: 1663597223 - last_request_at: - type: integer - description: The time the company last recorded making a request. - example: 1663597223 - size: - type: integer - description: The number of employees in the company. - example: 100 - website: + description: The time the reply was created. If not provided, the current + time will be used. + example: 1590000000 + attachment_urls: + title: Attachment URLs + type: array + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. + items: + type: string + format: uri + maxItems: 10 + reply_options: + title: Contact Quick Reply + type: array + description: The quick reply selection the contact wishes to respond with. + These map to buttons displayed in the Messenger UI if sent by a bot, or the reply options sent by an Admin via the API. + items: + title: Quick Reply Option + type: object + properties: + text: + type: string + description: The text of the chosen reply option. + uuid: + type: string + format: uuid + description: The unique identifier for the quick reply option selected. + required: + - text + - uuid + required: + - message_type + - type + - body + contact_reply_conversation_request: + title: Contact Reply + oneOf: + - "$ref": "#/components/schemas/contact_reply_intercom_user_id_request" + - "$ref": "#/components/schemas/contact_reply_email_request" + - "$ref": "#/components/schemas/contact_reply_user_id_request" + contact_reply_email_request: + title: Email + type: object + description: Payload of the request to reply on behalf of a contact using their + `email` + properties: + email: + type: string + description: The email you have defined for the user. + attachment_files: + type: array + description: A list of files that will be added as attachments. + items: + "$ref": "#/components/schemas/conversation_attachment_files" + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + required: + - email + contact_reply_intercom_user_id_request: + title: Intercom User ID + type: object + description: Payload of the request to reply on behalf of a contact using their + `intercom_user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + properties: + intercom_user_id: + type: string + description: The identifier for the contact as given by Intercom. + attachment_files: + type: array + description: A list of files that will be added as attachments. + items: + "$ref": "#/components/schemas/conversation_attachment_files" + required: + - intercom_user_id + contact_reply_ticket_email_request: + title: Email + type: object + description: Payload of the request to reply on behalf of a contact using their + `email` + properties: + email: type: string - description: The URL for the company website. - example: https://www.intercom.com - industry: + description: The email you have defined for the user. + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + required: + - email + contact_reply_ticket_intercom_user_id_request: + title: Intercom User ID + type: object + description: Payload of the request to reply on behalf of a contact using their + `intercom_user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + properties: + intercom_user_id: type: string - description: The industry that the company operates in. - example: Software - monthly_spend: - type: integer - description: How much revenue the company generates for your business. - example: 100 - session_count: - type: integer - description: How many sessions the company has recorded. - example: 100 - user_count: - type: integer - description: The number of users in the company. - example: 100 - custom_attributes: - type: object - description: The custom attributes you have set on the company. - additionalProperties: - type: string - example: - paid_subscriber: true - monthly_spend: 155.5 - team_mates: 9 - tags: - type: object - description: The list of tags associated with the company - properties: - type: - type: string - description: The type of the object - enum: - - tag.list - tags: - type: array - items: - "$ref": "#/components/schemas/tag_basic" - segments: - type: object - description: The list of segments associated with the company - properties: - type: - type: string - description: The type of the object - enum: - - segment.list - segments: - type: array - items: - "$ref": "#/components/schemas/segment" - company_attached_contacts: - title: Company Attached Contacts + description: The identifier for the contact as given by Intercom. + required: + - intercom_user_id + contact_reply_ticket_request: + title: Contact Reply on ticket + oneOf: + - "$ref": "#/components/schemas/contact_reply_ticket_intercom_user_id_request" + - "$ref": "#/components/schemas/contact_reply_ticket_user_id_request" + - "$ref": "#/components/schemas/contact_reply_ticket_email_request" + contact_reply_ticket_user_id_request: + title: User ID type: object - description: A list of Contact Objects + description: Payload of the request to reply on behalf of a contact using their + `user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" properties: - type: + user_id: type: string - description: The type of object - `list` - enum: - - list - example: list - data: + description: The external_id you have defined for the contact. + required: + - user_id + contact_reply_user_id_request: + title: User ID + type: object + description: Payload of the request to reply on behalf of a contact using their + `user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + properties: + user_id: + type: string + description: The external_id you have defined for the contact. + attachment_files: type: array - description: An array containing Contact Objects + description: A list of files that will be added as attachments. You can + include up to 10 files. items: - "$ref": "#/components/schemas/contact" - total_count: - type: integer - description: The total number of contacts - example: 100 - pages: - "$ref": "#/components/schemas/cursor_pages" - company_attached_segments: - title: Company Attached Segments + "$ref": "#/components/schemas/conversation_attachment_files" + maxItems: 10 + required: + - user_id + contact_segments: + title: Segments type: object - description: A list of Segment Objects + description: A list of segments objects attached to a specific contact. properties: type: type: string - description: The type of object - `list` + description: The type of the object enum: - list example: list data: type: array - description: An array containing Segment Objects + description: Segment objects associated with the contact. items: "$ref": "#/components/schemas/segment" - company_note: - title: Company Note + contact_social_profiles: + title: Social Profile type: object - x-tags: - - Notes - description: Notes allow you to annotate and comment on companies. + nullable: false + description: An object containing social profiles that a contact has. properties: - type: - type: string - description: String representing the object's type. Always has the value - `note`. - example: note - id: + data: + type: array + description: A list of social profiles objects associated with the contact. + items: + "$ref": "#/components/schemas/social_profile" + contact_subscription_types: + title: Contact Subscription Types + type: object + nullable: false + description: An object containing Subscription Types meta data about the SubscriptionTypes + that a contact has. + properties: + data: + type: array + description: This object represents the subscriptions attached to a contact. + items: + "$ref": "#/components/schemas/addressable_list" + url: type: string - description: The id of the note. - example: '17495962' - created_at: + format: uri + description: Url to get more subscription type resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/subscriptions" + total_count: type: integer - format: timestamp - description: The time the note was created. - example: 1674589321 - company: - type: object - description: Represents the company that the note was created about. - nullable: true - properties: - type: - type: string - description: String representing the object's type. Always has the value - `company`. - example: company - id: - type: string - description: The id of the company. - example: 6329bd9ffe4e2e91dac76188 - author: - "$ref": "#/components/schemas/admin" - description: Optional. Represents the Admin that created the note. - body: + description: Int representing the total number of subscription types attached + to this contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + contact_tags: + title: Contact Tags + type: object + nullable: true + description: An object containing tags meta data about the tags that a contact + has. Up to 10 will be displayed here. Use the url to get more. + properties: + data: + type: array + description: This object represents the tags attached to a contact. + items: + "$ref": "#/components/schemas/addressable_list" + url: type: string - description: The body text of the note. - example: "

Text for the note.

" - company_list: - title: Companies + format: uri + description: url to get more tag resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/tags" + total_count: + type: integer + description: Int representing the total number of tags attached to this + contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + contact_archived: + title: Contact Archived + description: archived contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + archived: + type: boolean + description: Whether the contact is archived or not. + example: true + contact_unarchived: + title: Contact Unarchived + description: unarchived contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + archived: + type: boolean + description: Whether the contact is archived or not. + example: false + contact_blocked: + content_bulk_action_request: + title: Content Bulk Action Request Payload type: object - description: This will return a list of companies for the App. + required: + - action + - content_ids properties: - type: + action: type: string - description: The type of object - `list`. + description: | + The bulk action to perform. Allowed `content_ids[].type` values vary per action: + * `publish`, `unpublish`: `article_content` + * `delete`: `article_content`, `content_snippet`, `file_source_content`, `internal_article` + * `set_availability`, `set_audience`: `article_content`, `content_snippet`, `external_content`, `file_source_content`, `internal_article` + * `update_tags`: `article` (the parent Article id, not `article_content`), `content_snippet`, `external_content`, `file_source_content`, `internal_article` enum: - - list - example: list - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: The total number of companies. - example: 100 - data: + - publish + - unpublish + - delete + - set_availability + - set_audience + - update_tags + example: publish + content_ids: type: array - description: An array containing Company Objects. + maxItems: 1000 + description: Up to 1,000 content items to apply the action to. items: - "$ref": "#/components/schemas/company" - company_scroll: - title: Company Scroll + type: object + required: + - type + - id + properties: + type: + type: string + enum: + - article + - article_content + - content_snippet + - external_content + - file_source_content + - internal_article + example: article_content + id: + type: string + example: '12345678' + availability: + type: object + description: | + Required when `action` is `set_availability`. Each field is optional — only the + properties present in the request are toggled. + properties: + ai_agent: + type: boolean + description: Toggle Fin AI Agent availability. + copilot: + type: boolean + description: Toggle Copilot availability. + sales_agent: + type: boolean + description: Toggle Sales Agent availability. + audience: + type: object + description: Required when `action` is `set_audience`. Manages segment membership. + properties: + add_segment_ids: + type: array + description: Segment IDs to assign to the selected content. + items: + type: integer + example: + - 100 + remove_segment_ids: + type: array + description: Segment IDs to remove from the selected content. + items: + type: integer + example: + - 200 + remove_all: + type: boolean + description: When `true`, removes all segments from the selected content. + example: false + tags: + type: object + description: | + Required when `action` is `update_tags`. Applies and/or removes existing tags. + Supply at least one of `add_tag_ids` / `remove_tag_ids`. At most 100 distinct tag IDs + may be supplied across `add_tag_ids` and `remove_tag_ids` combined. Tag IDs must + reference existing, non-archived tags; exceeding the limit or referencing unknown or + archived IDs is rejected with `parameter_invalid` (HTTP 422). + properties: + add_tag_ids: + type: array + description: Tag IDs to apply to the selected content. + items: + type: integer + example: + - 100 + remove_tag_ids: + type: array + description: Tag IDs to remove from the selected content. + items: + type: integer + example: + - 200 + content_bulk_action_response: + title: Content Bulk Action Response Envelope type: object - description: Companies allow you to represent organizations using your product. - Each company will have its own description and be associated with contacts. - You can fetch, create, update and list companies. - nullable: true + description: | + Phase 1 envelope returned immediately after the request is enqueued. A future + Preview release will replace this with a polling-friendly job resource that + surfaces progress and per-item results (updated, unchanged, skipped, failed). properties: type: type: string - description: The type of object - `list` - enum: - - list - example: list - data: - type: array - items: - "$ref": "#/components/schemas/company" - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: The total number of companies - nullable: true - example: 100 - scroll_param: + example: content_bulk_action + status: type: string - description: The scroll parameter to use in the next request to fetch the - next page of results. - example: 25b649f7-4d33-4ef6-88f5-60e5b8244309 - contact: - title: Contact + example: queued + title: Contact Blocked + type: object + description: blocked contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + blocked: + type: boolean + description: Always true. + example: true + content_import_source: + title: Content Import Source type: object x-tags: - - Contacts - x-fern-sdk-group-name: contacts - description: Contacts represent your leads and users in Intercom. + - AI Content + description: An external source for External Pages that you add to your Fin + Content Library. + nullable: false properties: type: type: string - description: The type of object. - example: contact + description: Always external_page + enum: + - content_import_source + default: content_import_source + example: content_import_source id: + type: integer + description: The unique identifier for the content import source which is + given by Intercom. + example: 1234 + last_synced_at: + type: integer + format: date-time + description: The time when the content import source was last synced. + example: 1672928610 + sync_behavior: type: string - description: The unique identifier for the contact which is given by Intercom. - example: 5ba682d23d7cf92bef87bfd4 - external_id: - type: string - nullable: true - description: The unique identifier for the contact which is provided by - the Client. - example: f3b87a2e09d514c6c2e79b9a - workspace_id: - type: string - description: The id of the workspace which the contact belongs to. - example: ecahpwf5 - role: - type: string - description: The role of the contact. - example: user - email: - type: string - description: The contact's email. - example: joe@example.com - email_domain: - type: string - description: The contact's email domain. - example: example.com - phone: - type: string - nullable: true - description: The contacts phone. - example: "+1123456789" - name: + description: If you intend to create or update External Pages via the API, + this should be set to `api`. + enum: + - api + - automatic + - manual + example: api + status: type: string - nullable: true - description: The contacts name. - example: John Doe - owner_id: + description: The status of the content import source. + enum: + - active + - deactivated + default: active + example: active + url: type: string - nullable: true - description: The id of an admin that has been assigned account ownership - of the contact. - example: "321" - has_hard_bounced: - type: boolean - description: Whether the contact has had an email sent to them hard bounce. - example: true - marked_email_as_spam: - type: boolean - description: Whether the contact has marked an email sent to them as spam. - example: true - unsubscribed_from_emails: - type: boolean - description: Whether the contact is unsubscribed from emails. - example: true + description: The URL of the root of the external source. + example: https://help.example.com/ created_at: type: integer format: date-time - description: "(Unix timestamp in seconds) The time when the contact was created." - example: 1571672154 + description: The time when the content import source was created. + example: 1672928359 updated_at: type: integer format: date-time - description: "(Unix timestamp in seconds) The time when the contact was last updated." - example: 1571672154 - signed_up_at: - type: integer - format: date-time - nullable: true - description: "(Unix timestamp in seconds) The time specified for when a contact signed - up." - example: 1571672154 - last_seen_at: - type: integer - format: date-time - nullable: true - description: "(Unix timestamp in seconds) The time when the contact was last seen (either - where the Intercom Messenger was installed or when specified manually)." - example: 1571672154 - last_replied_at: - type: integer - format: date-time - nullable: true - description: "(Unix timestamp in seconds) The time when the contact last messaged in." - example: 1571672154 - last_contacted_at: - type: integer - format: date-time - nullable: true - description: "(Unix timestamp in seconds) The time when the contact was last messaged." - example: 1571672154 - last_email_opened_at: - type: integer - format: date-time - nullable: true - description: "(Unix timestamp in seconds) The time when the contact last opened an - email." - example: 1571672154 - last_email_clicked_at: - type: integer - format: date-time - nullable: true - description: "(Unix timestamp in seconds) The time when the contact last clicked a - link in an email." - example: 1571672154 - language_override: - type: string - nullable: true - description: A preferred language setting for the contact, used by the Intercom - Messenger even if their browser settings change. - example: en - browser: - type: string - nullable: true - description: The name of the browser which the contact is using. - example: Chrome - browser_version: - type: string - nullable: true - description: The version of the browser which the contact is using. - example: 80.0.3987.132 - browser_language: - type: string - nullable: true - description: The language set by the browser which the contact is using. - example: en-US - os: - type: string + description: The time when the content import source was last updated. + example: 1672928610 + audience_ids: + type: array nullable: true - description: The operating system which the contact is using. - example: Mac OS X - android_app_name: + items: + type: integer + description: The unique identifiers for the audiences associated with this content import source. + example: + - 5678 + required: + - id + - type + - url + - sync_behavior + - status + - created_at + - updated_at + - last_synced_at + content_import_sources_list: + title: Content Import Sources + type: object + x-tags: + - AI Content + description: This will return a list of the content import sources for the App. + nullable: false + properties: + type: type: string - nullable: true - description: The name of the Android app which the contact is using. - example: Intercom - android_app_version: + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/pages_link" + total_count: + type: integer + description: A count of the total number of content import sources. + example: 1 + data: + type: array + description: An array of Content Import Source objects + items: + "$ref": "#/components/schemas/content_import_source" + content_source: + title: Content Source + type: object + x-tags: + - AI Content Source + description: The content source used by AI Agent in the conversation. + properties: + content_type: type: string - nullable: true - description: The version of the Android app which the contact is using. - example: 5.0.0 - android_device: + description: The type of the content source. + example: content_snippet + enum: + - file + - article + - external_content + - content_snippet + - workflow_connector_action + url: type: string - nullable: true - description: The Android device which the contact is using. - example: Pixel 3 - android_os_version: + description: The internal URL linking to the content source for teammates. + example: "/fin-ai-agent/content?content=content_snippet&id=3234924" + title: type: string - nullable: true - description: The version of the Android OS which the contact is using. - example: '10' - android_sdk_version: + description: The title of the content source. + example: My internal content snippet + locale: type: string - nullable: true - description: The version of the Android SDK which the contact is using. - example: '28' - android_last_seen_at: - type: integer - nullable: true - format: date-time - description: "(Unix timestamp in seconds) The time when the contact was last seen on - an Android device." - example: 1571672154 - ios_app_name: + description: The ISO 639 language code of the content source. + example: en + content_sources_list: + content_snippet: + title: Content Snippet + type: object + x-tags: + - Content Snippets + description: A content snippet is a reusable piece of content for your AI agent + and Copilot. + nullable: false + properties: + type: type: string - nullable: true - description: The name of the iOS app which the contact is using. - example: Intercom - ios_app_version: + description: String representing the object's type. Always has the value + `content_snippet`. + example: content_snippet + id: type: string - nullable: true - description: The version of the iOS app which the contact is using. - example: 5.0.0 - ios_device: + description: The unique identifier for the content snippet. + example: '123' + title: type: string + description: The title of the content snippet. nullable: true - description: The iOS device which the contact is using. - example: iPhone 11 - ios_os_version: + example: How to reset your password + locale: type: string - nullable: true - description: The version of iOS which the contact is using. - example: 13.3.1 - ios_sdk_version: + description: The locale of the content snippet. + example: en + json_blocks: + type: array + description: The content blocks that make up the body of the snippet. + items: + type: object + example: + - type: paragraph + text: Navigate to Settings > Security > Reset password. + body_markdown: type: string nullable: true - description: The version of the iOS SDK which the contact is using. - example: 13.3.1 - ios_last_seen_at: + description: The body of the content snippet in markdown. + example: "# How to reset your password\n\nNavigate to Settings > Security > Reset password.\n" + chatbot_availability: type: integer + deprecated: true + description: Deprecated. Use ai_chatbot_availability instead. Whether this + snippet is available for Fin (1 = on, 0 = off). + example: 1 + copilot_availability: + type: integer + deprecated: true + description: Deprecated. Use ai_copilot_availability instead. Whether this + snippet is available for Copilot (1 = on, 0 = off). + example: 1 + ai_chatbot_availability: + type: boolean + description: Whether the content snippet is available for AI Chatbot (Fin). + example: true + ai_copilot_availability: + type: boolean + description: Whether the content snippet is available for AI Copilot. + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the content snippet is available for AI Sales Agent. + example: true + created_at: + type: integer + description: The time the snippet was created as a UNIX timestamp. + example: 1663597223 + updated_at: + type: integer + description: The time the snippet was last updated as a UNIX timestamp. + example: 1663597223 + audience_ids: + type: array nullable: true - format: date-time - description: "(Unix timestamp in seconds) The last time the contact used the iOS app." - example: 1571672154 - custom_attributes: - type: object - description: The custom attributes which are set for the contact. - avatar: - type: object - nullable: true - properties: - type: - type: string - description: The type of object - example: avatar - image_url: - type: string - format: uri - nullable: true - description: An image URL containing the avatar of a contact. - example: https://example.org/128Wash.jpg - tags: - "$ref": "#/components/schemas/contact_tags" - notes: - "$ref": "#/components/schemas/contact_notes" - companies: - "$ref": "#/components/schemas/contact_companies" - location: - "$ref": "#/components/schemas/contact_location" - social_profiles: - "$ref": "#/components/schemas/contact_social_profiles" - contact_attached_companies: - title: Contact Attached Companies + description: >- + The list of audience IDs this content snippet is targeted to for Fin AI Agent. + Empty array means no audience targeting is set. + items: + type: integer + example: + - 1 + - 2 + content_snippet_list: + title: Content Snippet List type: object - description: A list of Company Objects + description: A paginated list of content snippets. + nullable: false properties: type: type: string - description: The type of object enum: - list example: list - companies: + data: type: array - description: An array containing Company Objects + description: An array of content snippet objects. items: - "$ref": "#/components/schemas/company" + "$ref": "#/components/schemas/content_snippet" total_count: type: integer - description: The total number of companies associated to this contact - example: 100 - pages: - "$ref": "#/components/schemas/pages_link" - contact_companies: - title: Contact companies + description: The total number of content snippets. + example: 1 + page: + type: integer + description: The current page number. + example: 1 + per_page: + type: integer + description: The number of results per page. + example: 50 + total_pages: + type: integer + description: The total number of pages. + example: 1 + content_snippet_create_request: + title: Create Content Snippet Request type: object + description: The request payload for creating a content snippet. You must provide + either `json_blocks` or `body_markdown` for the snippet content — they are + mutually exclusive. nullable: false - description: An object with metadata about companies attached to a contact . Up to 10 will be displayed here. Use the url to get more. + required: + - title properties: - data: + title: + type: string + description: The title of the content snippet. + maxLength: 255 + example: How to reset your password + json_blocks: type: array - description: An array of company data objects attached to the contact. + description: The content blocks that make up the body of the snippet. Mutually + exclusive with `body_markdown`. items: - "$ref": "#/components/schemas/company_data" - url: + type: object + example: + - type: paragraph + text: Navigate to Settings > Security > Reset password. + body_markdown: + type: string + description: The content of the snippet in markdown. An alternative to `json_blocks` — you + can provide content as markdown instead of structured blocks. Mutually exclusive + with `json_blocks`. + example: "# Hello\n\nSome content.\n" + locale: type: string - format: uri - description: Url to get more company resources for this contact - example: "/contacts/5ba682d23d7cf92bef87bfd4/companies" - total_count: - type: integer - description: Integer representing the total number of companies attached to - this contact - example: 100 - has_more: + description: The locale of the content snippet. Defaults to `en`. + default: en + example: en + audience_ids: + type: array + nullable: true + description: >- + The list of audience IDs to target this content snippet to for Fin AI Agent. + Pass an empty array or omit the field for no audience targeting. + Unknown audience IDs return a `404` error with no partial commit. + items: + type: integer + example: + - 1 + - 2 + ai_chatbot_availability: + type: boolean + description: Whether the content snippet should be available for AI Chatbot + (Fin). Defaults to false. + default: false + example: true + ai_copilot_availability: + type: boolean + description: Whether the content snippet should be available for AI Copilot. + Defaults to false. + default: false + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the content snippet should be available for AI Sales + Agent. Defaults to false. + default: false + example: true + content_snippet_update_request: + title: Update Content Snippet Request + type: object + description: The request payload for updating a content snippet. All fields + are optional — only provided fields will be updated. `json_blocks` and + `body_markdown` are mutually exclusive. + nullable: false + properties: + title: + type: string + description: The title of the content snippet. + maxLength: 255 + example: How to reset your password + json_blocks: + type: array + description: The content blocks that make up the body of the snippet. Mutually + exclusive with `body_markdown`. + items: + type: object + example: + - type: paragraph + text: Navigate to Settings > Security > Reset password. + body_markdown: + type: string + description: The content of the snippet in markdown. An alternative to `json_blocks` — you + can provide content as markdown instead of structured blocks. Mutually exclusive + with `json_blocks`. + example: "## Updated heading\n\nNew content.\n" + locale: + type: string + description: The locale of the content snippet. + example: en + audience_ids: + type: array + nullable: true + description: >- + The list of audience IDs to target this content snippet to for Fin AI Agent. + Omitting the field leaves existing audience memberships unchanged (PATCH semantics). + Pass `[]` to clear all audience memberships. + Unknown audience IDs return a `404` error with no partial commit. + items: + type: integer + example: + - 1 + - 2 + ai_chatbot_availability: type: boolean - description: Whether there's more Addressable Objects to be viewed. If true, - use the url to view all + description: Whether the content snippet should be available for AI Chatbot + (Fin). example: true - company_data: - title: Company Data + ai_copilot_availability: + type: boolean + description: Whether the content snippet should be available for AI Copilot. + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the content snippet should be available for AI Sales + Agent. + example: true + content_search_article_content_item: + title: Content Search Article Content Item type: object - description: An object containing data about the companies that a contact is associated with. + description: A single locale variant of a help center article returned from + Knowledge Hub search. properties: + type: + type: string + description: Always `article_content`. + enum: + - article_content + example: article_content id: type: string - description: The unique identifier for the company which is given by Intercom. - example: 5ba682d23d7cf92bef87bfd4 + description: The unique identifier of the article content. + example: '678' + title: + type: string + description: The localized title of the article. + example: Billing FAQ + locale: + type: string + description: The locale of this article content. + example: en + content_search_article_item: + title: Content Search Article Item + type: object + description: A help center article result from Knowledge Hub search, with + one nested `article_content` entry per locale. + required: + - type + properties: type: type: string - description: The type of the object. Always company. + description: Always `article`. enum: - - company - example: company - url: + - article + example: article + id: type: string - format: uri - description: The relative URL of the company. - example: "/companies/5ba682d23d7cf92bef87bfd4" - contact_deleted: - title: Contact Deleted - description: deleted contact object - allOf: - - "$ref": "#/components/schemas/contact_reference" + description: The unique identifier of the article. + example: '345' + title: + type: string + description: The article's canonical title. + example: Billing FAQ + contents: + type: array + description: One entry per locale of the article. + items: + "$ref": "#/components/schemas/content_search_article_content_item" + content_search_default_item: + title: Content Search Default Item + type: object + description: The flat result shape returned from Knowledge Hub search for + content snippets, external pages, uploaded files, and internal articles. + required: + - type properties: - deleted: - type: boolean - description: Whether the contact is deleted or not. - example: true - contact_list: - title: Contact List + type: + type: string + description: The kind of content item. + enum: + - content_snippet + - external_content + - file_source_content + - internal_article + example: content_snippet + id: + type: string + description: The unique identifier of the content item. + example: '123' + title: + type: string + description: The display title of the content item. + example: Billing FAQ + content_search_response: + title: Content Search Response type: object - description: Contacts are your users in Intercom. + description: A paginated list of Knowledge Hub content results matching a + search query. properties: type: type: string - description: Always list + description: Always `list`. enum: - list example: list + total_count: + type: integer + description: Total number of results matching the query. + example: 5 + pages: + type: object + description: Pagination metadata, including links to neighbouring pages. + properties: + type: + type: string + enum: + - pages + example: pages + page: + type: integer + description: The current page number. + example: 1 + per_page: + type: integer + description: Number of results per page. + example: 10 + total_pages: + type: integer + description: Total number of pages of results. + example: 1 + next: + type: string + format: uri + description: A link to the next page of results, or null when on + the last page. + nullable: true + example: https://api.intercom.io/content/search?query=billing&page=2 + prev: + type: string + format: uri + description: A link to the previous page of results, or null when + on the first page. + nullable: true + example: data: type: array - description: The list of contact objects + description: The list of matched content items. Each item's `type` + field determines its shape. items: - "$ref": "#/components/schemas/contact" + "$ref": "#/components/schemas/content_search_result" + content_search_result: + title: Content Search Result + description: A single search result. The `type` field discriminates between + the flat shape used for snippets, external pages, files, and internal + articles, and the nested shape used for help center articles. + oneOf: + - "$ref": "#/components/schemas/content_search_default_item" + - "$ref": "#/components/schemas/content_search_article_item" + discriminator: + propertyName: type + mapping: + content_snippet: "#/components/schemas/content_search_default_item" + external_content: "#/components/schemas/content_search_default_item" + file_source_content: "#/components/schemas/content_search_default_item" + internal_article: "#/components/schemas/content_search_default_item" + article: "#/components/schemas/content_search_article_item" + title: Content Source List + nullable: false + properties: + type: + type: string + enum: + - content_source.list + example: content_source.list total_count: type: integer - description: A count of the total number of objects. - example: 100 - pages: - "$ref": "#/components/schemas/cursor_pages" - contact_location: - title: Contact Location + description: The total number of content sources used by AI Agent in the + conversation. + example: 1 + content_sources: + type: array + description: The content sources used by AI Agent in the conversation. + items: + "$ref": "#/components/schemas/content_source" + conversation_list_item: + title: Conversation List Item type: object - nullable: false - description: An object containing location meta data about a Intercom contact. + x-tags: + - Conversations + description: The data returned about your conversations when you list or search + them. properties: type: type: string - nullable: true - description: Always location - example: location - country: + description: Always conversation. + example: conversation + id: type: string - nullable: true - description: The country that the contact is located in - example: Ireland - region: + description: The id representing the conversation. + example: '1295' + title: type: string nullable: true - description: The overal region that the contact is located in - example: Dublin - city: - type: string + description: The title given to the conversation. + example: Conversation Title + created_at: + type: integer + format: date-time + description: The time the conversation was created. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the conversation was updated. + example: 1663597260 + waiting_since: + type: integer + format: date-time nullable: true - description: The city that the contact is located in - example: Dublin - contact_notes: - title: Contact notes - type: object - nullable: false - description: An object containing notes meta data about the notes that a contact - has. Up to 10 will be displayed here. Use the url to get more. - properties: - data: - type: array - description: This object represents the notes attached to a contact. - items: - "$ref": "#/components/schemas/addressable_list" - url: + description: 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. + example: 1663597260 + snoozed_until: + type: integer + format: date-time + nullable: true + description: 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. + example: 1663597260 + open: + type: boolean + description: Indicates whether a conversation is open (true) or closed (false). + example: true + state: type: string - format: uri - description: Url to get more company resources for this contact - example: "/contacts/5ba682d23d7cf92bef87bfd4/notes" - total_count: + enum: + - open + - closed + - snoozed + description: Can be set to "open", "closed" or "snoozed". + example: open + read: + type: boolean + description: Indicates whether a conversation has been read. + example: true + priority: + type: string + enum: + - none + - low + - medium + - high + - urgent + description: The priority level of the conversation. Returns one of none, + low, medium, high, or urgent. + example: high + admin_assignee_id: type: integer - description: Int representing the total number of companyies attached to - this contact - example: 100 - has_more: + description: The id of the admin assigned to the conversation. If it's not + assigned to an admin it will return 0. + example: 0 + team_assignee_id: + type: integer + description: The id of the team assigned to the conversation. If it's not + assigned to a team it will return 0. + example: 5017691 + company: + "$ref": "#/components/schemas/company" + nullable: true + description: The company associated with the conversation. + tags: + "$ref": "#/components/schemas/tags" + conversation_rating: + "$ref": "#/components/schemas/conversation_rating" + source: + "$ref": "#/components/schemas/conversation_source" + contacts: + "$ref": "#/components/schemas/conversation_contacts" + teammates: + "$ref": "#/components/schemas/conversation_teammates" + custom_attributes: + "$ref": "#/components/schemas/custom_attributes" + first_contact_reply: + "$ref": "#/components/schemas/conversation_first_contact_reply" + sla_applied: + "$ref": "#/components/schemas/sla_applied" + statistics: + "$ref": "#/components/schemas/conversation_statistics" + linked_objects: + "$ref": "#/components/schemas/linked_object_list" + ai_agent_participated: type: boolean - description: Whether there's more Addressable Objects to be viewed. If true, - use the url to view all + description: Indicates whether the AI Agent participated in the conversation. example: true - contact_reference: - title: Contact Reference + ai_agent: + "$ref": "#/components/schemas/ai_agent" + nullable: true + conversation: + title: Conversation type: object - description: reference to contact object + x-tags: + - Conversations + description: 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. properties: type: type: string - description: always contact - enum: - - contact - example: contact + description: Always conversation. + example: conversation id: type: string - description: The unique identifier for the contact which is given by Intercom. - example: 5ba682d23d7cf92bef87bfd4 - external_id: + description: The id representing the conversation. + example: '1295' + title: type: string nullable: true - description: The unique identifier for the contact which is provided by - the Client. - example: "70" - contact_reply_base_request: - title: Contact Reply Base Object - type: object - properties: - message_type: + description: The title given to the conversation. + example: Conversation Title + created_at: + type: integer + format: date-time + description: The time the conversation was created. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the conversation was updated. + example: 1663597260 + waiting_since: + type: integer + format: date-time + nullable: true + description: 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. + example: 1663597260 + snoozed_until: + type: integer + format: date-time + nullable: true + description: 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. + example: 1663597260 + open: + type: boolean + description: Indicates whether a conversation is open (true) or closed (false). + example: true + state: type: string enum: - - comment - type: + - open + - closed + - snoozed + description: Can be set to "open", "closed" or "snoozed". + example: open + read: + type: boolean + description: Indicates whether a conversation has been read. + example: true + priority: type: string enum: - - user - body: - type: string - description: The text body of the comment. - created_at: + - none + - low + - medium + - high + - urgent + description: The priority level of the conversation. Returns one of none, + low, medium, high, or urgent. + example: high + admin_assignee_id: type: integer - description: The time the reply was created. If not provided, the current - time will be used. - example: 1590000000 - attachment_urls: - title: Attachment URLs - type: array - description: A list of image URLs that will be added as attachments. You - can include up to 10 URLs. - items: - type: string - format: uri - maxItems: 10 - reply_options: - title: Contact Quick Reply - type: array - description: The quick reply selection the contact wishes to respond with. - These map to buttons displayed in the Messenger UI if sent by a bot, or the reply options sent by an Admin via the API. - items: - title: Quick Reply Option - type: object - properties: - text: - type: string - description: The text of the chosen reply option. - uuid: - type: string - format: uuid - description: The unique identifier for the quick reply option selected. - required: - - text - - uuid - required: - - message_type - - type - - body - contact_reply_conversation_request: - title: Contact Reply - oneOf: - - "$ref": "#/components/schemas/contact_reply_intercom_user_id_request" - - "$ref": "#/components/schemas/contact_reply_email_request" - - "$ref": "#/components/schemas/contact_reply_user_id_request" - contact_reply_email_request: - title: Email - type: object - description: Payload of the request to reply on behalf of a contact using their - `email` - properties: - email: - type: string - description: The email you have defined for the user. - attachment_files: - type: array - description: A list of files that will be added as attachments. - items: - "$ref": "#/components/schemas/conversation_attachment_files" - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" - required: - - email - contact_reply_intercom_user_id_request: - title: Intercom User ID - type: object - description: Payload of the request to reply on behalf of a contact using their - `intercom_user_id` - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" - properties: - intercom_user_id: - type: string - description: The identifier for the contact as given by Intercom. - attachment_files: - type: array - description: A list of files that will be added as attachments. - items: - "$ref": "#/components/schemas/conversation_attachment_files" - required: - - intercom_user_id - contact_reply_ticket_email_request: - title: Email - type: object - description: Payload of the request to reply on behalf of a contact using their - `email` - properties: - email: - type: string - description: The email you have defined for the user. - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" - required: - - email - contact_reply_ticket_intercom_user_id_request: - title: Intercom User ID - type: object - description: Payload of the request to reply on behalf of a contact using their - `intercom_user_id` - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" - properties: - intercom_user_id: - type: string - description: The identifier for the contact as given by Intercom. - required: - - intercom_user_id - contact_reply_ticket_request: - title: Contact Reply on ticket - oneOf: - - "$ref": "#/components/schemas/contact_reply_ticket_intercom_user_id_request" - - "$ref": "#/components/schemas/contact_reply_ticket_user_id_request" - - "$ref": "#/components/schemas/contact_reply_ticket_email_request" - contact_reply_ticket_user_id_request: - title: User ID + description: The id of the admin assigned to the conversation. If it's not + assigned to an admin it will return 0. + example: 0 + team_assignee_id: + type: integer + description: The id of the team assigned to the conversation. If it's not + assigned to a team it will return 0. + example: 5017691 + company: + "$ref": "#/components/schemas/company" + nullable: true + description: The company associated with the conversation. + tags: + "$ref": "#/components/schemas/tags" + conversation_rating: + "$ref": "#/components/schemas/conversation_rating" + source: + "$ref": "#/components/schemas/conversation_source" + contacts: + "$ref": "#/components/schemas/conversation_contacts" + teammates: + "$ref": "#/components/schemas/conversation_teammates" + custom_attributes: + "$ref": "#/components/schemas/custom_attributes" + first_contact_reply: + "$ref": "#/components/schemas/conversation_first_contact_reply" + sla_applied: + "$ref": "#/components/schemas/sla_applied" + statistics: + "$ref": "#/components/schemas/conversation_statistics" + conversation_parts: + "$ref": "#/components/schemas/conversation_parts" + linked_objects: + "$ref": "#/components/schemas/linked_object_list" + ai_agent_participated: + type: boolean + description: Indicates whether the AI Agent participated in the conversation. + example: true + ai_agent: + "$ref": "#/components/schemas/ai_agent" + nullable: true + conversation_attachment_files: + title: Conversation attachment files type: object - description: Payload of the request to reply on behalf of a contact using their - `user_id` - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" + description: Properties of the attachment files in a conversation part properties: - user_id: + content_type: type: string - description: The external_id you have defined for the contact. - required: - - user_id - contact_reply_user_id_request: - title: User ID + description: The content type of the file + example: application/json + data: + type: string + description: The base64 encoded file data. + example: ewogICJ0ZXN0IjogMQp9 + name: + type: string + description: The name of the file. + example: test.json + conversation_contacts: + title: Contacts type: object - description: Payload of the request to reply on behalf of a contact using their - `user_id` - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" + description: 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. properties: - user_id: + type: type: string - description: The external_id you have defined for the contact. - attachment_files: + description: '' + enum: + - contact.list + example: contact.list + contacts: type: array - description: A list of files that will be added as attachments. You can - include up to 10 files. + description: 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. items: - "$ref": "#/components/schemas/conversation_attachment_files" - maxItems: 10 - required: - - user_id - contact_segments: - title: Segments + "$ref": "#/components/schemas/contact_reference" + conversation_deleted: + title: Conversation Deleted type: object - description: A list of segments objects attached to a specific contact. + description: deleted conversation object properties: - type: + id: type: string - description: The type of the object + description: The unique identifier for the conversation. + example: 5ba682d23d7cf92bef87bfd4 + object: + type: string + description: always conversation enum: - - list - example: list - data: - type: array - description: Segment objects associated with the contact. - items: - "$ref": "#/components/schemas/segment" - contact_social_profiles: - title: Social Profile + - conversation + example: conversation + deleted: + type: boolean + description: Whether the conversation is deleted or not. + example: true + conversation_first_contact_reply: + title: First contact reply type: object - nullable: false - description: An object containing social profiles that a contact has. + nullable: true + description: An object containing information on the first users message. For + a contact initiated message this will represent the users original message. properties: - data: - type: array - description: A list of social profiles objects associated with the contact. - items: - "$ref": "#/components/schemas/social_profile" - contact_subscription_types: - title: Contact Subscription Types + created_at: + type: integer + format: date-time + description: '' + example: 1663597223 + type: + type: string + description: '' + example: conversation + url: + type: string + nullable: true + description: '' + example: https://developers.intercom.com/ + conversation_list: + title: Conversation List type: object - nullable: false - description: An object containing Subscription Types meta data about the SubscriptionTypes - that a contact has. + description: 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. properties: - data: + type: + type: string + description: Always conversation.list + enum: + - conversation.list + example: conversation.list + conversations: type: array - description: This object represents the subscriptions attached to a contact. + description: The list of conversation objects items: - "$ref": "#/components/schemas/addressable_list" - url: - type: string - format: uri - description: Url to get more subscription type resources for this contact - example: "/contacts/5ba682d23d7cf92bef87bfd4/subscriptions" + "$ref": "#/components/schemas/conversation_list_item" total_count: type: integer - description: Int representing the total number of subscription types attached - to this contact - example: 100 - has_more: - type: boolean - description: Whether there's more Addressable Objects to be viewed. If true, - use the url to view all - example: true - contact_tags: - title: Contact Tags + description: A count of the total number of objects. + example: 12345 + pages: + "$ref": "#/components/schemas/cursor_pages" + conversation_part: + title: Conversation Part type: object - nullable: true - description: An object containing tags meta data about the tags that a contact - has. Up to 10 will be displayed here. Use the url to get more. + description: A Conversation Part represents a message in the conversation. properties: - data: + type: + type: string + description: Always conversation_part + example: conversation_part + id: + type: string + description: The id representing the conversation part. + example: '3' + part_type: + type: string + description: The type of conversation part. + example: comment + body: + type: string + nullable: true + description: The message body, which may contain HTML. For Twitter, this + will show a generic message regarding why the body is obscured. In webhook + payloads for API version 2.15+, this field returns plain text. + example: "

Okay!

" + created_at: + type: integer + format: date-time + description: The time the conversation part was created. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the conversation part was updated. + example: 1663597260 + notified_at: + type: integer + format: date-time + description: The time the user was notified with the conversation part. + example: 1663597260 + assigned_to: + "$ref": "#/components/schemas/reference" + nullable: true + description: The id of the admin that was assigned the conversation by this + conversation_part (null if there has been no change in assignment.) + author: + "$ref": "#/components/schemas/conversation_part_author" + attachments: + title: Conversation part attachments type: array - description: This object represents the tags attached to a contact. + description: A list of attachments for the part. items: - "$ref": "#/components/schemas/addressable_list" - url: + "$ref": "#/components/schemas/part_attachment" + external_id: type: string - format: uri - description: url to get more tag resources for this contact - example: "/contacts/5ba682d23d7cf92bef87bfd4/tags" - total_count: - type: integer - description: Int representing the total number of tags attached to this - contact - example: 100 - has_more: + nullable: true + description: The external id of the conversation part + example: abcd1234 + redacted: type: boolean - description: Whether there's more Addressable Objects to be viewed. If true, - use the url to view all - example: true - contact_archived: - title: Contact Archived - description: archived contact object - allOf: - - "$ref": "#/components/schemas/contact_reference" + description: Whether or not the conversation part has been redacted. + example: false + email_message_metadata: + "$ref": "#/components/schemas/email_message_metadata" + nullable: true + metadata: + "$ref": "#/components/schemas/conversation_part_metadata" + nullable: true + state: + type: string + enum: + - open + - closed + - snoozed + description: Indicates the current state of conversation when the conversation part was created. + example: open + tags: + type: array + description: A list of tags objects associated with the conversation part. + items: + "$ref": "#/components/schemas/tag_basic" + nullable: true + event_details: + "$ref": "#/components/schemas/event_details" + nullable: true + app_package_code: + type: string + nullable: true + example: "test-integration" + description: The app package code if this part was created via API. null if the part was not created via API. + conversation_part_author: + title: Conversation part author + type: object + description: The object who initiated the conversation, which can be a Contact, + Admin or Team. Bots and campaigns send messages on behalf of Admins or Teams. + For Twitter, this will be blank. properties: - archived: + type: + type: string + description: The type of the author + example: admin + id: + type: string + description: The id of the author + example: '274' + name: + type: string + nullable: true + description: The name of the author + example: Operator + email: + type: string + format: email + description: The email of the author + example: operator+abcd1234@intercom.io + from_ai_agent: type: boolean - description: Whether the contact is archived or not. + description: If this conversation part was sent by the AI Agent example: true - contact_unarchived: - title: Contact Unarchived - description: unarchived contact object - allOf: - - "$ref": "#/components/schemas/contact_reference" - properties: - archived: + is_ai_answer: type: boolean - description: Whether the contact is archived or not. + description: If this conversation part body was generated by the AI Agent example: false - contact_blocked: - title: Contact Blocked - type: object - description: blocked contact object - allOf: - - "$ref": "#/components/schemas/contact_reference" - properties: - blocked: - type: boolean - description: Always true. - example: true - content_import_source: - title: Content Import Source + conversation_parts: + title: Conversation Parts type: object - x-tags: - - AI Content - description: An external source for External Pages that you add to your Fin - Content Library. - nullable: false + description: 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. properties: type: type: string - description: Always external_page + description: '' enum: - - content_import_source - default: content_import_source - example: content_import_source - id: - type: integer - description: The unique identifier for the content import source which is - given by Intercom. - example: 1234 - last_synced_at: + - conversation_part.list + example: conversation_part.list + conversation_parts: + title: Conversation Parts + type: array + description: 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. + items: + "$ref": "#/components/schemas/conversation_part" + total_count: type: integer - format: date-time - description: The time when the content import source was last synced. - example: 1672928610 - sync_behavior: - type: string - description: If you intend to create or update External Pages via the API, - this should be set to `api`. - enum: - - api - - automatic - - manual - example: api - status: + description: '' + example: 1 + conversation_part_metadata: + title: Conversation Part Metadata + description: Metadata for a conversation part + type: object + properties: + quick_reply_options: + type: array + description: The quick reply options sent by the Admin or bot, presented in this conversation part. + items: + allOf: + - "$ref": "#/components/schemas/quick_reply_option" + properties: + translations: + type: object + nullable: true + description: The translations for the quick reply option. + example: { "en": "Hello", "fr": "Bonjour" } + quick_reply_uuid: type: string - description: The status of the content import source. - enum: - - active - - deactivated - default: active - example: active - url: + format: uuid + description: The unique identifier for the quick reply option that was clicked by the end user. + example: '123e4567-e89b-12d3-a456-426614174000' + conversation_rating: + title: Conversation Rating + type: object + nullable: true + description: The Conversation Rating object which contains information on the + rating and/or remark added by a Contact and the Admin assigned to the conversation. + properties: + rating: + type: integer + description: The rating, between 1 and 5, for the conversation. + example: 5 + remark: type: string - description: The URL of the root of the external source. - example: https://help.example.com/ + description: An optional field to add a remark to correspond to the number + rating + example: '' created_at: type: integer format: date-time - description: The time when the content import source was created. - example: 1672928359 + description: The time the rating was requested in the conversation being + rated. + example: 1671028894 updated_at: type: integer format: date-time - description: The time when the content import source was last updated. - example: 1672928610 - audience_ids: - type: array - nullable: true - items: - type: integer - description: The unique identifiers for the audiences associated with this content import source. - example: - - 5678 - required: - - id - - type - - url - - sync_behavior - - status - - created_at - - updated_at - - last_synced_at - content_import_sources_list: - title: Content Import Sources + description: The time the rating was last updated. + example: 1671028894 + contact: + "$ref": "#/components/schemas/contact_reference" + teammate: + "$ref": "#/components/schemas/reference" + conversation_response_time: + title: Conversation response time type: object - x-tags: - - AI Content - description: This will return a list of the content import sources for the App. - nullable: false + description: Details of first response time of assigned team in seconds. properties: - type: + team_id: + type: integer + description: Id of the assigned team. + example: 100 + team_name: type: string - description: The type of the object - `list`. - enum: - - list - example: list - pages: - "$ref": "#/components/schemas/pages_link" - total_count: + description: Name of the assigned Team, null if team does not exist, Unassigned + if no team is assigned. + example: Team One + response_time: type: integer - description: A count of the total number of content import sources. - example: 1 - data: - type: array - description: An array of Content Import Source objects - items: - "$ref": "#/components/schemas/content_import_source" - content_source: - title: Content Source + description: First response time of assigned team in seconds. + example: 2310 + conversation_source: + title: Conversation source type: object - x-tags: - - AI Content Source - description: The content source used by AI Agent in the conversation. + description: The type of the conversation part that started this conversation. Can be Contact, Admin, Campaign, Automated or Operator initiated. properties: - content_type: + type: type: string - description: The type of the content source. - example: content_snippet + description: This includes conversation, email, facebook, instagram, phone_call, + phone_switch, push, sms, twitter and whatsapp. + example: conversation enum: - - file - - article - - external_content - - content_snippet - - workflow_connector_action - url: - type: string - description: The internal URL linking to the content source for teammates. - example: "/fin-ai-agent/content?content=content_snippet&id=3234924" - title: + - conversation + - email + - facebook + - instagram + - phone_call + - phone_switch + - push + - sms + - twitter + - whatsapp + id: type: string - description: The title of the content source. - example: My internal content snippet - locale: + description: The id representing the message. + example: '3' + delivered_as: type: string - description: The ISO 639 language code of the content source. - example: en - content_sources_list: - title: Content Source List - nullable: false - properties: - type: + description: The conversation's initiation type. Possible values are customer_initiated, + campaigns_initiated (legacy campaigns), operator_initiated (Custom bot), + automated (Series and other outbounds with dynamic audience message) and + admin_initiated (fixed audience message, ticket initiated by an admin, + group email). + example: operator_initiated + subject: type: string - enum: - - content_source.list - example: content_source.list - total_count: - type: integer - description: The total number of content sources used by AI Agent in the - conversation. - example: 1 - content_sources: + description: Optional. The message subject. For Twitter, this will show + a generic message regarding why the subject is obscured. In webhook + payloads for API version 2.15+, this field returns plain text. + example: '' + body: + type: string + description: The message body, which may contain HTML. For Twitter, this + will show a generic message regarding why the body is obscured. In webhook + payloads for API version 2.15+, this field returns plain text. + example: "

Hey there!

" + author: + "$ref": "#/components/schemas/conversation_part_author" + attachments: type: array - description: The content sources used by AI Agent in the conversation. + description: A list of attachments for the part. items: - "$ref": "#/components/schemas/content_source" - conversation_list_item: - title: Conversation List Item + "$ref": "#/components/schemas/part_attachment" + url: + type: string + nullable: true + description: The URL where the conversation was started. For Twitter, Email, + and Bots, this will be blank. + example: + redacted: + type: boolean + description: Whether or not the source message has been redacted. Only applicable + for contact initiated messages. + example: false + conversation_statistics: + title: Conversation statistics type: object - x-tags: - - Conversations - description: The data returned about your conversations when you list or search - them. + nullable: true + description: A Statistics object containing all information required for reporting, + with timestamps and calculated metrics. properties: type: type: string - description: Always conversation. - example: conversation - id: - type: string - description: The id representing the conversation. - example: '1295' - title: - type: string - nullable: true - description: The title given to the conversation. - example: Conversation Title - created_at: + description: '' + example: conversation_statistics + time_to_assignment: type: integer - format: date-time - description: The time the conversation was created. - example: 1663597223 - updated_at: + description: Duration until last assignment before first admin reply. In + seconds. + example: 2310 + time_to_admin_reply: type: integer - format: date-time - description: The last time the conversation was updated. - example: 1663597260 - waiting_since: + description: Duration until first admin reply. Subtracts out of business + hours. In seconds. + example: 2310 + time_to_first_close: type: integer - format: date-time - nullable: true - description: 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. - example: 1663597260 - snoozed_until: + description: Duration until conversation was closed first time. Subtracts + out of business hours. In seconds. + example: 2310 + time_to_last_close: + type: integer + description: Duration until conversation was closed last time. Subtracts + out of business hours. In seconds. + example: 2310 + median_time_to_reply: + type: integer + description: Median based on all admin replies after a contact reply. Subtracts + out of business hours. In seconds. + example: 2310 + first_contact_reply_at: type: integer format: date-time - nullable: true - description: 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. - example: 1663597260 - open: - type: boolean - description: Indicates whether a conversation is open (true) or closed (false). - example: true - state: - type: string - enum: - - open - - closed - - snoozed - description: Can be set to "open", "closed" or "snoozed". - example: open - read: - type: boolean - description: Indicates whether a conversation has been read. - example: true - priority: - type: string - enum: - - none - - low - - medium - - high - - urgent - description: The priority level of the conversation. Returns one of none, - low, medium, high, or urgent. - example: high - admin_assignee_id: + description: Time of first text conversation part from a contact. + example: 1663597233 + first_assignment_at: type: integer - description: The id of the admin assigned to the conversation. If it's not - assigned to an admin it will return 0. - example: 0 - team_assignee_id: + format: date-time + description: Time of first assignment after first_contact_reply_at. + example: 1663597233 + first_admin_reply_at: type: integer - description: The id of the team assigned to the conversation. If it's not - assigned to a team it will return 0. - example: 5017691 - company: - "$ref": "#/components/schemas/company" - nullable: true - description: The company associated with the conversation. - tags: - "$ref": "#/components/schemas/tags" - conversation_rating: - "$ref": "#/components/schemas/conversation_rating" - source: - "$ref": "#/components/schemas/conversation_source" - contacts: - "$ref": "#/components/schemas/conversation_contacts" - teammates: - "$ref": "#/components/schemas/conversation_teammates" - custom_attributes: - "$ref": "#/components/schemas/custom_attributes" - first_contact_reply: - "$ref": "#/components/schemas/conversation_first_contact_reply" - sla_applied: - "$ref": "#/components/schemas/sla_applied" - statistics: - "$ref": "#/components/schemas/conversation_statistics" - linked_objects: - "$ref": "#/components/schemas/linked_object_list" - ai_agent_participated: - type: boolean - description: Indicates whether the AI Agent participated in the conversation. - example: true - ai_agent: - "$ref": "#/components/schemas/ai_agent" - nullable: true - conversation: - title: Conversation - type: object - x-tags: - - Conversations - description: 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. - properties: - type: - type: string - description: Always conversation. - example: conversation - id: - type: string - description: The id representing the conversation. - example: '1295' - title: - type: string - nullable: true - description: The title given to the conversation. - example: Conversation Title - created_at: + format: date-time + description: Time of first admin reply after first_contact_reply_at. + example: 1663597233 + first_close_at: type: integer format: date-time - description: The time the conversation was created. - example: 1663597223 - updated_at: + description: Time of first close after first_contact_reply_at. + example: 1663597233 + last_assignment_at: type: integer format: date-time - description: The last time the conversation was updated. - example: 1663597260 - waiting_since: + description: Time of last assignment after first_contact_reply_at. + example: 1663597233 + last_assignment_admin_reply_at: type: integer format: date-time - nullable: true - description: 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. - example: 1663597260 - snoozed_until: + description: Time of first admin reply since most recent assignment. + example: 1663597233 + last_contact_reply_at: type: integer format: date-time - nullable: true - description: 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. - example: 1663597260 - open: - type: boolean - description: Indicates whether a conversation is open (true) or closed (false). - example: true - state: - type: string - enum: - - open - - closed - - snoozed - description: Can be set to "open", "closed" or "snoozed". - example: open - read: - type: boolean - description: Indicates whether a conversation has been read. - example: true - priority: + description: Time of the last conversation part from a contact. + example: 1663597233 + last_admin_reply_at: + type: integer + format: date-time + description: Time of the last conversation part from an admin. + example: 1663597233 + last_close_at: + type: integer + format: date-time + description: Time of the last conversation close. + example: 1663597233 + last_closed_by_id: type: string - enum: - - none - - low - - medium - - high - - urgent - description: The priority level of the conversation. Returns one of none, - low, medium, high, or urgent. - example: high - admin_assignee_id: + description: The last admin who closed the conversation. Returns a reference + to an Admin object. + example: c3po + count_reopens: type: integer - description: The id of the admin assigned to the conversation. If it's not - assigned to an admin it will return 0. - example: 0 - team_assignee_id: + description: Number of reopens after first_contact_reply_at. + example: 1 + count_assignments: + type: integer + description: Number of assignments after first_contact_reply_at. + example: 1 + count_conversation_parts: + type: integer + description: Total number of conversation parts. + example: 1 + assigned_team_first_response_time: + type: array + description: An array of conversation response time objects + items: + "$ref": "#/components/schemas/conversation_response_time" + assigned_team_first_response_time_in_office_hours: + type: array + description: An array of conversation response time objects within office + hours + items: + "$ref": "#/components/schemas/conversation_response_time" + handling_time: + type: integer + description: Time from conversation assignment to conversation close in + seconds. + example: 2310 + adjusted_handling_time: type: integer - description: The id of the team assigned to the conversation. If it's not - assigned to a team it will return 0. - example: 5017691 - company: - "$ref": "#/components/schemas/company" nullable: true - description: The company associated with the conversation. - tags: - "$ref": "#/components/schemas/tags" - conversation_rating: - "$ref": "#/components/schemas/conversation_rating" - source: - "$ref": "#/components/schemas/conversation_source" - contacts: - "$ref": "#/components/schemas/conversation_contacts" + description: Adjusted handling time for conversation in seconds. This is the active handling time excluding idle periods when teammates are not actively working on the conversation. + example: 1800 + conversation_teammates: + title: Conversation teammates + type: object + nullable: true + description: The list of teammates who participated in the conversation (wrote + at least one conversation part). + properties: + type: + type: string + description: The type of the object - `admin.list`. + example: admin.list teammates: - "$ref": "#/components/schemas/conversation_teammates" - custom_attributes: - "$ref": "#/components/schemas/custom_attributes" - first_contact_reply: - "$ref": "#/components/schemas/conversation_first_contact_reply" - sla_applied: - "$ref": "#/components/schemas/sla_applied" - statistics: - "$ref": "#/components/schemas/conversation_statistics" - conversation_parts: - "$ref": "#/components/schemas/conversation_parts" - linked_objects: - "$ref": "#/components/schemas/linked_object_list" - ai_agent_participated: - type: boolean - description: Indicates whether the AI Agent participated in the conversation. - example: true - ai_agent: - "$ref": "#/components/schemas/ai_agent" - nullable: true - conversation_attachment_files: - title: Conversation attachment files + type: array + description: The list of teammates who participated in the conversation + (wrote at least one conversation part). + items: + "$ref": "#/components/schemas/reference" + convert_conversation_to_ticket_request: + description: You can convert a Conversation to a Ticket type: object - description: Properties of the attachment files in a conversation part + title: Convert Ticket Request Payload properties: - content_type: + ticket_type_id: type: string - description: The content type of the file - example: application/json - data: + description: The ID of the type of ticket you want to convert the conversation + to + example: '1234' + ticket_state_id: type: string - description: The base64 encoded file data. - example: ewogICJ0ZXN0IjogMQp9 + description: The ID of the ticket state associated with the ticket type. + attributes: + "$ref": "#/components/schemas/ticket_request_custom_attributes" + required: + - ticket_type_id + convert_visitor_request: + create_audience_request: + title: Create Audience Request + type: object + description: The request payload for creating an audience. + required: + - name + properties: name: type: string - description: The name of the file. - example: test.json - conversation_contacts: - title: Contacts + description: The name of the audience. + example: VIP Customers + predicates: + type: array + description: The predicates that define which contacts belong to the audience. + items: + "$ref": "#/components/schemas/predicate" + example: + - attribute: company.name + type: string + comparison: contains + value: Acme + role_predicates: + type: array + description: Role-based predicates that further filter audience membership by + contact role. + items: + "$ref": "#/components/schemas/predicate" + example: + - attribute: role + type: role + comparison: eq + value: user + description: You can merge a Visitor to a Contact of role type lead or user. type: object - description: 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. + title: Convert Visitor Request Payload properties: type: type: string - description: '' + description: Represents the role of the Contact model. Accepts `lead` or + `user`. + example: user + user: + type: object + description: The unique identifiers retained after converting or merging. + properties: + id: + type: string + description: The unique identifier for the contact which is given by + Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + user_id: + type: string + description: A unique identifier for the contact which is given to Intercom, + which will be represented as external_id. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + email: + type: string + description: The contact's email, retained by default if one is present. + example: winstonsmith@truth.org + anyOf: + - required: + - id + - required: + - user_id + visitor: + type: object + description: The unique identifiers to convert a single Visitor. + properties: + id: + type: string + description: The unique identifier for the contact which is given by + Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + user_id: + type: string + description: A unique identifier for the contact which is given to Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + email: + type: string + description: The visitor's email. + example: winstonsmith@truth.org + anyOf: + - required: + - id + - required: + - user_id + - required: + - email + required: + - type + - user + - visitor + create_article_request: + description: You can create an Article + type: object + title: Create Article Request Payload + nullable: true + properties: + title: + type: string + description: The title of the article.For multilingual articles, this will + be the title of the default language's content. + example: Thanks for everything + description: + type: string + description: The description of the article. For multilingual articles, + this will be the description of the default language's content. + example: Description of the Article + body: + type: string + description: The content of the article. For multilingual articles, this + will be the body of the default language's content. + example: "

This is the body in html

" + author_id: + type: integer + description: The id of the author of the article. For multilingual articles, + this will be the id of the author of the default language's content. Must + be a teammate on the help center's workspace. + example: 1295 + state: + type: string + description: Whether the article will be `published` or will be a `draft`. + Defaults to draft. For multilingual articles, this will be the state of + the default language's content. enum: - - contact.list - example: contact.list - contacts: - type: array - description: 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. - items: - "$ref": "#/components/schemas/contact_reference" - conversation_deleted: - title: Conversation Deleted + - published + - draft + example: draft + parent_id: + type: integer + description: The id of the article's parent collection or section. An article + without this field stands alone. + example: 18 + parent_type: + type: string + description: The type of parent, which can either be a `collection` or `section`. + example: collection + translated_content: + "$ref": "#/components/schemas/article_translated_content" + required: + - title + - author_id + create_internal_article_request: + description: You can create an Internal Article type: object - description: deleted conversation object + title: Create Internal Article Request Payload + nullable: true properties: - id: + title: type: string - description: The unique identifier for the conversation. - example: 5ba682d23d7cf92bef87bfd4 - object: + description: The title of the article. + example: Thanks for everything + body: type: string - description: always conversation - enum: - - conversation - example: conversation - deleted: - type: boolean - description: Whether the conversation is deleted or not. - example: true - conversation_first_contact_reply: - title: First contact reply + description: The content of the article. + example: "

This is the body in html

" + author_id: + type: integer + description: The id of the author of the article. + example: 1295 + owner_id: + type: integer + description: The id of the owner of the article. + example: 1295 + required: + - title + - owner_id + - author_id + create_collection_request: + description: You can create a collection type: object - nullable: true - description: An object containing information on the first users message. For - a contact initiated message this will represent the users original message. + title: Create Collection Request Payload properties: - created_at: - type: integer - format: date-time - description: '' - example: 1663597223 - type: + name: type: string - description: '' - example: conversation - url: + description: The name of the collection. For multilingual collections, this + will be the name of the default language's content. + example: collection 51 + description: type: string + description: The description of the collection. For multilingual collections, + this will be the description of the default language's content. + example: English description + translated_content: nullable: true - description: '' - example: https://developers.intercom.com/ - conversation_list: - title: Conversation List - type: object - description: 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. - properties: - type: + "$ref": "#/components/schemas/group_translated_content" + parent_id: type: string - description: Always conversation.list - enum: - - conversation.list - example: conversation.list - conversations: - type: array - description: The list of conversation objects - items: - "$ref": "#/components/schemas/conversation_list_item" - total_count: + nullable: true + description: The id of the parent collection. If `null` then it will be + created as the first level collection. + example: '6871118' + help_center_id: type: integer - description: A count of the total number of objects. - example: 12345 - pages: - "$ref": "#/components/schemas/cursor_pages" - conversation_part: - title: Conversation Part + nullable: true + description: The id of the help center where the collection will be created. + If `null` then it will be created in the default help center. + example: '123' + required: + - name + create_contact_request: + description: Payload to create a contact type: object - description: A Conversation Part represents a message in the conversation. + title: Create Contact Request Payload properties: - type: + role: type: string - description: Always conversation_part - example: conversation_part - id: + description: The role of the contact. + example: user + external_id: type: string - description: The id representing the conversation part. - example: '3' - part_type: + description: A unique identifier for the contact which is given to Intercom + example: "625e90fc55ab113b6d92175f" + email: type: string - description: The type of conversation part. - example: comment - body: + description: The contacts email + example: jdoe@example.com + phone: type: string nullable: true - description: The message body, which may contain HTML. For Twitter, this - will show a generic message regarding why the body is obscured. In webhook - payloads for API version 2.15+, this field returns plain text. - example: "

Okay!

" - created_at: - type: integer - format: date-time - description: The time the conversation part was created. - example: 1663597223 - updated_at: + description: The contacts phone + example: "+353871234567" + name: + type: string + nullable: true + description: The contacts name + example: John Doe + avatar: + type: string + nullable: true + description: An image URL containing the avatar of a contact + example: https://www.example.com/avatar_image.jpg + signed_up_at: type: integer format: date-time - description: The last time the conversation part was updated. - example: 1663597260 - notified_at: + nullable: true + description: (Unix timestamp in seconds) The time specified for when a contact signed up. + example: 1571672154 + last_seen_at: type: integer format: date-time - description: The time the user was notified with the conversation part. - example: 1663597260 - assigned_to: - "$ref": "#/components/schemas/reference" nullable: true - description: The id of the admin that was assigned the conversation by this - conversation_part (null if there has been no change in assignment.) - author: - "$ref": "#/components/schemas/conversation_part_author" - attachments: - title: Conversation part attachments - type: array - description: A list of attachments for the part. - items: - "$ref": "#/components/schemas/part_attachment" - external_id: + description: (Unix timestamp in seconds) The time when the contact was last seen + (either where the Intercom Messenger was installed or when specified manually). + example: 1571672154 + owner_id: type: string nullable: true - description: The external id of the conversation part - example: abcd1234 - redacted: + description: The id of an admin that has been assigned account ownership + of the contact + example: "321" + unsubscribed_from_emails: type: boolean - description: Whether or not the conversation part has been redacted. - example: false - email_message_metadata: - "$ref": "#/components/schemas/email_message_metadata" - nullable: true - metadata: - "$ref": "#/components/schemas/conversation_part_metadata" - nullable: true - state: - type: string - enum: - - open - - closed - - snoozed - description: Indicates the current state of conversation when the conversation part was created. - example: open - tags: - type: array - description: A list of tags objects associated with the conversation part. - items: - "$ref": "#/components/schemas/tag_basic" - nullable: true - event_details: - "$ref": "#/components/schemas/event_details" nullable: true - app_package_code: - type: string + description: Whether the contact is unsubscribed from emails + example: true + custom_attributes: + type: object nullable: true - example: "test-integration" - description: The app package code if this part was created via API. null if the part was not created via API. - conversation_part_author: - title: Conversation part author + description: The custom attributes which are set for the contact + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 1 + anyOf: + - required: + - email + title: Create contact with email + - required: + - external_id + title: Create contact with external_id + - required: + - role + title: Create contact with role + create_content_import_source_request: + title: Create Content Import Source Payload type: object - description: The object who initiated the conversation, which can be a Contact, - Admin or Team. Bots and campaigns send messages on behalf of Admins or Teams. - For Twitter, this will be blank. + description: You can add an Content Import Source to your Fin Content Library. + nullable: false properties: - type: + sync_behavior: type: string - description: The type of the author - example: admin - id: + description: If you intend to create or update External Pages via the API, + this should be set to `api`. + enum: + - api + example: api + status: type: string - description: The id of the author - example: '274' - name: + description: The status of the content import source. + enum: + - active + - deactivated + default: active + example: active + url: type: string + description: The URL of the content import source. + example: https://help.example.com + audience_ids: nullable: true - description: The name of the author - example: Operator - email: - type: string - format: email - description: The email of the author - example: operator+abcd1234@intercom.io - from_ai_agent: - type: boolean - description: If this conversation part was sent by the AI Agent - example: true - is_ai_answer: - type: boolean - description: If this conversation part body was generated by the AI Agent - example: false - conversation_parts: - title: Conversation Parts + description: The unique identifiers for the audiences to associate with this content import source. Can be a single integer or an array of integers. + example: + - 5678 + oneOf: + - type: integer + - type: array + items: + type: integer + required: + - sync_behavior + - url + create_conversation_request: + description: 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. type: object - description: 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. + title: Create Conversation Request Payload properties: - type: + from: + type: object + properties: + type: + type: string + enum: + - lead + - user + - contact + description: The role associated to the contact - user or lead. + example: user + id: + type: string + description: The identifier for the contact which is given by Intercom. + format: uuid + minLength: 24 + maxLength: 24 + example: 536e564f316c83104c000020 + required: + - type + - id + body: type: string - description: '' - enum: - - conversation_part.list - example: conversation_part.list - conversation_parts: - title: Conversation Parts + description: The content of the message. HTML is not supported. + example: Hello + subject: + type: string + description: The title of the email. Only applicable if the message type is email. + example: Thanks for everything + attachment_urls: type: array - description: 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. + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. items: - "$ref": "#/components/schemas/conversation_part" - total_count: + type: string + format: uri + maxItems: 10 + created_at: type: integer - description: '' - example: 1 - conversation_part_metadata: - title: Conversation Part Metadata - description: Metadata for a conversation part + format: date-time + description: The time the conversation was created as a UTC Unix timestamp. If not provided, the current time will be used. This field is only recommneded for migrating past conversations from another source into Intercom. + example: 1671028894 + required: + - from + - body + create_data_attribute_request: + description: '' type: object + title: Create Data Attribute Request properties: - quick_reply_options: - type: array - description: The quick reply options sent by the Admin or bot, presented in this conversation part. - items: - allOf: - - "$ref": "#/components/schemas/quick_reply_option" - properties: - translations: - type: object - nullable: true - description: The translations for the quick reply option. - example: { "en": "Hello", "fr": "Bonjour" } - quick_reply_uuid: + name: type: string - format: uuid - description: The unique identifier for the quick reply option that was clicked by the end user. - example: '123e4567-e89b-12d3-a456-426614174000' - conversation_rating: - title: Conversation Rating + description: The name of the data attribute. + example: My Data Attribute + model: + type: string + description: The model that the data attribute belongs to. + enum: + - contact + - company + example: contact + description: + type: string + description: The readable description you see in the UI for the attribute. + example: My Data Attribute Description + messenger_writable: + type: boolean + description: Can this attribute be updated by the Messenger + example: false + required: + - name + - model + - data_type + oneOf: + - properties: + data_type: + enum: + - options + options: + type: array + description: Array of objects representing the options of the list, with `value` as the key and the option as the value. At least + two options are required. + items: + type: object + properties: + value: + type: string + example: + - value: 1-10 + - value: 11-50 + required: + - options + title: 'list attribute' + - properties: + data_type: + enum: + - string + - integer + - float + - boolean + - datetime + - date + title: 'other type' + create_data_event_request: + description: '' type: object - nullable: true - description: The Conversation Rating object which contains information on the - rating and/or remark added by a Contact and the Admin assigned to the conversation. + title: Create Data Event Request properties: - rating: - type: integer - description: The rating, between 1 and 5, for the conversation. - example: 5 - remark: + event_name: type: string - description: An optional field to add a remark to correspond to the number - rating - example: '' + description: The name of the event that occurred. This is presented to your + App's admins when filtering and creating segments - a good event name + is typically a past tense 'verb-noun' combination, to improve readability, + for example `updated-plan`. + example: invited-friend created_at: type: integer format: date-time - description: The time the rating was requested in the conversation being - rated. - example: 1671028894 - updated_at: - type: integer - format: date-time - description: The time the rating was last updated. + description: The time the event occurred as a UTC Unix timestamp example: 1671028894 - contact: - "$ref": "#/components/schemas/contact_reference" - teammate: - "$ref": "#/components/schemas/reference" - conversation_response_time: - title: Conversation response time + user_id: + type: string + description: Your identifier for the user. + example: '314159' + id: + type: string + description: The unique identifier for the contact (lead or user) which + is given by Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + email: + type: string + description: An email address for your user. An email should only be used + where your application uses email to uniquely identify users. + example: frodo.baggins@example.com + metadata: + type: object + description: Optional metadata about the event. + additionalProperties: + type: string + example: + invite_code: ADDAFRIEND + anyOf: + - title: id required + required: + - event_name + - created_at + - id + - title: user_id required + required: + - event_name + - created_at + - user_id + - title: email required + required: + - event_name + - created_at + - email + create_data_event_summaries_request: + description: You can send a list of event summaries for a user. Each event summary + should contain the event name, the time the event occurred, and the number + of times the event occurred. The event name should be a past tense "verb-noun" + combination, to improve readability, for example `updated-plan`. type: object - description: Details of first response time of assigned team in seconds. + title: Create Data Event Summaries Request properties: - team_id: - type: integer - description: Id of the assigned team. - example: 100 - team_name: + user_id: type: string - description: Name of the assigned Team, null if team does not exist, Unassigned - if no team is assigned. - example: Team One - response_time: + description: Your identifier for the user. + example: '314159' + event_summaries: + type: object + description: A list of event summaries for the user. Each event summary + should contain the event name, the time the event occurred, and the number + of times the event occurred. The event name should be a past tense 'verb-noun' + combination, to improve readability, for example `updated-plan`. + properties: + event_name: + type: string + description: The name of the event that occurred. A good event name + is typically a past tense 'verb-noun' combination, to improve readability, + for example `updated-plan`. + example: invited-friend + count: + type: integer + description: The number of times the event occurred. + example: 1 + first: + type: integer + format: date-time + description: The first time the event was sent + example: 1671028894 + last: + type: integer + format: date-time + description: The last time the event was sent + example: 1671028894 + create_data_exports_request: + description: Request for creating a data export + type: object + title: Create Data Export Request + properties: + created_at_after: type: integer - description: First response time of assigned team in seconds. - example: 2310 - conversation_source: - title: Conversation source + description: The start date that you request data for. It must be formatted + as a unix timestamp. + example: 1527811200 + created_at_before: + type: integer + description: The end date that you request data for. It must be formatted + as a unix timestamp. + example: 1527811200 + required: + - created_at_after + - created_at_before + create_external_page_request: + title: Create External Page Payload type: object - description: The type of the conversation part that started this conversation. Can be Contact, Admin, Campaign, Automated or Operator initiated. + description: You can add an External Page to your Fin Content Library. + nullable: false properties: - type: - type: string - description: This includes conversation, email, facebook, instagram, phone_call, - phone_switch, push, sms, twitter and whatsapp. - example: conversation - enum: - - conversation - - email - - facebook - - instagram - - phone_call - - phone_switch - - push - - sms - - twitter - - whatsapp - id: - type: string - description: The id representing the message. - example: '3' - delivered_as: - type: string - description: The conversation's initiation type. Possible values are customer_initiated, - campaigns_initiated (legacy campaigns), operator_initiated (Custom bot), - automated (Series and other outbounds with dynamic audience message) and - admin_initiated (fixed audience message, ticket initiated by an admin, - group email). - example: operator_initiated - subject: + title: type: string - description: Optional. The message subject. For Twitter, this will show - a generic message regarding why the subject is obscured. In webhook - payloads for API version 2.15+, this field returns plain text. - example: '' - body: + description: The title of the external page. + example: Getting started with... + html: type: string - description: The message body, which may contain HTML. For Twitter, this - will show a generic message regarding why the body is obscured. In webhook - payloads for API version 2.15+, this field returns plain text. - example: "

Hey there!

" - author: - "$ref": "#/components/schemas/conversation_part_author" - attachments: - type: array - description: A list of attachments for the part. - items: - "$ref": "#/components/schemas/part_attachment" + description: The body of the external page in HTML. + example: "

Hello world!

" url: type: string - nullable: true - description: The URL where the conversation was started. For Twitter, Email, - and Bots, this will be blank. - example: - redacted: + description: The URL of the external page. This will be used by Fin to link + end users to the page it based its answer on. When a URL is not present, + Fin will not reference the source. + example: https://help.example.com/en/articles/1234-getting-started + ai_agent_availability: type: boolean - description: Whether or not the source message has been redacted. Only applicable - for contact initiated messages. - example: false - conversation_statistics: - title: Conversation statistics - type: object - nullable: true - description: A Statistics object containing all information required for reporting, - with timestamps and calculated metrics. - properties: - type: - type: string - description: '' - example: conversation_statistics - time_to_assignment: - type: integer - description: Duration until last assignment before first admin reply. In - seconds. - example: 2310 - time_to_admin_reply: - type: integer - description: Duration until first admin reply. Subtracts out of business - hours. In seconds. - example: 2310 - time_to_first_close: - type: integer - description: Duration until conversation was closed first time. Subtracts - out of business hours. In seconds. - example: 2310 - time_to_last_close: - type: integer - description: Duration until conversation was closed last time. Subtracts - out of business hours. In seconds. - example: 2310 - median_time_to_reply: - type: integer - description: Median based on all admin replies after a contact reply. Subtracts - out of business hours. In seconds. - example: 2310 - first_contact_reply_at: - type: integer - format: date-time - description: Time of first text conversation part from a contact. - example: 1663597233 - first_assignment_at: - type: integer - format: date-time - description: Time of first assignment after first_contact_reply_at. - example: 1663597233 - first_admin_reply_at: - type: integer - format: date-time - description: Time of first admin reply after first_contact_reply_at. - example: 1663597233 - first_close_at: - type: integer - format: date-time - description: Time of first close after first_contact_reply_at. - example: 1663597233 - last_assignment_at: - type: integer - format: date-time - description: Time of last assignment after first_contact_reply_at. - example: 1663597233 - last_assignment_admin_reply_at: - type: integer - format: date-time - description: Time of first admin reply since most recent assignment. - example: 1663597233 - last_contact_reply_at: - type: integer - format: date-time - description: Time of the last conversation part from a contact. - example: 1663597233 - last_admin_reply_at: - type: integer - format: date-time - description: Time of the last conversation part from an admin. - example: 1663597233 - last_close_at: - type: integer - format: date-time - description: Time of the last conversation close. - example: 1663597233 - last_closed_by_id: - type: string - description: The last admin who closed the conversation. Returns a reference - to an Admin object. - example: c3po - count_reopens: - type: integer - description: Number of reopens after first_contact_reply_at. - example: 1 - count_assignments: - type: integer - description: Number of assignments after first_contact_reply_at. - example: 1 - count_conversation_parts: - type: integer - description: Total number of conversation parts. - example: 1 - assigned_team_first_response_time: - type: array - description: An array of conversation response time objects - items: - "$ref": "#/components/schemas/conversation_response_time" - assigned_team_first_response_time_in_office_hours: - type: array - description: An array of conversation response time objects within office - hours - items: - "$ref": "#/components/schemas/conversation_response_time" - handling_time: - type: integer - description: Time from conversation assignment to conversation close in - seconds. - example: 2310 - adjusted_handling_time: + description: Whether the external page should be used to answer questions + by AI Agent. Will not default when updating an existing external page. + default: false + example: true + ai_copilot_availability: + type: boolean + description: Whether the external page should be used to answer questions + by AI Copilot. Will not default when updating an existing external page. + default: false + example: true + locale: + type: string + description: Always en + enum: + - en + default: en + example: en + source_id: type: integer - nullable: true - description: Adjusted handling time for conversation in seconds. This is the active handling time excluding idle periods when teammates are not actively working on the conversation. - example: 1800 - conversation_teammates: - title: Conversation teammates + description: The unique identifier for the source of the external page which + was given by Intercom. Every external page must be associated with a Content + Import Source which represents the place it comes from and from which + it inherits a default audience (configured in the UI). For a new source, + make a POST request to the Content Import Source endpoint and an ID for + the source will be returned in the response. + example: 1234 + external_id: + type: string + description: The identifier for the external page which was given by the + source. Must be unique for the source. + example: '5678' + required: + - title + - html + - locale + - source_id + - external_id + create_message_request: + description: You can create a message type: object + title: Create Message Request Payload nullable: true - description: The list of teammates who participated in the conversation (wrote - at least one conversation part). properties: - type: + message_type: type: string - description: The type of the object - `admin.list`. - example: admin.list - teammates: - type: array - description: The list of teammates who participated in the conversation - (wrote at least one conversation part). - items: - "$ref": "#/components/schemas/reference" - convert_conversation_to_ticket_request: - description: You can convert a Conversation to a Ticket - type: object - title: Convert Ticket Request Payload - properties: - ticket_type_id: + description: 'The kind of message being created. Values: `in_app` or `email`.' + enum: + - in_app + - email + example: in_app + subject: type: string - description: The ID of the type of ticket you want to convert the conversation - to - example: '1234' - ticket_state_id: + description: The title of the email. + example: Thanks for everything + body: type: string - description: The ID of the ticket state associated with the ticket type. - attributes: - "$ref": "#/components/schemas/ticket_request_custom_attributes" - required: - - ticket_type_id - convert_visitor_request: - description: You can merge a Visitor to a Contact of role type lead or user. - type: object - title: Convert Visitor Request Payload - properties: - type: + description: The content of the message. HTML and plaintext are supported. + example: Hello there + template: type: string - description: Represents the role of the Contact model. Accepts `lead` or - `user`. - example: user - user: + description: The style of the outgoing message. Possible values `plain` + or `personal`. + example: plain + from: type: object - description: The unique identifiers retained after converting or merging. + description: The sender of the message. If not provided, the default sender + will be used. properties: - id: - type: string - description: The unique identifier for the contact which is given by - Intercom. - example: 8a88a590-e1c3-41e2-a502-e0649dbf721c - user_id: - type: string - description: A unique identifier for the contact which is given to Intercom, - which will be represented as external_id. - example: 8a88a590-e1c3-41e2-a502-e0649dbf721c - email: + type: type: string - description: The contact's email, retained by default if one is present. - example: winstonsmith@truth.org - anyOf: - - required: - - id - - required: - - user_id - visitor: - type: object - description: The unique identifiers to convert a single Visitor. - properties: + description: Always `admin`. + enum: + - admin + example: admin id: - type: string - description: The unique identifier for the contact which is given by - Intercom. - example: 8a88a590-e1c3-41e2-a502-e0649dbf721c - user_id: - type: string - description: A unique identifier for the contact which is given to Intercom. - example: 8a88a590-e1c3-41e2-a502-e0649dbf721c - email: - type: string - description: The visitor's email. - example: winstonsmith@truth.org - anyOf: - - required: - - id - - required: - - user_id - - required: - - email - required: - - type - - user - - visitor - create_article_request: - description: You can create an Article + type: integer + description: The identifier for the admin which is given by Intercom. + example: 394051 + required: + - type + - id + to: + oneOf: + - $ref: '#/components/schemas/recipient' + - type: array + description: The recipients of the message. + items: + $ref: '#/components/schemas/recipient' + example: + - type: user + id: 536e564f316c83104c000020 + - type: lead + id: 536e564f316c83104c000021 + cc: + oneOf: + - $ref: '#/components/schemas/recipient' + - type: array + description: The CC recipients of the message. + items: + $ref: '#/components/schemas/recipient' + example: + - type: user + id: 536e564f316c83104c000023 + bcc: + oneOf: + - $ref: '#/components/schemas/recipient' + - type: array + description: The BCC recipients of the message. + items: + $ref: '#/components/schemas/recipient' + example: + - type: user + id: 536e564f316c83104c000022 + created_at: + type: integer + description: The time the message was created. If not provided, the current + time will be used. + example: 1590000000 + create_conversation_without_contact_reply: + type: boolean + description: Whether a conversation should be opened in the inbox for the + message without the contact replying. Defaults to false if not provided. + default: false + example: true + anyOf: + - title: 'message_type: `email`.' + required: + - message_type + - subject + - body + - template + - from + - to + - title: 'message_type: `inapp`.' + required: + - message_type + - body + - from + - to + recipient: type: object - title: Create Article Request Payload - nullable: true + title: Recipient + description: A recipient of a message properties: - title: - type: string - description: The title of the article.For multilingual articles, this will - be the title of the default language's content. - example: Thanks for everything - description: - type: string - description: The description of the article. For multilingual articles, - this will be the description of the default language's content. - example: Description of the Article - body: - type: string - description: The content of the article. For multilingual articles, this - will be the body of the default language's content. - example: "

This is the body in html

" - author_id: - type: integer - description: The id of the author of the article. For multilingual articles, - this will be the id of the author of the default language's content. Must - be a teammate on the help center's workspace. - example: 1295 - state: + type: type: string - description: Whether the article will be `published` or will be a `draft`. - Defaults to draft. For multilingual articles, this will be the state of - the default language's content. + description: The role associated to the contact - `user` or `lead`. enum: - - published - - draft - example: draft - parent_id: - type: integer - description: The id of the article's parent collection or section. An article - without this field stands alone. - example: 18 - parent_type: + - user + - lead + example: user + id: type: string - description: The type of parent, which can either be a `collection` or `section`. - example: collection - translated_content: - "$ref": "#/components/schemas/article_translated_content" + description: The identifier for the contact which is given by Intercom. + example: 536e564f316c83104c000020 required: - - title - - author_id - create_internal_article_request: - description: You can create an Internal Article + - type + - id + create_or_update_company_request: type: object - title: Create Internal Article Request Payload + title: Create Or Update Company Request Payload + description: You can create or update a Company nullable: true properties: - title: + name: type: string - description: The title of the article. - example: Thanks for everything - body: + description: The name of the Company + example: Intercom + company_id: type: string - description: The content of the article. - example: "

This is the body in html

" - author_id: + description: The company id you have defined for the company. Can't be updated + example: 625e90fc55ab113b6d92175f + plan: + type: string + description: The name of the plan you have associated with the company. + example: Enterprise + size: type: integer - description: The id of the author of the article. - example: 1295 - owner_id: + description: The number of employees in this company. + example: '100' + website: + type: string + description: The URL for this company's website. Please note that the value + specified here is not validated. Accepts any string. + example: https://www.example.com + industry: + type: string + description: The industry that this company operates in. + example: Manufacturing + custom_attributes: + type: object + description: A hash of key/value pairs containing any other data about the + company you want Intercom to store. + additionalProperties: + type: string + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + remote_created_at: type: integer - description: The id of the owner of the article. - example: 1295 - required: - - title - - owner_id - - author_id - create_collection_request: - description: You can create a collection + description: The time the company was created by you. + example: 1394531169 + monthly_spend: + type: integer + description: How much revenue the company generates for your business. Note + that this will truncate floats. i.e. it only allow for whole integers, + 155.98 will be truncated to 155. Note that this has an upper limit of + 2**31-1 or 2147483647.. + example: 1000 + update_company_request: type: object - title: Create Collection Request Payload + title: Update Company Request Payload + description: You can update a Company + nullable: true properties: name: type: string - description: The name of the collection. For multilingual collections, this - will be the name of the default language's content. - example: collection 51 - description: + description: The name of the Company + example: Intercom + plan: type: string - description: The description of the collection. For multilingual collections, - this will be the description of the default language's content. - example: English description - translated_content: - nullable: true - "$ref": "#/components/schemas/group_translated_content" - parent_id: + description: The name of the plan you have associated with the company. + example: Enterprise + size: + type: integer + description: The number of employees in this company. + example: '100' + website: type: string - nullable: true - description: The id of the parent collection. If `null` then it will be - created as the first level collection. - example: '6871118' - help_center_id: + description: The URL for this company's website. Please note that the value + specified here is not validated. Accepts any string. + example: https://www.example.com + industry: + type: string + description: The industry that this company operates in. + example: Manufacturing + custom_attributes: + type: object + description: A hash of key/value pairs containing any other data about the + company you want Intercom to store. + additionalProperties: + type: string + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + monthly_spend: type: integer - nullable: true - description: The id of the help center where the collection will be created. - If `null` then it will be created in the default help center. - example: '123' - required: - - name - create_contact_request: - description: Payload to create a contact + description: How much revenue the company generates for your business. Note + that this will truncate floats. i.e. it only allow for whole integers, + 155.98 will be truncated to 155. Note that this has an upper limit of + 2**31-1 or 2147483647.. + example: 1000 + create_or_update_custom_object_instance_request: + description: Payload to create or update a Custom Object instance type: object - title: Create Contact Request Payload + title: Create Or Update Custom Object Instance Request Payload properties: - role: - type: string - description: The role of the contact. - example: user external_id: type: string - description: A unique identifier for the contact which is given to Intercom - example: "625e90fc55ab113b6d92175f" - email: - type: string - description: The contacts email - example: jdoe@example.com - phone: - type: string - nullable: true - description: The contacts phone - example: "+353871234567" - name: - type: string - nullable: true - description: The contacts name - example: John Doe - avatar: - type: string - nullable: true - description: An image URL containing the avatar of a contact - example: https://www.example.com/avatar_image.jpg - signed_up_at: + description: A unique identifier for the Custom Object instance in the external + system it originated from. + external_created_at: type: integer format: date-time nullable: true - description: (Unix timestamp in seconds) The time specified for when a contact signed up. + description: The time when the Custom Object instance was created in the + external system it originated from. example: 1571672154 - last_seen_at: + external_updated_at: type: integer format: date-time nullable: true - description: (Unix timestamp in seconds) The time when the contact was last seen - (either where the Intercom Messenger was installed or when specified manually). + description: The time when the Custom Object instance was last updated in + the external system it originated from. example: 1571672154 - owner_id: - type: string - nullable: true - description: The id of an admin that has been assigned account ownership - of the contact - example: "321" - unsubscribed_from_emails: - type: boolean - nullable: true - description: Whether the contact is unsubscribed from emails - example: true custom_attributes: type: object nullable: true - description: The custom attributes which are set for the contact - example: - paid_subscriber: true - monthly_spend: 155.5 - team_mates: 1 - anyOf: - - required: - - email - title: Create contact with email - - required: - - external_id - title: Create contact with external_id - - required: - - role - title: Create contact with role - create_content_import_source_request: - title: Create Content Import Source Payload + description: The custom attributes which are set for the Custom Object instance. + additionalProperties: + type: string + create_or_update_tag_request: + description: You can create or update an existing tag. type: object - description: You can add an Content Import Source to your Fin Content Library. - nullable: false + title: Create or Update Tag Request Payload properties: - sync_behavior: + name: type: string - description: If you intend to create or update External Pages via the API, - this should be set to `api`. - enum: - - api - example: api - status: + description: The name of the tag, which will be created if not found, or + the new name for the tag if this is an update request. Names are case + insensitive. + example: Independent + id: type: string - description: The status of the content import source. - enum: - - active - - deactivated - default: active - example: active - url: + description: The id of tag to updates. + example: '656452352' + required: + - name + create_phone_switch_request: + description: You can create an phone switch + type: object + title: Create Phone Switch Request Payload + nullable: true + properties: + phone: type: string - description: The URL of the content import source. - example: https://help.example.com - audience_ids: - nullable: true - description: The unique identifiers for the audiences to associate with this content import source. Can be a single integer or an array of integers. - example: - - 5678 - oneOf: - - type: integer - - type: array - items: - type: integer + description: Phone number in E.164 format, that will receive the SMS to + continue the conversation in the Messenger. + example: "+1 1234567890" + custom_attributes: + "$ref": "#/components/schemas/custom_attributes" required: - - sync_behavior - - url - create_conversation_request: - description: 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. + - phone + create_ticket_reply_with_comment_request: + title: Create Ticket Reply Request Payload + oneOf: + - "$ref": "#/components/schemas/contact_reply_ticket_request" + - "$ref": "#/components/schemas/admin_reply_ticket_request" + create_ticket_request: + description: You can create a Ticket type: object - title: Create Conversation Request Payload + title: Create Ticket Request Payload properties: - from: - type: object - properties: - type: - type: string - enum: - - lead - - user - - contact - description: The role associated to the contact - user or lead. - example: user - id: - type: string - description: The identifier for the contact which is given by Intercom. - format: uuid - minLength: 24 - maxLength: 24 - example: 536e564f316c83104c000020 - required: - - type - - id - body: - type: string - description: The content of the message. HTML is not supported. - example: Hello - subject: + ticket_type_id: type: string - description: The title of the email. Only applicable if the message type is email. - example: Thanks for everything - attachment_urls: + description: The ID of the type of ticket you want to create + example: '1234' + contacts: type: array - description: A list of image URLs that will be added as attachments. You - can include up to 10 URLs. + description: The list of contacts (users or leads) affected by this ticket. + Currently only one is allowed items: - type: string - format: uri - maxItems: 10 + type: object + oneOf: + - title: ID + properties: + id: + type: string + description: The identifier for the contact as given by Intercom. + required: + - id + - title: External ID + properties: + external_id: + type: string + description: The external_id you have defined for the contact who + is being added as a participant. + required: + - external_id + - title: Email + properties: + email: + type: string + description: The email you have defined for the contact who is being + added as a participant. If a contact with this email does not + exist, one will be created. + required: + - email + example: + - id: '1234' + conversation_to_link_id: + type: string + description: "The ID of the conversation you want to link to the ticket. + Here are the valid ways of linking two tickets:\n + - conversation | back-office ticket\n + - customer tickets | non-shared back-office ticket\n + - conversation | tracker ticket\n + - customer ticket | tracker ticket" + example: '1234' + company_id: + type: string + description: The ID of the company that the ticket is associated with. The + unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 created_at: type: integer - format: date-time - description: The time the conversation was created as a UTC Unix timestamp. If not provided, the current time will be used. This field is only recommneded for migrating past conversations from another source into Intercom. - example: 1671028894 + description: The time the ticket was created. If not provided, the current + time will be used. + example: 1590000000 + ticket_attributes: + "$ref": "#/components/schemas/ticket_request_custom_attributes" + assignment: + type: object + properties: + admin_assignee_id: + type: string + description: The ID of the admin to which the ticket is assigned. + If not provided, the ticket will be unassigned. + example: '123' + team_assignee_id: + type: string + description: The ID of the team to which the ticket is assigned. + If not provided, the ticket will be unassigned. + example: '8' required: - - from - - body - create_data_attribute_request: - description: '' + - ticket_type_id + - contacts + create_ticket_type_attribute_request: + description: You can create a Ticket Type Attribute type: object - title: Create Data Attribute Request + title: Create Ticket Type Attribute Request Payload properties: name: type: string - description: The name of the data attribute. - example: My Data Attribute - model: + description: The name of the ticket type attribute + example: Bug Priority + description: type: string - description: The model that the data attribute belongs to. + description: The description of the attribute presented to the teammate + or contact + example: Priority level of the bug + data_type: + type: string + description: The data type of the attribute enum: - - contact - - company - example: contact - description: + - string + - list + - integer + - decimal + - boolean + - datetime + - files + example: string + required_to_create: + type: boolean + description: Whether the attribute is required to be filled in when teammates + are creating the ticket in Inbox. + default: false + example: false + required_to_create_for_contacts: + type: boolean + description: Whether the attribute is required to be filled in when contacts + are creating the ticket in Messenger. + default: false + example: false + visible_on_create: + type: boolean + description: Whether the attribute is visible to teammates when creating + a ticket in Inbox. + default: true + example: true + visible_to_contacts: + type: boolean + description: Whether the attribute is visible to contacts when creating + a ticket in Messenger. + default: true + example: true + multiline: + type: boolean + description: Whether the attribute allows multiple lines of text (only applicable + to string attributes) + example: false + list_items: type: string - description: The readable description you see in the UI for the attribute. - example: My Data Attribute Description - messenger_writable: + description: A comma delimited list of items for the attribute value (only + applicable to list attributes) + example: Low Priority,Medium Priority,High Priority + allow_multiple_values: type: boolean - description: Can this attribute be updated by the Messenger + description: Whether the attribute allows multiple files to be attached + to it (only applicable to file attributes) example: false required: - - name - - model - - data_type - oneOf: - - properties: - data_type: - enum: - - options - options: - type: array - description: Array of objects representing the options of the list, with `value` as the key and the option as the value. At least - two options are required. - items: - type: object - properties: - value: - type: string - example: - - value: 1-10 - - value: 11-50 - required: - - options - title: 'list attribute' - - properties: - data_type: - enum: - - string - - integer - - float - - boolean - - datetime - - date - title: 'other type' - create_data_event_request: - description: '' + - name + - description + - data_type + create_ticket_type_request: + description: | + The request payload for creating a ticket type. + You can copy the `icon` property for your ticket type from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/) + type: object + title: Create Ticket Type Request Payload + nullable: true + properties: + name: + type: string + description: The name of the ticket type. + example: Bug + description: + type: string + description: The description of the ticket type. + example: Used for tracking bugs + category: + type: string + description: Category of the Ticket Type. + enum: + - Customer + - Back-office + - Tracker + example: Customer + icon: + type: string + description: The icon of the ticket type. + example: "\U0001F41E" + default: "\U0001F39F️" + is_internal: + type: boolean + description: Whether the tickets associated with this ticket type are intended + for internal use only or will be shared with customers. This is currently + a limited attribute. + example: false + default: false + required: + - name + cursor_pages: + title: Cursor based pages type: object - title: Create Data Event Request + description: | + Cursor-based pagination is a technique used in the Intercom API to navigate through large amounts of data. + A "cursor" or pointer is used to keep track of the current position in the result set, allowing the API to return the data in small chunks or "pages" as needed. + nullable: true properties: - event_name: + type: type: string - description: The name of the event that occurred. This is presented to your - App's admins when filtering and creating segments - a good event name - is typically a past tense 'verb-noun' combination, to improve readability, - for example `updated-plan`. - example: invited-friend - created_at: + description: the type of object `pages`. + example: pages + enum: + - pages + page: type: integer - format: date-time - description: The time the event occurred as a UTC Unix timestamp - example: 1671028894 - user_id: + description: The current page + example: 1 + next: + "$ref": "#/components/schemas/starting_after_paging" + per_page: + type: integer + description: Number of results per page + example: 2 + total_pages: + type: integer + description: Total number of pages + example: 13 + call: + title: Call + type: object + x-tags: + - Calls + description: Represents a phone call in Intercom + properties: + type: type: string - description: Your identifier for the user. - example: '314159' + description: String representing the object's type. Always has the value `call`. + example: call id: type: string - description: The unique identifier for the contact (lead or user) which - is given by Intercom. - example: 8a88a590-e1c3-41e2-a502-e0649dbf721c - email: + description: The id of the call. + example: "123" + conversation_id: type: string - description: An email address for your user. An email should only be used - where your application uses email to uniquely identify users. - example: frodo.baggins@example.com - metadata: - type: object - description: Optional metadata about the event. - additionalProperties: - type: string - example: - invite_code: ADDAFRIEND - anyOf: - - title: id required - required: - - event_name - - created_at - - id - - title: user_id required - required: - - event_name - - created_at - - user_id - - title: email required - required: - - event_name - - created_at - - email - create_data_event_summaries_request: - description: You can send a list of event summaries for a user. Each event summary - should contain the event name, the time the event occurred, and the number - of times the event occurred. The event name should be a past tense "verb-noun" - combination, to improve readability, for example `updated-plan`. + nullable: true + description: The id of the conversation associated with the call, if any. + example: "456" + admin_id: + type: string + nullable: true + description: The id of the admin associated with the call, if any. + example: "789" + contact_id: + type: string + nullable: true + description: The id of the contact associated with the call, if any. + example: "6762f0dd1bb69f9f2193bb83" + state: + type: string + description: The current state of the call. + example: completed + initiated_at: + "$ref": "#/components/schemas/datetime" + answered_at: + "$ref": "#/components/schemas/datetime" + ended_at: + "$ref": "#/components/schemas/datetime" + created_at: + "$ref": "#/components/schemas/datetime" + updated_at: + "$ref": "#/components/schemas/datetime" + recording_url: + type: string + format: uri + nullable: true + description: API URL to download or redirect to the call recording if available. + example: "https://api.intercom.io/calls/123/recording" + transcription_url: + type: string + format: uri + nullable: true + description: API URL to download or redirect to the call transcript if available. + example: "https://api.intercom.io/calls/123/transcript" + call_type: + type: string + description: The type of call. + example: phone + direction: + type: string + description: The direction of the call. + example: outbound + ended_reason: + type: string + nullable: true + description: The reason for the call end, if applicable. + example: completed + phone: + type: string + nullable: true + description: The phone number involved in the call, in E.164 format. + example: "+15551234567" + fin_recording_url: + type: string + format: uri + nullable: true + description: API URL to the AI Agent (Fin) call recording if available. + fin_transcription_url: + type: string + format: uri + nullable: true + description: API URL to the AI Agent (Fin) call transcript if available. + call_list: + title: Calls type: object - title: Create Data Event Summaries Request + description: A paginated list of calls. properties: - user_id: + type: type: string - description: Your identifier for the user. - example: '314159' - event_summaries: - type: object - description: A list of event summaries for the user. Each event summary - should contain the event name, the time the event occurred, and the number - of times the event occurred. The event name should be a past tense 'verb-noun' - combination, to improve readability, for example `updated-plan`. - properties: - event_name: - type: string - description: The name of the event that occurred. A good event name - is typically a past tense 'verb-noun' combination, to improve readability, - for example `updated-plan`. - example: invited-friend - count: - type: integer - description: The number of times the event occurred. - example: 1 - first: - type: integer - format: date-time - description: The first time the event was sent - example: 1671028894 - last: - type: integer - format: date-time - description: The last time the event was sent - example: 1671028894 - create_data_exports_request: - description: Request for creating a data export + description: String representing the object's type. Always has the value `list`. + example: list + data: + type: array + description: A list of calls. + items: + "$ref": "#/components/schemas/call" + total_count: + type: integer + description: Total number of items available. + example: 0 + pages: + "$ref": "#/components/schemas/cursor_pages" + custom_attributes: + title: Custom Attributes type: object - title: Create Data Export Request + description: 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. System-defined attributes + such as "CX Score rating" and "CX Score explanation" may also be included. + additionalProperties: + anyOf: + - type: string + - type: integer + - $ref: "#/components/schemas/datetime" + - "$ref": "#/components/schemas/custom_object_instance_list" + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + start_date_iso8601: "2023-03-04T09:46:14Z" + end_date_timestamp: 1677923174 + CX Score rating: 4 + CX Score explanation: The conversation was resolved quickly and the customer + expressed satisfaction with the outcome. + custom_object_instance: + title: Custom Object Instance + type: object + x-tags: + - Custom Object Instances + nullable: true + description: A Custom Object Instance represents an instance of a custom object + type. This allows you to create and set custom attributes to store data about + your customers that is not already captured by Intercom. The parent object + includes recommended default attributes and you can add your own custom attributes. properties: - created_at_after: + id: + type: string + description: The Intercom defined id representing the custom object instance. + example: 16032025 + external_id: + type: string + description: The id you have defined for the custom object instance. + example: 0001d1c1e65a7a19e9f59ae2 + external_created_at: type: integer - description: The start date that you request data for. It must be formatted - as a unix timestamp. - example: 1527811200 - created_at_before: + format: date-time + nullable: true + description: The time when the Custom Object instance was created in the + external system it originated from. + example: 1571672154 + external_updated_at: type: integer - description: The end date that you request data for. It must be formatted - as a unix timestamp. - example: 1527811200 - required: - - created_at_after - - created_at_before - create_external_page_request: - title: Create External Page Payload + format: date-time + nullable: true + description: The time when the Custom Object instance was last updated in + the external system it originated from. + example: 1571672154 + created_at: + type: integer + format: date-time + description: The time the attribute was created as a UTC Unix timestamp + example: 1671028894 + updated_at: + type: integer + format: date-time + description: The time the attribute was last updated as a UTC Unix timestamp + example: 1671028894 + type: + type: string + description: The identifier of the custom object type that defines the structure + of the custom object instance. + example: Order + custom_attributes: + type: object + description: The custom attributes you have set on the custom object instance. + additionalProperties: + type: string + custom_object_instance_deleted: + title: Custom Object Instance Deleted type: object - description: You can add an External Page to your Fin Content Library. - nullable: false + description: deleted custom object instance object properties: - title: - type: string - description: The title of the external page. - example: Getting started with... - html: + object: type: string - description: The body of the external page in HTML. - example: "

Hello world!

" - url: + description: The unique identifier of the Custom Object type that defines + the structure of the Custom Object instance. + example: Order + id: type: string - description: The URL of the external page. This will be used by Fin to link - end users to the page it based its answer on. When a URL is not present, - Fin will not reference the source. - example: https://help.example.com/en/articles/1234-getting-started - ai_agent_availability: - type: boolean - description: Whether the external page should be used to answer questions - by AI Agent. Will not default when updating an existing external page. - default: false - example: true - ai_copilot_availability: + description: The Intercom defined id representing the Custom Object instance. + example: '123' + deleted: type: boolean - description: Whether the external page should be used to answer questions - by AI Copilot. Will not default when updating an existing external page. - default: false + description: Whether the Custom Object instance is deleted or not. example: true - locale: - type: string - description: Always en - enum: - - en - default: en - example: en - source_id: - type: integer - description: The unique identifier for the source of the external page which - was given by Intercom. Every external page must be associated with a Content - Import Source which represents the place it comes from and from which - it inherits a default audience (configured in the UI). For a new source, - make a POST request to the Content Import Source endpoint and an ID for - the source will be returned in the response. - example: 1234 - external_id: + custom_object_instance_list: + title: Custom Object Instances + type: object + description: The list of associated custom object instances for a given reference + attribute on the parent object. + properties: + type: type: string - description: The identifier for the external page which was given by the - source. Must be unique for the source. - example: '5678' - required: - - title - - html - - locale - - source_id - - external_id - create_message_request: - description: You can create a message + example: order.list + instances: + type: array + description: The list of associated custom object instances for a given + reference attribute on the parent object. + items: + "$ref": "#/components/schemas/custom_object_instance" + customer_request: type: object - title: Create Message Request Payload nullable: true + oneOf: + - title: Intercom User ID + properties: + intercom_user_id: + type: string + description: The identifier for the contact as given by Intercom. + example: 6329bd9ffe4e2e91dac76188 + required: + - intercom_user_id + - title: User ID + properties: + user_id: + type: string + description: The external_id you have defined for the contact who is being + added as a participant. + example: 2e91dac761886329bd9ffe4e + required: + - user_id + - title: Email + properties: + email: + type: string + description: The email you have defined for the contact who is being added + as a participant. + example: sam.sung@example.com + required: + - email + data_attribute: + title: Data Attribute + type: object + x-tags: + - Data Attributes + description: Data Attributes are metadata used to describe your contact and + company models. These include standard and custom attributes. By using the + data attributes endpoint, you can get the global list of attributes for your + workspace, as well as create and archive custom attributes. properties: - message_type: + type: type: string - description: 'The kind of message being created. Values: `in_app` or `email`.' + description: Value is `data_attribute`. enum: - - in_app - - email - example: in_app - subject: + - data_attribute + example: data_attribute + id: + type: integer + description: The unique identifier for the data attribute which is given + by Intercom. Only available for custom attributes. + example: 12878 + model: type: string - description: The title of the email. - example: Thanks for everything - body: + description: Value is `contact` for user/lead attributes and `company` for + company attributes. + enum: + - contact + - company + example: contact + name: type: string - description: The content of the message. HTML and plaintext are supported. - example: Hello there - template: + description: Name of the attribute. + example: paid_subscriber + full_name: type: string - description: The style of the outgoing message. Possible values `plain` - or `personal`. - example: plain - from: - type: object - description: The sender of the message. If not provided, the default sender - will be used. - properties: - type: - type: string - description: Always `admin`. - enum: - - admin - example: admin - id: - type: integer - description: The identifier for the admin which is given by Intercom. - example: 394051 - required: - - type - - id - to: - oneOf: - - $ref: '#/components/schemas/recipient' - - type: array - description: The recipients of the message. - items: - $ref: '#/components/schemas/recipient' - example: - - type: user - id: 536e564f316c83104c000020 - - type: lead - id: 536e564f316c83104c000021 - cc: - oneOf: - - $ref: '#/components/schemas/recipient' - - type: array - description: The CC recipients of the message. - items: - $ref: '#/components/schemas/recipient' - example: - - type: user - id: 536e564f316c83104c000023 - bcc: - oneOf: - - $ref: '#/components/schemas/recipient' - - type: array - description: The BCC recipients of the message. - items: - $ref: '#/components/schemas/recipient' - example: - - type: user - id: 536e564f316c83104c000022 - created_at: - type: integer - description: The time the message was created. If not provided, the current - time will be used. - example: 1590000000 - create_conversation_without_contact_reply: + description: Full name of the attribute. Should match the name unless it's + a nested attribute. We can split full_name on `.` to access nested user + object values. + example: custom_attributes.paid_subscriber + label: + type: string + description: Readable name of the attribute (i.e. name you see in the UI) + example: Paid Subscriber + description: + type: string + description: Readable description of the attribute. + example: Whether the user is a paid subscriber. + data_type: + type: string + description: The data type of the attribute. + enum: + - string + - integer + - float + - boolean + - date + example: boolean + options: + type: array + description: List of predefined options for attribute value. + items: + type: string + example: + - 'true' + - 'false' + api_writable: type: boolean - description: Whether a conversation should be opened in the inbox for the - message without the contact replying. Defaults to false if not provided. - default: false + description: Can this attribute be updated through API example: true - anyOf: - - title: 'message_type: `email`.' - required: - - message_type - - subject - - body - - template - - from - - to - - title: 'message_type: `inapp`.' - required: - - message_type - - body - - from - - to - recipient: + messenger_writable: + type: boolean + description: Can this attribute be updated by the Messenger + example: false + ui_writable: + type: boolean + description: Can this attribute be updated in the UI + example: true + custom: + type: boolean + description: Set to true if this is a CDA + example: true + archived: + type: boolean + description: Is this attribute archived. (Only applicable to CDAs) + example: false + created_at: + type: integer + format: date-time + description: The time the attribute was created as a UTC Unix timestamp + example: 1671028894 + updated_at: + type: integer + format: date-time + description: The time the attribute was last updated as a UTC Unix timestamp + example: 1671028894 + admin_id: + type: string + description: Teammate who created the attribute. Only applicable to CDAs + example: '5712945' + data_attribute_list: + title: Data Attribute List type: object - title: Recipient - description: A recipient of a message + description: A list of all data attributes belonging to a workspace for contacts + or companies. properties: type: type: string - description: The role associated to the contact - `user` or `lead`. + description: The type of the object enum: - - user - - lead - example: user - id: - type: string - description: The identifier for the contact which is given by Intercom. - example: 536e564f316c83104c000020 - required: - - type - - id - create_or_update_company_request: + - list + example: list + data: + type: array + description: A list of data attributes + items: + "$ref": "#/components/schemas/data_attribute" + conversation_attribute_base: + title: Conversation Attribute Base type: object - title: Create Or Update Company Request Payload - description: You can create or update a Company - nullable: true properties: + type: + type: string + description: "Value is `conversation_attribute`." + enum: + - conversation_attribute + example: conversation_attribute + id: + type: integer + description: The unique identifier for the conversation attribute. + example: 8 name: type: string - description: The name of the Company - example: Intercom - company_id: + description: Name of the attribute. + example: api_test_attr + description: type: string - description: The company id you have defined for the company. Can't be updated - example: 625e90fc55ab113b6d92175f - plan: + description: Readable description of the attribute. + example: Created via API test + data_type: type: string - description: The name of the plan you have associated with the company. - example: Enterprise - size: + description: "The data type of the attribute. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files." + enum: + - string + - integer + - list + - decimal + - boolean + - datetime + - relationship + - files + example: string + required: + type: boolean + description: Whether this attribute is required. + example: false + visible_to_team_ids: + type: array + description: Team IDs that can see this attribute. Empty array means all teams. + items: + type: string + example: [] + archived: + type: boolean + description: Whether this attribute is archived. + example: false + created_at: type: integer - description: The number of employees in this company. - example: '100' - website: - type: string - description: The URL for this company's website. Please note that the value - specified here is not validated. Accepts any string. - example: https://www.example.com - industry: + format: date-time + description: The time the attribute was created as a UTC Unix timestamp. + example: 1778239701 + updated_at: + type: integer + format: date-time + description: The time the attribute was last updated as a UTC Unix timestamp. + example: 1778239701 + admin_id: type: string - description: The industry that this company operates in. - example: Manufacturing - custom_attributes: - type: object - description: A hash of key/value pairs containing any other data about the - company you want Intercom to store. - additionalProperties: + description: ID of the admin who created the attribute. + example: '16' + conversation_attribute_string_type: + title: Conversation Attribute (String) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - string + multiline: + type: boolean + description: Whether this string attribute is multiline. + example: false + conversation_attribute_integer_type: + title: Conversation Attribute (Integer) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - integer + conversation_attribute_list_type: + title: Conversation Attribute (List) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - list + options: + type: array + description: Predefined options for this attribute. Each option has a unique UUID used to identify it in the options management endpoints. + items: + "$ref": "#/components/schemas/conversation_attribute_option" + conversation_attribute_decimal_type: + title: Conversation Attribute (Decimal) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - decimal + conversation_attribute_boolean_type: + title: Conversation Attribute (Boolean) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - boolean + conversation_attribute_datetime_type: + title: Conversation Attribute (Datetime) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: + type: string + enum: + - datetime + conversation_attribute_relationship_type: + title: Conversation Attribute (Relationship) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: type: string - example: - paid_subscriber: true - monthly_spend: 155.5 - team_mates: 9 - remote_created_at: - type: integer - description: The time the company was created by you. - example: 1394531169 - monthly_spend: - type: integer - description: How much revenue the company generates for your business. Note - that this will truncate floats. i.e. it only allow for whole integers, - 155.98 will be truncated to 155. Note that this has an upper limit of - 2**31-1 or 2147483647.. - example: 1000 - update_company_request: - type: object - title: Update Company Request Payload - description: You can update a Company - nullable: true - properties: - name: - type: string - description: The name of the Company - example: Intercom - plan: - type: string - description: The name of the plan you have associated with the company. - example: Enterprise - size: - type: integer - description: The number of employees in this company. - example: '100' - website: - type: string - description: The URL for this company's website. Please note that the value - specified here is not validated. Accepts any string. - example: https://www.example.com - industry: - type: string - description: The industry that this company operates in. - example: Manufacturing - custom_attributes: - type: object - description: A hash of key/value pairs containing any other data about the - company you want Intercom to store. - additionalProperties: + enum: + - relationship + reference: + type: object + description: Reference configuration for related objects. + properties: + type: + type: string + description: "The cardinality of the relationship: `one` or `many`." + enum: + - one + - many + example: many + object_type_id: + type: string + description: The ID of the related custom object type. + example: Test_Object + conversation_attribute_files_type: + title: Conversation Attribute (Files) + allOf: + - "$ref": "#/components/schemas/conversation_attribute_base" + - type: object + properties: + data_type: type: string - example: - paid_subscriber: true - monthly_spend: 155.5 - team_mates: 9 - monthly_spend: - type: integer - description: How much revenue the company generates for your business. Note - that this will truncate floats. i.e. it only allow for whole integers, - 155.98 will be truncated to 155. Note that this has an upper limit of - 2**31-1 or 2147483647.. - example: 1000 - create_or_update_custom_object_instance_request: - description: Payload to create or update a Custom Object instance + enum: + - files + conversation_attribute: + title: Conversation Attribute + x-tags: + - Conversations Attributes + description: "Conversation Attributes represent custom metadata fields for conversations. They support type-specific properties: strings (multiline), lists (options), and relationships (reference)." + discriminator: + propertyName: data_type + mapping: + string: "#/components/schemas/conversation_attribute_string_type" + integer: "#/components/schemas/conversation_attribute_integer_type" + list: "#/components/schemas/conversation_attribute_list_type" + decimal: "#/components/schemas/conversation_attribute_decimal_type" + boolean: "#/components/schemas/conversation_attribute_boolean_type" + datetime: "#/components/schemas/conversation_attribute_datetime_type" + relationship: "#/components/schemas/conversation_attribute_relationship_type" + files: "#/components/schemas/conversation_attribute_files_type" + oneOf: + - "$ref": "#/components/schemas/conversation_attribute_string_type" + - "$ref": "#/components/schemas/conversation_attribute_integer_type" + - "$ref": "#/components/schemas/conversation_attribute_list_type" + - "$ref": "#/components/schemas/conversation_attribute_decimal_type" + - "$ref": "#/components/schemas/conversation_attribute_boolean_type" + - "$ref": "#/components/schemas/conversation_attribute_datetime_type" + - "$ref": "#/components/schemas/conversation_attribute_relationship_type" + - "$ref": "#/components/schemas/conversation_attribute_files_type" + conversation_attribute_list: + title: Conversation Attribute List type: object - title: Create Or Update Custom Object Instance Request Payload + description: A list of all conversation attributes belonging to a workspace. properties: - external_id: + type: type: string - description: A unique identifier for the Custom Object instance in the external - system it originated from. - external_created_at: - type: integer - format: date-time - nullable: true - description: The time when the Custom Object instance was created in the - external system it originated from. - example: 1571672154 - external_updated_at: - type: integer - format: date-time - nullable: true - description: The time when the Custom Object instance was last updated in - the external system it originated from. - example: 1571672154 - custom_attributes: - type: object - nullable: true - description: The custom attributes which are set for the Custom Object instance. - additionalProperties: - type: string - create_or_update_tag_request: - description: You can create or update an existing tag. + description: The type of the object. + enum: + - list + example: list + data: + type: array + description: A list of conversation attributes. + items: + "$ref": "#/components/schemas/conversation_attribute" + conversation_attribute_option: + title: Conversation Attribute Option type: object - title: Create or Update Tag Request Payload + description: A single option on a list-type conversation attribute. properties: - name: - type: string - description: The name of the tag, which will be created if not found, or - the new name for the tag if this is an update request. Names are case - insensitive. - example: Independent id: type: string - description: The id of tag to updates. - example: '656452352' - required: - - name - create_phone_switch_request: - description: You can create an phone switch - type: object - title: Create Phone Switch Request Payload - nullable: true - properties: - phone: + description: The unique UUID identifier for this option. Use this value as `option_id` in the options management endpoints. + example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + label: type: string - description: Phone number in E.164 format, that will receive the SMS to - continue the conversation in the Messenger. - example: "+1 1234567890" - custom_attributes: - "$ref": "#/components/schemas/custom_attributes" - required: - - phone - create_ticket_reply_with_comment_request: - title: Create Ticket Reply Request Payload - oneOf: - - "$ref": "#/components/schemas/contact_reply_ticket_request" - - "$ref": "#/components/schemas/admin_reply_ticket_request" - create_ticket_request: - description: You can create a Ticket + description: The display label for the option. + example: High + archived: + type: boolean + description: Whether this option is archived (soft-deleted). + example: false + create_conversation_attribute_option_request: + title: Create Conversation Attribute Option Request type: object - title: Create Ticket Request Payload + description: Payload for adding a new option to a list-type conversation attribute. + required: + - label properties: - ticket_type_id: - type: string - description: The ID of the type of ticket you want to create - example: '1234' - contacts: - type: array - description: The list of contacts (users or leads) affected by this ticket. - Currently only one is allowed - items: - type: object - oneOf: - - title: ID - properties: - id: - type: string - description: The identifier for the contact as given by Intercom. - required: - - id - - title: External ID - properties: - external_id: - type: string - description: The external_id you have defined for the contact who - is being added as a participant. - required: - - external_id - - title: Email - properties: - email: - type: string - description: The email you have defined for the contact who is being - added as a participant. If a contact with this email does not - exist, one will be created. - required: - - email - example: - - id: '1234' - conversation_to_link_id: - type: string - description: "The ID of the conversation you want to link to the ticket. - Here are the valid ways of linking two tickets:\n - - conversation | back-office ticket\n - - customer tickets | non-shared back-office ticket\n - - conversation | tracker ticket\n - - customer ticket | tracker ticket" - example: '1234' - company_id: + label: type: string - description: The ID of the company that the ticket is associated with. The - unique identifier for the company which is given by Intercom - example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - created_at: - type: integer - description: The time the ticket was created. If not provided, the current - time will be used. - example: 1590000000 - ticket_attributes: - "$ref": "#/components/schemas/ticket_request_custom_attributes" - assignment: - type: object - properties: - admin_assignee_id: - type: string - description: The ID of the admin to which the ticket is assigned. - If not provided, the ticket will be unassigned. - example: '123' - team_assignee_id: - type: string - description: The ID of the team to which the ticket is assigned. - If not provided, the ticket will be unassigned. - example: '8' + description: The label for the new option. + example: High + update_conversation_attribute_option_request: + title: Update Conversation Attribute Option Request + type: object + description: Payload for renaming a list option on a conversation attribute. required: - - ticket_type_id - - contacts - create_ticket_type_attribute_request: - description: You can create a Ticket Type Attribute + - label + properties: + label: + type: string + description: The updated label for the option. + example: Renamed + create_conversation_attribute_request_base: + title: Create Conversation Attribute Request Base type: object - title: Create Ticket Type Attribute Request Payload + required: + - name + - data_type properties: name: type: string - description: The name of the ticket type attribute - example: Bug Priority + description: Name of the attribute. + example: api_test_attr description: type: string - description: The description of the attribute presented to the teammate - or contact - example: Priority level of the bug + description: Readable description of the attribute. + example: Created via API test data_type: type: string - description: The data type of the attribute + description: "The data type of the attribute. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files." enum: - string - - list - integer + - list - decimal - boolean - datetime + - relationship - files example: string - required_to_create: + required: type: boolean - description: Whether the attribute is required to be filled in when teammates - are creating the ticket in Inbox. - default: false + description: Whether this attribute is required. example: false - required_to_create_for_contacts: + visible_to_team_ids: + type: array + description: Team IDs that can see this attribute. Empty array means all teams. + items: + type: string + example: [] + create_conversation_attribute_string_request: + title: Create Conversation Attribute Request (String) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - string + multiline: + type: boolean + description: Whether this string attribute is multiline. + example: false + create_conversation_attribute_integer_request: + title: Create Conversation Attribute Request (Integer) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - integer + create_conversation_attribute_list_request: + title: Create Conversation Attribute Request (List) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - list + options: + type: array + description: Initial options for this list attribute. Each option must have a `label`. + items: + "$ref": "#/components/schemas/create_conversation_attribute_option_request" + create_conversation_attribute_decimal_request: + title: Create Conversation Attribute Request (Decimal) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - decimal + create_conversation_attribute_boolean_request: + title: Create Conversation Attribute Request (Boolean) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - boolean + create_conversation_attribute_datetime_request: + title: Create Conversation Attribute Request (Datetime) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - datetime + create_conversation_attribute_relationship_request: + title: Create Conversation Attribute Request (Relationship) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - relationship + reference: + type: object + description: Reference configuration for related objects. + required: + - type + properties: + type: + type: string + description: "The cardinality of the relationship: `one` or `many`." + enum: + - one + - many + object_type_id: + type: string + description: The ID of the related custom object type. + create_conversation_attribute_files_request: + title: Create Conversation Attribute Request (Files) + allOf: + - "$ref": "#/components/schemas/create_conversation_attribute_request_base" + - type: object + properties: + data_type: + type: string + enum: + - files + create_conversation_attribute_request: + title: Create Conversation Attribute Request + description: Payload for creating a new conversation attribute. + discriminator: + propertyName: data_type + mapping: + string: "#/components/schemas/create_conversation_attribute_string_request" + integer: "#/components/schemas/create_conversation_attribute_integer_request" + list: "#/components/schemas/create_conversation_attribute_list_request" + decimal: "#/components/schemas/create_conversation_attribute_decimal_request" + boolean: "#/components/schemas/create_conversation_attribute_boolean_request" + datetime: "#/components/schemas/create_conversation_attribute_datetime_request" + relationship: "#/components/schemas/create_conversation_attribute_relationship_request" + files: "#/components/schemas/create_conversation_attribute_files_request" + oneOf: + - "$ref": "#/components/schemas/create_conversation_attribute_string_request" + - "$ref": "#/components/schemas/create_conversation_attribute_integer_request" + - "$ref": "#/components/schemas/create_conversation_attribute_list_request" + - "$ref": "#/components/schemas/create_conversation_attribute_decimal_request" + - "$ref": "#/components/schemas/create_conversation_attribute_boolean_request" + - "$ref": "#/components/schemas/create_conversation_attribute_datetime_request" + - "$ref": "#/components/schemas/create_conversation_attribute_relationship_request" + - "$ref": "#/components/schemas/create_conversation_attribute_files_request" + update_conversation_attribute_request: + create_data_connector_request: + title: Create Data Connector Request + type: object + description: You can create a data connector by providing the required parameters. + properties: + name: + type: string + description: The name of the data connector. + example: Get Order Status + description: + type: string + description: A description of what this data connector does. + example: Looks up order status from an external service + http_method: + type: string + description: The HTTP method used when calling the external API. + enum: + - get + - post + - put + - delete + - patch + example: get + url: + type: string + description: The URL of the external API endpoint. Supports template variables like `{{order_id}}`. + example: "https://api.example.com/orders/{{order_id}}/status" + body: + type: string + description: The request body template. Supports template variables. + direct_fin_usage: type: boolean - description: Whether the attribute is required to be filled in when contacts - are creating the ticket in Messenger. - default: false + description: Whether the connector is used directly by Fin (true) or only in workflows (false). Defaults to false. example: false - visible_on_create: - type: boolean - description: Whether the attribute is visible to teammates when creating - a ticket in Inbox. - default: true - example: true - visible_to_contacts: - type: boolean - description: Whether the attribute is visible to contacts when creating - a ticket in Messenger. - default: true - example: true - multiline: + audiences: + type: array + description: The user types this connector is available for. + items: + type: string + enum: + - leads + - users + - visitors + example: + - leads + - visitors + headers: + type: array + description: HTTP headers to include in the request. + items: + type: object + properties: + name: + type: string + description: The header name. + example: Content-Type + value: + type: string + description: The header value. Supports template variables. + example: application/json + data_inputs: + type: array + description: Input parameters accepted by the connector. + items: + type: object + properties: + name: + type: string + description: The parameter name. + example: order_id + type: + type: string + description: The parameter type. + enum: + - string + - integer + - decimal + - boolean + example: string + description: + type: string + description: A description of the parameter. + example: The order ID to look up + required: + type: boolean + description: Whether the parameter is required. + example: true + default_value: + type: string + description: The default value for the parameter. Defaults to an empty string if omitted. + customer_authentication: type: boolean - description: Whether the attribute allows multiple lines of text (only applicable - to string attributes) + description: Whether the connector requires customer authentication before executing. Defaults to false. example: false - list_items: - type: string - description: A comma delimited list of items for the attribute value (only - applicable to list attributes) - example: Low Priority,Medium Priority,High Priority - allow_multiple_values: + bypass_authentication: type: boolean - description: Whether the attribute allows multiple files to be attached - to it (only applicable to file attributes) + description: Whether authentication is bypassed entirely (public endpoint). Defaults to false. example: false - required: - - name - - description - - data_type - create_ticket_type_request: - description: | - The request payload for creating a ticket type. - You can copy the `icon` property for your ticket type from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/) - type: object - title: Create Ticket Type Request Payload - nullable: true - properties: - name: - type: string - description: The name of the ticket type. - example: Bug - description: - type: string - description: The description of the ticket type. - example: Used for tracking bugs - category: - type: string - description: Category of the Ticket Type. - enum: - - Customer - - Back-office - - Tracker - example: Customer - icon: - type: string - description: The icon of the ticket type. - example: "\U0001F41E" - default: "\U0001F39F️" - is_internal: + validate_missing_attributes: type: boolean - description: Whether the tickets associated with this ticket type are intended - for internal use only or will be shared with customers. This is currently - a limited attribute. + description: Whether to validate that all required data inputs have values before executing. example: false - default: false + mock_response: + type: object + description: A sample JSON response from the external API. Auto-generates `response_fields` and sets `configuration_response_type` to `mock_response_type`. + example: + order: + id: 12345 + status: shipped + token_ids: + type: array + description: IDs of authentication tokens to attach to this data connector. + items: + type: string + example: + - '1234' + - '5678' required: - name - cursor_pages: - title: Cursor based pages + update_data_connector_request: + title: Update Data Connector Request type: object description: | - Cursor-based pagination is a technique used in the Intercom API to navigate through large amounts of data. - A "cursor" or pointer is used to keep track of the current position in the result set, allowing the API to return the data in small chunks or "pages" as needed. - nullable: true - properties: - type: - type: string - description: the type of object `pages`. - example: pages - enum: - - pages - page: - type: integer - description: The current page - example: 1 - next: - "$ref": "#/components/schemas/starting_after_paging" - per_page: - type: integer - description: Number of results per page - example: 2 - total_pages: - type: integer - description: Total number of pages - example: 13 - call: - title: Call - type: object - x-tags: - - Calls - description: Represents a phone call in Intercom + Update an existing data connector. All fields are optional — only provided fields will be updated. Set `state` to `live` or `draft` to change the connector's state. properties: - type: - type: string - description: String representing the object's type. Always has the value `call`. - example: call - id: - type: string - description: The id of the call. - example: "123" - conversation_id: - type: string - nullable: true - description: The id of the conversation associated with the call, if any. - example: "456" - admin_id: + name: type: string - nullable: true - description: The id of the admin associated with the call, if any. - example: "789" - contact_id: + description: The name of the data connector. + example: Updated Connector Name + description: type: string - nullable: true - description: The id of the contact associated with the call, if any. - example: "6762f0dd1bb69f9f2193bb83" + description: A description of what this data connector does. + example: Updated description state: type: string - description: The current state of the call. - example: completed - initiated_at: - "$ref": "#/components/schemas/datetime" - answered_at: - "$ref": "#/components/schemas/datetime" - ended_at: - "$ref": "#/components/schemas/datetime" - created_at: - "$ref": "#/components/schemas/datetime" - updated_at: - "$ref": "#/components/schemas/datetime" - recording_url: - type: string - format: uri - nullable: true - description: API URL to download or redirect to the call recording if available. - example: "https://api.intercom.io/calls/123/recording" - transcription_url: - type: string - format: uri - nullable: true - description: API URL to download or redirect to the call transcript if available. - example: "https://api.intercom.io/calls/123/transcript" - call_type: - type: string - description: The type of call. - example: phone - direction: - type: string - description: The direction of the call. - example: outbound - ended_reason: - type: string - nullable: true - description: The reason for the call end, if applicable. - example: completed - phone: - type: string - nullable: true - description: The phone number involved in the call, in E.164 format. - example: "+15551234567" - fin_recording_url: - type: string - format: uri - nullable: true - description: API URL to the AI Agent (Fin) call recording if available. - fin_transcription_url: - type: string - format: uri - nullable: true - description: API URL to the AI Agent (Fin) call transcript if available. - call_list: - title: Calls - type: object - description: A paginated list of calls. - properties: - type: - type: string - description: String representing the object's type. Always has the value `list`. - example: list - data: - type: array - description: A list of calls. - items: - "$ref": "#/components/schemas/call" - total_count: - type: integer - description: Total number of items available. - example: 0 - pages: - "$ref": "#/components/schemas/cursor_pages" - custom_attributes: - title: Custom Attributes - type: object - description: 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. System-defined attributes - such as "CX Score rating" and "CX Score explanation" may also be included. - additionalProperties: - anyOf: - - type: string - - type: integer - - $ref: "#/components/schemas/datetime" - - "$ref": "#/components/schemas/custom_object_instance_list" - example: - paid_subscriber: true - monthly_spend: 155.5 - team_mates: 9 - start_date_iso8601: "2023-03-04T09:46:14Z" - end_date_timestamp: 1677923174 - CX Score rating: 4 - CX Score explanation: The conversation was resolved quickly and the customer - expressed satisfaction with the outcome. - custom_object_instance: - title: Custom Object Instance - type: object - x-tags: - - Custom Object Instances - nullable: true - description: A Custom Object Instance represents an instance of a custom object - type. This allows you to create and set custom attributes to store data about - your customers that is not already captured by Intercom. The parent object - includes recommended default attributes and you can add your own custom attributes. - properties: - id: + description: The desired state of the connector. + enum: + - draft + - live + http_method: type: string - description: The Intercom defined id representing the custom object instance. - example: 16032025 - external_id: + description: The HTTP method used by the data connector. + enum: + - get + - post + - put + - delete + - patch + example: post + url: type: string - description: The id you have defined for the custom object instance. - example: 0001d1c1e65a7a19e9f59ae2 - external_created_at: - type: integer - format: date-time - nullable: true - description: The time when the Custom Object instance was created in the - external system it originated from. - example: 1571672154 - external_updated_at: - type: integer - format: date-time - nullable: true - description: The time when the Custom Object instance was last updated in - the external system it originated from. - example: 1571672154 - created_at: - type: integer - format: date-time - description: The time the attribute was created as a UTC Unix timestamp - example: 1671028894 - updated_at: - type: integer - format: date-time - description: The time the attribute was last updated as a UTC Unix timestamp - example: 1671028894 - type: + description: The URL of the external API endpoint. Supports template variables like `{{order_id}}`. + example: "https://api.example.com/orders/{{order_id}}/status" + body: type: string - description: The identifier of the custom object type that defines the structure - of the custom object instance. - example: Order - custom_attributes: + description: The request body template. Supports template variables. + direct_fin_usage: + type: boolean + description: Whether this connector is used directly by Fin. + example: false + audiences: + type: array + description: The audience types this connector targets. + items: + type: string + enum: + - leads + - users + - visitors + example: + - leads + - users + headers: + type: array + description: HTTP headers to include in the request. + items: + type: object + properties: + name: + type: string + description: The header name. + example: Content-Type + value: + type: string + description: The header value. Supports template variables. + example: application/json + data_inputs: + type: array + description: The input parameters accepted by this data connector. Replaces all existing inputs. + items: + type: object + properties: + name: + type: string + description: The name of the input parameter. + example: order_id + type: + type: string + description: The data type of the input. + enum: + - string + - integer + - decimal + - boolean + example: string + description: + type: string + description: A description of the input parameter. Required for each input. + example: The order ID to look up + required: + type: boolean + description: Whether this input is required. + example: true + default_value: + type: string + description: The default value for this input, if any. + customer_authentication: + type: boolean + description: Whether OTP authentication is enabled for this connector. + example: false + bypass_authentication: + type: boolean + description: Whether authentication is bypassed for this connector. + example: false + validate_missing_attributes: + type: boolean + description: Whether to validate missing attributes before execution. + example: true + mock_response: type: object - description: The custom attributes you have set on the custom object instance. - additionalProperties: + description: A sample JSON response from the external API. Auto-generates `response_fields` and sets `configuration_response_type` to `mock_response_type`. + example: + order: + id: 12345 + status: shipped + token_ids: + type: array + description: IDs of authentication tokens to attach to this data connector. An empty array removes all tokens. + items: type: string - custom_object_instance_deleted: - title: Custom Object Instance Deleted + example: + - '1234' + - '5678' + data_connector: + title: Data Connector type: object - description: deleted custom object instance object + x-tags: + - Data Connectors + description: | + A data connector allows you to make HTTP requests to external APIs from Intercom workflows and AI agents. properties: - object: + type: type: string - description: The unique identifier of the Custom Object type that defines - the structure of the Custom Object instance. - example: Order + description: The type of object - `data_connector`. + enum: + - data_connector + example: data_connector id: type: string - description: The Intercom defined id representing the Custom Object instance. - example: '123' - deleted: + description: The unique identifier for the data connector. + example: '12345' + name: + type: string + description: The name of the data connector. + example: Order Status Service + description: + type: string + nullable: true + description: A description of what this data connector does. + example: Fetches order status from external fulfillment API + state: + type: string + description: The current state of the data connector. + enum: + - draft + - live + example: live + http_method: + type: string + description: The HTTP method used by the data connector. + enum: + - get + - post + - put + - delete + - patch + example: post + direct_fin_usage: type: boolean - description: Whether the Custom Object instance is deleted or not. - example: true - custom_object_instance_list: - title: Custom Object Instances - type: object - description: The list of associated custom object instances for a given reference - attribute on the parent object. - properties: - type: + description: Whether this data connector is assigned to Fin for direct usage. + example: false + created_by_admin_id: type: string - example: order.list - instances: - type: array - description: The list of associated custom object instances for a given - reference attribute on the parent object. - items: - "$ref": "#/components/schemas/custom_object_instance" - customer_request: - type: object - nullable: true - oneOf: - - title: Intercom User ID - properties: - intercom_user_id: - type: string - description: The identifier for the contact as given by Intercom. - example: 6329bd9ffe4e2e91dac76188 - required: - - intercom_user_id - - title: User ID - properties: - user_id: - type: string - description: The external_id you have defined for the contact who is being - added as a participant. - example: 2e91dac761886329bd9ffe4e - required: - - user_id - - title: Email - properties: - email: - type: string - description: The email you have defined for the contact who is being added - as a participant. - example: sam.sung@example.com - required: - - email - data_attribute: - title: Data Attribute + description: The ID of the admin who created this data connector. + example: '12345' + updated_by_admin_id: + type: string + description: The ID of the admin who last updated this data connector. + example: '12345' + created_at: + type: string + format: date-time + description: The time the data connector was created. + example: '2025-11-15T09:30:00Z' + updated_at: + type: string + format: date-time + description: The time the data connector was last updated. + example: '2026-01-20T14:22:15Z' + execution_results_url: + type: string + description: The URL path to fetch execution results for this connector. + example: "/data_connectors/12345/execution_results" + data_connector_detail: + title: Data Connector (Detail) type: object x-tags: - - Data Attributes - description: Data Attributes are metadata used to describe your contact and - company models. These include standard and custom attributes. By using the - data attributes endpoint, you can get the global list of attributes for your - workspace, as well as create and archive custom attributes. + - Data Connectors + description: | + Full detail view of a data connector, returned by `GET /data_connectors/{id}`. + Includes configuration, data inputs, response fields, and object mappings. properties: type: type: string - description: Value is `data_attribute`. + description: The type of object - `data_connector`. enum: - - data_attribute - example: data_attribute + - data_connector + example: data_connector id: - type: integer - description: The unique identifier for the data attribute which is given - by Intercom. Only available for custom attributes. - example: 12878 - model: type: string - description: Value is `contact` for user/lead attributes and `company` for - company attributes. - enum: - - contact - - company - example: contact + description: The unique identifier for the data connector. + example: '12345' name: type: string - description: Name of the attribute. - example: paid_subscriber - full_name: + description: The name of the data connector. + example: Order Status Service + description: type: string - description: Full name of the attribute. Should match the name unless it's - a nested attribute. We can split full_name on `.` to access nested user - object values. - example: custom_attributes.paid_subscriber - label: + nullable: true + description: A description of what this data connector does. + example: Fetches order status from external fulfillment API + state: type: string - description: Readable name of the attribute (i.e. name you see in the UI) - example: Paid Subscriber - description: + description: The current state of the data connector. + enum: + - draft + - live + example: live + url: type: string - description: Readable description of the attribute. - example: Whether the user is a paid subscriber. - data_type: + nullable: true + description: The URL of the external API endpoint. Supports template variables like `{{order_id}}`. + example: "https://api.example.com/orders/{{order_id}}/status" + body: type: string - description: The data type of the attribute. + description: The request body template. Supports template variables. + example: '{"text": "{{message}}"}' + headers: + type: array + description: HTTP headers for the request. Header values are always redacted as `"****"` in responses. + items: + type: object + properties: + name: + type: string + description: The header name. + example: Authorization + value: + type: string + description: Always `"****"` in responses. + example: "****" + example: + - name: Authorization + value: "****" + http_method: + type: string + description: The HTTP method used by the data connector. enum: - - string - - integer - - float - - boolean - - date - example: boolean - options: + - get + - post + - put + - delete + - patch + example: post + direct_fin_usage: + type: boolean + description: Whether this connector is used directly by Fin. + example: false + audiences: type: array - description: List of predefined options for attribute value. + description: The audience types this connector targets. items: type: string + enum: + - users + - leads + - visitors example: - - 'true' - - 'false' - api_writable: - type: boolean - description: Can this attribute be updated through API - example: true - messenger_writable: + - users + - leads + execution_type: + type: string + nullable: true + description: How the connector executes. + enum: + - server_side + - client_side + example: server_side + configuration_response_type: + type: string + nullable: true + description: The expected response format from the connector. + enum: + - test_response_type + - mock_response_type + example: test_response_type + data_transformation_type: + type: string + nullable: true + description: The type of data transformation applied to the response. + enum: + - full_access + - redacted_access + - code_block_transformation + client_function_name: + type: string + nullable: true + description: The name of the client-side function, if applicable. + client_function_timeout_ms: + type: integer + nullable: true + description: Timeout in milliseconds for the client function, if applicable. + data_inputs: + type: array + description: The input parameters accepted by this data connector. + items: + type: object + properties: + name: + type: string + description: The name of the input parameter. + example: conversation_id + type: + type: string + description: The data type of the input. + enum: + - string + - integer + - decimal + - boolean + example: string + description: + type: string + nullable: true + description: A description of the input parameter. + required: + type: boolean + description: Whether this input is required. + example: true + default_value: + type: string + description: The default value for this input, if any. + response_fields: + type: array + description: The fields returned in the connector response. + items: + type: object + properties: + path: + type: string + description: The JSON path of the response field. + example: status + type: + type: string + description: The data type of the response field. + enum: + - unknown + - string + - integer + - decimal + - datetime + - boolean + example: string + example_value: + nullable: true + description: An example value for this field. + example: ok + redacted: + type: boolean + description: Whether this field is redacted in logs. + example: false + object_mappings: + type: array + description: Mappings from connector response objects to Intercom objects. + items: + type: object + properties: + response_object_path: + type: string + intercom_object_type: + type: string + enum: + - conversation + - user + attribute_mappings: + type: array + items: + type: object + properties: + response_attribute_path: + type: string + intercom_attribute_identifier: + type: string + mapping_type: + type: string + enum: + - primitive_mapping + - context_mapping + reference_mappings: + type: array + items: + type: object + properties: + intercom_object_type: + type: string + enum: + - conversation + - user + intercom_attribute_identifier: + type: string + token_ids: + type: array + description: IDs of authentication tokens associated with this connector. + items: + type: string + example: [] + customer_authentication: type: boolean - description: Can this attribute be updated by the Messenger + description: Whether OTP authentication is enabled for this connector. example: false - ui_writable: - type: boolean - description: Can this attribute be updated in the UI - example: true - custom: - type: boolean - description: Set to true if this is a CDA - example: true - archived: + bypass_authentication: type: boolean - description: Is this attribute archived. (Only applicable to CDAs) + description: Whether authentication is bypassed for this connector. example: false + validate_missing_attributes: + type: boolean + nullable: true + description: Whether to validate missing attributes before execution. + created_by_admin_id: + type: string + nullable: true + description: The ID of the admin who created this connector. + example: '456' + updated_by_admin_id: + type: string + nullable: true + description: The ID of the admin who last updated this connector. + example: '456' created_at: - type: integer + type: string format: date-time - description: The time the attribute was created as a UTC Unix timestamp - example: 1671028894 + description: The time the data connector was created. + example: '2025-11-15T09:30:00Z' updated_at: - type: integer - format: date-time - description: The time the attribute was last updated as a UTC Unix timestamp - example: 1671028894 - admin_id: - type: string - description: Teammate who created the attribute. Only applicable to CDAs - example: '5712945' - data_attribute_list: - title: Data Attribute List - type: object - description: A list of all data attributes belonging to a workspace for contacts - or companies. - properties: - type: type: string - description: The type of the object - enum: - - list - example: list - data: - type: array - description: A list of data attributes - items: - "$ref": "#/components/schemas/data_attribute" - conversation_attribute_base: - title: Conversation Attribute Base + format: date-time + description: The time the data connector was last updated. + example: '2026-01-20T14:22:15Z' + execution_results_url: + type: string + description: The URL path to fetch execution results for this connector. + example: "/data_connectors/12345/execution_results" + data_connector_execution_result: + title: Data Connector Execution Result type: object + x-tags: + - Data Connectors + description: An execution result from a data connector HTTP request. properties: type: type: string - description: "Value is `conversation_attribute`." + description: The type of object - `data_connector.execution`. enum: - - conversation_attribute - example: conversation_attribute + - data_connector.execution + example: data_connector.execution id: + type: string + description: The unique identifier for the execution result. + example: '99001' + data_connector_id: + type: string + description: The unique identifier of the data connector that produced this result. + example: '12345' + success: + type: boolean + description: Whether the execution was successful. + example: true + http_status: type: integer - description: The unique identifier for the conversation attribute. - example: 8 - name: + nullable: true + description: The HTTP status code returned by the external API. + example: 200 + http_method: type: string - description: Name of the attribute. - example: api_test_attr - description: + description: The HTTP method used for the request. + enum: + - get + - post + - put + - delete + - patch + example: post + error_type: type: string - description: Readable description of the attribute. - example: Created via API test - data_type: + nullable: true + description: The type of error that occurred, if any. + enum: + - request_configuration_error + - faraday_error + - 3rd_party_error + - response_mapping_error + - token_refresh_error + - fin_action_response_formatting_error + - fin_action_identity_verification_error + - email_verification_error + - non_fin_standalone_action_identity_verification_error + - request_validation_error + - client_side_action_error + example: 3rd_party_error + error_message: type: string - description: "The data type of the attribute. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files." + nullable: true + description: A human-readable error message. Query parameters, userinfo, and fragments in URLs are redacted. + example: Connection refused + execution_time_ms: + type: integer + nullable: true + description: The execution time in milliseconds. + example: 245 + source_type: + type: string + nullable: true + description: The type of source that triggered this execution. enum: - - string - - integer - - list - - decimal - - boolean - - datetime - - relationship - - files - example: string - required: - type: boolean - description: Whether this attribute is required. - example: false - visible_to_team_ids: - type: array - description: Team IDs that can see this attribute. Empty array means all teams. - items: - type: string - example: [] - archived: - type: boolean - description: Whether this attribute is archived. - example: false + - custom_bot + - inbound_custom_bot + - button_custom_bot + - answer + - workflow + - saved_reply + - triggerable_custom_bot + - inbox + - fin + example: workflow + source_id: + type: string + nullable: true + description: The identifier of the source that triggered this execution. + example: '5001' + conversation_id: + type: string + nullable: true + description: The conversation associated with this execution, if any. + example: '8001' created_at: - type: integer - format: date-time - description: The time the attribute was created as a UTC Unix timestamp. - example: 1778239701 - updated_at: - type: integer + type: string format: date-time - description: The time the attribute was last updated as a UTC Unix timestamp. - example: 1778239701 - admin_id: + description: The time the execution occurred. + example: '2026-02-10T18:15:32Z' + request_url: type: string - description: ID of the admin who created the attribute. - example: '16' - conversation_attribute_string_type: - title: Conversation Attribute (String) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - string - multiline: - type: boolean - description: Whether this string attribute is multiline. - example: false - conversation_attribute_integer_type: - title: Conversation Attribute (Integer) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - integer - conversation_attribute_list_type: - title: Conversation Attribute (List) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - list - options: - type: array - description: Predefined options for this attribute. Each option has a unique UUID used to identify it in the options management endpoints. - items: - "$ref": "#/components/schemas/conversation_attribute_option" - conversation_attribute_decimal_type: - title: Conversation Attribute (Decimal) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - decimal - conversation_attribute_boolean_type: - title: Conversation Attribute (Boolean) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - boolean - conversation_attribute_datetime_type: - title: Conversation Attribute (Datetime) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - datetime - conversation_attribute_relationship_type: - title: Conversation Attribute (Relationship) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - relationship - reference: - type: object - description: Reference configuration for related objects. - properties: - type: - type: string - description: "The cardinality of the relationship: `one` or `many`." - enum: - - one - - many - example: many - object_type_id: - type: string - description: The ID of the related custom object type. - example: Test_Object - conversation_attribute_files_type: - title: Conversation Attribute (Files) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - files - conversation_attribute: - title: Conversation Attribute - x-tags: - - Conversations Attributes - description: "Conversation Attributes represent custom metadata fields for conversations. They support type-specific properties: strings (multiline), lists (options), and relationships (reference)." - discriminator: - propertyName: data_type - mapping: - string: "#/components/schemas/conversation_attribute_string_type" - integer: "#/components/schemas/conversation_attribute_integer_type" - list: "#/components/schemas/conversation_attribute_list_type" - decimal: "#/components/schemas/conversation_attribute_decimal_type" - boolean: "#/components/schemas/conversation_attribute_boolean_type" - datetime: "#/components/schemas/conversation_attribute_datetime_type" - relationship: "#/components/schemas/conversation_attribute_relationship_type" - files: "#/components/schemas/conversation_attribute_files_type" - oneOf: - - "$ref": "#/components/schemas/conversation_attribute_string_type" - - "$ref": "#/components/schemas/conversation_attribute_integer_type" - - "$ref": "#/components/schemas/conversation_attribute_list_type" - - "$ref": "#/components/schemas/conversation_attribute_decimal_type" - - "$ref": "#/components/schemas/conversation_attribute_boolean_type" - - "$ref": "#/components/schemas/conversation_attribute_datetime_type" - - "$ref": "#/components/schemas/conversation_attribute_relationship_type" - - "$ref": "#/components/schemas/conversation_attribute_files_type" - conversation_attribute_list: - title: Conversation Attribute List + nullable: true + description: The request URL. Query parameters, userinfo, and fragments are redacted. + example: https://api.example.com/webhook + request_body: + type: string + nullable: true + description: The request body sent to the external API. + example: '{"message": "hello"}' + response_body: + type: string + nullable: true + description: The response body from the external API. + example: '{"status": "ok"}' + raw_response_body: + type: string + nullable: true + description: The raw (unmapped) response body. + example: '{"status": "ok"}' + data_connector_execution_result_list: + title: Data Connector Execution Result List type: object - description: A list of all conversation attributes belonging to a workspace. + description: A paginated list of data connector execution results. properties: type: type: string - description: The type of the object. + description: The type of object - `list`. enum: - list example: list data: type: array - description: A list of conversation attributes. + description: An array of execution result objects. items: - "$ref": "#/components/schemas/conversation_attribute" - conversation_attribute_option: - title: Conversation Attribute Option - type: object - description: A single option on a list-type conversation attribute. - properties: - id: - type: string - description: The unique UUID identifier for this option. Use this value as `option_id` in the options management endpoints. - example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - label: - type: string - description: The display label for the option. - example: High - archived: - type: boolean - description: Whether this option is archived (soft-deleted). - example: false - create_conversation_attribute_option_request: - title: Create Conversation Attribute Option Request - type: object - description: Payload for adding a new option to a list-type conversation attribute. - required: - - label - properties: - label: - type: string - description: The label for the new option. - example: High - update_conversation_attribute_option_request: - title: Update Conversation Attribute Option Request + "$ref": "#/components/schemas/data_connector_execution_result" + pages: + type: object + description: Pagination information. + properties: + type: + type: string + example: pages + enum: + - pages + per_page: + type: integer + description: The number of results per page. + example: 10 + next: + type: object + nullable: true + description: Cursor for the next page of results. + properties: + starting_after: + type: string + description: The cursor value to use for the next page. + example: WzE3MDc1OTQ3MTUuMCw5OTAwMF0= + data_connector_list: + title: Data Connector List type: object - description: Payload for renaming a list option on a conversation attribute. - required: - - label + description: A paginated list of data connectors. properties: - label: + type: type: string - description: The updated label for the option. - example: Renamed - create_conversation_attribute_request_base: - title: Create Conversation Attribute Request Base + description: The type of object - `list`. + enum: + - list + example: list + data: + type: array + description: An array of data connector objects. + items: + "$ref": "#/components/schemas/data_connector" + pages: + type: object + description: Pagination information. + properties: + type: + type: string + example: pages + enum: + - pages + per_page: + type: integer + description: The number of results per page. + example: 20 + next: + type: object + nullable: true + description: Cursor for the next page of results. + properties: + starting_after: + type: string + description: The cursor value to use for the next page. + example: WzE3MDc1OTQ3MTUuMCwxMjM0NV0= + deleted_data_connector_object: + title: Deleted Data Connector Object type: object - required: - - name - - data_type + description: Response returned when a data connector is deleted. properties: - name: - type: string - description: Name of the attribute. - example: api_test_attr - description: + id: type: string - description: Readable description of the attribute. - example: Created via API test - data_type: + description: The unique identifier for the data connector. + example: '125' + object: type: string - description: "The data type of the attribute. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files." + description: The type of object which was deleted. enum: - - string - - integer - - list - - decimal - - boolean - - datetime - - relationship - - files - example: string - required: + - data_connector + example: data_connector + deleted: type: boolean - description: Whether this attribute is required. - example: false - visible_to_team_ids: - type: array - description: Team IDs that can see this attribute. Empty array means all teams. - items: - type: string - example: [] - create_conversation_attribute_string_request: - title: Create Conversation Attribute Request (String) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - string - multiline: - type: boolean - description: Whether this string attribute is multiline. - example: false - create_conversation_attribute_integer_request: - title: Create Conversation Attribute Request (Integer) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - integer - create_conversation_attribute_list_request: - title: Create Conversation Attribute Request (List) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - list - options: - type: array - description: Initial options for this list attribute. Each option must have a `label`. - items: - "$ref": "#/components/schemas/create_conversation_attribute_option_request" - create_conversation_attribute_decimal_request: - title: Create Conversation Attribute Request (Decimal) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - decimal - create_conversation_attribute_boolean_request: - title: Create Conversation Attribute Request (Boolean) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - boolean - create_conversation_attribute_datetime_request: - title: Create Conversation Attribute Request (Datetime) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - datetime - create_conversation_attribute_relationship_request: - title: Create Conversation Attribute Request (Relationship) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - relationship - reference: - type: object - description: Reference configuration for related objects. - required: - - type - properties: - type: - type: string - description: "The cardinality of the relationship: `one` or `many`." - enum: - - one - - many - object_type_id: - type: string - description: The ID of the related custom object type. - create_conversation_attribute_files_request: - title: Create Conversation Attribute Request (Files) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - files - create_conversation_attribute_request: - title: Create Conversation Attribute Request - description: Payload for creating a new conversation attribute. - discriminator: - propertyName: data_type - mapping: - string: "#/components/schemas/create_conversation_attribute_string_request" - integer: "#/components/schemas/create_conversation_attribute_integer_request" - list: "#/components/schemas/create_conversation_attribute_list_request" - decimal: "#/components/schemas/create_conversation_attribute_decimal_request" - boolean: "#/components/schemas/create_conversation_attribute_boolean_request" - datetime: "#/components/schemas/create_conversation_attribute_datetime_request" - relationship: "#/components/schemas/create_conversation_attribute_relationship_request" - files: "#/components/schemas/create_conversation_attribute_files_request" - oneOf: - - "$ref": "#/components/schemas/create_conversation_attribute_string_request" - - "$ref": "#/components/schemas/create_conversation_attribute_integer_request" - - "$ref": "#/components/schemas/create_conversation_attribute_list_request" - - "$ref": "#/components/schemas/create_conversation_attribute_decimal_request" - - "$ref": "#/components/schemas/create_conversation_attribute_boolean_request" - - "$ref": "#/components/schemas/create_conversation_attribute_datetime_request" - - "$ref": "#/components/schemas/create_conversation_attribute_relationship_request" - - "$ref": "#/components/schemas/create_conversation_attribute_files_request" - update_conversation_attribute_request: + description: Whether the data connector was deleted successfully. + example: true title: Update Conversation Attribute Request type: object description: Payload for updating a conversation attribute. @@ -25155,6 +29160,37 @@ components: object. example: en untag_company_request: + update_audience_request: + title: Update Audience Request + type: object + description: The request payload for updating an audience. All fields are optional + — only provided fields will be updated. + properties: + name: + type: string + description: The name of the audience. + example: Enterprise Accounts + predicates: + type: array + description: The predicates that define which contacts belong to the audience. + items: + "$ref": "#/components/schemas/predicate" + example: + - attribute: custom_attributes.plan + type: string + comparison: eq + value: enterprise + role_predicates: + type: array + description: Role-based predicates that further filter audience membership by + contact role. + items: + "$ref": "#/components/schemas/predicate" + example: + - attribute: role + type: role + comparison: eq + value: user description: You can tag a single company or a list of companies. type: object title: Untag Company Request Payload From d49349104b15a85246ffe2fe8a09be40750c81af Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 10:26:07 +0100 Subject: [PATCH 05/22] Graduate conversation non-breaking changes into v2.16 OpenAPI spec - Deleted conversations list, merge conversation, side conversations endpoints - Sales agent, channel, external references, QA evaluations on conversations - brand_id on conversation create; reply_to on conversation source - retain_metrics parameter on conversation delete - Conversation source author reshape; display_as plaintext behavior Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 922 +++++++++++++++++++++++-- 1 file changed, 880 insertions(+), 42 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index ce041c5d..a9425ec1 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -8427,7 +8427,7 @@ paths: - name: display_as in: query required: false - description: Set to plaintext to retrieve conversation messages in plain text. + description: Set to plaintext to retrieve conversation messages in plain text. This affects both the body and subject fields. Inline links are rendered as `label (url)`, preserving the link URL alongside the visible text. example: plaintext schema: type: string @@ -8681,7 +8681,7 @@ paths: - name: display_as in: query required: false - description: Set to plaintext to retrieve conversation messages in plain text. + description: Set to plaintext to retrieve conversation messages in plain text. This affects both the body and subject fields. Inline links are rendered as `label (url)`, preserving the link URL alongside the visible text. example: plaintext schema: type: string @@ -8965,6 +8965,15 @@ paths: required: true schema: type: integer + - name: retain_metrics + in: query + required: false + description: If true (default), deletes the conversation while retaining reporting + data. If false, deletes the conversation and all associated reporting data. + Setting to false requires the `delete_conversations_and_metrics` OAuth scope. + example: true + schema: + type: boolean tags: - Conversations operationId: deleteConversation @@ -8973,7 +8982,17 @@ paths: Deleting a conversation is permanent and cannot be reversed. {% /admonition %} - Deleting a conversation permanently removes it from the inbox. All sensitive data is deleted, including admin and user replies, conversation attributes, uploads, and related content. The conversation will still appear in reporting, though some data may be incomplete due to the deletion. + You can delete a single conversation. The behavior depends on the `retain_metrics` parameter: + + - **With `retain_metrics=true` (default)**: Deletes the conversation while retaining reporting data. The conversation will still appear in reporting, though some data may be incomplete due to the deletion. + + - **With `retain_metrics=false`**: Deletes the conversation and all associated reporting data. The conversation will be completely removed from both the inbox and all reporting. + + {% admonition type="info" name="Required scope for retain_metrics=false" %} + Using `retain_metrics=false` requires the `delete_conversations_and_metrics` OAuth scope. + {% /admonition %} + + For more info, see [this help center article](https://www.intercom.com/help/en/articles/13885146-deleting-a-conversation). responses: '200': description: successful @@ -9023,6 +9042,22 @@ paths: in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: include_monitors + in: query + required: false + description: If set to true, the response will include a `monitor_evaluations` array on each conversation with any QA monitor results that flagged it. + example: true + schema: + type: boolean + default: false + - name: include_scorecards + in: query + required: false + description: If set to true, the response will include a `scorecards` array on each conversation with any QA scorecard results. + example: true + schema: + type: boolean + default: false tags: - Conversations operationId: searchConversations @@ -10379,6 +10414,89 @@ paths: application/json: schema: "$ref": "#/components/schemas/error" + "/conversations/{id}/side_conversations": + get: + summary: List side conversations + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The identifier for the conversation as given by Intercom. + example: '123' + schema: + type: string + - name: page + in: query + required: false + description: The page number of results to return (starting from 1). + schema: + type: integer + default: 1 + - name: per_page + in: query + required: false + description: The number of side conversations to return per page (max 50). + schema: + type: integer + default: 25 + maximum: 50 + tags: + - Conversations + operationId: listSideConversations + description: | + List side conversations for a given conversation. Side conversations are internal threads created by teammates from within a conversation. + + Each side conversation includes its conversation parts (messages). Results are paginated. + + Requires the `read_conversations` OAuth scope. + responses: + '200': + description: Successful response + content: + application/json: + schema: + "$ref": "#/components/schemas/side_conversation_list" + examples: + Successful response: + value: + type: side_conversation.list + side_conversations: + - side_conversation_id: '456' + conversation_parts: + - type: conversation_part + id: '789' + part_type: comment + body: "

Internal note about this issue

" + author: + type: admin + id: '123' + name: Jane Example + email: jane@example.com + created_at: 1663597223 + updated_at: 1663597223 + total_count: 1 + total_count: 1 + pages: + type: pages + page: 1 + per_page: 25 + total_pages: 1 + '401': + description: Unauthorized + content: + application/json: + schema: + "$ref": "#/components/schemas/error" + '404': + description: Conversation not found + content: + application/json: + schema: + "$ref": "#/components/schemas/error" "/conversations/redact": post: summary: Redact a conversation part @@ -10530,6 +10648,199 @@ paths: type: conversation_part conversation_id: really_123_doesnt_exist conversation_part_id: really_123_doesnt_exist + "/conversations/{id}/merge": + post: + summary: Merge a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The identifier for the secondary (source) conversation to merge away. + example: '123' + schema: + type: string + tags: + - Conversations + operationId: mergeConversation + description: | + Merge a secondary (source) conversation into a primary (target) conversation. + The secondary conversation is closed and linked to the primary, which + becomes the surviving thread. Returns the primary conversation on success. + + Requires `write_conversations` OAuth scope. When the secondary is a ticket, + `write_tickets` scope is also required. + responses: + '200': + description: Conversation merged + content: + application/json: + examples: + Conversation merged: + value: + type: conversation + id: '456' + created_at: 1734537559 + updated_at: 1734537561 + waiting_since: 1734537561 + snoozed_until: + source: + type: conversation + id: '403918349' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267694' + name: Ciaran212 Lee + email: admin212@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1571bb69f9f2193bbbb + external_id: '70' + first_contact_reply: + created_at: 1734537561 + type: conversation + url: + admin_assignee_id: + team_assignee_id: + open: true + state: open + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_topics: + ai_agent: + ai_agent_participated: false + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '133' + part_type: merged_primary_conversation + body: + created_at: 1734537561 + updated_at: 1734537561 + notified_at: 1734537561 + assigned_to: + author: + id: '991267694' + type: bot + name: Operator + email: operator@intercom.io + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + schema: + "$ref": "#/components/schemas/conversation" + '400': + description: Bad request + content: + application/json: + examples: + Bad request: + value: + type: error.list + request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 + errors: + - code: parameter_invalid + message: merge_into_conversation_id must be a valid integer conversation ID + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: a3e5b8e2-1234-5678-9abc-def012345678 + errors: + - code: token_unauthorized + message: Not authorized to access resource + schema: + "$ref": "#/components/schemas/error" + '403': + description: Forbidden + content: + application/json: + examples: + Forbidden: + value: + type: error.list + request_id: b4f6c9d3-2345-6789-abcd-ef0123456789 + errors: + - code: forbidden + message: Forbidden request + schema: + "$ref": "#/components/schemas/error" + '422': + description: Merge failed + content: + application/json: + examples: + Primary not found: + value: + type: error.list + request_id: c5a7d0e4-3456-789a-bcde-f01234567890 + errors: + - code: merge_failed + message: Primary conversation not found + Already merged: + value: + type: error.list + request_id: d6b8e1f5-4567-890b-cdef-012345678901 + errors: + - code: merge_failed + message: Secondary conversation has already been merged + Self-merge: + value: + type: error.list + request_id: e7c9f2a6-5678-901c-def0-123456789012 + errors: + - code: merge_failed + message: Cannot merge a conversation into itself + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/merge_conversations_request" + examples: + merge_a_conversation: + summary: Merge a conversation + value: + merge_into_conversation_id: 456 "/conversations/{conversation_id}/convert": post: summary: Convert a conversation to a ticket @@ -10640,29 +10951,123 @@ paths: content: application/json: examples: - Bad request: + Bad request: + value: + type: error.list + request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 + errors: + - code: parameter_invalid + message: Ticket type is not a customer ticket type + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/convert_conversation_to_ticket_request" + examples: + successful: + summary: successful + value: + ticket_type_id: '53' + bad_request: + summary: Bad request + value: + ticket_type_id: '54' + "/conversations/deleted": + get: + summary: List all deleted conversation IDs + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: page + in: query + required: false + description: The page of results to fetch. Defaults to first page + example: 1 + schema: + type: integer + - name: per_page + in: query + required: false + description: How many results per page + schema: + type: integer + default: 20 + maximum: 60 + - name: order + in: query + required: false + description: "`asc` or `desc`. Returns the conversation IDs in ascending or descending order. Defaults to desc" + example: desc + schema: + type: string + tags: + - Conversations + operationId: listDeletedConversationIds + description: |+ + List all deleted conversation IDs. + + {% admonition type="warning" name="Pagination" %} + You can use pagination to limit the number of results returned. The default is `20` results per page. You can navigate to next pages using the `page` param. + {% /admonition %} + responses: + '200': + description: View all deleted conversation IDs + content: + application/json: + examples: + successful: + value: + type: conversations.list + total_count: 4 + pages: + type: pages + next: https://api.intercom.io/conversations/deleted?per_page=2&order=desc&page=2 + page: 1 + per_page: 2 + total_pages: 2 + conversations: + - type: conversation + id: '512' + metrics_retained: false + deleted_at: 1734537460 + - type: conversation + id: '513' + metrics_retained: true + deleted_at: 1734537400 + schema: + "$ref": "#/components/schemas/deleted_conversation_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '400': + description: Resource not available + content: + application/json: + examples: + Resource not available: value: type: error.list - request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 + request_id: 7a80b950-b392-499f-85db-ea7c6c424d37 errors: - - code: parameter_invalid - message: Ticket type is not a customer ticket type + - code: intercom_version_invalid + message: Requested resource is not available in current API version. schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/convert_conversation_to_ticket_request" - examples: - successful: - summary: successful - value: - ticket_type_id: '53' - bad_request: - summary: Bad request - value: - ticket_type_id: '54' "/conversations/attributes": get: summary: List all conversation attributes @@ -19517,6 +19922,37 @@ components: nullable: true content_sources: "$ref": "#/components/schemas/content_sources_list" + sales_agent: + title: Sales Agent + type: object + x-tags: + - Sales Agent + description: Data related to Sales Agent involvement in the conversation. + properties: + outcome: + type: string + nullable: true + description: The fixed outcome of the sales agent interaction, used for + billing and tracking. + enum: + - qualified + - disqualified + - product_discovery + - escalated_to_support + - spam + example: qualified + routing_outcome: + type: string + nullable: true + description: The identifier of the user-defined routing outcome selected + by the sales agent. + example: enterprise_sales + collected_data: + type: object + nullable: true + description: A flat key-value map of memory fields collected by the sales + agent during the conversation. + additionalProperties: ai_call_response: title: AI Call Response type: object @@ -22291,6 +22727,39 @@ components: ai_agent: "$ref": "#/components/schemas/ai_agent" nullable: true + sales_agent_participated: + type: boolean + description: Indicates whether the Sales Agent participated in the conversation. + example: false + sales_agent: + "$ref": "#/components/schemas/sales_agent" + nullable: true + channel: + allOf: + - "$ref": "#/components/schemas/conversation_channel" + type: object + nullable: true + description: The channel through which the conversation was initiated and its current channel. + external_references: + type: array + description: References linking this conversation to records in an external helpdesk or CRM system. Populated for Fin Standalone workspaces synced from an external platform; an empty array otherwise. Sorted alphabetically by `type` and capped at 20 entries. + items: + "$ref": "#/components/schemas/conversation_external_reference" + example: + - type: zendesk_ticket + id: '3633338' + - type: zendesk_sunshine_conversation + id: abc-def-uuid + monitor_evaluations: + type: array + description: QA monitor evaluations that flagged this conversation. Only included when `include_monitors=true` is passed as a query parameter. + items: + "$ref": "#/components/schemas/conversation_monitor_evaluation" + scorecards: + type: array + description: QA scorecard results for this conversation. Only included when `include_scorecards=true` is passed as a query parameter. + items: + "$ref": "#/components/schemas/conversation_scorecard" conversation: title: Conversation type: object @@ -22409,6 +22878,39 @@ components: ai_agent: "$ref": "#/components/schemas/ai_agent" nullable: true + sales_agent_participated: + type: boolean + description: Indicates whether the Sales Agent participated in the conversation. + example: false + sales_agent: + "$ref": "#/components/schemas/sales_agent" + nullable: true + channel: + allOf: + - "$ref": "#/components/schemas/conversation_channel" + type: object + nullable: true + description: The channel through which the conversation was initiated and its current channel. + external_references: + type: array + description: References linking this conversation to records in an external helpdesk or CRM system. Populated for Fin Standalone workspaces synced from an external platform; an empty array otherwise. Sorted alphabetically by `type` and capped at 20 entries. + items: + "$ref": "#/components/schemas/conversation_external_reference" + example: + - type: zendesk_ticket + id: '3633338' + - type: zendesk_sunshine_conversation + id: abc-def-uuid + monitor_evaluations: + type: array + description: QA monitor evaluations that flagged this conversation. Only included when `include_monitors=true` is passed as a query parameter. + items: + "$ref": "#/components/schemas/conversation_monitor_evaluation" + scorecards: + type: array + description: QA scorecard results for this conversation. Only included when `include_scorecards=true` is passed as a query parameter. + items: + "$ref": "#/components/schemas/conversation_scorecard" conversation_attachment_files: title: Conversation attachment files type: object @@ -22426,6 +22928,192 @@ components: type: string description: The name of the file. example: test.json + conversation_channel: + title: Conversation Channel + type: object + description: The channel through which a conversation was originally initiated and its current channel. + properties: + initial: + type: string + nullable: true + description: The channel through which the conversation was originally initiated. Possible values include `messenger`, `zendesk_sunshine`, `zendesk_ticket`, `twitter`, `email`. Returns `null` if channel data is unavailable. + example: messenger + current: + type: string + nullable: true + description: The current channel of the conversation. May differ from `initial` if the conversation was migrated between channels. Returns `null` if channel data is unavailable. + example: messenger + conversation_external_reference: + title: Conversation External Reference + type: object + description: A reference linking a conversation to a record in an external helpdesk or CRM system, surfaced for Fin Standalone workspaces. + properties: + type: + type: string + description: The type of external system the reference points to. Possible values include `zendesk_ticket`, `zendesk_sunshine_conversation`, `salesforce_case`, `salesforce_in_app_message_conversation`, `freshdesk_ticket`, `freshchat_conversation`, `hubspot_conversation`, `custom_helpdesk_conversation`, `api_conversation`. + example: zendesk_ticket + id: + type: string + description: The identifier of the record in the external system. Always serialized as a string, since some external IDs exceed 32-bit integer range. + example: '3633338' + conversation_monitor_evaluation: + title: Conversation Monitor Evaluation + type: object + x-tags: + - Conversations + description: A QA monitor evaluation that flagged this conversation. Returned in the `monitor_evaluations` array on conversation responses when `include_monitors=true` is passed. + properties: + monitor_id: + type: string + description: The unique identifier of the monitor that produced this evaluation. + example: '12345' + monitor_name: + type: string + nullable: true + description: The name of the monitor at the time of evaluation. Null if the monitor has since been deleted. + example: Customer complaint handling + monitor_type: + type: string + nullable: true + description: The type of the monitor. Null if the monitor has since been deleted. + example: prompt + result: + type: string + description: The evaluation outcome reported by the monitor. + example: flagged + explanation: + type: string + nullable: true + description: The reasoning provided by the monitor for its result. May be null if no reasoning was generated. + example: The customer mentioned wanting a refund without resolution. + evaluated_at: + type: integer + format: date-time + nullable: true + description: The time the monitor evaluated this conversation. Null in the rare case the underlying record's timestamp is not yet set. + example: 1719493065 + conversation_scorecard: + title: Conversation Scorecard + type: object + x-tags: + - Conversations + description: A QA scorecard result for this conversation. Returned in the `scorecards` array on conversation responses when `include_scorecards=true` is passed. + properties: + scorecard_id: + type: string + description: The unique identifier of the scorecard definition. + example: '67890' + scorecard_version_id: + type: string + description: The unique identifier of the specific scorecard version that produced this result. + example: '67891' + name: + type: string + description: The name of the scorecard. + example: Standard QA Review + scorecard_type: + type: string + description: The type of scorecard. + example: human + passed: + type: boolean + nullable: true + description: Whether the conversation passed the scorecard. Null when the scorecard has not been scored. + example: true + score: + type: number + nullable: true + description: The numeric score for the scorecard. Null when the scorecard has not been scored. + example: 0.85 + ai_score: + type: number + nullable: true + description: The numeric score produced by AI evaluation, if applicable. Null when not AI-scored. + example: 0.9 + evaluated_at: + type: integer + format: date-time + nullable: true + description: The time the scorecard was last evaluated. Null in the rare case the underlying record's timestamp is not yet set. + example: 1719493065 + reviewed_teammate: + "$ref": "#/components/schemas/conversation_scorecard_reviewed_teammate" + evaluators: + type: array + description: Per-evaluator results within this scorecard. + items: + "$ref": "#/components/schemas/conversation_scorecard_evaluator" + conversation_scorecard_reviewed_teammate: + title: Reviewed Teammate + type: object + x-tags: + - Conversations + description: The teammate (or AI agent) whose handling of the conversation was reviewed by this scorecard. + properties: + type: + type: string + enum: + - ai + - admin + description: The kind of reviewee. `ai` if the conversation was handled by Fin or scored without a specific teammate; `admin` if a specific teammate was reviewed. + example: admin + admin_id: + type: string + nullable: true + description: The id of the admin who was reviewed. Present only when `type` is `admin`. + example: '991267715' + conversation_scorecard_evaluator: + title: Conversation Scorecard Evaluator + type: object + x-tags: + - Conversations + description: A single evaluator within a scorecard, including its result for this conversation. + properties: + evaluator_id: + type: string + description: The unique identifier of the evaluator (criterion) within the scorecard. + example: '54321' + result: + allOf: + - "$ref": "#/components/schemas/conversation_scorecard_evaluator_result" + nullable: true + description: The evaluator's result for this conversation. Null if the evaluator was not scored. + conversation_scorecard_evaluator_result: + title: Conversation Scorecard Evaluator Result + type: object + x-tags: + - Conversations + description: The outcome of a single evaluator within a scorecard. + properties: + value: + type: string + nullable: true + description: The evaluator's selected value (typically a label such as `pass`, `fail`, or a category identifier). + example: pass + source: + type: string + nullable: true + description: The origin of the result (for example, `ai` or `human`). + example: ai + reasoning: + type: string + nullable: true + description: A free-text explanation of the result. + example: The agent acknowledged the issue and resolved it within the same response. + reason_ids: + type: array + nullable: true + description: Identifiers for structured reasons assigned to the result, if any. + items: + type: string + example: + - '101' + - '102' + other_text: + type: string + nullable: true + description: Free-text entered by the reviewer to supplement or stand in for the structured `reason_ids` — typically captured when the reviewer selects an "Other" option or adds a custom note. Null when not provided. + example: Agent acknowledged the issue but missed the follow-up question about billing. conversation_contacts: title: Contacts type: object @@ -22465,6 +23153,50 @@ components: type: boolean description: Whether the conversation is deleted or not. example: true + deleted_conversation_item: + title: Conversation + type: object + x-tags: + - Conversation + description: A deleted conversation record containing its ID, metrics retained status and deletion timestamp. + properties: + type: + type: string + description: String representing the object's type. Always has the value `conversation`. + example: 'conversation' + id: + type: string + description: The ID of the deleted conversation. + example: '512' + metrics_retained: + type: boolean + description: Whether reporting metrics are retained for this conversation ID + example: true + deleted_at: + type: integer + format: date-time + description: The time when the conversation was deleted. + example: 1734537745 + deleted_conversation_list: + title: Conversations + type: object + description: A paginated list of deleted conversation IDs. + properties: + type: + type: string + description: String representing the object's type. Always has the value `conversations.list`. + example: conversations.list + conversations: + type: array + description: The list of deleted conversation IDs. + items: + "$ref": "#/components/schemas/deleted_conversation_item" + total_count: + type: integer + description: Total number of items available. + example: 10 + pages: + "$ref": "#/components/schemas/pages_link" conversation_first_contact_reply: title: First contact reply type: object @@ -22735,32 +23467,36 @@ components: properties: type: type: string - description: This includes conversation, email, facebook, instagram, phone_call, - phone_switch, push, sms, twitter and whatsapp. - example: conversation - enum: - - conversation - - email - - facebook - - instagram - - phone_call - - phone_switch - - push - - sms - - twitter - - whatsapp + description: The origin of this conversation. + example: email id: type: string - description: The id representing the message. + nullable: true + description: The id of the source message. example: '3' delivered_as: type: string - description: The conversation's initiation type. Possible values are customer_initiated, - campaigns_initiated (legacy campaigns), operator_initiated (Custom bot), - automated (Series and other outbounds with dynamic audience message) and - admin_initiated (fixed audience message, ticket initiated by an admin, - group email). + description: How the conversation was initiated. example: operator_initiated + reply_to: + type: array + nullable: true + description: The Reply-To header addresses of the source message, where + a reply will be routed. Can differ from the sender's From address. Only + present for email conversations. + items: + type: object + properties: + email: + type: string + format: email + description: The Reply-To email address. + example: replies@example.com + name: + type: string + nullable: true + description: The display name associated with the Reply-To address. + example: Support Team subject: type: string description: Optional. The message subject. For Twitter, this will show @@ -22774,7 +23510,7 @@ components: payloads for API version 2.15+, this field returns plain text. example: "

Hey there!

" author: - "$ref": "#/components/schemas/conversation_part_author" + "$ref": "#/components/schemas/conversation_source_author" attachments: type: array description: A list of attachments for the part. @@ -22791,6 +23527,32 @@ components: description: Whether or not the source message has been redacted. Only applicable for contact initiated messages. example: false + conversation_source_author: + title: Conversation source author + type: object + description: The author who started the conversation. Can be a Contact, Admin, + or Bot. + properties: + type: + type: string + description: The type of the author. + example: admin + id: + type: string + nullable: true + description: The id of the author. + example: '274' + name: + type: string + nullable: true + description: The name of the author. + example: Jane Doe + email: + type: string + format: email + nullable: true + description: The email of the author. + example: jane.doe@example.com conversation_statistics: title: Conversation statistics type: object @@ -23306,6 +24068,10 @@ components: format: date-time description: The time the conversation was created as a UTC Unix timestamp. If not provided, the current time will be used. This field is only recommneded for migrating past conversations from another source into Intercom. example: 1671028894 + brand_id: + type: string + description: The unique identifier of the brand to associate with this conversation. + example: "123" required: - from - body @@ -26988,6 +27754,65 @@ components: description: Array of handling events items: "$ref": "#/components/schemas/handling_event" + side_conversation_summary: + title: Side Conversation Summary + type: object + description: A side conversation with its conversation parts. + properties: + side_conversation_id: + type: string + description: The unique identifier for the side conversation. + example: '456' + conversation_parts: + type: array + description: The conversation parts (messages) in this side conversation. + items: + "$ref": "#/components/schemas/conversation_part" + total_count: + type: integer + description: The total number of conversation parts in this side conversation. + example: 1 + side_conversation_list: + title: Side Conversation List + type: object + description: A paginated list of side conversations for a conversation. + properties: + type: + type: string + description: The type of the response object. + enum: + - side_conversation.list + example: side_conversation.list + side_conversations: + type: array + description: An array of side conversation objects. + items: + "$ref": "#/components/schemas/side_conversation_summary" + total_count: + type: integer + description: The total number of side conversations. + example: 1 + pages: + type: object + description: Pagination metadata. + properties: + type: + type: string + enum: + - pages + example: pages + page: + type: integer + description: The current page number. + example: 1 + per_page: + type: integer + description: The number of results per page. + example: 25 + total_pages: + type: integer + description: The total number of pages. + example: 1 help_center: title: Help Center type: object @@ -27225,6 +28050,19 @@ components: description: Set to `true` to merge two contacts that are not duplicates (they share no matching email or phone). example: true + merge_conversations_request: + title: Merge Conversations Request + type: object + description: Payload to merge a secondary conversation into a primary conversation. + x-tags: + - Conversations + properties: + merge_into_conversation_id: + type: integer + description: The ID of the primary (target) conversation to merge into. + example: 456 + required: + - merge_into_conversation_id message: type: object title: Message From adde77c19e7c201b0c29cde2ee3d57e1ee447b49 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 10:33:56 +0100 Subject: [PATCH 06/22] Graduate contact & company non-breaking changes into v2.16 OpenAPI spec - Contact banners API; contact merge history (endpoint, field, include_merge_history param) - email_verified on contact create/update; company notes API and notes field - update_last_request_at on company create Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 609 ++++++++++++++++++++++++- 1 file changed, 607 insertions(+), 2 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index a9425ec1..680c0172 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -4550,6 +4550,107 @@ paths: message: Company Not Found schema: "$ref": "#/components/schemas/error" + post: + summary: Create a company note + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: company_id + in: path + required: true + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + schema: + type: string + tags: + - Notes + - Companies + operationId: createCompanyNote + description: You can add a note to a single company. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: note + id: '31' + created_at: 1734537390 + company: + type: company + id: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + author: + type: admin + id: '991267583' + name: Ciaran124 Lee + email: admin124@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

Hello

" + schema: + "$ref": "#/components/schemas/note" + '401': + description: Unauthorized + content: + application/json: + schema: + "$ref": "#/components/schemas/error" + '404': + description: Company or admin not found + content: + application/json: + examples: + Admin not found: + value: + type: error.list + request_id: 168f1bc3-d198-4797-8422-9f93fe8af5ad + errors: + - code: not_found + message: Resource Not Found + Company not found: + value: + type: error.list + request_id: 6f372239-0259-428f-9943-91b8f7a92162 + errors: + - code: company_not_found + message: Company Not Found + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - body + properties: + body: + type: string + description: The text of the note. + example: New note + admin_id: + type: string + description: The unique identifier of the admin creating the note. If not provided, defaults to the admin associated with the access token. + example: '991267583' + examples: + successful_response: + summary: Successful response + value: + body: Hello + admin_id: '991267583' + admin_not_found: + summary: Admin not found + value: + body: Hello + admin_id: '123' + company_not_found: + summary: Company not found + value: + body: Hello "/companies/list": post: summary: List all companies @@ -5850,6 +5951,14 @@ paths: required: true schema: type: string + - name: include_merge_history + in: query + description: Pass `true` to include the contact's merge history in the response. + Only returned for contacts with a `user` role. + required: false + schema: + type: boolean + default: false tags: - Contacts - Custom Object Instances @@ -6111,6 +6220,14 @@ paths: required: true schema: type: string + - name: include_merge_history + in: query + description: Pass `true` to include the contact's merge history in the response. + Only returned for contacts with a `user` role. + required: false + schema: + type: boolean + default: false tags: - Contacts operationId: ShowContact @@ -6283,6 +6400,14 @@ paths: in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: include_merge_history + in: query + description: Pass `true` to include the merge history of the resulting contact + in the response. Only returned for contacts with a `user` role. + required: false + schema: + type: boolean + default: false tags: - Contacts operationId: MergeContact @@ -6454,6 +6579,14 @@ paths: in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: include_merge_history + in: query + description: Pass `true` to include a `merge_history` array on each contact + in the response. Only returned for contacts with a `user` role. + required: false + schema: + type: boolean + default: false tags: - Contacts operationId: SearchContacts @@ -6618,6 +6751,14 @@ paths: in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: include_merge_history + in: query + description: Pass `true` to include a `merge_history` array on each contact + in the response. Only returned for contacts with a `user` role. + required: false + schema: + type: boolean + default: false tags: - Contacts operationId: ListContacts @@ -6816,6 +6957,14 @@ paths: description: The external ID of the user that you want to retrieve schema: type: string + - name: include_merge_history + in: query + description: Pass `true` to include the contact's merge history in the response. + Only returned for contacts with a `user` role. + required: false + schema: + type: boolean + default: false tags: - Contacts operationId: ShowContactByExternalId @@ -6965,6 +7114,127 @@ paths: schema: "$ref": "#/components/schemas/contact_archived" "/contacts/{contact_id}/unarchive": + "/contacts/{id}/banners": + get: + summary: List banners for a contact + parameters: + - name: id + in: path + required: true + description: The unique identifier of a contact. + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Banners + - Contacts + operationId: listContactBanners + description: | + Returns the banners a contact currently matches, so you can display them on + surfaces outside the Messenger (native mobile apps, kiosks, embedded tools). + + Each banner in the response includes a `view_id`. Use it to record a dismissal + with the dismiss endpoint. A returned banner is treated as shown: requesting + this endpoint records an impression for each banner returned, so call it at the + point you are about to display the banners, not speculatively. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: list + data: + - type: banner + id: '486517' + view_id: '645719311' + title: Hi there + body: "

Hi there!

" + style: inline + position: top + show_dismiss_button: true + action: + client_targeting: + created_at: 1780580493 + schema: + "$ref": "#/components/schemas/banner_list" + '404': + description: Contact not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 57055cde-3d0d-4c67-b5c9-b20b80340bf0 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" + "/contacts/{id}/banners/{view_id}/dismiss": + post: + summary: Dismiss a banner for a contact + parameters: + - name: id + in: path + required: true + description: The unique identifier of a contact. + schema: + type: string + - name: view_id + in: path + required: true + description: The `view_id` of the banner to dismiss, as returned by the list banners endpoint. + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Banners + - Contacts + operationId: dismissContactBanner + description: | + Records that a contact has dismissed a banner. Dismissals are shared across + surfaces, so a banner dismissed through this endpoint will also stop appearing + in the web Messenger for that contact, and vice versa. + + The request is idempotent: dismissing an already-dismissed banner succeeds and + returns the same response. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: banner_dismiss + view_id: '645719311' + dismissed: true + schema: + "$ref": "#/components/schemas/banner_dismiss" + '404': + description: Banner view not found + content: + application/json: + examples: + Banner view not found: + value: + type: error.list + request_id: 57055cde-3d0d-4c67-b5c9-b20b80340bf0 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" post: summary: Unarchive contact parameters: @@ -6991,6 +7261,99 @@ paths: schema: "$ref": "#/components/schemas/contact_unarchived" "/contacts/{contact_id}/block": + "/contacts/{id}/merge_history": + get: + summary: Get contact merge history + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + description: The id of the contact to fetch merge history for. + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + - name: cursor + in: query + description: A cursor for pagination. Pass the `next_cursor` value from a + previous response to fetch the next page. + required: false + schema: + type: string + - name: per_page + in: query + description: The number of results to return per page (default 50, max 150). + required: false + schema: + type: integer + default: 50 + minimum: 1 + maximum: 150 + - name: order + in: query + description: The order to return results in. Defaults to descending. + required: false + schema: + type: string + enum: + - asc + - desc + tags: + - Contacts + operationId: ListContactMergeHistory + description: | + Retrieve the paginated list of contacts that have been merged into a given contact. + + Only available for contacts with a `user` role. Returns a `404` if the contact is not found or has a `lead` role. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: list + data: + - type: merge_history + source_contact_id: 5ba682d23d7cf92bef87bfd3 + source_contact_role: lead + merged_at: 1571672154 + next_cursor: eyJpZCI6IjYyMzQ1NiJ9 + has_more: true + schema: + "$ref": "#/components/schemas/merge_history_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 45b30bd1-75d2-40cc-bb39-74ac133a2836 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '404': + description: Contact not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 45b30bd1-75d2-40cc-bb39-74ac133a2836 + errors: + - code: not_found + message: Contact not found + schema: + "$ref": "#/components/schemas/error" post: summary: Block contact parameters: @@ -20858,6 +21221,147 @@ components: description: "The Unix timestamp when the status reason was last updated" example: 1734537243 away_status_reason_list: + banner_list: + title: Banner List + type: object + description: A list of banners a contact currently matches. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `list`. + example: list + data: + type: array + description: An array of banners. + items: + "$ref": "#/components/schemas/banner" + banner: + title: Banner + type: object + x-tags: + - Banners + description: A banner the contact currently matches, with the content and view + identifier needed to display and dismiss it. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `banner`. + example: banner + id: + type: string + description: The id of the banner. + example: '486517' + view_id: + type: string + description: The id of the contact's view of this banner. Pass this to the + dismiss endpoint to record a dismissal. + example: '645719311' + title: + type: string + nullable: true + description: The banner's title. `null` when the banner has no title. + example: Hi there + body: + type: string + nullable: true + description: The banner's body content as HTML. + example: "

Hi there!

" + style: + type: string + description: How the banner is displayed. + example: inline + position: + type: string + description: Where the banner is positioned. + example: top + show_dismiss_button: + type: boolean + description: Whether the banner should display a dismiss control. + example: true + action: + type: object + nullable: true + description: | + The action a contact can take on the banner, or `null` when the banner has + no action. The fields present depend on `type`: + `url` (`label`, `target`), `reaction` (`reaction_set`), + `email_collector`, or `product_tour` (`tour_id`, `tour_url`). + properties: + type: + type: string + description: The kind of action. One of `url`, `reaction`, `email_collector`, + or `product_tour`. + example: url + label: + type: string + nullable: true + description: For `url` actions, the label shown on the action link or button. + example: Learn more + target: + type: string + nullable: true + description: For `url` actions, the URL the contact is sent to. + example: https://www.intercom.com/pricing + reaction_set: + type: array + description: For `reaction` actions, the reactions a contact can choose from. + items: + type: object + properties: + index: + type: integer + description: The reaction's position in the set. + example: 0 + unicode_emoticon: + type: string + description: The reaction's unicode emoji. + example: "\U0001F44D" + tour_id: + type: string + nullable: true + description: For `product_tour` actions, the id of the product tour to launch. + example: '12345' + tour_url: + type: string + nullable: true + description: For `product_tour` actions, the URL that launches the product tour. + example: https://app.intercom.com/tours/12345 + client_targeting: + type: array + nullable: true + description: | + Reserved for future use. Always `null` in the current version — banners + that depend on client-side targeting rules (such as page URL or time on + page) are not returned by this endpoint. + items: + type: object + created_at: + type: integer + format: timestamp + description: The time the contact's view of this banner was created. + example: 1780580493 + banner_dismiss: + title: Banner Dismiss + type: object + x-tags: + - Banners + description: The result of dismissing a banner for a contact. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `banner_dismiss`. + example: banner_dismiss + view_id: + type: string + description: The id of the dismissed banner view. + example: '645719311' + dismissed: + type: boolean + description: Whether the banner view is dismissed. + example: true title: Away Status Reasons type: object description: A list of away status reasons. @@ -21148,6 +21652,19 @@ components: type: array items: "$ref": "#/components/schemas/segment" + notes: + type: object + description: The list of notes associated with the company + properties: + type: + type: string + description: The type of the object + enum: + - note.list + notes: + type: array + items: + "$ref": "#/components/schemas/company_note" company_attached_contacts: title: Company Attached Contacts type: object @@ -21512,6 +22029,14 @@ components: "$ref": "#/components/schemas/contact_location" social_profiles: "$ref": "#/components/schemas/contact_social_profiles" + merge_history: + type: array + nullable: true + description: A list of contacts that were merged into this contact. Only + included in the response when `include_merge_history=true` is passed as + a query parameter. Only available for contacts with a `user` role. + items: + "$ref": "#/components/schemas/merge_history_item" contact_attached_companies: title: Contact Attached Companies type: object @@ -23920,6 +24445,11 @@ components: type: string description: A unique identifier for the contact which is given to Intercom example: "625e90fc55ab113b6d92175f" + email_verified: + type: boolean + nullable: true + description: Whether the contact's email address has been verified. Set to true to indicate you have verified the contact owns this email address, or false to mark it as unverified. Must be supplied together with an email in the same request; sending it without an email returns a 400. + example: true email: type: string description: The contacts email @@ -24469,6 +24999,10 @@ components: type: integer description: The time the company was created by you. example: 1394531169 + update_last_request_at: + type: boolean + description: Set to true to update the company's last seen time to now. + example: true monthly_spend: type: integer description: How much revenue the company generates for your business. Note @@ -28028,6 +28562,58 @@ components: items: "$ref": "#/components/schemas/linked_object" merge_contacts_request: + merge_history_item: + title: Merge History Item + type: object + description: A record of a contact that was merged into another contact. + properties: + type: + type: string + description: The type of object. + example: merge_history + source_contact_id: + type: string + description: The Intercom ID of the contact that was merged into this contact. + example: 5ba682d23d7cf92bef87bfd3 + source_contact_role: + type: string + description: The role of the contact that was merged in. + enum: + - lead + - user + example: lead + merged_at: + type: integer + nullable: true + format: date-time + description: "(Unix timestamp in seconds) The time when the merge occurred." + example: 1571672154 + merge_history_list: + title: Merge History List + type: object + description: A paginated list of merge history entries for a contact. + properties: + type: + type: string + description: The type of object. + enum: + - list + example: list + data: + type: array + description: An array of merge history entries. + items: + "$ref": "#/components/schemas/merge_history_item" + next_cursor: + type: string + nullable: true + description: A cursor to pass as the `cursor` query parameter to fetch + the next page of results. Absent when there are no more pages. + example: WyIxNjM0NTY3ODkwIl0 + has_more: + type: boolean + description: Whether there are more results to fetch. + example: false description: Merge contact data. type: object title: Merge contact data @@ -28426,7 +29012,8 @@ components: type: object x-tags: - Notes - description: Notes allow you to annotate and comment on your contacts. + description: Notes allow you to annotate and comment on your contacts and companies. + A note is attached to either a contact or a company, never both. properties: type: type: string @@ -28455,6 +29042,19 @@ components: type: string description: The id of the contact. example: 214656d0c743eafcfde7f248 + company: + type: object + description: Represents the company that the note was created about. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value + `company`. + id: + type: string + description: The id of the company. + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 author: "$ref": "#/components/schemas/admin" description: Optional. Represents the Admin that created the note. @@ -28465,7 +29065,7 @@ components: note_list: title: Paginated Response type: object - description: A paginated list of notes associated with a contact. + description: A paginated list of notes associated with a contact or a company. properties: type: type: string @@ -30165,6 +30765,11 @@ components: type: string description: The contacts email example: jdoe@example.com + email_verified: + type: boolean + nullable: true + description: Whether the contact's email address has been verified. Set to true to indicate you have verified the contact owns this email address, or false to mark it as unverified. Must be supplied together with an email in the same request; sending it without an email returns a 400. + example: true phone: type: string nullable: true From 728bd98ec17fa2bad1e0e345ebeef289bc0232c4 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 10:38:44 +0100 Subject: [PATCH 07/22] Graduate admin, teams, office-hours & reporting non-breaking changes into v2.16 OpenAPI spec - Admin role in responses; macros API; message status (WhatsApp) endpoints - Team metrics API; office hours schedules & exceptions APIs - Admin activity log event types & search endpoints - Email message metadata history on conversation source - reporting data export qualified_id Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 2255 ++++++++++++++++++++++-- 1 file changed, 2099 insertions(+), 156 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index 680c0172..4ad4d5eb 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -12,6 +12,371 @@ info: url: https://spdx.org/licenses/MIT paths: "/me": + "/macros/{id}": + get: + summary: Retrieve a macro + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier of the macro + schema: + type: string + example: "123" + tags: + - Macros + operationId: getMacro + description: | + 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: `` + + Default values in placeholders are HTML-escaped for security. + responses: + '200': + description: Macro found + content: + application/json: + examples: + support_macro: + summary: Customer support macro with placeholders + value: + type: macro + id: "789" + name: "Refund Process Explanation" + body: "

Hi ,

I understand you'd like a refund for order #. The refund will be processed within 3-5 business days to your .

Is there anything else I can help you with?

" + 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"] + sales_macro: + summary: Sales team macro for product inquiries + value: + type: macro + id: "456" + name: "Product Demo Request" + body: "

Hello ,

Thank you for your interest in ! I'd love to schedule a personalized demo for your team at .

Would work for you?

" + body_text: "Hello {{user.name|fallback:\"valued customer\"}},\n\nThank you for your interest in {{product.name|fallback:\"our products\"}}! I'd love to schedule a personalized demo for your team at {{company.name|fallback:\"your company\"}}.\n\nWould {{suggested_time|fallback:\"next Tuesday at 2 PM EST\"}} work for you?" + created_at: "2025-07-22T11:06:40.000Z" + updated_at: "2025-07-23T00:00:00.000Z" + visible_to: "specific_teams" + visible_to_team_ids: ["sales_team_us", "sales_team_eu"] + available_on: ["messenger"] + technical_support: + summary: Technical support macro with nested attributes + value: + type: macro + id: "890" + name: "API Integration Help" + body: "

Hi ,

I see you're having trouble with the integration. Your API key for app is configured correctly.

Error code:

Let me help you resolve this issue.

" + body_text: "Hi {{user.name}},\n\nI see you're having trouble with the {{conversation.custom_attributes.api_endpoint|fallback:\"API\"}} integration. Your API key for app {{app.id}} is configured correctly.\n\nError code: {{conversation.custom_attributes.error_code|fallback:\"unknown\"}}\n\nLet me help you resolve this issue." + created_at: "2025-07-18T09:15:00.000Z" + updated_at: "2025-07-18T09:15:00.000Z" + visible_to: "everyone" + visible_to_team_ids: [] + available_on: ["inbox"] + simple_greeting: + summary: Simple macro without placeholders + value: + type: macro + id: "123" + name: "Thank You Response" + body: "

Thank you for reaching out! We appreciate your message and will get back to you as soon as possible.

" + body_text: "Thank you for reaching out! We appreciate your message and will get back to you as soon as possible." + created_at: "2025-07-17T11:18:08.000Z" + updated_at: "2025-07-17T15:30:24.000Z" + visible_to: "everyone" + visible_to_team_ids: [] + available_on: ["inbox", "messenger"] + schema: + "$ref": "#/components/schemas/macro" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: Forbidden - missing required OAuth scope + content: + application/json: + examples: + Missing required scope: + summary: OAuth token lacks read_conversations scope + value: + type: error.list + request_id: f097e446-9ae6-44a8-8e13-2bf3008b87ef + errors: + - code: forbidden + message: You do not have the required scope (read_conversations) to access this resource + schema: + "$ref": "#/components/schemas/error" + '404': + description: Macro not found or not accessible + content: + application/json: + examples: + Macro not found: + value: + type: error.list + request_id: bc300b1a-492a-405f-924e-a5881cb72e3a + errors: + - code: not_found + message: Macro not found + schema: + "$ref": "#/components/schemas/error" + "/macros": + get: + summary: List all macros + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: per_page + in: query + schema: + type: integer + minimum: 1 + maximum: 150 + default: 50 + description: The number of results per page + example: 50 + - name: starting_after + in: query + schema: + type: string + description: Base64-encoded cursor containing [updated_at, id] for pagination + example: "WzE3MTk0OTM3NTcuMCwgIjEyMyJd" + - name: updated_since + in: query + schema: + type: integer + format: int64 + description: Unix timestamp to filter macros updated after this time + example: 1719474966 + tags: + - Macros + operationId: listMacros + description: | + 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: `` + responses: + '200': + description: Successful response + content: + application/json: + examples: + basic_list: + summary: Basic list of macros + value: + type: list + data: + - type: macro + id: "123" + name: "Order Status Update" + body: "

Hi , your order # is ready for pickup!

" + body_text: "Hi {{user.name|fallback:\"there\"}}, your order #{{order.number}} is ready for pickup!" + created_at: "2025-07-17T11:18:08.000Z" + updated_at: "2025-07-17T15:30:24.000Z" + visible_to: "everyone" + visible_to_team_ids: [] + available_on: ["inbox", "messenger"] + - type: macro + id: "456" + name: "Welcome Message" + body: "

Welcome to our support! I'm . How can I help you today?

" + body_text: "Welcome to our support! I'm {{teammate.name}}. How can I help you today?" + created_at: "2025-07-21T14:44:35.000Z" + updated_at: "2025-07-21T14:44:35.000Z" + visible_to: "specific_teams" + visible_to_team_ids: ["789", "101"] + available_on: ["inbox"] + pages: + type: pages + per_page: 50 + next: + starting_after: "WzE3MTk0OTM3NTcuMCwgIjEyMyJd" + pagination_with_cursor: + summary: Paginated response using starting_after cursor + value: + type: list + data: + - type: macro + id: "789" + name: "Refund Process" + body: "

I understand you'd like a refund for order #. The refund will be processed within 3-5 business days.

" + body_text: "I understand you'd like a refund for order #{{conversation.custom_attributes.order_number}}. The refund will be processed within 3-5 business days." + created_at: "2025-07-21T07:15:34.000Z" + updated_at: "2025-07-21T07:15:34.000Z" + visible_to: "everyone" + visible_to_team_ids: [] + available_on: ["inbox", "messenger"] + - type: macro + id: "101" + name: "Product Inquiry Response" + body: "

Thank you for your interest in . I'd be happy to provide more information!

" + body_text: "Thank you for your interest in {{product.name|fallback:\"our products\"}}. I'd be happy to provide more information!" + created_at: "2025-07-20T05:33:20.000Z" + updated_at: "2025-07-21T10:00:00.000Z" + visible_to: "everyone" + visible_to_team_ids: [] + available_on: ["inbox", "messenger"] + pages: + type: pages + per_page: 50 + next: + starting_after: "WzE3MTk0MDAwMDAuMCwgIjEwMSJd" + filtered_by_timestamp: + summary: Macros filtered by updated_since parameter + value: + type: list + data: + - type: macro + id: "234" + name: "Shipping Update Template" + body: "

Your order has been shipped via . Tracking number:

" + body_text: "Your order has been shipped via {{shipping.carrier|fallback:\"our shipping partner\"}}. Tracking number: {{shipping.tracking_number}}" + created_at: "2025-07-22T05:31:01.000Z" + updated_at: "2025-07-22T18:45:12.000Z" + visible_to: "everyone" + visible_to_team_ids: [] + available_on: ["inbox"] + pages: + type: pages + per_page: 50 + next: null + complex_placeholders: + summary: Macros with various placeholder formats + value: + type: list + data: + - type: macro + id: "567" + name: "Account Status Review" + body: "

Hi ,

Your account status:

Last activity:

" + body_text: "Hi {{user.first_name|fallback:\"there\"}},\n\nYour account status: {{user.custom_attributes.account_status|fallback:\"pending review\"}}\n\nLast activity: {{user.last_seen_at}}" + created_at: "2025-07-21T09:00:00.000Z" + updated_at: "2025-07-21T09:00:00.000Z" + visible_to: "specific_teams" + visible_to_team_ids: ["security_team"] + available_on: ["inbox"] + pages: + type: pages + per_page: 50 + next: null + empty_result: + summary: Empty macro list (no macros or all filtered out) + value: + type: list + data: [] + pages: + type: pages + per_page: 50 + next: null + large_list_preview: + summary: Large list with performance optimization + value: + type: list + data: + - type: macro + id: "1001" + name: "Quick Response 1" + body: null + body_text: null + created_at: "2025-07-22T11:08:20.000Z" + updated_at: "2025-07-23T11:08:20.000Z" + visible_to: "everyone" + visible_to_team_ids: [] + available_on: ["inbox"] + # Note: When returning 30+ macros, body rendering may be skipped for performance + pages: + type: pages + per_page: 50 + next: + starting_after: "WzE3MTk0OTAxMDAuMCwgIjEwMDIiXQ==" + schema: + "$ref": "#/components/schemas/macro_list" + '400': + description: Bad Request + content: + application/json: + examples: + Invalid parameter: + value: + type: error.list + request_id: bc300b1a-492a-405f-924e-a5881cb72e3a + errors: + - code: parameter_invalid + message: Invalid updated_since timestamp + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: Forbidden - missing required OAuth scope + content: + application/json: + examples: + Missing required scope: + summary: OAuth token lacks read_conversations scope + value: + type: error.list + request_id: f097e446-9ae6-44a8-8e13-2bf3008b87ef + errors: + - code: forbidden + message: You do not have the required scope (read_conversations) to access this resource + schema: + "$ref": "#/components/schemas/error" get: summary: Identify an admin parameters: @@ -183,33 +548,769 @@ paths: away_mode_enabled: true away_mode_reassign: true "/admins/activity_logs": + "/admins/activity_logs/search": + post: + summary: Search activity logs + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Admins + operationId: searchActivityLogs + description: Search and filter admin activity logs using a POST request + with event type filter in the request body. You can find more details + about the available event types in the List all activity log event + types endpoint. + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - created_at_after + properties: + created_at_after: + type: integer + format: date-time + description: The start date that you request data for. It must + be formatted as a UNIX timestamp. + example: 1677253093 + created_at_before: + type: integer + format: date-time + description: The end date that you request data for. It must + be formatted as a UNIX timestamp. + example: 1677861493 + event_types: + type: array + description: An optional list of event types to filter activity + logs by. Use the list all activity log event types endpoint + to retrieve available values. + items: + type: string + example: + - app_name_change + - message_state_change + page: + type: integer + description: The page number of results to return. + default: 1 + example: 1 + per_page: + type: integer + description: The number of results per page. Must be between + 1 and 250. + default: 20 + minimum: 1 + maximum: 250 + example: 20 + examples: + search_with_event_types: + summary: Search with event types filter + value: + created_at_after: 1677253093 + created_at_before: 1677861493 + event_types: + - app_name_change + - message_state_change + search_without_filters: + summary: Search with date range only + value: + created_at_after: 1677253093 + created_at_before: 1677861493 + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: activity_log.list + pages: + type: pages + next: + page: 1 + per_page: 20 + total_pages: 1 + activity_logs: + - id: fca05814-4b72-4dce-ad4f-77a786a2c136 + performed_by: + type: admin + id: '991267464' + email: admin5@email.com + ip: 127.0.0.1 + metadata: + before: before + after: after + created_at: 1734537253 + activity_type: app_name_change + activity_description: Ciaran5 Lee changed your app name + from before to after. + schema: + "$ref": "#/components/schemas/activity_log_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 57cc6148-2c0a-471b-bd9e-859538110958 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/admins/activity_log_event_types": get: - summary: List all activity logs + summary: List all activity log event types + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Admins + operationId: listActivityLogEventTypes + description: | + You can get a list of all activity log event types. This is useful for discovering valid values to use with the `event_types` filter on the List all activity logs endpoint. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: activity_log_event_type.list + event_types: + - admin_conversation_assignment_limit_change + - admin_ticket_assignment_limit_change + - admin_avatar_change + - admin_away_mode_change + - admin_deletion + - admin_deprovisioned + - admin_impersonation_end + - admin_impersonation_start + - admin_invite_change + - admin_invite_creation + - admin_invite_deletion + - admin_login_failure + - admin_login_success + - admin_logout + - admin_password_reset_request + - admin_password_reset_success + - admin_permission_change + - admin_provisioned + - admin_two_factor_auth_change + - admin_unauthorized_sign_in_method + - app_admin_join + - app_authentication_method_change + - app_data_deletion + - app_data_export + - app_google_sso_domain_change + - app_identity_verification_change + - app_name_change + - app_outbound_address_change + - app_package_installation + - app_package_token_regeneration + - app_package_uninstallation + - app_team_creation + - app_team_deletion + - app_team_membership_modification + - app_timezone_change + - app_webhook_creation + - app_webhook_deletion + - articles_in_messenger_enabled_change + - bulk_delete + - bulk_export + - campaign_deletion + - campaign_state_change + - conversation_part_deletion + - conversation_pdf_export + - conversation_topic_change + - conversation_topic_creation + - conversation_topic_deletion + - help_center_settings_change + - inbound_conversations_change + - inbox_access_change + - message_deletion + - message_state_change + - messenger_look_and_feel_change + - messenger_search_required_change + - messenger_spaces_change + - office_hours_change + - role_change + - role_creation + - role_deletion + - ruleset_activation_title_preview + - ruleset_creation + - ruleset_deletion + - search_browse_enabled_change + - search_browse_required_change + - seat_change + - seat_revoke + - security_settings_change + - temporary_expectation_change + - upfront_email_collection_change + - welcome_message_change + - hide_csat_from_agents_setting_change + schema: + "$ref": "#/components/schemas/activity_log_event_type_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 85a1e5b6-e743-4e89-a6e2-1d7c0c3f4a5b + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + get: + summary: List all activity logs + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: created_at_after + in: query + required: true + description: The start date that you request data for. It must be formatted + as a UNIX timestamp. + example: '1677253093' + schema: + type: string + - name: created_at_before + in: query + required: false + description: The end date that you request data for. It must be formatted + as a UNIX timestamp. + example: '1677861493' + schema: + type: string + tags: + - Admins + operationId: listActivityLogs + description: You can get a log of activities by all admins in an app. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: activity_log.list + pages: + type: pages + next: + page: 1 + per_page: 20 + total_pages: 1 + activity_logs: + - id: fca05814-4b72-4dce-ad4f-77a786a2c136 + performed_by: + type: admin + id: '991267464' + email: admin5@email.com + ip: 127.0.0.1 + metadata: + before: before + after: after + created_at: 1734537253 + activity_type: app_name_change + activity_description: Ciaran5 Lee changed your app name from + before to after. + - id: f48c653b-0185-48ac-a276-23d11006bafb + performed_by: + type: admin + id: '991267464' + email: admin5@email.com + ip: 127.0.0.1 + metadata: + message: + id: 123 + title: Initial message title + before: Initial message title + after: Eventual message title + created_at: 1734537253 + activity_type: message_state_change + activity_description: Ciaran5 Lee changed your Initial message + title message from Initial message title to Eventual message + title. + schema: + "$ref": "#/components/schemas/activity_log_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 57cc6148-2c0a-471b-bd9e-859538110958 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/admins": + "/office_hours_schedules/{office_hours_schedule_id}/office_hours_exceptions/{id}": + get: + summary: Retrieve an office hours exception + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: office_hours_schedule_id + in: path + required: true + description: The unique identifier for the office hours schedule. + example: '123' + schema: + type: string + - name: id + in: path + required: true + description: The unique identifier for the office hours exception. + example: '456' + schema: + type: string + tags: + - Office Hours + operationId: getOfficeHoursException + description: You can fetch the details of a single office hours exception. + responses: + '200': + description: Office hours exception found + content: + application/json: + examples: + Office hours exception found: + value: + type: office_hours_exception + id: '456' + office_hours_schedule_id: '123' + exception_date: '2026-12-25' + exception_type: closed + name: Christmas Day + time_intervals: + recurring_annually: true + created_at: 1717200000 + updated_at: 1717200000 + schema: + "$ref": "#/components/schemas/office_hours_exception" + '401': + "$ref": "#/components/responses/Unauthorized" + '404': + "$ref": "#/components/responses/ObjectNotFound" + put: + summary: Update an office hours exception + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: office_hours_schedule_id + in: path + required: true + description: The unique identifier for the office hours schedule. + example: '123' + schema: + type: string + - name: id + in: path + required: true + description: The unique identifier for the office hours exception. + example: '456' + schema: + type: string + tags: + - Office Hours + operationId: updateOfficeHoursException + description: You can update an existing office hours exception. + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_office_hours_exception_request" + examples: + Update exception: + value: + exception_type: custom_hours + name: Christmas Day (reduced hours) + time_intervals: + - start_minute: 540 + end_minute: 780 + recurring_annually: true + responses: + '200': + description: Office hours exception updated + content: + application/json: + examples: + Office hours exception updated: + value: + type: office_hours_exception + id: '456' + office_hours_schedule_id: '123' + exception_date: '2026-12-25' + exception_type: custom_hours + name: Christmas Day (reduced hours) + time_intervals: + - start_minute: 540 + end_minute: 780 + day_of_week: 4 + recurring_annually: true + created_at: 1717200000 + updated_at: 1717203600 + schema: + "$ref": "#/components/schemas/office_hours_exception" + '401': + "$ref": "#/components/responses/Unauthorized" + '404': + "$ref": "#/components/responses/ObjectNotFound" + '422': + "$ref": "#/components/responses/ValidationError" + delete: + summary: Delete an office hours exception + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: office_hours_schedule_id + in: path + required: true + description: The unique identifier for the office hours schedule. + example: '123' + schema: + type: string + - name: id + in: path + required: true + description: The unique identifier for the office hours exception. + example: '456' + schema: + type: string + tags: + - Office Hours + operationId: deleteOfficeHoursException + description: You can delete a single office hours exception. + responses: + '200': + description: Office hours exception deleted + content: + application/json: + examples: + Office hours exception deleted: + value: + id: '456' + object: office_hours_exception + deleted: true + schema: + type: object + properties: + id: + type: string + example: '456' + object: + type: string + example: office_hours_exception + deleted: + type: boolean + example: true + '401': + "$ref": "#/components/responses/Unauthorized" + '404': + "$ref": "#/components/responses/ObjectNotFound" + "/office_hours_schedules/{office_hours_schedule_id}/office_hours_exceptions": + get: + summary: List all office hours exceptions + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: office_hours_schedule_id + in: path + required: true + description: The unique identifier for the office hours schedule. + example: '123' + schema: + type: string + tags: + - Office Hours + operationId: listOfficeHoursExceptions + description: You can fetch a list of all exceptions for an office hours schedule. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: office_hours_exception.list + data: + - type: office_hours_exception + id: '456' + office_hours_schedule_id: '123' + exception_date: '2026-12-25' + exception_type: closed + name: Christmas Day + time_intervals: + recurring_annually: true + created_at: 1717200000 + updated_at: 1717200000 + - type: office_hours_exception + id: '457' + office_hours_schedule_id: '123' + exception_date: '2026-12-24' + exception_type: custom_hours + name: Christmas Eve + time_intervals: + - start_minute: 540 + end_minute: 780 + day_of_week: 3 + recurring_annually: true + created_at: 1717200000 + updated_at: 1717200000 + schema: + "$ref": "#/components/schemas/office_hours_exception_list" + '401': + "$ref": "#/components/responses/Unauthorized" + '404': + "$ref": "#/components/responses/ObjectNotFound" + post: + summary: Create an office hours exception + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: office_hours_schedule_id + in: path + required: true + description: The unique identifier for the office hours schedule. + example: '123' + schema: + type: string + tags: + - Office Hours + operationId: createOfficeHoursException + description: You can create an exception for an office hours schedule. Use `closed` + to mark the day closed (omit `time_intervals`) or `custom_hours` to supply + replacement intervals. + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/create_office_hours_exception_request" + examples: + Create exception: + value: + exception_date: '2026-12-25' + exception_type: closed + name: Christmas Day + recurring_annually: true + responses: + '201': + description: Office hours exception created + content: + application/json: + examples: + Office hours exception created: + value: + type: office_hours_exception + id: '458' + office_hours_schedule_id: '123' + exception_date: '2026-12-25' + exception_type: closed + name: Christmas Day + time_intervals: + recurring_annually: true + created_at: 1717200000 + updated_at: 1717200000 + schema: + "$ref": "#/components/schemas/office_hours_exception" + '401': + "$ref": "#/components/responses/Unauthorized" + '404': + "$ref": "#/components/responses/ObjectNotFound" + '422': + "$ref": "#/components/responses/ValidationError" + "/office_hours_schedules/{id}": + get: + summary: Retrieve an office hours schedule + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the office hours schedule. + example: '123' + schema: + type: string + tags: + - Office Hours + operationId: getOfficeHoursSchedule + description: You can fetch the details of a single office hours schedule. + responses: + '200': + description: Office hours schedule found + content: + application/json: + examples: + Office hours schedule found: + value: + type: office_hours_schedule + id: '123' + name: Standard Support Hours + time_zone_name: America/New_York + time_intervals: + - start_minute: 540 + end_minute: 1020 + day_of_week: 0 + twenty_four_seven: false + created_at: 1717200000 + updated_at: 1717200000 + schema: + "$ref": "#/components/schemas/office_hours_schedule" + '401': + "$ref": "#/components/responses/Unauthorized" + '404': + "$ref": "#/components/responses/ObjectNotFound" + put: + summary: Update an office hours schedule + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the office hours schedule. + example: '123' + schema: + type: string + tags: + - Office Hours + operationId: updateOfficeHoursSchedule + description: You can update an existing office hours schedule. + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_office_hours_schedule_request" + examples: + Update schedule: + value: + name: Extended Support Hours + time_intervals: + - start_minute: 480 + end_minute: 1080 + responses: + '200': + description: Office hours schedule updated + content: + application/json: + examples: + Office hours schedule updated: + value: + type: office_hours_schedule + id: '123' + name: Extended Support Hours + time_zone_name: America/New_York + time_intervals: + - start_minute: 480 + end_minute: 1080 + day_of_week: 0 + twenty_four_seven: false + created_at: 1717200000 + updated_at: 1717203600 + schema: + "$ref": "#/components/schemas/office_hours_schedule" + '401': + "$ref": "#/components/responses/Unauthorized" + '404': + "$ref": "#/components/responses/ObjectNotFound" + '422': + "$ref": "#/components/responses/ValidationError" + delete: + summary: Delete an office hours schedule parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: created_at_after - in: query + - name: id + in: path required: true - description: The start date that you request data for. It must be formatted - as a UNIX timestamp. - example: '1677253093' + description: The unique identifier for the office hours schedule. + example: '123' schema: type: string - - name: created_at_before - in: query - required: false - description: The end date that you request data for. It must be formatted - as a UNIX timestamp. - example: '1677861493' + tags: + - Office Hours + operationId: deleteOfficeHoursSchedule + description: You can delete a single office hours schedule. + responses: + '200': + description: Office hours schedule deleted + content: + application/json: + examples: + Office hours schedule deleted: + value: + id: '123' + object: office_hours_schedule + deleted: true + schema: + type: object + properties: + id: + type: string + example: '123' + object: + type: string + example: office_hours_schedule + deleted: + type: boolean + example: true + '401': + "$ref": "#/components/responses/Unauthorized" + '404': + "$ref": "#/components/responses/ObjectNotFound" + "/office_hours_schedules": + get: + summary: List all office hours schedules + parameters: + - name: Intercom-Version + in: header schema: - type: string + "$ref": "#/components/schemas/intercom_version" tags: - - Admins - operationId: listActivityLogs - description: You can get a log of activities by all admins in an app. + - Office Hours + operationId: listOfficeHoursSchedules + description: You can fetch a list of all office hours schedules for the workspace. responses: '200': description: Successful response @@ -218,61 +1319,76 @@ paths: examples: Successful response: value: - type: activity_log.list - pages: - type: pages - next: - page: 1 - per_page: 20 - total_pages: 1 - activity_logs: - - id: fca05814-4b72-4dce-ad4f-77a786a2c136 - performed_by: - type: admin - id: '991267464' - email: admin5@email.com - ip: 127.0.0.1 - metadata: - before: before - after: after - created_at: 1734537253 - activity_type: app_name_change - activity_description: Ciaran5 Lee changed your app name from - before to after. - - id: f48c653b-0185-48ac-a276-23d11006bafb - performed_by: - type: admin - id: '991267464' - email: admin5@email.com - ip: 127.0.0.1 - metadata: - message: - id: 123 - title: Initial message title - before: Initial message title - after: Eventual message title - created_at: 1734537253 - activity_type: message_state_change - activity_description: Ciaran5 Lee changed your Initial message - title message from Initial message title to Eventual message - title. + type: office_hours_schedule.list + data: + - type: office_hours_schedule + id: '123' + name: Standard Support Hours + time_zone_name: America/New_York + time_intervals: + - start_minute: 540 + end_minute: 1020 + day_of_week: 0 + - start_minute: 1980 + end_minute: 2460 + day_of_week: 1 + twenty_four_seven: false + created_at: 1717200000 + updated_at: 1717200000 schema: - "$ref": "#/components/schemas/activity_log_list" + "$ref": "#/components/schemas/office_hours_schedule_list" '401': - description: Unauthorized + "$ref": "#/components/responses/Unauthorized" + post: + summary: Create an office hours schedule + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Office Hours + operationId: createOfficeHoursSchedule + description: You can create a new office hours schedule for the workspace. + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/create_office_hours_schedule_request" + examples: + Create schedule: + value: + name: Standard Support Hours + time_zone_name: America/New_York + time_intervals: + - start_minute: 540 + end_minute: 1020 + responses: + '201': + description: Office hours schedule created content: application/json: examples: - Unauthorized: + Office hours schedule created: value: - type: error.list - request_id: 57cc6148-2c0a-471b-bd9e-859538110958 - errors: - - code: unauthorized - message: Access Token Invalid + type: office_hours_schedule + id: '125' + name: Standard Support Hours + time_zone_name: America/New_York + time_intervals: + - start_minute: 540 + end_minute: 1020 + day_of_week: 0 + twenty_four_seven: false + created_at: 1717200000 + updated_at: 1717200000 schema: - "$ref": "#/components/schemas/error" - "/admins": + "$ref": "#/components/schemas/office_hours_schedule" + '401': + "$ref": "#/components/responses/Unauthorized" + '422': + "$ref": "#/components/responses/ValidationError" get: summary: List all admins parameters: @@ -2337,7 +3453,12 @@ paths: properties: id: type: string + description: The simple attribute identifier. Note that this may be ambiguous if the same name exists across different attribute types. Use qualified_id when calling the enqueue endpoint. example: conversation_id + qualified_id: + type: string + description: A namespaced identifier that uniquely identifies the attribute across all types. Format is "prefix.name" (e.g., "people.Brand", "conversation.Brand"). Required when calling the enqueue endpoint. + example: conversation.conversation_id name: type: string example: Conversation ID @@ -14193,50 +15314,245 @@ paths: description: successful "/jobs/status/{job_id}": get: - summary: Retrieve job status + summary: Retrieve job status + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: job_id + in: path + required: true + description: The unique identifier for the job which is given by Intercom + schema: + type: string + tags: + - Jobs + operationId: jobsStatus + description: Retrieve the status of job execution. + responses: + '200': + description: Job execution status + content: + application/json: + examples: + job status retrieved: + value: + type: job + id: '2' + status: success + resource_type: ticket + resource_id: '20' + resource_url: 'https://api.intercom.io/tickets/20' + schema: + "$ref": "#/components/schemas/jobs" + '404': + description: Job not found + content: + application/json: + examples: + Job not found: + value: + type: error.list + request_id: 123e4567-e89b-12d3-a456-426614174000 + errors: + - code: job_not_found + message: Job Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2c8a20ee-ed09-42c0-a31d-a1b4f5d2742d + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/messages": + "/messages/whatsapp/status": + get: + summary: Retrieve WhatsApp message delivery status + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: message_id + in: query + required: true + description: The WhatsApp message ID to check status for + schema: + type: string + tags: + - Messages + - WhatsApp + operationId: RetrieveWhatsAppMessageStatus + description: | + Retrieves the delivery status of a specific WhatsApp message by its message ID. + + + Returns the current status, conversation details, and any error information if the message failed to deliver. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + conversation_id: "123456789" + status: delivered + type: broadcast_outbound + created_at: 1734537980 + updated_at: 1734538000 + template_name: appointment_reminder + message_id: "wamid_abc123" + Failed message with error: + value: + conversation_id: "123456789" + status: failed + type: broadcast_outbound + created_at: 1734537980 + updated_at: 1734538000 + template_name: appointment_reminder + message_id: "wamid_abc123" + error: + message: "Message delivery failed" + details: "Recipient phone number not on WhatsApp" + schema: + "$ref": "#/components/schemas/whatsapp_message_status" + '400': + description: Bad request - missing required parameters + content: + application/json: + examples: + missing message_id: + value: + type: error + request_id: "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + message: "message_id is required" + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 8b2e4c6f-1234-5678-9abc-def012345678 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '404': + description: WhatsApp message not found + content: + application/json: + examples: + Message not found: + value: + type: error.list + request_id: c4d5e6f7-8901-2345-6789-abcdef012345 + errors: + - code: whatsapp_message_not_found + message: Whatsapp message not found + schema: + "$ref": "#/components/schemas/error" + "/messages/status": + get: + summary: Get statuses of all messages sent based on the specified ruleset_id parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: job_id - in: path + - name: ruleset_id + in: query required: true - description: The unique identifier for the job which is given by Intercom + description: The unique identifier for the set of messages to check status for + schema: + type: string + - name: per_page + in: query + required: false + description: Number of results per page (default 50, max 100) + schema: + type: integer + default: 50 + maximum: 100 + - name: starting_after + in: query + required: false + description: Cursor for pagination, used to fetch the next page of results schema: type: string tags: - - Jobs - operationId: jobsStatus - description: Retrieve the status of job execution. + - Messages + - WhatsApp + operationId: getWhatsAppMessageStatus + description: | + Retrieves statuses of messages sent from the Outbound module. Currently, this API only supports WhatsApp messages. + + + This endpoint returns paginated status events for WhatsApp messages sent via the Outbound module, providing + information about delivery state and related message details. responses: '200': - description: Job execution status + description: Successful response content: application/json: examples: - job status retrieved: + Successful response: value: - type: job - id: '2' - status: success - resource_type: ticket - resource_id: '20' - resource_url: 'https://api.intercom.io/tickets/20' - schema: - "$ref": "#/components/schemas/jobs" - '404': - description: Job not found + type: list + ruleset_id: 12345 + pages: + type: pages + per_page: 50 + total_pages: 3 + next: + starting_after: "abc123" + total_count: 125 + events: + - id: "event_1" + conversation_id: "conv_123" + user_id: "user_123" + status: "delivered" + type: "broadcast_outbound" + created_at: 1734537980 + updated_at: 1734538000 + whatsapp_message_id: "wamid_123" + template_name: "appointment_reminder" + - id: "event_2" + conversation_id: "conv_456" + user_id: "user_456" + status: "sent" + type: "broadcast_outbound" + created_at: 1734537970 + updated_at: 1734538010 + whatsapp_message_id: "wamid_456" + template_name: "order_update" + schema: + "$ref": "#/components/schemas/whatsapp_message_status_list" + '400': + description: Bad request - missing required parameters content: application/json: examples: - Job not found: + missing ruleset_id: value: - type: error.list - request_id: 123e4567-e89b-12d3-a456-426614174000 - errors: - - code: job_not_found - message: Job Not Found + type: error + request_id: "req_123" + message: "ruleset_id is required" schema: "$ref": "#/components/schemas/error" '401': @@ -14247,13 +15563,38 @@ paths: Unauthorized: value: type: error.list - request_id: 2c8a20ee-ed09-42c0-a31d-a1b4f5d2742d + request_id: d7997515-cd92-4fe4-966c-cb1f4bdda1d4 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/messages": + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 591a0c2f-78b3-41bb-bfa7-f1fae15107b0 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + '500': + description: Internal server error + content: + application/json: + examples: + server error: + value: + type: error + request_id: 591a0c2f-78b3-41bb-bfa7-f1fae15107b2 + message: "Request failed due to an internal error. Please reach out to support" + schema: + "$ref": "#/components/schemas/error" post: summary: Create a message parameters: @@ -15998,6 +17339,88 @@ paths: schema: "$ref": "#/components/schemas/error" "/teams/{team_id}": + "/teams/{team_id}/metrics": + get: + summary: Retrieve team metrics + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: team_id + in: path + required: true + description: The unique identifier of the team to retrieve metrics for. Use `GET /teams` to list available team IDs. + example: "42" + schema: + type: string + - name: idle_threshold + in: query + required: false + description: The number of seconds after which an open conversation is considered idle. Clamped to the range 1–86400. Defaults to 1800 (30 minutes). + schema: + type: integer + default: 1800 + example: 1800 + tags: + - Teams + operationId: getTeamMetrics + description: | + Returns real-time activity metrics for admins in the specified team. For each admin, the response includes counts of open, idle, and snoozed conversations. + + This endpoint requires the `realtime_monitoring` feature to be enabled for your workspace. + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: "#/components/schemas/team_metric_list" + examples: + successful_response: + value: + type: team_metric.list + data: + - type: team_metric + admin_id: "123" + open: 5 + idle: 2 + snoozed: 1 + - type: team_metric + admin_id: "456" + open: 3 + idle: 0 + snoozed: 2 + '401': + "$ref": "#/components/responses/Unauthorized" + '403': + description: Feature not enabled + content: + application/json: + examples: + feature_disabled: + value: + type: error.list + request_id: "req-456" + errors: + - code: api_plan_restricted + message: "Real-time monitoring is not enabled for your workspace." + schema: + "$ref": "#/components/schemas/error" + '404': + description: Team not found + content: + application/json: + examples: + team_not_found: + value: + type: error.list + request_id: "req-789" + errors: + - code: team_not_found + message: "Team not found" + schema: + "$ref": "#/components/schemas/error" get: summary: Retrieve a team parameters: @@ -19520,71 +20943,337 @@ paths: required: true schema: type: string - example: "12345" - tags: - - Workflows - operationId: exportWorkflow - description: | - Export a workflow configuration by its ID. This endpoint returns the complete workflow definition including its steps, targeting rules, and attributes. - - This endpoint is designed for EU Data Act compliance, allowing customers to export their workflow configurations. - responses: - '200': - description: Workflow exported successfully - content: - application/json: - examples: - successful: - value: - export_version: "1.0" - exported_at: "2026-01-26T12:00:00Z" - app_id: 12345 - workflow: - id: "67890" - title: "My Workflow" - description: "A workflow that handles customer inquiries" - trigger_type: "inbound_conversation" - state: "live" - target_channels: ["chat"] - preferred_devices: ["desktop", "mobile"] - created_at: "2025-06-15T10:30:00Z" - updated_at: "2026-01-20T14:45:00Z" - targeting: {} - snapshot: {} - attributes: [] - embedded_rules: [] - schema: - "$ref": "#/components/schemas/workflow_export" - '404': - description: Workflow not found - content: - application/json: - examples: - Workflow not found: - value: - type: error.list - request_id: b3c8c472-8478-4f10-a29e-a23dbf921c46 - errors: - - code: not_found - message: Workflow not found - schema: - "$ref": "#/components/schemas/error" - '403': - description: Workflow export is not available for this app - content: - application/json: - examples: - Feature not available: - value: - type: error.list - request_id: d92f7e84-5c31-4a2b-b8e6-9f4c3d2a1b0e - errors: - - code: api_plan_restricted - message: Workflow export is not available for this app - schema: - "$ref": "#/components/schemas/error" -components: - schemas: + example: "12345" + tags: + - Workflows + operationId: exportWorkflow + description: | + Export a workflow configuration by its ID. This endpoint returns the complete workflow definition including its steps, targeting rules, and attributes. + + This endpoint is designed for EU Data Act compliance, allowing customers to export their workflow configurations. + responses: + '200': + description: Workflow exported successfully + content: + application/json: + examples: + successful: + value: + export_version: "1.0" + exported_at: "2026-01-26T12:00:00Z" + app_id: 12345 + workflow: + id: "67890" + title: "My Workflow" + description: "A workflow that handles customer inquiries" + trigger_type: "inbound_conversation" + state: "live" + target_channels: ["chat"] + preferred_devices: ["desktop", "mobile"] + created_at: "2025-06-15T10:30:00Z" + updated_at: "2026-01-20T14:45:00Z" + targeting: {} + snapshot: {} + attributes: [] + embedded_rules: [] + schema: + "$ref": "#/components/schemas/workflow_export" + '404': + description: Workflow not found + content: + application/json: + examples: + Workflow not found: + value: + type: error.list + request_id: b3c8c472-8478-4f10-a29e-a23dbf921c46 + errors: + - code: not_found + message: Workflow not found + schema: + "$ref": "#/components/schemas/error" + '403': + description: Workflow export is not available for this app + content: + application/json: + examples: + Feature not available: + value: + type: error.list + request_id: d92f7e84-5c31-4a2b-b8e6-9f4c3d2a1b0e + errors: + - code: api_plan_restricted + message: Workflow export is not available for this app + schema: + "$ref": "#/components/schemas/error" +components: + schemas: + office_hours_time_interval: + type: object + title: Office Hours Time Interval + x-tags: + - Office Hours + description: A single open interval. For schedules, `start_minute` and `end_minute` + are minute offsets from the start of the week (Monday 00:00 = 0), in the range + 0 to 10080. For exceptions, they are minute offsets from midnight on `exception_date`, + in the range 0 to 1440. + properties: + start_minute: + type: integer + description: Minute the interval starts. For schedules, offset from the start + of the week (Monday 00:00 = 0); for exceptions, offset from midnight on + `exception_date`. + example: 540 + end_minute: + type: integer + description: Minute the interval ends. For schedules, offset from the start + of the week (Monday 00:00 = 0); for exceptions, offset from midnight on + `exception_date`. + example: 1020 + day_of_week: + type: integer + readOnly: true + description: Derived day of the week the interval falls on (0 = Monday … 6 + = Sunday). For exceptions, this is derived from `exception_date`. + example: 0 + office_hours_schedule: + type: object + title: Office Hours Schedule + x-tags: + - Office Hours + description: An office hours schedule defines the recurring weekly hours during + which the workspace is open. + properties: + type: + type: string + description: The type of the object - always `office_hours_schedule`. + example: office_hours_schedule + id: + type: string + description: The unique identifier for the office hours schedule. + example: '123' + name: + type: string + description: The name of the office hours schedule. + example: Standard Support Hours + time_zone_name: + type: string + description: The IANA time zone the schedule's hours are evaluated in. + example: America/New_York + time_intervals: + type: array + description: The open intervals that make up the weekly schedule. + items: + "$ref": "#/components/schemas/office_hours_time_interval" + twenty_four_seven: + type: boolean + description: Whether the schedule is open 24/7. + example: false + created_at: + type: integer + description: The time the schedule was created as a Unix timestamp. + example: 1717200000 + updated_at: + type: integer + description: The time the schedule was last updated as a Unix timestamp. + example: 1717200000 + office_hours_schedule_list: + type: object + title: Office Hours Schedule List + description: A list of office hours schedules. + properties: + type: + type: string + description: The type of the object - always `office_hours_schedule.list`. + example: office_hours_schedule.list + data: + type: array + description: An array of office hours schedules. + items: + "$ref": "#/components/schemas/office_hours_schedule" + create_office_hours_schedule_request: + type: object + title: Create Office Hours Schedule Request + description: The request payload for creating an office hours schedule. + required: + - name + - time_zone_name + - time_intervals + properties: + name: + type: string + description: The name of the office hours schedule. + example: Standard Support Hours + time_zone_name: + type: string + description: The IANA time zone the schedule's hours are evaluated in. + example: America/New_York + time_intervals: + type: array + description: The open intervals for the schedule. `start_minute` and `end_minute` + must be on a 15-minute boundary. + items: + "$ref": "#/components/schemas/office_hours_time_interval" + update_office_hours_schedule_request: + type: object + title: Update Office Hours Schedule Request + description: The request payload for updating an office hours schedule. Only the + provided fields are updated. + properties: + name: + type: string + description: The name of the office hours schedule. + example: Extended Support Hours + time_zone_name: + type: string + description: The IANA time zone the schedule's hours are evaluated in. + example: America/New_York + time_intervals: + type: array + description: The open intervals for the schedule. `start_minute` and `end_minute` + must be on a 15-minute boundary. + items: + "$ref": "#/components/schemas/office_hours_time_interval" + office_hours_exception: + type: object + title: Office Hours Exception + x-tags: + - Office Hours + description: An exception overrides a schedule's regular hours on a specific date, + such as a public holiday. + properties: + type: + type: string + description: The type of the object - always `office_hours_exception`. + example: office_hours_exception + id: + type: string + description: The unique identifier for the office hours exception. + example: '456' + office_hours_schedule_id: + type: string + description: The unique identifier for the schedule this exception belongs to. + example: '123' + exception_date: + type: string + format: date + description: The date the exception applies to, in `YYYY-MM-DD` format. + example: '2026-12-25' + exception_type: + type: string + description: '`closed` means the workspace is closed all day; `custom_hours` + replaces the regular hours with `time_intervals`.' + enum: + - closed + - custom_hours + example: closed + name: + type: string + nullable: true + description: An optional name for the exception. + example: Christmas Day + time_intervals: + type: array + nullable: true + description: The open intervals for the exception date. `null` when `exception_type` + is `closed`. + items: + "$ref": "#/components/schemas/office_hours_time_interval" + recurring_annually: + type: boolean + description: Whether the exception repeats every year on the same date. + example: true + created_at: + type: integer + description: The time the exception was created as a Unix timestamp. + example: 1717200000 + updated_at: + type: integer + description: The time the exception was last updated as a Unix timestamp. + example: 1717200000 + office_hours_exception_list: + type: object + title: Office Hours Exception List + description: A list of office hours exceptions. + properties: + type: + type: string + description: The type of the object - always `office_hours_exception.list`. + example: office_hours_exception.list + data: + type: array + description: An array of office hours exceptions. + items: + "$ref": "#/components/schemas/office_hours_exception" + create_office_hours_exception_request: + type: object + title: Create Office Hours Exception Request + description: The request payload for creating an office hours exception. Omit + `time_intervals` when `exception_type` is `closed`. + required: + - exception_date + - exception_type + properties: + exception_date: + type: string + format: date + description: The date the exception applies to, in `YYYY-MM-DD` format. + example: '2026-12-25' + exception_type: + type: string + enum: + - closed + - custom_hours + description: The type of exception. + example: closed + name: + type: string + description: An optional name for the exception. + example: Christmas Day + time_intervals: + type: array + nullable: true + description: The open intervals for the exception date. Required for `custom_hours`; + omit for `closed`. + items: + "$ref": "#/components/schemas/office_hours_time_interval" + recurring_annually: + type: boolean + description: Whether the exception repeats every year on the same date. + example: true + update_office_hours_exception_request: + type: object + title: Update Office Hours Exception Request + description: The request payload for updating an office hours exception. Only + the provided fields are updated. + properties: + exception_date: + type: string + format: date + description: The date the exception applies to, in `YYYY-MM-DD` format. + example: '2026-12-25' + exception_type: + type: string + enum: + - closed + - custom_hours + description: The type of exception. + example: custom_hours + name: + type: string + description: An optional name for the exception. + example: Christmas Day (reduced hours) + time_intervals: + type: array + nullable: true + description: The open intervals for the exception date. Required for `custom_hours`; + omit for `closed`. + items: + "$ref": "#/components/schemas/office_hours_time_interval" + recurring_annually: + type: boolean + description: Whether the exception repeats every year on the same date. + example: true datetime: oneOf: - title: string @@ -19752,6 +21441,27 @@ components: type: string description: A sentence or two describing the activity. example: Admin updated the app's name to "My App". + activity_log_event_type_list: + title: Activity Log Event Types + type: object + x-tags: + - Admins + description: A list of all activity log event types. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `activity_log_event_type.list`. + example: activity_log_event_type.list + event_types: + type: array + description: An array of activity log event type strings. + items: + type: string + example: + - admin_login_success + - admin_logout + - app_name_change activity_log_list: title: Paginated Response type: object @@ -19963,6 +21673,25 @@ components: example: https://picsum.photos/200/300 team_priority_level: "$ref": "#/components/schemas/team_priority_level" + role: + type: object + nullable: true + description: The role assigned to this admin. Only present if the admin has + a role assigned. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `role`. + example: role + id: + type: string + description: The id of the role. + example: '1' + name: + type: string + description: The name of the role. + example: Support Agent admin_list: title: Admins type: object @@ -21187,6 +22916,40 @@ components: type: array items: $ref: "#/components/schemas/brand" + team_metric: + type: object + description: Per-admin activity metrics within a team. + properties: + type: + type: string + example: "team_metric" + admin_id: + type: string + description: The unique identifier for the admin. + example: "123" + open: + type: integer + description: The number of open conversations assigned to the admin. + example: 5 + idle: + type: integer + description: The number of idle conversations assigned to the admin. A conversation is idle when it has been open and waiting for an admin reply longer than the idle_threshold. + example: 2 + snoozed: + type: integer + description: The number of snoozed conversations assigned to the admin. + example: 1 + team_metric_list: + type: object + description: A list of team metrics. + properties: + type: + type: string + example: "team_metric.list" + data: + type: array + items: + $ref: "#/components/schemas/team_metric" away_status_reason: type: object properties: @@ -24052,6 +25815,8 @@ components: description: Whether or not the source message has been redacted. Only applicable for contact initiated messages. example: false + email_message_metadata: + "$ref": "#/components/schemas/source_email_message_metadata" conversation_source_author: title: Conversation source author type: object @@ -24078,6 +25843,30 @@ components: nullable: true description: The email of the author. example: jane.doe@example.com + source_email_message_metadata: + title: Email Message Metadata + type: object + description: Contains metadata if the message was sent as an email + properties: + message_id: + type: string + nullable: true + description: The unique identifier for the email message as specified in the Message-ID header + example: "" + subject: + type: string + description: The subject of the email + example: Question about my order + email_address_headers: + title: Email Address Headers + type: array + description: A list of an email address headers. + items: + "$ref": "#/components/schemas/email_address_header" + history: + type: string + description: The HTML content of any quoted or forwarded email history from the initial inbound message + example: '
On Jan 28, wrote:
Previous thread
' conversation_statistics: title: Conversation statistics type: object @@ -28561,6 +30350,109 @@ components: description: An array containing the linked conversations and linked tickets. items: "$ref": "#/components/schemas/linked_object" + macro: + title: Macro + type: object + x-tags: + - Macros + description: A macro is a pre-defined response template (saved reply) that can be used to quickly reply to conversations. + nullable: true + properties: + type: + type: string + description: String representing the object's type. Always has the value `macro`. + enum: + - macro + example: macro + id: + type: string + description: The unique identifier for the macro. + example: "123" + name: + type: string + description: The name of the macro. + example: "Order Status Update" + body: + type: string + description: The body of the macro in HTML format with placeholders transformed to XML-like format. + example: "

Hi , your order is ready!

" + body_text: + type: string + description: The plain text version of the macro body with original Intercom placeholder format. + example: "Hi {{user.name|fallback:\"there\"}}, your order is ready!" + created_at: + type: string + format: date-time + description: The time the macro was created in ISO 8601 format. + example: "2025-07-17T11:18:08.000Z" + updated_at: + type: string + format: date-time + description: The time the macro was last updated in ISO 8601 format. + example: "2025-07-17T15:30:24.000Z" + visible_to: + type: string + description: Who can view this macro. + enum: + - everyone + - specific_teams + example: everyone + visible_to_team_ids: + type: array + description: The team IDs that can view this macro when visible_to is set to specific_teams. + items: + type: string + example: ["456", "789"] + available_on: + type: array + description: Where the macro is available for use. + items: + type: string + enum: + - inbox + - messenger + example: ["inbox", "messenger"] + macro_list: + title: Macro List + type: object + x-tags: + - Macros + description: A paginated list of macros (saved replies) in the workspace. + properties: + type: + type: string + description: Always list + enum: + - list + example: list + data: + type: array + description: The list of macro objects + items: + "$ref": "#/components/schemas/macro" + pages: + type: object + description: Pagination information + properties: + type: + type: string + description: The type of pagination + enum: + - pages + example: pages + per_page: + type: integer + description: Number of results per page + example: 50 + next: + type: object + nullable: true + description: Cursor for the next page + properties: + starting_after: + type: string + description: Base64-encoded cursor containing [updated_at, id] for pagination + example: "WzE3MTk0OTM3NTcuMCwgIjEyMyJd" merge_contacts_request: merge_history_item: title: Merge History Item @@ -28699,6 +30591,50 @@ components: - created_at - body - message_type + whatsapp_message_status: + type: object + description: The delivery status of a specific WhatsApp message. + properties: + conversation_id: + type: string + description: ID of the conversation + example: "123456789" + status: + type: string + description: Current delivery status of the message + enum: ["sent", "delivered", "read", "failed"] + example: delivered + type: + type: string + description: Event type + example: broadcast_outbound + created_at: + type: integer + description: Creation timestamp + example: 1734537980 + updated_at: + type: integer + description: Last update timestamp + example: 1734538000 + template_name: + type: string + description: Name of the WhatsApp template used + example: appointment_reminder + message_id: + type: string + description: The WhatsApp message ID + example: "wamid_abc123" + error: + type: object + nullable: true + description: Error details, present only when status is "failed" + properties: + message: + type: string + description: Error message + details: + type: string + description: Detailed error information whatsapp_message_status_list: type: object required: @@ -31678,6 +33614,9 @@ tags: {% /admonition %} - name: Jobs description: Everything about jobs +- name: Macros + description: Operations related to saved replies (macros) in conversations + x-displayName: Macros - name: Messages description: Everything about your messages - name: News @@ -31687,6 +33626,10 @@ tags: url: https://www.intercom.com/help/en/articles/6362251-news-explained - name: Notes description: Everything about your Notes +- name: Office Hours + description: | + Manage office hours schedules and their exceptions. These endpoints require an + OAuth token with the `read_write_office_hours` scope. - name: Reporting Data Export description: Everything about Reporting Data Export. See this [article](https://www.intercom.com/help/en/articles/12089688-api-metrics-documentation) for details on using the data to generate various metrics. - name: Segments From 0939595d08c3cdcac6f090b8d99fd2a4dfb16a48 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 10:45:42 +0100 Subject: [PATCH 08/22] Graduate article & knowledge non-breaking changes into v2.16 OpenAPI spec - Article version history API; article fin statistics - Agent availability, audit/suggestion, help-center audience, scheduled publishing fields - audience_ids on articles and internal articles - default & locales on help center response Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 692 +++++++++++++++++++++++++ 1 file changed, 692 insertions(+) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index 4ad4d5eb..fc9ffcaa 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -2702,6 +2702,196 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + "/articles/{article_id}/versions": + get: + summary: List article versions + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: article_id + in: path + required: true + description: The unique identifier for the article whose versions you are + listing. + example: 123 + schema: + type: integer + - name: page + in: query + required: false + description: The page of results to fetch. Defaults to the first page. + example: 1 + schema: + type: integer + - name: per_page + in: query + required: false + description: The number of results to return per page. + example: 25 + schema: + type: integer + - name: locale + in: query + required: false + description: Filter versions to a specific locale. Use the locale identifier + (for example `en`, `fr`). If the locale is not configured for the workspace, + a `400` is returned. + example: en + schema: + type: string + tags: + - Articles + operationId: listArticleVersions + description: | + Fetch the version history of an article by making a GET request to + `https://api.intercom.io/articles//versions`. Versions are + returned newest-first as a paginated list of metadata. Use + `GET /articles/{article_id}/versions/{id}` to retrieve a single version + with its full content. + + Requires the `read_articles_scope` OAuth scope. + responses: + '200': + description: Versions found + content: + application/json: + examples: + Versions found: + value: + type: list + pages: + type: pages + page: 1 + per_page: 25 + total_pages: 1 + total_count: 2 + data: + - type: article_version + id: '301' + article_id: '123' + title: This is the article title + description: '' + author_id: '991267502' + created_by_id: '5017691' + created_via: web + from_version_id: '300' + state: published + created_at: 1734537292 + - type: article_version + id: '300' + article_id: '123' + title: This was the earlier title + description: '' + author_id: '991267502' + created_by_id: '5017691' + created_via: api + from_version_id: null + state: draft + created_at: 1734530000 + schema: + "$ref": "#/components/schemas/article_version_list" + '400': + description: Unknown locale + content: + application/json: + examples: + Unknown locale: + value: + type: error.list + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + errors: + - code: parameter_invalid + message: Unknown locale + schema: + "$ref": "#/components/schemas/error" + '404': + "$ref": "#/components/responses/ObjectNotFound" + '401': + "$ref": "#/components/responses/Unauthorized" + "/articles/{article_id}/versions/{id}": + get: + summary: Retrieve an article version + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: article_id + in: path + required: true + description: The unique identifier for the article. + example: 123 + schema: + type: integer + - name: id + in: path + required: true + description: The unique identifier for the version. + example: '301' + schema: + type: string + - name: locale + in: query + required: false + description: Return the version's content for a specific locale. If the locale + is not configured for the workspace, a `400` is returned. + example: en + schema: + type: string + tags: + - Articles + operationId: retrieveArticleVersion + description: | + Fetch a single prior version of an article, including its body content, + by making a GET request to + `https://api.intercom.io/articles//versions/`. Returns + the version's full content; the live article remains untouched. + + Requires the `read_articles_scope` OAuth scope. + responses: + '200': + description: Version found + content: + application/json: + examples: + Version found: + value: + type: article_version + id: '301' + article_id: '123' + title: This is the article title + description: '' + body:

Body of this version

+ body_markdown: "Body of this version\n" + author_id: '991267502' + created_by_id: '5017691' + created_via: web + from_version_id: '300' + state: published + created_at: 1734537292 + updated_at: 1734537292 + schema: + "$ref": "#/components/schemas/article_version" + '400': + description: Unknown locale + content: + application/json: + examples: + Unknown locale: + value: + type: error.list + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + errors: + - code: parameter_invalid + message: Unknown locale + schema: + "$ref": "#/components/schemas/error" + '404': + "$ref": "#/components/responses/ObjectNotFound" + '401': + "$ref": "#/components/responses/Unauthorized" "/articles/search": get: summary: Search for articles @@ -22312,6 +22502,43 @@ components: url: type: string description: The URL of the article. + audience_ids: + type: array + nullable: true + description: >- + The list of audience IDs this article content is targeted to for Fin AI Agent. + On multilingual help centers this field appears per-locale inside `translated_content`. + On single-language help centers it appears at the article root level. + Empty array means no audience targeting is set. + items: + type: integer + example: + - 1 + - 2 + ai_chatbot_availability: + type: boolean + description: Whether the article is available for AI Chatbot. + example: true + ai_copilot_availability: + type: boolean + description: Whether the article is available for AI Copilot. + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the article is available for AI Sales Agent. + example: true + created_by_id: + type: integer + nullable: true + readOnly: true + description: The ID of the teammate who created this content version. + example: 5017691 + updated_by_id: + type: integer + nullable: true + readOnly: true + description: The ID of the teammate who last updated this content version. + example: 5017691 example: http://intercom.test/help/en/articles/3-default-language internal_article_list: title: Internal Articles @@ -22440,6 +22667,75 @@ components: example: - 18 - 19 + ai_chatbot_availability: + type: boolean + description: Whether the article is available for AI Chatbot. For multilingual + articles, this will be the value of the default language's content. + example: true + ai_copilot_availability: + type: boolean + description: Whether the article is available for AI Copilot. For multilingual + articles, this will be the value of the default language's content. + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the article is available for AI Sales Agent. For multilingual + articles, this will be the value of the default language's content. + example: true + created_by_id: + type: integer + nullable: true + readOnly: true + description: The ID of the teammate who created the article. For multilingual + articles, this will be the creator of the default language's content. + example: 5017691 + updated_by_id: + type: integer + nullable: true + readOnly: true + description: The ID of the teammate who last updated the article. For multilingual + articles, this will be the last editor of the default language's content. + example: 5017691 + exclude_from_article_suggestions: + type: boolean + readOnly: true + description: Whether the article is excluded from Fin AI Agent article suggestions. + example: false + help_center_audience: + type: string + nullable: true + readOnly: true + enum: + - everyone + - all_users + - all_visitors + - all_leads + - all_visitors_and_leads + - restricted + description: The audience that can view this article in the Help Center. `everyone` + means all users and visitors can view it; `restricted` indicates a custom audience + ruleset. For multilingual articles, this is the article-level audience. + example: everyone + scheduled_publish_at: + type: integer + format: date-time + nullable: true + readOnly: true + description: >- + The Unix timestamp (in seconds) at which the article is scheduled to be + published. `null` when no publish is scheduled. Mutually exclusive with + `scheduled_unpublish_at` — at most one pending schedule exists per article. + example: 1769443200 + scheduled_unpublish_at: + type: integer + format: date-time + nullable: true + readOnly: true + description: >- + The Unix timestamp (in seconds) at which the article is scheduled to be + unpublished. `null` when no unpublish is scheduled. Mutually exclusive + with `scheduled_publish_at` — at most one pending schedule exists per article. + example: 1769443200 default_locale: type: string description: The default locale of the help center. This field is only returned @@ -22497,6 +22793,29 @@ components: locale: type: string description: The default locale of the article. + audience_ids: + type: array + nullable: true + description: >- + The list of audience IDs this internal article is targeted to for Fin AI Agent. + Empty array means no audience targeting is set. + items: + type: integer + example: + - 1 + - 2 + ai_chatbot_availability: + type: boolean + description: Whether the internal article is available for AI Chatbot (Fin). + example: true + ai_copilot_availability: + type: boolean + description: Whether the internal article is available for AI Copilot. + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the internal article is available for AI Sales Agent. + example: true example: en article_search_highlights: title: Article Search Highlights @@ -22652,6 +22971,25 @@ components: type: number format: float description: The percentage of sad reactions the article has received against + fin_involvements: + type: integer + readOnly: true + description: The number of conversations in which Fin AI Agent used this article, + summed across all of the article's locales. + example: 10 + fin_resolutions: + type: integer + readOnly: true + description: The number of conversations Fin AI Agent resolved using this article, + summed across all of the article's locales. + example: 8 + fin_resolution_rate: + type: number + format: float + readOnly: true + description: The percentage of Fin AI Agent involvements that resulted in a resolution + (fin_resolutions / fin_involvements * 100). + example: 80.0 other types of reaction. example: 20.0 article_translated_content: @@ -22780,6 +23118,174 @@ components: zh-TW: description: The content of the article in Chinese (Taiwan) "$ref": "#/components/schemas/article_content" + article_version: + title: Article Version + type: object + x-tags: + - Articles + description: A historical version of an article, including its content. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `article_version`. + enum: + - article_version + example: article_version + id: + type: string + description: The unique identifier for the version. + example: '301' + article_id: + type: string + description: The unique identifier of the article this version belongs to. + example: '123' + title: + type: string + description: The title of the article at this version. + example: This is the article title + description: + type: string + nullable: true + description: The description of the article at this version. + example: '' + body: + type: string + nullable: true + description: The HTML body of the article at this version. + example:

Body of this version

+ body_markdown: + type: string + nullable: true + description: The Markdown body of the article at this version. + example: | + Body of this version + author_id: + type: string + description: The id of the teammate listed as the article's author at this + version. + example: '991267502' + created_by_id: + type: string + nullable: true + description: The id of the teammate who created this version. + example: '5017691' + created_via: + type: string + description: How this version was created (for example `web`, `api`). + example: web + from_version_id: + type: string + nullable: true + description: The id of the version this version was created from, or `null` + if this is the first version. + example: '300' + state: + type: string + description: Whether this version is the currently published version of + the article (`published`) or an earlier non-live version (`draft`). + enum: + - published + - draft + example: published + created_at: + type: integer + format: date-time + description: The time the version was created, as a UTC Unix timestamp. + example: 1734537292 + updated_at: + type: integer + format: date-time + description: The time the version was last updated, as a UTC Unix timestamp. + example: 1734537292 + article_version_list: + title: Article Versions + type: object + description: A paginated list of versions of an article. + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of versions. + example: 2 + data: + type: array + description: An array of Article version summary objects. + items: + "$ref": "#/components/schemas/article_version_summary" + article_version_summary: + title: Article Version Summary + type: object + x-tags: + - Articles + description: A metadata summary of an article version, as returned by the version-history + list endpoint. Omits the version's body content - fetch a single version to + retrieve its `body` and `body_markdown`. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `article_version`. + enum: + - article_version + example: article_version + id: + type: string + description: The unique identifier for the version. + example: '301' + article_id: + type: string + description: The unique identifier of the article this version belongs to. + example: '123' + title: + type: string + description: The title of the article at this version. + example: This is the article title + description: + type: string + nullable: true + description: The description of the article at this version. + example: '' + author_id: + type: string + description: The id of the teammate listed as the article's author at this + version. + example: '991267502' + created_by_id: + type: string + nullable: true + description: The id of the teammate who created this version. + example: '5017691' + created_via: + type: string + description: How this version was created (for example `web`, `api`). + example: web + from_version_id: + type: string + nullable: true + description: The id of the version this version was created from, or `null` + if this is the first version. + example: '300' + state: + type: string + description: Whether this version is the currently published version of + the article (`published`) or an earlier non-live version (`draft`). + enum: + - published + - draft + example: published + created_at: + type: integer + format: date-time + description: The time the version was created, as a UTC Unix timestamp. + example: 1734537292 assign_conversation_request: title: Assign Conversation Request type: object @@ -26160,6 +26666,64 @@ components: example: collection translated_content: "$ref": "#/components/schemas/article_translated_content" + audience_ids: + type: array + nullable: true + description: >- + The list of audience IDs to assign to this article for Fin AI Agent targeting. + Sending a top-level `audience_ids` broadcasts the same set to every locale. + For per-locale targeting, use `translated_content..audience_ids` instead. + Sending both top-level and per-locale in the same request causes top-level to win. + Unknown audience IDs return a 404 error. No partial commit occurs. + items: + type: integer + example: + - 1 + - 2 + ai_chatbot_availability: + type: boolean + description: Whether the article should be available for AI Chatbot (Fin). + For multilingual articles, this sets the default language's availability. + example: true + ai_copilot_availability: + type: boolean + description: Whether the article should be available for AI Copilot. For + multilingual articles, this sets the default language's availability. + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the article should be available for AI Sales Agent. + For multilingual articles, this sets the default language's availability. + example: true + scheduled_publish_at: + type: string + format: date-time + nullable: true + description: >- + ISO 8601 timestamp at which to schedule a future publish of the article. + When set together with `state: "published"`, the article is scheduled + instead of published immediately. Setting `null` cancels a pending + publish schedule. Timestamps in the past or equal to the current time + are rejected with 400 `parameter_invalid` — the value must be strictly + in the future. Combining with `state: "draft"` returns 400 + `parameter_invalid`. Sending in the same request as + `scheduled_unpublish_at` returns 400 — only one pending schedule per + article. Empty string returns 400 `parameter_invalid`. + example: '2026-12-31T09:00:00Z' + scheduled_unpublish_at: + type: string + format: date-time + nullable: true + description: >- + ISO 8601 timestamp at which to schedule a future unpublish of the article. + Setting `null` cancels a pending unpublish schedule. Timestamps in the + past or equal to the current time are rejected with 400 + `parameter_invalid` — the value must be strictly in the future. Rejected + with 400 `parameter_invalid` if the article has never been published. + Sending in the same request as `scheduled_publish_at` returns 400 — only + one pending schedule per article. Empty string returns 400 + `parameter_invalid`. + example: '2026-12-31T17:00:00Z' required: - title - author_id @@ -26185,6 +26749,36 @@ components: type: integer description: The id of the owner of the article. example: 1295 + audience_ids: + type: array + nullable: true + description: >- + The list of audience IDs to target this internal article to for Fin AI Agent. + Pass an empty array or omit the field for no audience targeting. + Unknown audience IDs return a `404` error with no partial commit. + items: + type: integer + example: + - 1 + - 2 + ai_chatbot_availability: + type: boolean + description: Whether the internal article should be available for AI Chatbot + (Fin). Defaults to false. + default: false + example: true + ai_copilot_availability: + type: boolean + description: Whether the internal article should be available for AI Copilot. + Defaults to false. + default: false + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the internal article should be available for AI Sales + Agent. Defaults to false. + default: false + example: true required: - title - owner_id @@ -30185,6 +30779,18 @@ components: nullable: true description: Custom domain configured for the help center example: "help.mycompany.com" + default: + type: boolean + description: Whether this help center is the default for the workspace. + example: false + locales: + type: array + description: The locales in which the help center is available. + items: + type: string + example: + - en + - fr help_center_list: title: Help Centers type: object @@ -32641,6 +33247,65 @@ components: example: collection translated_content: "$ref": "#/components/schemas/article_translated_content" + audience_ids: + type: array + nullable: true + description: >- + The list of audience IDs to assign to this article for Fin AI Agent targeting. + Sending a top-level `audience_ids` broadcasts the same set to every locale. + Sending `audience_ids: []` clears all audience memberships from every locale. + For per-locale targeting, use `translated_content..audience_ids` instead. + Sending both top-level and per-locale in the same request causes top-level to win. + Unknown audience IDs return a 404 error. No partial commit occurs. + items: + type: integer + example: + - 1 + - 2 + ai_chatbot_availability: + type: boolean + description: Whether the article should be available for AI Chatbot (Fin). + For multilingual articles, this sets the default language's availability. + example: true + ai_copilot_availability: + type: boolean + description: Whether the article should be available for AI Copilot. For + multilingual articles, this sets the default language's availability. + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the article should be available for AI Sales Agent. + For multilingual articles, this sets the default language's availability. + example: true + scheduled_publish_at: + type: string + format: date-time + nullable: true + description: >- + ISO 8601 timestamp at which to schedule a future publish of the article. + When set together with `state: "published"`, the article is scheduled + instead of published immediately. Setting `null` cancels a pending + publish schedule. Timestamps in the past or equal to the current time + are rejected with 400 `parameter_invalid` — the value must be strictly + in the future. Combining with `state: "draft"` returns 400 + `parameter_invalid`. Sending in the same request as + `scheduled_unpublish_at` returns 400 — only one pending schedule per + article. Empty string returns 400 `parameter_invalid`. + example: '2026-12-31T09:00:00Z' + scheduled_unpublish_at: + type: string + format: date-time + nullable: true + description: >- + ISO 8601 timestamp at which to schedule a future unpublish of the article. + Setting `null` cancels a pending unpublish schedule. Timestamps in the + past or equal to the current time are rejected with 400 + `parameter_invalid` — the value must be strictly in the future. Rejected + with 400 `parameter_invalid` if the article has never been published. + Sending in the same request as `scheduled_publish_at` returns 400 — only + one pending schedule per article. Empty string returns 400 + `parameter_invalid`. + example: '2026-12-31T17:00:00Z' update_internal_article_request: description: You can Update an Internal Article type: object @@ -32662,6 +33327,33 @@ components: type: integer description: The id of the author of the article. example: 1295 + audience_ids: + type: array + nullable: true + description: >- + The list of audience IDs to target this internal article to for Fin AI Agent. + Omitting the field leaves existing audience memberships unchanged (PATCH semantics). + Pass `[]` to clear all audience memberships. + Unknown audience IDs return a `404` error with no partial commit. + items: + type: integer + example: + - 1 + - 2 + ai_chatbot_availability: + type: boolean + description: Whether the internal article should be available for AI Chatbot + (Fin). + example: true + ai_copilot_availability: + type: boolean + description: Whether the internal article should be available for AI Copilot. + example: true + ai_sales_agent_availability: + type: boolean + description: Whether the internal article should be available for AI Sales + Agent. + example: true update_collection_request: description: You can update a collection type: object From 38d0dc1d595969aa7dbe3e6df24ef32a7e3c1fdf Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 12:44:10 +0100 Subject: [PATCH 09/22] Graduate contacts/search (sort-order validation) into v2.16 OpenAPI spec Copies the Preview /contacts/search surface verbatim into 2.16: adds the contact_search_request schema (sort.order enum ascending|descending), repoints the requestBody $ref off shared search_request, adds the 400 invalid_sort_order response, and aligns the timestamp prose + adds the formatted_phone searchable-field row. --- descriptions/2.16/api.intercom.io.yaml | 59 ++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index fc9ffcaa..3e44d0e4 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -7931,9 +7931,9 @@ paths: ### Searching for Timestamp Fields - All timestamp fields (created_at, updated_at etc.) are indexed as Dates for Contact Search queries; Datetime queries are not currently supported. This means you can only query for timestamp fields by day - not hour, minute or second. The day a timestamp falls on is determined using your workspace's timezone, so the same query can return different results across workspaces in different timezones. Because timestamps are stored in UTC, filtering by a value the API returned may not match the originating contact when your workspace is not set to UTC. - For example, on a workspace set to UTC, if you search for all Contacts with a created_at value greater (>) than 1577869200 (the UNIX timestamp for January 1st, 2020 9:00 AM UTC), that will be interpreted as 1577836800 (January 1st, 2020 12:00 AM UTC). The search results will then include Contacts created from January 2nd, 2020 12:00 AM UTC onwards. On a workspace in another timezone, the day boundaries fall on that timezone's midnight instead. - If you'd like to get contacts created on January 1st, 2020 you should search with a created_at value equal (=) to 1577836800 (January 1st, 2020 12:00 AM UTC). + All timestamp fields (created_at, updated_at etc.) are filtered by UTC calendar day in Contact Search. An equality (=) query on a timestamp matches any contact whose value falls on the same UTC day, so filtering by a value the API returned reliably matches that contact regardless of your workspace's timezone. Comparisons (>, <) are evaluated at UTC day granularity. + For example, if you search for all Contacts with a created_at value greater (>) than 1577869200 (the UNIX timestamp for January 1st, 2020 9:00 AM UTC), that will be interpreted as 1577836800 (January 1st, 2020 12:00 AM UTC). The search results will then include Contacts created from January 2nd, 2020 12:00 AM UTC onwards. + If you'd like to get contacts created on January 1st, 2020 (UTC) you should search with a created_at value equal (=) to 1577836800 (January 1st, 2020 12:00 AM UTC). This behaviour applies only to timestamps used in search queries. The search results will still contain the full UNIX timestamp and be sorted accordingly. ### Accepted Fields @@ -7950,6 +7950,7 @@ paths: | email | String | | email_domain | String | | phone | String | + | formatted_phone | String | | external_id | String | | created_at | Date (UNIX Timestamp) | | signed_up_at | Date (UNIX Timestamp) | @@ -8037,11 +8038,25 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + '400': + description: Bad Request + content: + application/json: + examples: + Invalid sort order: + value: + type: error.list + request_id: 8d6c1f0a-3b2e-4a17-9c5d-1f0e2a3b4c5d + errors: + - code: invalid_sort_order + message: "Invalid sort order 'desc'. Must be one of: ascending, descending" + schema: + "$ref": "#/components/schemas/error" requestBody: content: application/json: schema: - "$ref": "#/components/schemas/search_request" + "$ref": "#/components/schemas/contact_search_request" examples: successful: summary: successful @@ -8052,6 +8067,9 @@ paths: - field: created_at operator: ">" value: '1306054154' + sort: + field: created_at + order: ascending pagination: per_page: 5 "/contacts": @@ -24639,6 +24657,39 @@ components: maxItems: 10 required: - user_id + contact_search_request: + description: Search for contacts using Intercom's Search API. + type: object + title: Contact search request + properties: + query: + oneOf: + - "$ref": "#/components/schemas/single_filter_search_request" + title: Single filter search request + - "$ref": "#/components/schemas/multiple_filter_search_request" + title: multiple filter search request + pagination: + "$ref": "#/components/schemas/starting_after_paging" + sort: + type: object + description: An optional object to sort the results by. + properties: + field: + type: string + description: The field to sort the results on. + example: created_at + order: + type: string + description: The order to sort the results in. Defaults to `descending` + when omitted. Values other than `ascending` or `descending` return a + `400` error with code `invalid_sort_order`. + enum: + - ascending + - descending + default: descending + example: descending + required: + - query contact_segments: title: Segments type: object From 46de1888f58dc0c3a58ecb9702fcbe8b93c53c2d Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 13:10:35 +0100 Subject: [PATCH 10/22] Graduate Help Center Redirects API into v2.16 OpenAPI spec Copies the Preview help_center redirects surface verbatim: the /help_center/help_centers/{id}/redirects list+create and /redirects/{id} retrieve+delete operations, plus the help_center_redirect(_list), create_help_center_redirect_request and deleted_help_center_redirect_object schemas. Distinct from the held AddArticleUrlRedirects (different resource, schemas and Rails classes). --- descriptions/2.16/api.intercom.io.yaml | 497 +++++++++++++++++++++++++ 1 file changed, 497 insertions(+) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index 3e44d0e4..dabe8434 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -4053,6 +4053,374 @@ paths: attachments: - type: url url: https://example.com/invoice.pdf + "/help_center/help_centers/{help_center_id}/redirects": + get: + summary: List all redirects for a help center + parameters: + - name: help_center_id + in: path + required: true + description: The unique identifier for the help center. + example: '123' + schema: + type: string + - name: page + in: query + required: false + description: The page of results to fetch. Defaults to the first page. + example: 1 + schema: + type: integer + - name: per_page + in: query + required: false + description: The number of results to return per page. Defaults to 50, maximum 250. + example: 50 + schema: + type: integer + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Help Center + operationId: listHelpCenterRedirects + description: | + You can fetch a list of all URL redirects for a help center by making a GET request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects`. + + Redirects are returned in descending order on the `updated_at` attribute. + + Requires the `read_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: list + data: + - id: '26' + type: help_center_redirect + from_url: http://help-center.test/lovelyhelpcenter/legacy-page + locale: en + help_center_id: '7' + target_type: article + target_id: '11' + created_at: 1781619405 + updated_at: 1781619405 + total_count: 1 + pages: + type: pages + page: 1 + per_page: 50 + total_pages: 1 + schema: + "$ref": "#/components/schemas/help_center_redirect_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 12c2d3a0-77ef-462e-a5ed-e67ddff50b6e + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '404': + description: Help center not found + content: + application/json: + examples: + Not Found: + value: + type: error.list + request_id: 6c2d3a0a-77ef-462e-a5ed-e67ddff50b6e + errors: + - code: not_found + message: Resource not found + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create a redirect + parameters: + - name: help_center_id + in: path + required: true + description: The unique identifier for the help center. + example: '123' + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Help Center + operationId: createHelpCenterRedirect + description: | + You can create a new URL redirect by making a POST request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects`. + + Requires the `read_write_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + responses: + '200': + description: redirect created + content: + application/json: + examples: + redirect created: + value: + id: '26' + type: help_center_redirect + from_url: http://help-center.test/lovelyhelpcenter/old-page + locale: en + help_center_id: '7' + target_type: article + target_id: '11' + created_at: 1781619405 + updated_at: 1781619405 + schema: + "$ref": "#/components/schemas/help_center_redirect" + '400': + description: Bad Request + content: + application/json: + examples: + Missing parameter: + value: + type: error.list + request_id: 816186b3-3187-4b47-adf8-e201bea32208 + errors: + - code: parameter_not_found + message: from_url is required + Invalid target_type: + value: + type: error.list + request_id: 816186b3-3187-4b47-adf8-e201bea32209 + errors: + - code: parameter_invalid + message: target_type must be 'article' or 'collection' + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 25d96ec2-641f-4354-b24e-83a85d33bd30 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '409': + description: Conflict + content: + application/json: + examples: + Conflict: + value: + type: error.list + request_id: 35d96ec2-641f-4354-b24e-83a85d33bd31 + errors: + - code: resource_conflict + message: A redirect with that URL already exists + schema: + "$ref": "#/components/schemas/error" + '422': + description: Unprocessable Entity + content: + application/json: + examples: + Invalid data: + value: + type: error.list + request_id: 45d96ec2-641f-4354-b24e-83a85d33bd32 + errors: + - code: data_invalid + message: from_url must be an absolute URL within this help center's URL space + schema: + "$ref": "#/components/schemas/error" + '404': + description: Help center not found + content: + application/json: + examples: + Not Found: + value: + type: error.list + request_id: 55d96ec2-641f-4354-b24e-83a85d33bd33 + errors: + - code: not_found + message: Resource not found + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_help_center_redirect_request" + examples: + redirect_created: + summary: redirect created + value: + from_url: http://help-center.test/lovelyhelpcenter/old-page + locale: en + target_type: article + target_id: '11' + "/help_center/help_centers/{help_center_id}/redirects/{id}": + get: + summary: Retrieve a redirect + parameters: + - name: help_center_id + in: path + required: true + description: The unique identifier for the help center. + example: '123' + schema: + type: string + - name: id + in: path + required: true + description: The unique identifier for the redirect. + example: '26' + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Help Center + operationId: retrieveHelpCenterRedirect + description: | + You can fetch the details of a single redirect by making a GET request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects/{id}`. + + Requires the `read_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + id: '26' + type: help_center_redirect + from_url: http://help-center.test/lovelyhelpcenter/old-page + locale: en + help_center_id: '7' + target_type: article + target_id: '11' + created_at: 1781619405 + updated_at: 1781619405 + schema: + "$ref": "#/components/schemas/help_center_redirect" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 12c2d3a0-77ef-462e-a5ed-e67ddff50b6e + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '404': + description: Not Found + content: + application/json: + examples: + Not Found: + value: + type: error.list + request_id: 6c2d3a0a-77ef-462e-a5ed-e67ddff50b6e + errors: + - code: not_found + message: Resource not found + schema: + "$ref": "#/components/schemas/error" + delete: + summary: Delete a redirect + parameters: + - name: help_center_id + in: path + required: true + description: The unique identifier for the help center. + example: '123' + schema: + type: string + - name: id + in: path + required: true + description: The unique identifier for the redirect. + example: '26' + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Help Center + operationId: deleteHelpCenterRedirect + description: | + You can delete a single redirect by making a DELETE request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects/{id}`. + + Requires the `read_write_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + responses: + '200': + description: redirect deleted + content: + application/json: + examples: + redirect deleted: + value: + id: '26' + object: help_center_redirect + deleted: true + schema: + "$ref": "#/components/schemas/deleted_help_center_redirect_object" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 25d96ec2-641f-4354-b24e-83a85d33bd30 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '404': + description: Not Found + content: + application/json: + examples: + Not Found: + value: + type: error.list + request_id: 6c2d3a0a-77ef-462e-a5ed-e67ddff50b6e + errors: + - code: not_found + message: Resource not found + schema: + "$ref": "#/components/schemas/error" "/help_center/collections": get: summary: List all collections @@ -23795,6 +24163,135 @@ components: nullable: true description: The id of the help center the collection is in. example: '123' + help_center_redirect: + title: Help Center Redirect + type: object + x-tags: + - Help Center + description: | + A redirect maps a source URL (`from_url`) to an article or collection within a + help center, so that links to old or external URLs resolve to live content. + properties: + id: + type: string + description: The unique identifier for the redirect. + example: '26' + type: + type: string + description: The type of the object - `help_center_redirect`. + enum: + - help_center_redirect + example: help_center_redirect + from_url: + type: string + description: The source URL that is redirected. An absolute URL within the + help center's URL space. + example: http://help-center.test/lovelyhelpcenter/old-page + locale: + type: string + description: The locale of the redirect's target. For article targets this + is the bound translation's locale, which may differ from the requested + locale if no translation exists in that locale. + example: en + help_center_id: + type: string + description: The unique identifier for the help center the redirect belongs + to. + example: '7' + target_type: + type: string + description: The type of the redirect target. + enum: + - article + - collection + example: article + target_id: + type: string + description: The unique identifier of the target article or collection. For + article targets this is the Article ID. + example: '11' + created_at: + type: integer + description: The time the redirect was created as a UTC Unix timestamp. + example: 1781619405 + updated_at: + type: integer + description: The time the redirect was last updated as a UTC Unix timestamp. + example: 1781619405 + help_center_redirect_list: + title: Help Center Redirects + type: object + description: This will return a list of redirects for the help center. + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of redirects. + example: 1 + data: + type: array + description: An array of help center redirect objects. + items: + "$ref": "#/components/schemas/help_center_redirect" + create_help_center_redirect_request: + description: You can create a help center redirect. + type: object + title: Create Help Center Redirect Request Payload + properties: + from_url: + type: string + description: The source URL to redirect. Must be an absolute URL within the + help center's URL space. + example: http://help-center.test/lovelyhelpcenter/old-page + locale: + type: string + description: The locale of the target translation (e.g. `en`, `fr`). For + article targets this selects the ArticleContent variant. + example: en + target_type: + type: string + description: The type of the redirect target. + enum: + - article + - collection + example: article + target_id: + type: string + description: The unique identifier of the target article or collection. The + target must be a member of the help center. + example: '11' + required: + - from_url + - locale + - target_type + - target_id + deleted_help_center_redirect_object: + title: Deleted Help Center Redirect Object + type: object + description: Response returned when a redirect is deleted. + properties: + id: + type: string + description: The unique identifier for the redirect which you provided in + the URL. + example: '26' + object: + type: string + description: The type of object which was deleted. - `help_center_redirect` + enum: + - help_center_redirect + example: help_center_redirect + deleted: + type: boolean + description: Whether the redirect was deleted successfully or not. + example: true collection_list: title: Collections type: object From d3e3b77dec0b2f36613afd080e8dbba521d64183 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 13:29:52 +0100 Subject: [PATCH 11/22] Graduate Knowledge API body_markdown support into v2.16 OpenAPI spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the body_markdown property (verbatim from Preview) to the 7 article schemas that gained it: article_content, article_list_item, internal_article_list_item, and the create/update (internal_)article request schemas, plus the accompanying 'in HTML / mutually exclusive with body_markdown' body-description text. Surgical inserts only — held fields (folder_id, parent_ids) and Preview-only draft fields are deliberately excluded. --- descriptions/2.16/api.intercom.io.yaml | 52 ++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index dabe8434..cba3b3d7 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -22862,8 +22862,13 @@ components: example: This article will show you how to create a new article. body: type: string - description: The body of the article. + description: The body of the article in HTML. example: This is the body of the article. + body_markdown: + type: string + nullable: true + description: The body of the article in markdown. + example: "# How to create a new article\n\nThis is the body of the article.\n" author_id: type: integer description: The ID of the author of the article. @@ -23009,6 +23014,12 @@ components: description: The body of the article in HTML. For multilingual articles, this will be the body of the default language's content. example: Default language body in html + body_markdown: + type: string + nullable: true + description: The body of the article in markdown. For multilingual articles, + this will be the body of the default language's content. + example: "# Default language title\n\nDefault language body in markdown\n" author_id: type: integer description: The id of the author of the article. For multilingual articles, @@ -23158,6 +23169,11 @@ components: nullable: true description: The body of the article in HTML. example: Default language body in html + body_markdown: + type: string + nullable: true + description: The body of the article in markdown. + example: "# Internal Guide\n\nBody of the article in markdown\n" owner_id: type: integer description: The id of the owner of the article. @@ -27185,9 +27201,15 @@ components: example: Description of the Article body: type: string - description: The content of the article. For multilingual articles, this - will be the body of the default language's content. + description: The content of the article in HTML. For multilingual articles, this + will be the body of the default language's content. Mutually exclusive with `body_markdown`. example: "

This is the body in html

" + body_markdown: + type: string + description: The content of the article in markdown. For multilingual articles, this + will be the body of the default language's content. An alternative to `body` — you + can provide content as markdown instead of HTML. Mutually exclusive with `body`. + example: "# Hello\n\nA paragraph with **bold** text.\n" author_id: type: integer description: The id of the author of the article. For multilingual articles, @@ -27287,8 +27309,13 @@ components: example: Thanks for everything body: type: string - description: The content of the article. + description: The content of the article in HTML. Mutually exclusive with `body_markdown`. example: "

This is the body in html

" + body_markdown: + type: string + description: The content of the article in markdown. An alternative to `body` — you + can provide content as markdown instead of HTML. Mutually exclusive with `body`. + example: "# Internal Guide\n\nSome instructions.\n" author_id: type: integer description: The id of the author of the article. @@ -33766,9 +33793,15 @@ components: example: Description of the Article body: type: string - description: The content of the article. For multilingual articles, this - will be the body of the default language's content. + description: The content of the article in HTML. For multilingual articles, this + will be the body of the default language's content. Mutually exclusive with `body_markdown`. example: "

This is the body in html

" + body_markdown: + type: string + description: The content of the article in markdown. For multilingual articles, this + will be the body of the default language's content. An alternative to `body` — you + can provide content as markdown instead of HTML. Mutually exclusive with `body`. + example: "## Updated heading\n\nNew content.\n" author_id: type: integer description: The id of the author of the article. For multilingual articles, @@ -33866,7 +33899,12 @@ components: example: Thanks for everything body: type: string - description: The content of the article. + description: The content of the article in HTML. Mutually exclusive with `body_markdown`. + body_markdown: + type: string + description: The content of the article in markdown. An alternative to `body` — you + can provide content as markdown instead of HTML. Mutually exclusive with `body`. + example: "## Updated\n\nNew content.\n" author_id: type: integer description: The id of the author of the article. From 8042da6bc5e712dda8013b612973cde944afc3f9 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 14:17:38 +0100 Subject: [PATCH 12/22] Graduate AddMergedContactRedirect (410 Gone) into v2.16 OpenAPI spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A merged contact now returns 410 Gone with a Link header to the canonical contact on GET /contacts/{id} and GET /contacts/find_by_external_id/{id}. Copies Preview's 410 'Contact Merged' response block + the 'Merged contacts return 410 Gone' description on both retrieve operations, replacing the old 404 wording. Surgical — leaves unrelated formatted_phone example drift and the pre-existing contact_id/id path-param naming untouched. --- descriptions/2.16/api.intercom.io.yaml | 71 ++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 4 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index cba3b3d7..ad33d437 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -7913,8 +7913,23 @@ paths: description: | You can fetch the details of a single contact. - {% admonition type="warning" name="Merged contacts" %} - If a contact has been merged into another contact via the Merge endpoint (POST /contacts/merge), requesting it by its original ID will return a `404 Not Found` error. Use the merged-into contact's ID instead. + {% admonition type="info" name="Merged contacts return 410 Gone" %} + If a contact has been merged into another contact via the Merge endpoint (`POST /contacts/merge`), requesting it by its original ID will return **HTTP 410 Gone** with a `Link` header pointing to the canonical (merged-into) contact. + + **Response headers:** + ``` + Link: ; rel="canonical" + ``` + + **Response body:** + ```json + { + "type": "error.list", + "errors": [{ "code": "contact_merged", "message": "This contact has been merged. See the 'Link' header for the canonical contact." }] + } + ``` + + The `Link` header contains the path to the final merge target, resolving multi-hop merge chains (up to 3 hops). {% /admonition %} responses: '200': @@ -8033,6 +8048,28 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + '410': + description: Contact Merged + headers: + Link: + description: 'Link to the canonical (merged-into) contact. Format: + `; rel="canonical"`' + schema: + type: string + example: '; rel="canonical"' + content: + application/json: + examples: + Contact Merged: + value: + type: error.list + request_id: 45b30bd1-75d2-40cc-bb39-74ac133a2836 + errors: + - code: contact_merged + message: This contact has been merged. See the 'Link' header + for the canonical contact. + schema: + "$ref": "#/components/schemas/error" delete: summary: Delete a contact parameters: @@ -8665,8 +8702,12 @@ paths: tags: - Contacts operationId: ShowContactByExternalId - description: You can fetch the details of a single contact by external ID. Note - that this endpoint only supports users and not leads. + description: | + You can fetch the details of a single contact by external ID. Note that this endpoint only supports users and not leads. + + {% admonition type="info" name="Merged contacts return 410 Gone" %} + If the contact with this external ID has been merged into another contact, the API returns **HTTP 410 Gone** with a `Link` header pointing to the canonical (merged-into) contact. See `GET /contacts/{id}` for details on the response format. + {% /admonition %} responses: '200': description: successful @@ -8784,6 +8825,28 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + '410': + description: Contact Merged + headers: + Link: + description: 'Link to the canonical (merged-into) contact. Format: + `; rel="canonical"`' + schema: + type: string + example: '; rel="canonical"' + content: + application/json: + examples: + Contact Merged: + value: + type: error.list + request_id: 1fb28be7-cda6-4029-b4da-447ef61cb61a + errors: + - code: contact_merged + message: This contact has been merged. See the 'Link' header + for the canonical contact. + schema: + "$ref": "#/components/schemas/error" "/contacts/{contact_id}/archive": post: summary: Archive contact From 5d5d67ac4de5597db3a4837077dd4a4b6674697f Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 14:43:22 +0100 Subject: [PATCH 13/22] Graduate AddCustomObjectInstancesListAllApi into v2.16 OpenAPI spec Replaces the 2.15-inherited GET /custom_object_instances/{type} operation (getCustomObjectInstancesByExternalId, external_id required, single-object response, ObjectNotFound) with Preview's listAll version (external_id optional, custom_object_instances_paginated_list response, TypeNotFound), and adds the custom_object_instances_paginated_list schema it references (its pages_link + custom_object_instance refs already exist in 2.16). --- descriptions/2.16/api.intercom.io.yaml | 119 +++++++++++++++++++------ 1 file changed, 93 insertions(+), 26 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index ad33d437..b1480a46 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -14012,30 +14012,54 @@ paths: order_number: ORDER-12345 total_amount: 99.99 get: - summary: Get Custom Object Instance by External ID + summary: List Custom Object Instances parameters: + - name: references_contact_id + in: query + required: false + description: Return instances associated with the given contact ID. + schema: + type: string + - name: references_conversation_id + in: query + required: false + description: Return instances associated with the given conversation ID. + schema: + type: string - name: external_id in: query - style: form - required: true + required: false + description: Return the single instance with this external ID. When provided, + the response is a single object rather than a list. schema: type: string - description: The unique identifier for the instance in the external system - it originated from. - title: Find by external_id - properties: - external_id: - type: string - required: - - external_id + - name: page + in: query + required: false + description: Page number of results to fetch. + schema: + type: integer + - name: per_page + in: query + required: false + description: Number of results per page. Maximum 150. + schema: + type: integer + maximum: 150 - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - Custom Object Instances - operationId: getCustomObjectInstancesByExternalId - description: Fetch a Custom Object Instance by external_id. + operationId: listCustomObjectInstances + description: |- + List instances of a custom object type. Three modes are supported: + - **No filter** — returns all instances for the type. + - **`references_contact_id`** — returns instances associated with the given contact. + - **`references_conversation_id`** — returns instances associated with the given conversation. + + When **`external_id`** is provided, returns a single matching instance (not a list). responses: '200': description: successful @@ -14044,22 +14068,40 @@ paths: examples: successful: value: - id: '24' - type: Order - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - external_id: '123' - external_created_at: - external_updated_at: - created_at: 1734537748 - updated_at: 1734537748 - schema: - "$ref": "#/components/schemas/custom_object_instance" + type: list + pages: + type: pages + page: 1 + per_page: 20 + total_pages: 1 + total_count: 2 + data: + - id: '2' + type: Order + custom_attributes: + order_number: ORDER-98765 + total_amount: 149.99 + external_id: order_002 + external_created_at: + external_updated_at: + created_at: 1734537800 + updated_at: 1734537800 + - id: '1' + type: Order + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + external_id: order_001 + external_created_at: 1734537100 + external_updated_at: 1734537100 + created_at: 1734537100 + updated_at: 1734537100 + schema: + "$ref": "#/components/schemas/custom_object_instances_paginated_list" '401': $ref: "#/components/responses/Unauthorized" '404': - $ref: "#/components/responses/ObjectNotFound" + $ref: "#/components/responses/TypeNotFound" delete: summary: Delete a Custom Object Instance by External ID parameters: @@ -28567,6 +28609,31 @@ components: reference attribute on the parent object. items: "$ref": "#/components/schemas/custom_object_instance" + custom_object_instances_paginated_list: + title: Custom Object Instances + type: object + x-tags: + - Custom Object Instances + description: A paginated list of custom object instances. + nullable: false + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/pages_link" + total_count: + type: integer + description: A count of the total number of custom object instances. + example: 2 + data: + type: array + description: An array of Custom Object Instance objects. + items: + "$ref": "#/components/schemas/custom_object_instance" customer_request: type: object nullable: true From d50a0ae8ea98471be9e3aaa08bc46feee10e5c1f Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 14:57:11 +0100 Subject: [PATCH 14/22] Graduate AddWhatsappMessageSupport into v2.16 OpenAPI spec + fix POST /messages placement Graduate the AddWhatsappMessageSupport 2.16-cut change (send-path via the messages endpoint), copying only the whatsapp surfaces from Preview and excluding the still-held SMS support: - createMessage operation description: add whatsapp, keep sms out - create_message_request.message_type: add `whatsapp` enum value + description (sms omitted) - create_message_request anyOf: add only the `whatsapp` branch (skip `sms`) - requestBody example: add only admin_whatsapp_message_created (skip admin_sms_message_created and invalid_body_supplied_for_sms_message) Also fix a pre-existing structural defect introduced in 728bd98: the `/messages` path key had been left empty and the createMessage operation was mislocated as a POST under `/messages/status`. Relocated the operation back under `/messages`, restoring the Preview/2.15 layout (/messages -> post, /messages/status -> get, /messages/whatsapp/status -> get). Verified: YAML parses, all internal $refs resolve, whatsapp surfaces are byte-identical to Preview, and no SMS surfaces leaked. Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 429 +++++++++++++------------ 1 file changed, 227 insertions(+), 202 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index b1480a46..19300c44 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -16056,6 +16056,224 @@ paths: schema: "$ref": "#/components/schemas/error" "/messages": + post: + summary: Create a message + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Messages + operationId: createMessage + description: "You can create a message that has been initiated by an admin. + The conversation can be either an in-app message, an email or whatsapp.\n\n> \U0001F6A7 + Sending for visitors\n>\n> There can be a short delay between when a contact + is created and when a contact becomes available to be messaged through the + API. A 404 Not Found error will be returned in this case.\n\nThis will return + the Message model that has been created.\n\n> \U0001F6A7 Retrieving Associated + Conversations\n>\n> As this is a message, there will be no conversation present + until the contact responds. Once they do, you will have to search for a contact's + conversations with the id of the message.\n" + responses: + '200': + description: admin message created + content: + application/json: + examples: + user message created: + value: + type: user_message + id: '403918396' + created_at: 1734537780 + body: heyy + message_type: inapp + conversation_id: '613' + lead message created: + value: + type: user_message + id: '403918397' + created_at: 1734537783 + body: heyy + message_type: inapp + conversation_id: '614' + admin message created: + value: + type: admin_message + id: '19' + created_at: 1734537786 + subject: heyy + body: heyy + message_type: inapp + owner: + type: admin + id: '991267816' + name: Ciaran299 Lee + email: admin299@email.com + away_mode_enabled: false + away_mode_reassign: false + schema: + "$ref": "#/components/schemas/message" + '400': + description: No body supplied for email message + content: + application/json: + examples: + No body supplied for message: + value: + type: error.list + request_id: 3f3e74cc-65af-4408-9bf5-9e71b55c8166 + errors: + - code: parameter_invalid + message: Body is required + No body supplied for email message: + value: + type: error.list + request_id: 2d6abc61-1441-4860-9ef0-777852f8b24f + errors: + - code: parameter_invalid + message: Body is required + schema: + "$ref": "#/components/schemas/error" + '422': + description: No subject supplied for email message + content: + application/json: + examples: + No subject supplied for email message: + value: + type: error.list + request_id: 97db463e-7070-4ac9-9846-9a5d31933772 + errors: + - code: parameter_not_found + message: No subject supplied for email message + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2c8a20ee-ed09-42c0-a31d-a1b4f5d2742d + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 72b6821e-54ff-4a25-adf9-abdfef5fe72b + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_message_request" + examples: + user_message_created: + summary: user message created + value: + from: + type: user + id: 6762f2341bb69f9f2193bc17 + body: heyy + referer: https://twitter.com/bob + lead_message_created: + summary: lead message created + value: + from: + type: lead + id: 6762f2371bb69f9f2193bc18 + body: heyy + referer: https://twitter.com/bob + admin_message_created: + summary: admin message created + value: + from: + type: admin + id: '991267816' + to: + - type: user + id: 6762f2391bb69f9f2193bc19 + - type: lead + id: 6762f23c1bb69f9f2193bc1b + - type: user + id: 6762f23d1bb69f9f2193bc1c + cc: + - type: user + id: 6762f23e1bb69f9f2193bc1d + - type: user + id: 6762f23f1bb69f9f2193bc1e + bcc: + - type: user + id: 6762f23e1bb69f9f2193bc2f + message_type: conversation + body: heyy + admin_whatsapp_message_created: + summary: admin whatsapp message created + value: + from: + type: admin + id: '991267817' + to: + phone: +5547999998888 + name: John Doe + message_type: whatsapp + components: + - type: BODY + parameters: + - type: text + text: Username 123 + template: keep_live + locale: en + no_body_supplied_for_message: + summary: No body supplied for message + value: + from: + type: admin + id: '991267818' + to: + type: user + id: 6762f23b1bb69f9f2193bc1a + message_type: inapp + body: + subject: heyy + no_subject_supplied_for_email_message: + summary: No subject supplied for email message + value: + from: + type: admin + id: '991267819' + to: + type: user + user_id: '70' + message_type: email + body: hey there + no_body_supplied_for_email_message: + summary: No body supplied for email message + value: + from: + type: admin + id: '991267820' + to: + type: user + id: 6762f23d1bb69f9f2193bc1c + message_type: email + body: + subject: heyy "/messages/whatsapp/status": get: summary: Retrieve WhatsApp message delivery status @@ -16276,207 +16494,6 @@ paths: message: "Request failed due to an internal error. Please reach out to support" schema: "$ref": "#/components/schemas/error" - post: - summary: Create a message - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Messages - operationId: createMessage - description: "You can create a message that has been initiated by an admin. - The conversation can be either an in-app message or an email.\n\n> \U0001F6A7 - Sending for visitors\n>\n> There can be a short delay between when a contact - is created and when a contact becomes available to be messaged through the - API. A 404 Not Found error will be returned in this case.\n\nThis will return - the Message model that has been created.\n\n> \U0001F6A7 Retrieving Associated - Conversations\n>\n> As this is a message, there will be no conversation present - until the contact responds. Once they do, you will have to search for a contact's - conversations with the id of the message.\n" - responses: - '200': - description: admin message created - content: - application/json: - examples: - user message created: - value: - type: user_message - id: '403918396' - created_at: 1734537780 - body: heyy - message_type: inapp - conversation_id: '613' - lead message created: - value: - type: user_message - id: '403918397' - created_at: 1734537783 - body: heyy - message_type: inapp - conversation_id: '614' - admin message created: - value: - type: admin_message - id: '19' - created_at: 1734537786 - subject: heyy - body: heyy - message_type: inapp - owner: - type: admin - id: '991267816' - name: Ciaran299 Lee - email: admin299@email.com - away_mode_enabled: false - away_mode_reassign: false - schema: - "$ref": "#/components/schemas/message" - '400': - description: No body supplied for email message - content: - application/json: - examples: - No body supplied for message: - value: - type: error.list - request_id: 3f3e74cc-65af-4408-9bf5-9e71b55c8166 - errors: - - code: parameter_invalid - message: Body is required - No body supplied for email message: - value: - type: error.list - request_id: 2d6abc61-1441-4860-9ef0-777852f8b24f - errors: - - code: parameter_invalid - message: Body is required - schema: - "$ref": "#/components/schemas/error" - '422': - description: No subject supplied for email message - content: - application/json: - examples: - No subject supplied for email message: - value: - type: error.list - request_id: 97db463e-7070-4ac9-9846-9a5d31933772 - errors: - - code: parameter_not_found - message: No subject supplied for email message - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 2c8a20ee-ed09-42c0-a31d-a1b4f5d2742d - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '403': - description: API plan restricted - content: - application/json: - examples: - API plan restricted: - value: - type: error.list - request_id: 72b6821e-54ff-4a25-adf9-abdfef5fe72b - errors: - - code: api_plan_restricted - message: Active subscription needed. - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_message_request" - examples: - user_message_created: - summary: user message created - value: - from: - type: user - id: 6762f2341bb69f9f2193bc17 - body: heyy - referer: https://twitter.com/bob - lead_message_created: - summary: lead message created - value: - from: - type: lead - id: 6762f2371bb69f9f2193bc18 - body: heyy - referer: https://twitter.com/bob - admin_message_created: - summary: admin message created - value: - from: - type: admin - id: '991267816' - to: - - type: user - id: 6762f2391bb69f9f2193bc19 - - type: lead - id: 6762f23c1bb69f9f2193bc1b - - type: user - id: 6762f23d1bb69f9f2193bc1c - cc: - - type: user - id: 6762f23e1bb69f9f2193bc1d - - type: user - id: 6762f23f1bb69f9f2193bc1e - bcc: - - type: user - id: 6762f23e1bb69f9f2193bc2f - message_type: conversation - body: heyy - no_body_supplied_for_message: - summary: No body supplied for message - value: - from: - type: admin - id: '991267818' - to: - type: user - id: 6762f23b1bb69f9f2193bc1a - message_type: inapp - body: - subject: heyy - no_subject_supplied_for_email_message: - summary: No subject supplied for email message - value: - from: - type: admin - id: '991267819' - to: - type: user - user_id: '70' - message_type: email - body: hey there - no_body_supplied_for_email_message: - summary: No body supplied for email message - value: - from: - type: admin - id: '991267820' - to: - type: user - id: 6762f23d1bb69f9f2193bc1c - message_type: email - body: - subject: heyy "/news/news_items": get: summary: List all news items @@ -27904,10 +27921,11 @@ components: properties: message_type: type: string - description: 'The kind of message being created. Values: `in_app` or `email`.' + description: 'The kind of message being created. Values: `in_app`, `email` or `whatsapp`.' enum: - in_app - email + - whatsapp example: in_app subject: type: string @@ -27998,6 +28016,13 @@ components: - body - from - to + - title: 'message_type: `whatsapp`.' + required: + - message_type + - template + - components + - from + - to recipient: type: object title: Recipient From 1ba7a8c866e886ac1a277cac8bcf94f64f9f93f9 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 15:16:29 +0100 Subject: [PATCH 15/22] Fix 10 orphaned-operation defects in v2.16 OpenAPI spec Full structural sweep of descriptions/2.16 found the same defect class fixed for POST /messages in d50a0ae, present in 10 more paths (0 in 2.15 and Preview). During earlier graduation commits, each newly-inserted path appended an orphaned operation as a duplicate HTTP-method key under a neighbouring path, leaving the correct path key null. Impact before fix: 10 endpoints dead at their correct URL, ~8 newly-graduated operations silently shadowed (yaml keeps the last duplicate method key) and thus invisible to fern/SDK generation, and several operations reachable only at the wrong URL. No text was lost and no operationId was duplicated, so fern check, $ref resolution and operationId diffing all passed clean. Relocated each orphaned operation block back to its correct path key: - /me (identifyAdmin), /admins (listAdmins), /admins/activity_logs (listActivityLogs), /articles/{article_id} (retrieve/update/delete), /internal_articles/{internal_article_id} (retrieve/update/delete), /away_status_reasons (listAwayStatusReasons), /contacts/{contact_id}/unarchive (UnarchiveContact), /contacts/{contact_id}/block (BlockContact), /data_attributes/{data_attribute_id} (updateDataAttribute), /teams/{team_id} (retrieveTeam). Verified: YAML parses; zero null paths; zero duplicate-method keys; all $refs resolve; no duplicate operationIds; all 10 repaired paths match the 2.15 baseline exactly; previously-shadowed ops (listMacros, tag-detach, audiences retrieve, office-hours list, teams metrics, etc.) now visible. Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 1870 ++++++++++++------------ 1 file changed, 935 insertions(+), 935 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index 19300c44..4f0dd08e 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -12,6 +12,50 @@ info: url: https://spdx.org/licenses/MIT paths: "/me": + get: + summary: Identify an admin + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Admins + operationId: identifyAdmin + description: "\nYou can view the currently authorised admin along with the embedded + app object (a \"workspace\" in legacy terminology).\n\n> \U0001F6A7 Single + Sign On\n>\n> If you are building a custom \"Log in with Intercom\" flow for + your site, and you call the `/me` endpoint to identify the logged-in user, + you should not accept any sign-ins from users with unverified email addresses + as it poses a potential impersonation security risk.\n" + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: admin + id: '991267459' + email: admin1@email.com + name: Ciaran1 Lee + email_verified: true + app: + type: app + id_code: this_is_an_id1_that_should_be_at_least_40 + name: MyApp 1 + created_at: 1734537243 + secure: false + identity_verification: false + timezone: America/Los_Angeles + region: US + avatar: + type: avatar + image_url: https://static.intercomassets.com/assets/default-avatars/admins/128.png + has_inbox_seat: true + schema: + "$ref": "#/components/schemas/admin_with_app" "/macros/{id}": get: summary: Retrieve a macro @@ -377,50 +421,6 @@ paths: message: You do not have the required scope (read_conversations) to access this resource schema: "$ref": "#/components/schemas/error" - get: - summary: Identify an admin - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Admins - operationId: identifyAdmin - description: "\nYou can view the currently authorised admin along with the embedded - app object (a \"workspace\" in legacy terminology).\n\n> \U0001F6A7 Single - Sign On\n>\n> If you are building a custom \"Log in with Intercom\" flow for - your site, and you call the `/me` endpoint to identify the logged-in user, - you should not accept any sign-ins from users with unverified email addresses - as it poses a potential impersonation security risk.\n" - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: admin - id: '991267459' - email: admin1@email.com - name: Ciaran1 Lee - email_verified: true - app: - type: app - id_code: this_is_an_id1_that_should_be_at_least_40 - name: MyApp 1 - created_at: 1734537243 - secure: false - identity_verification: false - timezone: America/Los_Angeles - region: US - avatar: - type: avatar - image_url: https://static.intercomassets.com/assets/default-avatars/admins/128.png - has_inbox_seat: true - schema: - "$ref": "#/components/schemas/admin_with_app" "/admins/{admin_id}/away": put: summary: Set an admin to away @@ -548,6 +548,95 @@ paths: away_mode_enabled: true away_mode_reassign: true "/admins/activity_logs": + get: + summary: List all activity logs + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: created_at_after + in: query + required: true + description: The start date that you request data for. It must be formatted + as a UNIX timestamp. + example: '1677253093' + schema: + type: string + - name: created_at_before + in: query + required: false + description: The end date that you request data for. It must be formatted + as a UNIX timestamp. + example: '1677861493' + schema: + type: string + tags: + - Admins + operationId: listActivityLogs + description: You can get a log of activities by all admins in an app. + responses: + '200': + description: Successful response + content: + application/json: + examples: + Successful response: + value: + type: activity_log.list + pages: + type: pages + next: + page: 1 + per_page: 20 + total_pages: 1 + activity_logs: + - id: fca05814-4b72-4dce-ad4f-77a786a2c136 + performed_by: + type: admin + id: '991267464' + email: admin5@email.com + ip: 127.0.0.1 + metadata: + before: before + after: after + created_at: 1734537253 + activity_type: app_name_change + activity_description: Ciaran5 Lee changed your app name from + before to after. + - id: f48c653b-0185-48ac-a276-23d11006bafb + performed_by: + type: admin + id: '991267464' + email: admin5@email.com + ip: 127.0.0.1 + metadata: + message: + id: 123 + title: Initial message title + before: Initial message title + after: Eventual message title + created_at: 1734537253 + activity_type: message_state_change + activity_description: Ciaran5 Lee changed your Initial message + title message from Initial message title to Eventual message + title. + schema: + "$ref": "#/components/schemas/activity_log_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 57cc6148-2c0a-471b-bd9e-859538110958 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" "/admins/activity_logs/search": post: summary: Search activity logs @@ -776,33 +865,26 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + "/admins": get: - summary: List all activity logs + summary: List all admins parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: created_at_after - in: query - required: true - description: The start date that you request data for. It must be formatted - as a UNIX timestamp. - example: '1677253093' - schema: - type: string - - name: created_at_before + - name: display_avatar in: query required: false - description: The end date that you request data for. It must be formatted - as a UNIX timestamp. - example: '1677861493' + description: If set to true, the response will include the admin's avatar + object containing the image URL. Defaults to false. + example: true schema: - type: string + type: boolean tags: - Admins - operationId: listActivityLogs - description: You can get a log of activities by all admins in an app. + operationId: listAdmins + description: You can fetch a list of admins for a given workspace. responses: '200': description: Successful response @@ -811,46 +893,18 @@ paths: examples: Successful response: value: - type: activity_log.list - pages: - type: pages - next: - page: 1 - per_page: 20 - total_pages: 1 - activity_logs: - - id: fca05814-4b72-4dce-ad4f-77a786a2c136 - performed_by: - type: admin - id: '991267464' - email: admin5@email.com - ip: 127.0.0.1 - metadata: - before: before - after: after - created_at: 1734537253 - activity_type: app_name_change - activity_description: Ciaran5 Lee changed your app name from - before to after. - - id: f48c653b-0185-48ac-a276-23d11006bafb - performed_by: - type: admin - id: '991267464' - email: admin5@email.com - ip: 127.0.0.1 - metadata: - message: - id: 123 - title: Initial message title - before: Initial message title - after: Eventual message title - created_at: 1734537253 - activity_type: message_state_change - activity_description: Ciaran5 Lee changed your Initial message - title message from Initial message title to Eventual message - title. + type: admin.list + admins: + - type: admin + email: admin7@email.com + id: '991267466' + name: Ciaran7 Lee + away_mode_enabled: false + away_mode_reassign: false + has_inbox_seat: true + team_ids: [] schema: - "$ref": "#/components/schemas/activity_log_list" + "$ref": "#/components/schemas/admin_list" '401': description: Unauthorized content: @@ -859,13 +913,12 @@ paths: Unauthorized: value: type: error.list - request_id: 57cc6148-2c0a-471b-bd9e-859538110958 + request_id: 5ef5682e-f66e-40a4-b828-8592175f83b8 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/admins": "/office_hours_schedules/{office_hours_schedule_id}/office_hours_exceptions/{id}": get: summary: Retrieve an office hours exception @@ -1389,60 +1442,7 @@ paths: "$ref": "#/components/responses/Unauthorized" '422': "$ref": "#/components/responses/ValidationError" - get: - summary: List all admins - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: display_avatar - in: query - required: false - description: If set to true, the response will include the admin's avatar - object containing the image URL. Defaults to false. - example: true - schema: - type: boolean - tags: - - Admins - operationId: listAdmins - description: You can fetch a list of admins for a given workspace. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: admin.list - admins: - - type: admin - email: admin7@email.com - id: '991267466' - name: Ciaran7 Lee - away_mode_enabled: false - away_mode_reassign: false - has_inbox_seat: true - team_ids: [] - schema: - "$ref": "#/components/schemas/admin_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 5ef5682e-f66e-40a4-b828-8592175f83b8 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/admins/{admin_id}": + "/admins/{admin_id}": get: summary: Retrieve an admin parameters: @@ -2273,197 +2273,6 @@ paths: body: Body of the Article state: published "/articles/{article_id}": - "/articles/{article_id}/tags": - post: - summary: Add a tag to an article - tags: - - Articles - - Tags - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: article_id - in: path - required: true - description: The unique identifier for the article which is given by Intercom. - example: 123 - schema: - type: integer - operationId: attachTagToArticle - description: | - Apply an existing tag to an article. Returns the tag that was applied. - - The tag must already exist in the workspace (create tags with the Tags API), - and the authenticating teammate must have the `manage_knowledge_base_content` - permission. - - Requires the `read_write_articles_scope` OAuth scope. - requestBody: - content: - application/json: - schema: - type: object - required: - - id - properties: - id: - type: string - description: The unique identifier of the tag to apply, as given by - Intercom. - example: '7522907' - admin_id: - type: string - nullable: true - description: Optional id of the teammate to attribute the tagging to. - Defaults to the authenticating teammate. Does not affect authorization. - example: '1234' - examples: - successful: - summary: Apply a tag - value: - id: '7522907' - responses: - '200': - description: Tag applied - content: - application/json: - examples: - Tag applied: - value: - type: tag - id: '7522907' - name: Independent - applied_at: 1663597223 - applied_by: - type: admin - id: '1234' - schema: - "$ref": "#/components/schemas/tag" - '403': - description: Forbidden - content: - application/json: - examples: - Forbidden: - value: - type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f - errors: - - code: forbidden - message: Not authorized to manage knowledge base content - schema: - "$ref": "#/components/schemas/error" - '404': - description: Article or tag not found - content: - application/json: - examples: - Article not found: - value: - type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 - errors: - - code: article_not_found - message: Article not found - Tag not found: - value: - type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 - errors: - - code: tag_not_found - message: Tag not found - schema: - "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" - "/articles/{article_id}/tags/{id}": - delete: - summary: Remove a tag from an article - tags: - - Articles - - Tags - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: article_id - in: path - required: true - description: The unique identifier for the article which is given by Intercom. - example: 123 - schema: - type: integer - - name: id - in: path - required: true - description: The unique identifier of the tag to remove, as given by Intercom. - example: '7522907' - schema: - type: string - operationId: detachTagFromArticle - description: | - Remove a tag from an article. Returns the tag that was removed, with null - `applied_at` and `applied_by`. - - The authenticating teammate must have the `manage_knowledge_base_content` - permission. - - Requires the `read_write_articles_scope` OAuth scope. - responses: - '200': - description: Tag removed - content: - application/json: - examples: - Tag removed: - value: - type: tag - id: '7522907' - name: Independent - applied_at: null - applied_by: null - schema: - "$ref": "#/components/schemas/tag" - '403': - description: Forbidden - content: - application/json: - examples: - Forbidden: - value: - type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f - errors: - - code: forbidden - message: Not authorized to manage knowledge base content - schema: - "$ref": "#/components/schemas/error" - '404': - description: Article or tag not found - content: - application/json: - examples: - Article not found: - value: - type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 - errors: - - code: article_not_found - message: Article not found - Tag not found: - value: - type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 - errors: - - code: tag_not_found - message: Tag not found - schema: - "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" get: summary: Retrieve an article parameters: @@ -2702,9 +2511,12 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/articles/{article_id}/versions": - get: - summary: List article versions + "/articles/{article_id}/tags": + post: + summary: Add a tag to an article + tags: + - Articles + - Tags parameters: - name: Intercom-Version in: header @@ -2713,8 +2525,196 @@ paths: - name: article_id in: path required: true - description: The unique identifier for the article whose versions you are - listing. + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + operationId: attachTagToArticle + description: | + Apply an existing tag to an article. Returns the tag that was applied. + + The tag must already exist in the workspace (create tags with the Tags API), + and the authenticating teammate must have the `manage_knowledge_base_content` + permission. + + Requires the `read_write_articles_scope` OAuth scope. + requestBody: + content: + application/json: + schema: + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier of the tag to apply, as given by + Intercom. + example: '7522907' + admin_id: + type: string + nullable: true + description: Optional id of the teammate to attribute the tagging to. + Defaults to the authenticating teammate. Does not affect authorization. + example: '1234' + examples: + successful: + summary: Apply a tag + value: + id: '7522907' + responses: + '200': + description: Tag applied + content: + application/json: + examples: + Tag applied: + value: + type: tag + id: '7522907' + name: Independent + applied_at: 1663597223 + applied_by: + type: admin + id: '1234' + schema: + "$ref": "#/components/schemas/tag" + '403': + description: Forbidden + content: + application/json: + examples: + Forbidden: + value: + type: error.list + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + errors: + - code: forbidden + message: Not authorized to manage knowledge base content + schema: + "$ref": "#/components/schemas/error" + '404': + description: Article or tag not found + content: + application/json: + examples: + Article not found: + value: + type: error.list + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 + errors: + - code: article_not_found + message: Article not found + Tag not found: + value: + type: error.list + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + errors: + - code: tag_not_found + message: Tag not found + schema: + "$ref": "#/components/schemas/error" + '401': + "$ref": "#/components/responses/Unauthorized" + "/articles/{article_id}/tags/{id}": + delete: + summary: Remove a tag from an article + tags: + - Articles + - Tags + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: article_id + in: path + required: true + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + - name: id + in: path + required: true + description: The unique identifier of the tag to remove, as given by Intercom. + example: '7522907' + schema: + type: string + operationId: detachTagFromArticle + description: | + Remove a tag from an article. Returns the tag that was removed, with null + `applied_at` and `applied_by`. + + The authenticating teammate must have the `manage_knowledge_base_content` + permission. + + Requires the `read_write_articles_scope` OAuth scope. + responses: + '200': + description: Tag removed + content: + application/json: + examples: + Tag removed: + value: + type: tag + id: '7522907' + name: Independent + applied_at: null + applied_by: null + schema: + "$ref": "#/components/schemas/tag" + '403': + description: Forbidden + content: + application/json: + examples: + Forbidden: + value: + type: error.list + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + errors: + - code: forbidden + message: Not authorized to manage knowledge base content + schema: + "$ref": "#/components/schemas/error" + '404': + description: Article or tag not found + content: + application/json: + examples: + Article not found: + value: + type: error.list + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 + errors: + - code: article_not_found + message: Article not found + Tag not found: + value: + type: error.list + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + errors: + - code: tag_not_found + message: Tag not found + schema: + "$ref": "#/components/schemas/error" + '401': + "$ref": "#/components/responses/Unauthorized" + "/articles/{article_id}/versions": + get: + summary: List article versions + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: article_id + in: path + required: true + description: The unique identifier for the article whose versions you are + listing. example: 123 schema: type: integer @@ -2984,6 +2984,26 @@ paths: schema: "$ref": "#/components/schemas/error" "/away_status_reasons": + get: + summary: List all away status reasons + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Away Status Reasons + operationId: listAwayStatusReasons + description: "Returns a list of all away status reasons configured for the workspace, including deleted ones." + responses: + '200': + description: Successful response + content: + application/json: + schema: + "$ref": "#/components/schemas/away_status_reason_list" + '401': + "$ref": "#/components/responses/Unauthorized" "/audiences": get: summary: List all audiences @@ -3380,26 +3400,6 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - get: - summary: List all away status reasons - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Away Status Reasons - operationId: listAwayStatusReasons - description: "Returns a list of all away status reasons configured for the workspace, including deleted ones." - responses: - '200': - description: Successful response - content: - application/json: - schema: - "$ref": "#/components/schemas/away_status_reason_list" - '401': - "$ref": "#/components/responses/Unauthorized" "/export/reporting_data/enqueue": post: summary: Enqueue a new reporting data export job @@ -5007,12 +5007,8 @@ paths: title: Thanks for everything body: Body of the Internal Article "/internal_articles/{internal_article_id}": - "/internal_articles/{internal_article_id}/tags": - post: - summary: Add a tag to an internal article - tags: - - Internal Articles - - Tags + get: + summary: Retrieve an internal article parameters: - name: Intercom-Version in: header @@ -5021,104 +5017,60 @@ paths: - name: internal_article_id in: path required: true - description: The unique identifier for the internal article which is given by - Intercom. + description: The unique identifier for the article which is given by Intercom. example: 123 schema: type: integer - operationId: attachTagToInternalArticle - description: | - Apply an existing tag to an internal article. Returns the tag that was applied. - - The tag must already exist in the workspace (create tags with the Tags API), - and the authenticating teammate must have the `manage_knowledge_base_content` - permission. - - Requires the `read_write_articles_scope` OAuth scope. - requestBody: - content: - application/json: - schema: - type: object - required: - - id - properties: - id: - type: string - description: The unique identifier of the tag to apply, as given by - Intercom. - example: '7522907' - admin_id: - type: string - nullable: true - description: Optional id of the teammate to attribute the tagging to. - Defaults to the authenticating teammate. Does not affect authorization. - example: '1234' - examples: - successful: - summary: Apply a tag - value: - id: '7522907' + tags: + - Internal Articles + operationId: retrieveInternalArticle + description: You can fetch the details of a single internal article by making a GET request + to `https://api.intercom.io/internal_articles/`. responses: '200': - description: Tag applied + description: Internal article found content: application/json: examples: - Tag applied: + Internal article found: value: - type: tag - id: '7522907' - name: Independent - applied_at: 1663597223 - applied_by: - type: admin - id: '1234' + id: '45' + body: Body of the Article + owner_id: 991266252 + author_id: 991266252 + locale: en schema: - "$ref": "#/components/schemas/tag" - '403': - description: Forbidden + "$ref": "#/components/schemas/internal_article" + '404': + description: Internal article not found content: application/json: examples: - Forbidden: + Internal article not found: value: type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + request_id: 79abd27a-1bfb-42ec-a404-5728c76ba773 errors: - - code: forbidden - message: Not authorized to manage knowledge base content + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" - '404': - description: Internal article or tag not found + '401': + description: Unauthorized content: application/json: examples: - Internal article not found: - value: - type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 - errors: - - code: internal_article_not_found - message: Internal article not found - Tag not found: + Unauthorized: value: type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + request_id: 2eab07fb-5092-49a4-ba74-44094f31f264 errors: - - code: tag_not_found - message: Tag not found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" - "/internal_articles/{internal_article_id}/tags/{id}": - delete: - summary: Remove a tag from an internal article - tags: - - Internal Articles - - Tags + put: + summary: Update an internal article parameters: - name: Intercom-Version in: header @@ -5127,81 +5079,76 @@ paths: - name: internal_article_id in: path required: true - description: The unique identifier for the internal article which is given by - Intercom. + description: The unique identifier for the internal article which is given by Intercom. example: 123 schema: type: integer - - name: id - in: path - required: true - description: The unique identifier of the tag to remove, as given by Intercom. - example: '7522907' - schema: - type: string - operationId: detachTagFromInternalArticle - description: | - Remove a tag from an internal article. Returns the tag that was removed, with - null `applied_at` and `applied_by`. - - The authenticating teammate must have the `manage_knowledge_base_content` - permission. - - Requires the `read_write_articles_scope` OAuth scope. + tags: + - Internal Articles + operationId: updateInternalArticle + description: You can update the details of a single internal article by making a PUT + request to `https://api.intercom.io/internal_articles/`. responses: '200': - description: Tag removed + description: successful content: application/json: examples: - Tag removed: + successful: value: - type: tag - id: '7522907' - name: Independent - applied_at: null - applied_by: null + id: '48' + body: Body of the Article + owner_id: 991266252 + author_id: 991266252 + locale: en schema: - "$ref": "#/components/schemas/tag" - '403': - description: Forbidden + "$ref": "#/components/schemas/internal_article" + '404': + description: Internal article not found content: application/json: examples: - Forbidden: + Internal article not found: value: type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + request_id: f9adccb2-9fca-4b87-bbb7-65f2af5e1d78 errors: - - code: forbidden - message: Not authorized to manage knowledge base content + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" - '404': - description: Internal article or tag not found + '401': + description: Unauthorized content: application/json: examples: - Internal article not found: - value: - type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 - errors: - - code: internal_article_not_found - message: Internal article not found - Tag not found: + Unauthorized: value: type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + request_id: d1ea223d-bb62-42e3-8bcf-30fdcf7dbd99 errors: - - code: tag_not_found - message: Tag not found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" - get: - summary: Retrieve an internal article + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_internal_article_request" + examples: + successful: + summary: successful + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + internal_article_not_found: + summary: Internal article not found + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + delete: + summary: Delete an internal article parameters: - name: Intercom-Version in: header @@ -5210,30 +5157,27 @@ paths: - name: internal_article_id in: path required: true - description: The unique identifier for the article which is given by Intercom. + description: The unique identifier for the internal article which is given by Intercom. example: 123 schema: type: integer tags: - Internal Articles - operationId: retrieveInternalArticle - description: You can fetch the details of a single internal article by making a GET request - to `https://api.intercom.io/internal_articles/`. + operationId: deleteInternalArticle + description: You can delete a single internal article by making a DELETE request to `https://api.intercom.io/internal_articles/`. responses: '200': - description: Internal article found + description: successful content: application/json: examples: - Internal article found: + successful: value: - id: '45' - body: Body of the Article - owner_id: 991266252 - author_id: 991266252 - locale: en + id: '51' + object: internal_article + deleted: true schema: - "$ref": "#/components/schemas/internal_article" + "$ref": "#/components/schemas/deleted_internal_article_object" '404': description: Internal article not found content: @@ -5242,7 +5186,7 @@ paths: Internal article not found: value: type: error.list - request_id: 79abd27a-1bfb-42ec-a404-5728c76ba773 + request_id: afe37506-cc48-4727-8068-ae7ff0e7b0e3 errors: - code: not_found message: Resource Not Found @@ -5256,14 +5200,18 @@ paths: Unauthorized: value: type: error.list - request_id: 2eab07fb-5092-49a4-ba74-44094f31f264 + request_id: c6e86ce8-9402-4196-89c5-f1b2912b4bac errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - put: - summary: Update an internal article + "/internal_articles/{internal_article_id}/tags": + post: + summary: Add a tag to an internal article + tags: + - Internal Articles + - Tags parameters: - name: Intercom-Version in: header @@ -5272,76 +5220,104 @@ paths: - name: internal_article_id in: path required: true - description: The unique identifier for the internal article which is given by Intercom. + description: The unique identifier for the internal article which is given by + Intercom. example: 123 schema: type: integer - tags: - - Internal Articles - operationId: updateInternalArticle - description: You can update the details of a single internal article by making a PUT - request to `https://api.intercom.io/internal_articles/`. + operationId: attachTagToInternalArticle + description: | + Apply an existing tag to an internal article. Returns the tag that was applied. + + The tag must already exist in the workspace (create tags with the Tags API), + and the authenticating teammate must have the `manage_knowledge_base_content` + permission. + + Requires the `read_write_articles_scope` OAuth scope. + requestBody: + content: + application/json: + schema: + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier of the tag to apply, as given by + Intercom. + example: '7522907' + admin_id: + type: string + nullable: true + description: Optional id of the teammate to attribute the tagging to. + Defaults to the authenticating teammate. Does not affect authorization. + example: '1234' + examples: + successful: + summary: Apply a tag + value: + id: '7522907' responses: '200': - description: successful + description: Tag applied content: application/json: examples: - successful: + Tag applied: value: - id: '48' - body: Body of the Article - owner_id: 991266252 - author_id: 991266252 - locale: en + type: tag + id: '7522907' + name: Independent + applied_at: 1663597223 + applied_by: + type: admin + id: '1234' schema: - "$ref": "#/components/schemas/internal_article" - '404': - description: Internal article not found + "$ref": "#/components/schemas/tag" + '403': + description: Forbidden content: application/json: examples: - Internal article not found: + Forbidden: value: type: error.list - request_id: f9adccb2-9fca-4b87-bbb7-65f2af5e1d78 + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f errors: - - code: not_found - message: Resource Not Found + - code: forbidden + message: Not authorized to manage knowledge base content schema: "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '404': + description: Internal article or tag not found content: application/json: examples: - Unauthorized: + Internal article not found: value: type: error.list - request_id: d1ea223d-bb62-42e3-8bcf-30fdcf7dbd99 + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 errors: - - code: unauthorized - message: Access Token Invalid + - code: internal_article_not_found + message: Internal article not found + Tag not found: + value: + type: error.list + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + errors: + - code: tag_not_found + message: Tag not found schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_internal_article_request" - examples: - successful: - summary: successful - value: - title: Christmas is here! - body: "

New gifts in store for the jolly season

" - internal_article_not_found: - summary: Internal article not found - value: - title: Christmas is here! - body: "

New gifts in store for the jolly season

" + '401': + "$ref": "#/components/responses/Unauthorized" + "/internal_articles/{internal_article_id}/tags/{id}": delete: - summary: Delete an internal article + summary: Remove a tag from an internal article + tags: + - Internal Articles + - Tags parameters: - name: Intercom-Version in: header @@ -5350,55 +5326,79 @@ paths: - name: internal_article_id in: path required: true - description: The unique identifier for the internal article which is given by Intercom. + description: The unique identifier for the internal article which is given by + Intercom. example: 123 schema: type: integer - tags: - - Internal Articles - operationId: deleteInternalArticle - description: You can delete a single internal article by making a DELETE request to `https://api.intercom.io/internal_articles/`. + - name: id + in: path + required: true + description: The unique identifier of the tag to remove, as given by Intercom. + example: '7522907' + schema: + type: string + operationId: detachTagFromInternalArticle + description: | + Remove a tag from an internal article. Returns the tag that was removed, with + null `applied_at` and `applied_by`. + + The authenticating teammate must have the `manage_knowledge_base_content` + permission. + + Requires the `read_write_articles_scope` OAuth scope. responses: '200': - description: successful + description: Tag removed content: application/json: examples: - successful: + Tag removed: value: - id: '51' - object: internal_article - deleted: true + type: tag + id: '7522907' + name: Independent + applied_at: null + applied_by: null schema: - "$ref": "#/components/schemas/deleted_internal_article_object" - '404': - description: Internal article not found + "$ref": "#/components/schemas/tag" + '403': + description: Forbidden content: application/json: examples: - Internal article not found: + Forbidden: value: type: error.list - request_id: afe37506-cc48-4727-8068-ae7ff0e7b0e3 + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f errors: - - code: not_found - message: Resource Not Found + - code: forbidden + message: Not authorized to manage knowledge base content schema: "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '404': + description: Internal article or tag not found content: application/json: examples: - Unauthorized: + Internal article not found: value: type: error.list - request_id: c6e86ce8-9402-4196-89c5-f1b2912b4bac + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 errors: - - code: unauthorized - message: Access Token Invalid + - code: internal_article_not_found + message: Internal article not found + Tag not found: + value: + type: error.list + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + errors: + - code: tag_not_found + message: Tag not found schema: "$ref": "#/components/schemas/error" + '401': + "$ref": "#/components/responses/Unauthorized" "/internal_articles/search": get: summary: Search for internal articles @@ -8874,6 +8874,31 @@ paths: schema: "$ref": "#/components/schemas/contact_archived" "/contacts/{contact_id}/unarchive": + post: + summary: Unarchive contact + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: contact_id + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + tags: + - Contacts + operationId: UnarchiveContact + description: You can unarchive a single contact. + responses: + '200': + description: successful + content: + application/json: + schema: + "$ref": "#/components/schemas/contact_unarchived" "/contacts/{id}/banners": get: summary: List banners for a contact @@ -8995,8 +9020,9 @@ paths: message: Resource Not Found schema: "$ref": "#/components/schemas/error" + "/contacts/{contact_id}/block": post: - summary: Unarchive contact + summary: Block contact parameters: - name: Intercom-Version in: header @@ -9011,16 +9037,15 @@ paths: type: string tags: - Contacts - operationId: UnarchiveContact - description: You can unarchive a single contact. + operationId: BlockContact + description: Block a single contact.
**Note:** conversations of the contact will also be archived during the process.
More details in [FAQ How do I block Inbox spam?](https://www.intercom.com/help/en/articles/8838656-inbox-faqs) responses: '200': description: successful content: application/json: schema: - "$ref": "#/components/schemas/contact_unarchived" - "/contacts/{contact_id}/block": + "$ref": "#/components/schemas/contact_blocked" "/contacts/{id}/merge_history": get: summary: Get contact merge history @@ -9114,31 +9139,6 @@ paths: message: Contact not found schema: "$ref": "#/components/schemas/error" - post: - summary: Block contact - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: contact_id - in: path - description: contact_id - example: 63a07ddf05a32042dffac965 - required: true - schema: - type: string - tags: - - Contacts - operationId: BlockContact - description: Block a single contact.
**Note:** conversations of the contact will also be archived during the process.
More details in [FAQ How do I block Inbox spam?](https://www.intercom.com/help/en/articles/8838656-inbox-faqs) - responses: - '200': - description: successful - content: - application/json: - schema: - "$ref": "#/components/schemas/contact_blocked" "/content/bulk_actions": post: summary: Run a bulk action on Knowledge Hub content @@ -14580,26 +14580,177 @@ paths: Attribute already exists: value: type: error.list - request_id: 55999605-a170-4894-a3d0-090c4fee8d11 + request_id: 55999605-a170-4894-a3d0-090c4fee8d11 + errors: + - code: parameter_invalid + message: You already have 'The One Ring' in your company data. + To save this as new company data, use a different name. + Invalid Data Type: + value: + type: error.list + request_id: e0a9ccc7-a540-4ef0-8ffc-28ab86658b04 + errors: + - code: parameter_invalid + message: Data Type isn't an option + Too few options for list: + value: + type: error.list + request_id: 6544ccf8-435d-49e1-91ed-e49356f14255 + errors: + - code: parameter_invalid + message: The Data Attribute model field must be either contact + or company + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: fa71b91c-4a25-4fe6-88a9-884f6950860e + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_data_attribute_request" + examples: + successful: + summary: Successful + value: + name: Mithril Shirt + model: company + data_type: string + same_name_already_exists: + summary: Same name already exists + value: + name: The One Ring + model: contact + data_type: integer + invalid_name: + summary: Invalid name + value: + name: "!nv@l!d n@me" + model: company + data_type: string + attribute_already_exists: + summary: Attribute already exists + value: + name: The One Ring + model: company + data_type: string + invalid_data_type: + summary: Invalid Data Type + value: + name: The Second Ring + model: company + data_type: mithril + too_few_options_for_list: + summary: Too few options for list + value: + description: Just a plain old ring + options: + - value: 1-10 + archived: false + "/data_attributes/{data_attribute_id}": + put: + summary: Update a data attribute + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: data_attribute_id + in: path + required: true + description: The data attribute id + example: 1 + schema: + type: integer + tags: + - Data Attributes + operationId: updateDataAttribute + description: "\nYou can update a data attribute.\n\n> \U0001F6A7 Updating the + data type is not possible\n>\n> It is currently a dangerous action to execute + changing a data attribute's type via the API. You will need to update the + type via the UI instead.\n" + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + id: 44 + type: data_attribute + name: The One Ring + full_name: custom_attributes.The One Ring + label: The One Ring + description: Just a plain old ring + data_type: string + options: + - 1-10 + - 11-20 + api_writable: true + ui_writable: false + messenger_writable: true + custom: true + archived: false + admin_id: '991267793' + created_at: 1734537762 + updated_at: 1734537763 + model: company + schema: + "$ref": "#/components/schemas/data_attribute" + '400': + description: Too few options in list + content: + application/json: + examples: + Too few options in list: + value: + type: error.list + request_id: 37cff4c5-5e1a-4958-a2ba-149b09d1915c errors: - code: parameter_invalid - message: You already have 'The One Ring' in your company data. - To save this as new company data, use a different name. - Invalid Data Type: + message: Options isn't an array + schema: + "$ref": "#/components/schemas/error" + '404': + description: Attribute Not Found + content: + application/json: + examples: + Attribute Not Found: value: type: error.list - request_id: e0a9ccc7-a540-4ef0-8ffc-28ab86658b04 + request_id: eee16d31-0b0a-4b5f-b95a-25d37528c80f errors: - - code: parameter_invalid - message: Data Type isn't an option - Too few options for list: + - code: field_not_found + message: We couldn't find that data attribute to update + schema: + "$ref": "#/components/schemas/error" + '422': + description: Has Dependant Object + content: + application/json: + examples: + Has Dependant Object: value: type: error.list - request_id: 6544ccf8-435d-49e1-91ed-e49356f14255 + request_id: f04b6b14-1c5b-46e1-9c95-4a914557062c errors: - - code: parameter_invalid - message: The Data Attribute model field must be either contact - or company + - code: data_invalid + message: The Data Attribute you are trying to archive has a + dependant object schema: "$ref": "#/components/schemas/error" '401': @@ -14610,7 +14761,7 @@ paths: Unauthorized: value: type: error.list - request_id: fa71b91c-4a25-4fe6-88a9-884f6950860e + request_id: c60ce63d-1c74-4fe2-8e21-31d1f817a0c2 errors: - code: unauthorized message: Access Token Invalid @@ -14620,46 +14771,36 @@ paths: content: application/json: schema: - "$ref": "#/components/schemas/create_data_attribute_request" + "$ref": "#/components/schemas/update_data_attribute_request" examples: successful: summary: Successful value: - name: Mithril Shirt - model: company - data_type: string - same_name_already_exists: - summary: Same name already exists - value: - name: The One Ring - model: contact - data_type: integer - invalid_name: - summary: Invalid name - value: - name: "!nv@l!d n@me" - model: company - data_type: string - attribute_already_exists: - summary: Attribute already exists - value: - name: The One Ring - model: company - data_type: string - invalid_data_type: - summary: Invalid Data Type + description: Just a plain old ring + options: + - value: 1-10 + - value: 11-20 + archived: false + too_few_options_in_list: + summary: Too few options in list value: - name: The Second Ring - model: company - data_type: mithril - too_few_options_for_list: - summary: Too few options for list + description: Too few options + options: + value: 1-10 + archived: false + attribute_not_found: + summary: Attribute Not Found value: description: Just a plain old ring options: - value: 1-10 + - value: 11-20 archived: false - "/data_attributes/{data_attribute_id}": + has_dependant_object: + summary: Has Dependant Object + value: + description: Trying to archieve + archived: true "/data_connectors": get: summary: List all data connectors @@ -15383,210 +15524,82 @@ paths: errors: - code: parameter_invalid message: "Invalid error_type. Must be one of: request_configuration_error, faraday_error, 3rd_party_error, response_mapping_error, token_refresh_error, fin_action_response_formatting_error, fin_action_identity_verification_error, email_verification_error, non_fin_standalone_action_identity_verification_error, request_validation_error, client_side_action_error" - Invalid timestamp: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: parameter_invalid - message: start_ts must be a Unix timestamp (integer) - schema: - "$ref": "#/components/schemas/error" - '404': - description: Data connector not found - content: - application/json: - examples: - Data connector not found: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: data_connector_not_found - message: Data connector not found - schema: - "$ref": "#/components/schemas/error" - "/data_connectors/{data_connector_id}/execution_results/{id}": - get: - summary: Retrieve an execution result - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: data_connector_id - in: path - required: true - description: The unique identifier for the data connector. - schema: - type: string - example: '12345' - - name: id - in: path - required: true - description: The unique identifier for the execution result. - schema: - type: string - example: '99001' - tags: - - Data Connectors - operationId: showDataConnectorExecutionResult - description: | - Retrieve details for a specific data connector execution result. - Always includes request/response bodies and the sanitised request URL. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: data_connector.execution - id: '99001' - data_connector_id: '12345' - success: true - http_status: 200 - http_method: post - execution_time_ms: 150 - source_type: workflow - source_id: '5001' - conversation_id: '8001' - created_at: '2026-02-10T18:15:32Z' - request_url: https://api.example.com/webhook - request_body: '{"channel": "#alerts", "text": "Conversation updated"}' - response_body: '{"ok": true}' - raw_response_body: '{"ok": true}' - schema: - "$ref": "#/components/schemas/data_connector_execution_result" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '404': - description: Execution result not found - content: - application/json: - examples: - Data connector not found: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: data_connector_not_found - message: Data connector not found - Execution result not found: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: execution_result_not_found - message: Execution result not found - schema: - "$ref": "#/components/schemas/error" - put: - summary: Update a data attribute - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: data_attribute_id - in: path - required: true - description: The data attribute id - example: 1 - schema: - type: integer - tags: - - Data Attributes - operationId: updateDataAttribute - description: "\nYou can update a data attribute.\n\n> \U0001F6A7 Updating the - data type is not possible\n>\n> It is currently a dangerous action to execute - changing a data attribute's type via the API. You will need to update the - type via the UI instead.\n" - responses: - '200': - description: Successful - content: - application/json: - examples: - Successful: - value: - id: 44 - type: data_attribute - name: The One Ring - full_name: custom_attributes.The One Ring - label: The One Ring - description: Just a plain old ring - data_type: string - options: - - 1-10 - - 11-20 - api_writable: true - ui_writable: false - messenger_writable: true - custom: true - archived: false - admin_id: '991267793' - created_at: 1734537762 - updated_at: 1734537763 - model: company - schema: - "$ref": "#/components/schemas/data_attribute" - '400': - description: Too few options in list - content: - application/json: - examples: - Too few options in list: + Invalid timestamp: value: type: error.list - request_id: 37cff4c5-5e1a-4958-a2ba-149b09d1915c + request_id: test-uuid-replacement errors: - code: parameter_invalid - message: Options isn't an array + message: start_ts must be a Unix timestamp (integer) schema: "$ref": "#/components/schemas/error" '404': - description: Attribute Not Found + description: Data connector not found content: application/json: examples: - Attribute Not Found: + Data connector not found: value: type: error.list - request_id: eee16d31-0b0a-4b5f-b95a-25d37528c80f + request_id: test-uuid-replacement errors: - - code: field_not_found - message: We couldn't find that data attribute to update + - code: data_connector_not_found + message: Data connector not found schema: "$ref": "#/components/schemas/error" - '422': - description: Has Dependant Object + "/data_connectors/{data_connector_id}/execution_results/{id}": + get: + summary: Retrieve an execution result + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: data_connector_id + in: path + required: true + description: The unique identifier for the data connector. + schema: + type: string + example: '12345' + - name: id + in: path + required: true + description: The unique identifier for the execution result. + schema: + type: string + example: '99001' + tags: + - Data Connectors + operationId: showDataConnectorExecutionResult + description: | + Retrieve details for a specific data connector execution result. + Always includes request/response bodies and the sanitised request URL. + responses: + '200': + description: successful content: application/json: examples: - Has Dependant Object: + successful: value: - type: error.list - request_id: f04b6b14-1c5b-46e1-9c95-4a914557062c - errors: - - code: data_invalid - message: The Data Attribute you are trying to archive has a - dependant object + type: data_connector.execution + id: '99001' + data_connector_id: '12345' + success: true + http_status: 200 + http_method: post + execution_time_ms: 150 + source_type: workflow + source_id: '5001' + conversation_id: '8001' + created_at: '2026-02-10T18:15:32Z' + request_url: https://api.example.com/webhook + request_body: '{"channel": "#alerts", "text": "Conversation updated"}' + response_body: '{"ok": true}' + raw_response_body: '{"ok": true}' schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/data_connector_execution_result" '401': description: Unauthorized content: @@ -15595,46 +15608,33 @@ paths: Unauthorized: value: type: error.list - request_id: c60ce63d-1c74-4fe2-8e21-31d1f817a0c2 + request_id: test-uuid-replacement errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_data_attribute_request" - examples: - successful: - summary: Successful - value: - description: Just a plain old ring - options: - - value: 1-10 - - value: 11-20 - archived: false - too_few_options_in_list: - summary: Too few options in list - value: - description: Too few options - options: - value: 1-10 - archived: false - attribute_not_found: - summary: Attribute Not Found - value: - description: Just a plain old ring - options: - - value: 1-10 - - value: 11-20 - archived: false - has_dependant_object: - summary: Has Dependant Object - value: - description: Trying to archieve - archived: true + '404': + description: Execution result not found + content: + application/json: + examples: + Data connector not found: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: data_connector_not_found + message: Data connector not found + Execution result not found: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: execution_result_not_found + message: Execution result not found + schema: + "$ref": "#/components/schemas/error" "/events": post: summary: Submit a data event @@ -18037,6 +18037,69 @@ paths: schema: "$ref": "#/components/schemas/error" "/teams/{team_id}": + get: + summary: Retrieve a team + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: team_id + in: path + required: true + description: The unique identifier of a given team. + example: '123' + schema: + type: string + tags: + - Teams + operationId: retrieveTeam + description: You can fetch the details of a single team, containing an array + of admins that belong to this team. + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: team + id: '991267902' + name: team 1 + admin_ids: [] + assignment_limit: 10 + distribution_method: round_robin + schema: + "$ref": "#/components/schemas/team" + '404': + description: Team not found + content: + application/json: + examples: + Team not found: + value: + type: error.list + request_id: 3ff156ba-a66e-40d4-93ff-cb6e6afc3c9d + errors: + - code: team_not_found + message: Team not found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: fc4b741b-b9f1-4ef9-92c7-eb71e9811df3 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" "/teams/{team_id}/metrics": get: summary: Retrieve team metrics @@ -18119,69 +18182,6 @@ paths: message: "Team not found" schema: "$ref": "#/components/schemas/error" - get: - summary: Retrieve a team - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: team_id - in: path - required: true - description: The unique identifier of a given team. - example: '123' - schema: - type: string - tags: - - Teams - operationId: retrieveTeam - description: You can fetch the details of a single team, containing an array - of admins that belong to this team. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: team - id: '991267902' - name: team 1 - admin_ids: [] - assignment_limit: 10 - distribution_method: round_robin - schema: - "$ref": "#/components/schemas/team" - '404': - description: Team not found - content: - application/json: - examples: - Team not found: - value: - type: error.list - request_id: 3ff156ba-a66e-40d4-93ff-cb6e6afc3c9d - errors: - - code: team_not_found - message: Team not found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: fc4b741b-b9f1-4ef9-92c7-eb71e9811df3 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" "/ticket_states": get: summary: List all ticket states From 107ba5cf6ac6f0ecb7abbabc02b5ac35ae7ae111 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 15:28:20 +0100 Subject: [PATCH 16/22] Graduate AddDropReasonToEmailRecipients into v2.16 OpenAPI spec Take the richer Preview description of conversation_source: add the `recipients` array (with its `type`, `email` and `drop_reason` item fields) byte-identical to Preview. 2.15 and prior 2.16 lacked the field entirely. The email_address_headers drop_reason surface is not present in Preview, so it is not graduated here. Verified: YAML parses, recipients block byte-identical to Preview. Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index 4f0dd08e..9dd0de16 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -26958,6 +26958,28 @@ components: type: string description: How the conversation was initiated. example: operator_initiated + recipients: + type: array + nullable: true + description: The recipients of the source message. Only present for email + conversations. + items: + type: object + properties: + type: + type: string + description: The recipient type. One of `to`, `cc`, or `bcc`. + example: to + email: + type: string + format: email + description: The recipient email address. + example: user@example.com + drop_reason: + type: string + nullable: true + description: The reason this recipient was dropped, if applicable. + example: reply_to: type: array nullable: true From 49fa83736935911e1932723101b1898d0232e7b2 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 15:33:17 +0100 Subject: [PATCH 17/22] Graduate AddArticleDraftApi into v2.16 OpenAPI spec Take the richer Preview description of the Articles draft surface (2.15 had none). Graduated from Preview with the standard stable-version normalizations: - article_content + article_list_item: add has_unpublished_changes and draft_updated_at, dropping the "Only returned on the `Preview` API version" sentence (they are returned on 2.16). - New paths /articles/{id}/draft (GET retrieveArticleDraft, PUT) and /articles/{id}/draft/publish (POST publishArticleDraft), dropping the "Set `Intercom-Version: Preview`." sentence from their descriptions. - Add the publish_article_draft_request schema (byte-identical to Preview). Verified: YAML parses, all $refs resolve, no null/duplicate-method paths, no duplicate operationIds, no residual Preview-only markers in the graduated surfaces. Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 293 +++++++++++++++++++++++++ 1 file changed, 293 insertions(+) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index 9dd0de16..c80d4e32 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -2511,6 +2511,254 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + "/articles/{id}/draft": + get: + summary: Retrieve an article draft + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Articles + operationId: retrieveArticleDraft + description: | + Fetch the staged draft of a published article by making a GET request to + `https://api.intercom.io/articles//draft`. The response is the article + rendered with its draft content, leaving the live article untouched. + + A draft exists only when a published article has unpublished changes staged + on top of it. Returns `404` when the article has no staged draft. + + Requires the `read_articles_scope` OAuth scope. + responses: + '200': + description: Article draft found + content: + application/json: + examples: + Article draft found: + value: + id: '45' + type: article + workspace_id: this_is_an_id74_that_should_be_at_least_4 + parent_ids: [] + title: This is the draft title + description: '' + body:

Unpublished changes staged as a draft

+ body_markdown: "Unpublished changes staged as a draft\n" + author_id: 991267502 + state: published + created_at: 1734537292 + updated_at: 1734537292 + has_unpublished_changes: true + draft_updated_at: 1734537292 + url: http://help-center.test/myapp-74/en/articles/45-this-is-the-article-title + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + schema: + "$ref": "#/components/schemas/article" + '404': + "$ref": "#/components/responses/ObjectNotFound" + '401': + "$ref": "#/components/responses/Unauthorized" + put: + summary: Stage an article draft + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Articles + operationId: stageArticleDraft + description: | + Stage changes to a published article as a draft by making a PUT request to + `https://api.intercom.io/articles//draft`. The live article remains + unchanged until the draft is published. + + The article must already be published; staging a draft on an article that + has never been published returns `422`. + + Only versioned text content (such as `title` and `body`) is staged. + Non-versioned fields like AI availability are ignored, leaving the live + values untouched. + + Requires the `read_write_articles_scope` OAuth scope. + responses: + '200': + description: Draft staged + content: + application/json: + examples: + Draft staged: + value: + id: '48' + type: article + workspace_id: this_is_an_id80_that_should_be_at_least_4 + parent_ids: [] + title: Christmas is here! + description: '' + body:

New gifts in store for the jolly season

+ body_markdown: "New gifts in store for the jolly season\n" + author_id: 991267508 + state: published + created_at: 1734537297 + updated_at: 1734537298 + has_unpublished_changes: true + draft_updated_at: 1734537298 + url: http://help-center.test/myapp-80/en/articles/48-christmas-is-here + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + schema: + "$ref": "#/components/schemas/article" + '404': + "$ref": "#/components/responses/ObjectNotFound" + '422': + description: Article must be published before a draft can be staged + content: + application/json: + examples: + Article not published: + value: + type: error.list + request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + errors: + - code: parameter_invalid + message: Article must be published before a draft can be staged + schema: + "$ref": "#/components/schemas/error" + '401': + "$ref": "#/components/responses/Unauthorized" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_article_request" + examples: + Draft staged: + summary: Stage a draft + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + "/articles/{id}/draft/publish": + post: + summary: Publish an article draft + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the article which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Articles + operationId: publishArticleDraft + description: | + Publish a staged draft by making a POST request to + `https://api.intercom.io/articles//draft/publish`, promoting the draft + content to live. + + On a single-language workspace no body is required. On a multilingual + workspace you must list which locales to publish via the `locales` array; + omitting it returns `422`. Returns `422` when there is no staged draft to + publish, or when a requested locale has no pending changes. + + Requires the `read_write_articles_scope` OAuth scope. + responses: + '200': + description: Draft published + content: + application/json: + examples: + Draft published: + value: + id: '48' + type: article + workspace_id: this_is_an_id80_that_should_be_at_least_4 + parent_ids: [] + title: Christmas is here! + description: '' + body:

New gifts in store for the jolly season

+ body_markdown: "New gifts in store for the jolly season\n" + author_id: 991267508 + state: published + created_at: 1734537297 + updated_at: 1734537299 + has_unpublished_changes: false + draft_updated_at: null + url: http://help-center.test/myapp-80/en/articles/48-christmas-is-here + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + schema: + "$ref": "#/components/schemas/article" + '404': + "$ref": "#/components/responses/ObjectNotFound" + '422': + description: No draft to publish, locales not specified on a multilingual workspace, or a requested locale has no pending changes + content: + application/json: + examples: + No draft to publish: + value: + type: error.list + request_id: 8a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d + errors: + - code: parameter_invalid + message: Article has no draft to publish + Locales required on a multilingual workspace: + value: + type: error.list + request_id: 9b2c3d4e-5f6a-7b8c-9d0e-1f2a3b4c5d6e + errors: + - code: parameter_not_found + message: locales must be specified to publish a draft on a multilingual workspace + Locale has no pending changes: + value: + type: error.list + request_id: 0c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f + errors: + - code: parameter_invalid + message: 'Cannot publish a draft for locale(s) without pending changes: fr' + schema: + "$ref": "#/components/schemas/error" + '401': + "$ref": "#/components/responses/Unauthorized" + requestBody: + required: false + content: + application/json: + schema: + "$ref": "#/components/schemas/publish_article_draft_request" + examples: + Publish specific locales: + summary: Publish specific locales on a multilingual workspace + value: + locales: + - en + - fr "/articles/{article_id}/tags": post: summary: Add a tag to an article @@ -23012,6 +23260,18 @@ components: format: date-time description: The time when the article was last updated (seconds). example: 1663597260 + has_unpublished_changes: + type: boolean + description: Whether this locale's published content has unpublished + changes staged as a draft on top of its live content. + example: false + draft_updated_at: + type: integer + format: date-time + nullable: true + description: The time, in seconds, when this locale's staged draft was + last edited, or `null` when there is no staged draft. + example: 1663597260 url: type: string description: The URL of the article. @@ -23171,6 +23431,20 @@ components: articles, this will be the timestamp of last update of the default language's content in seconds. example: 1672928610 + has_unpublished_changes: + type: boolean + description: Whether the published article has unpublished changes staged + as a draft on top of its live content. For multilingual articles this + reflects the default language's content; a pure draft (never published) + reports `false`. + example: false + draft_updated_at: + type: integer + format: date-time + nullable: true + description: The time, in seconds, when the staged draft was last edited, + or `null` when there is no staged draft. + example: 1672928610 url: type: string nullable: true @@ -33952,6 +34226,25 @@ components: required: - name - companies + publish_article_draft_request: + description: | + Optional body for publishing a staged article draft. On a single-language + workspace the body can be omitted. On a multilingual workspace, `locales` + is required and lists which locales' drafts to publish. + type: object + title: Publish Article Draft Request Payload + nullable: true + properties: + locales: + type: array + description: | + The locales whose staged drafts should be published. Required on + multilingual workspaces; each locale must have a pending draft. + items: + type: string + example: + - en + - fr update_article_request: description: You can Update an Article type: object From 9c878e5a3c1bec067c6d8d14fccbb01d4f6fbcfc Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 15:34:24 +0100 Subject: [PATCH 18/22] Strip residual "Set Intercom-Version: Preview" from Help Center Redirects in v2.16 Normalization miss from the Help Center Redirects graduation (46de188): four operation descriptions still instructed callers to set `Intercom-Version: Preview`, which is wrong in a stable version spec. Removed the sentence on the two redirect paths (read + read_write scopes), matching how every other graduated surface drops the Preview-only marker. Verified: YAML parses; zero residual "Intercom-Version: Preview" in 2.16. Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index c80d4e32..e474af85 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -4338,7 +4338,7 @@ paths: Redirects are returned in descending order on the `updated_at` attribute. - Requires the `read_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_help_center_redirects_scope` OAuth scope. responses: '200': description: Successful @@ -4414,7 +4414,7 @@ paths: description: | You can create a new URL redirect by making a POST request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects`. - Requires the `read_write_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_help_center_redirects_scope` OAuth scope. responses: '200': description: redirect created @@ -4552,7 +4552,7 @@ paths: description: | You can fetch the details of a single redirect by making a GET request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects/{id}`. - Requires the `read_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_help_center_redirects_scope` OAuth scope. responses: '200': description: Successful @@ -4627,7 +4627,7 @@ paths: description: | You can delete a single redirect by making a DELETE request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects/{id}`. - Requires the `read_write_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_help_center_redirects_scope` OAuth scope. responses: '200': description: redirect deleted From 3b0f3de1ef11885e213a7d627dca25ef59bbb863 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 16:29:00 +0100 Subject: [PATCH 19/22] Clear v2.16-graduated Preview-only markers from Preview spec PR 540055 cut v2.16, graduating these surfaces out of Unstable/Preview. Strip their Preview-exclusive designation from descriptions/0 so Preview only marks items still Preview after the cut: - Remove "Set `Intercom-Version: Preview`." from graduated article draft/version/tagging, help-center-redirects and content endpoints - Retarget their `intercom_version_preview` header ref to `intercom_version` - Drop "Only returned on the `Preview` API version." from article draft fields - De-Preview the Banners and Content tag descriptions and the bulk-content summary - Restate the reporting-export version note as "from version 2.16 onward" Still-Unstable surfaces keep their Preview markers (ecommerce catalog upload header ref + schema, Fin capabilities version example). Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/0/api.intercom.io.yaml | 66 ++++++++++++++--------------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/descriptions/0/api.intercom.io.yaml b/descriptions/0/api.intercom.io.yaml index 6067f6b7..33d6aa0c 100644 --- a/descriptions/0/api.intercom.io.yaml +++ b/descriptions/0/api.intercom.io.yaml @@ -1718,7 +1718,7 @@ paths: A draft exists only when a published article has unpublished changes staged on top of it. Returns `404` when the article has no staged draft. - Requires the `read_articles_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_articles_scope` OAuth scope. responses: '200': description: Article draft found @@ -1780,7 +1780,7 @@ paths: Non-versioned fields like AI availability are ignored, leaving the live values untouched. - Requires the `read_write_articles_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_articles_scope` OAuth scope. responses: '200': description: Draft staged @@ -1866,7 +1866,7 @@ paths: omitting it returns `422`. Returns `422` when there is no staged draft to publish, or when a requested locale has no pending changes. - Requires the `read_write_articles_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_articles_scope` OAuth scope. responses: '200': description: Draft published @@ -1989,7 +1989,7 @@ paths: `GET /articles/{article_id}/versions/{id}` to retrieve a single version with its full content. - Requires the `read_articles_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_articles_scope` OAuth scope. responses: '200': description: Versions found @@ -2087,7 +2087,7 @@ paths: `https://api.intercom.io/articles//versions/`. Returns the version's full content; the live article remains untouched. - Requires the `read_articles_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_articles_scope` OAuth scope. responses: '200': description: Version found @@ -2140,7 +2140,7 @@ paths: - name: Intercom-Version in: header schema: - "$ref": "#/components/schemas/intercom_version_preview" + "$ref": "#/components/schemas/intercom_version" - name: article_id in: path required: true @@ -2156,7 +2156,7 @@ paths: and the authenticating teammate must have the `manage_knowledge_base_content` permission. - Requires the `read_write_articles_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_articles_scope` OAuth scope. requestBody: content: application/json: @@ -2245,7 +2245,7 @@ paths: - name: Intercom-Version in: header schema: - "$ref": "#/components/schemas/intercom_version_preview" + "$ref": "#/components/schemas/intercom_version" - name: article_id in: path required: true @@ -2268,7 +2268,7 @@ paths: The authenticating teammate must have the `manage_knowledge_base_content` permission. - Requires the `read_write_articles_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_articles_scope` OAuth scope. responses: '200': description: Tag removed @@ -3359,7 +3359,7 @@ paths: "/export/reporting_data/enqueue": post: summary: Enqueue a new reporting data export job - description: For the **conversation** dataset, from the Preview version this export returns all conversations, including those that never received a user reply. Earlier versions return only conversations that received at least one user reply. Other datasets are unaffected. + description: For the **conversation** dataset, from version 2.16 onward this export returns all conversations, including those that never received a user reply. Earlier versions return only conversations that received at least one user reply. Other datasets are unaffected. tags: [Reporting Data Export] parameters: - name: Intercom-Version @@ -3697,7 +3697,7 @@ paths: Redirects are returned in descending order on the `updated_at` attribute. - Requires the `read_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_help_center_redirects_scope` OAuth scope. responses: '200': description: Successful @@ -3773,7 +3773,7 @@ paths: description: | You can create a new URL redirect by making a POST request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects`. - Requires the `read_write_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_help_center_redirects_scope` OAuth scope. responses: '200': description: redirect created @@ -3911,7 +3911,7 @@ paths: description: | You can fetch the details of a single redirect by making a GET request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects/{id}`. - Requires the `read_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_help_center_redirects_scope` OAuth scope. responses: '200': description: Successful @@ -3986,7 +3986,7 @@ paths: description: | You can delete a single redirect by making a DELETE request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects/{id}`. - Requires the `read_write_help_center_redirects_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_help_center_redirects_scope` OAuth scope. responses: '200': description: redirect deleted @@ -4879,7 +4879,7 @@ paths: - name: Intercom-Version in: header schema: - "$ref": "#/components/schemas/intercom_version_preview" + "$ref": "#/components/schemas/intercom_version" - name: internal_article_id in: path required: true @@ -4896,7 +4896,7 @@ paths: and the authenticating teammate must have the `manage_knowledge_base_content` permission. - Requires the `read_write_articles_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_articles_scope` OAuth scope. requestBody: content: application/json: @@ -4985,7 +4985,7 @@ paths: - name: Intercom-Version in: header schema: - "$ref": "#/components/schemas/intercom_version_preview" + "$ref": "#/components/schemas/intercom_version" - name: internal_article_id in: path required: true @@ -5009,7 +5009,7 @@ paths: The authenticating teammate must have the `manage_knowledge_base_content` permission. - Requires the `read_write_articles_scope` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_articles_scope` OAuth scope. responses: '200': description: Tag removed @@ -9376,7 +9376,7 @@ paths: "$ref": "#/components/schemas/error" "/content/bulk_actions": post: - summary: Run a bulk action on Knowledge Hub content (Preview) + summary: Run a bulk action on Knowledge Hub content parameters: - name: Intercom-Version in: header @@ -9404,7 +9404,7 @@ paths: Zendesk, Salesforce Knowledge, etc.) are silently skipped on `delete` — they can only be removed by disconnecting the underlying import source. - Requires the `write_content` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `write_content` OAuth scope. responses: '202': description: Accepted — work has been enqueued @@ -9519,7 +9519,7 @@ paths: - name: Intercom-Version in: header schema: - "$ref": "#/components/schemas/intercom_version_preview" + "$ref": "#/components/schemas/intercom_version" - name: query in: query required: false @@ -10152,7 +10152,7 @@ paths: - name: Intercom-Version in: header schema: - "$ref": "#/components/schemas/intercom_version_preview" + "$ref": "#/components/schemas/intercom_version" - name: content_snippet_id in: path required: true @@ -10168,7 +10168,7 @@ paths: and the authenticating teammate must have the `manage_knowledge_base_content` permission. - Requires the `read_write_content_snippets` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_content_snippets` OAuth scope. requestBody: content: application/json: @@ -10257,7 +10257,7 @@ paths: - name: Intercom-Version in: header schema: - "$ref": "#/components/schemas/intercom_version_preview" + "$ref": "#/components/schemas/intercom_version" - name: content_snippet_id in: path required: true @@ -10280,7 +10280,7 @@ paths: The authenticating teammate must have the `manage_knowledge_base_content` permission. - Requires the `read_write_content_snippets` OAuth scope. Set `Intercom-Version: Preview`. + Requires the `read_write_content_snippets` OAuth scope. responses: '200': description: Tag removed @@ -25791,16 +25791,14 @@ components: has_unpublished_changes: type: boolean description: Whether this locale's published content has unpublished - changes staged as a draft on top of its live content. Only returned on - the `Preview` API version. + changes staged as a draft on top of its live content. example: false draft_updated_at: type: integer format: date-time nullable: true description: The time, in seconds, when this locale's staged draft was - last edited, or `null` when there is no staged draft. Only returned on - the `Preview` API version. + last edited, or `null` when there is no staged draft. example: 1663597260 url: type: string @@ -26027,8 +26025,7 @@ components: has_unpublished_changes: type: boolean description: Whether the published article has unpublished changes staged - as a draft on top of its live content. Only returned on the `Preview` - API version. For multilingual articles this reflects the default + as a draft on top of its live content. For multilingual articles this reflects the default language's content; a pure draft (never published) reports `false`. example: false draft_updated_at: @@ -26036,8 +26033,7 @@ components: format: date-time nullable: true description: The time, in seconds, when the staged draft was last edited, - or `null` when there is no staged draft. Only returned on the `Preview` - API version. + or `null` when there is no staged draft. example: 1672928610 url: type: string @@ -38978,7 +38974,7 @@ tags: description: | Retrieve the banners a contact matches and record dismissals, so you can display banners on surfaces outside the Messenger (native mobile apps, kiosks, embedded - tools). These endpoints are part of the `Preview` API version and require an OAuth + tools). These endpoints require an OAuth token with the `read_write_users` scope. Requesting a contact's banners records an impression for each banner returned, and dismissals are shared with the web Messenger. - name: Brands @@ -38990,7 +38986,7 @@ tags: - name: Contacts description: Everything about your contacts - name: Content - description: Search and operations over Knowledge Hub content (Preview) — articles, + description: Search and operations over Knowledge Hub content — articles, snippets, external pages, uploaded files, and internal articles. - name: Content Snippets description: Everything about your Content Snippets From 77de19e1678acfbdde8328a14567227a23ce8b6e Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 16:29:00 +0100 Subject: [PATCH 20/22] Complete v2.16 spec: add graduated tags, repair orphaned schemas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cross-checked descriptions/2.16 against the v2.16 promoted set in PR 540055: - Add 7 tag definitions for graduated APIs that operations referenced but were undefined (Audiences, Banners, Calls, Content, Content Snippets, Conversations Attributes, Data Connectors), normalizing Preview wording. - Reunite 8 orphaned schema bodies with their empty top-level keys (app, away_status_reason_list, contact_blocked, content_sources_list, convert_visitor_request, update_conversation_attribute_request, merge_contacts_request, untag_company_request). Earlier graduation commits left each key null and its body absorbed as duplicate keys under a neighbour, silently corrupting both schemas — YAML-legal and invisible to fern check. - Remove 3 stray duplicate `example` fragments that overwrote real values. Result: 0 null paths, 0 duplicate keys, 0 dangling refs (was 33 dup keys). Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 426 +++++++++++++------------ 1 file changed, 221 insertions(+), 205 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index e474af85..b3349406 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -23043,6 +23043,40 @@ components: type: object example: [] app: + title: App + type: object + description: App is a workspace on Intercom + nullable: true + properties: + type: + type: string + description: '' + default: app + example: app + id_code: + type: string + description: The id of the app. + example: xyz789 + name: + type: string + description: The name of the app. + example: ACME + region: + type: string + description: The Intercom region the app is located in. + example: US + timezone: + type: string + description: The timezone of the region where the app is located. + example: America/Los_Angeles + created_at: + type: integer + description: When the app was created. + example: 1671465577 + identity_verification: + type: boolean + description: Whether or not the app uses identity verification. + example: false audience: title: Audience type: object @@ -23151,40 +23185,6 @@ components: type: string description: The value to compare against. example: Acme - title: App - type: object - description: App is a workspace on Intercom - nullable: true - properties: - type: - type: string - description: '' - default: app - example: app - id_code: - type: string - description: The id of the app. - example: xyz789 - name: - type: string - description: The name of the app. - example: ACME - region: - type: string - description: The Intercom region the app is located in. - example: US - timezone: - type: string - description: The timezone of the region where the app is located. - example: America/Los_Angeles - created_at: - type: integer - description: When the app was created. - example: 1671465577 - identity_verification: - type: boolean - description: Whether or not the app uses identity verification. - example: false article: title: Article type: object @@ -23312,7 +23312,6 @@ components: readOnly: true description: The ID of the teammate who last updated this content version. example: 5017691 - example: http://intercom.test/help/en/articles/3-default-language internal_article_list: title: Internal Articles type: object @@ -23614,7 +23613,6 @@ components: type: boolean description: Whether the internal article is available for AI Sales Agent. example: true - example: en article_search_highlights: title: Article Search Highlights type: object @@ -23788,8 +23786,6 @@ components: description: The percentage of Fin AI Agent involvements that resulted in a resolution (fin_resolutions / fin_involvements * 100). example: 80.0 - other types of reaction. - example: 20.0 article_translated_content: title: Article Translated Content type: object @@ -24288,6 +24284,21 @@ components: description: "The Unix timestamp when the status reason was last updated" example: 1734537243 away_status_reason_list: + title: Away Status Reasons + type: object + description: A list of away status reasons. + properties: + type: + type: string + description: The type of the object + enum: + - list + example: list + data: + type: array + description: A list of away status reason objects. + items: + "$ref": "#/components/schemas/away_status_reason" banner_list: title: Banner List type: object @@ -24429,21 +24440,6 @@ components: type: boolean description: Whether the banner view is dismissed. example: true - title: Away Status Reasons - type: object - description: A list of away status reasons. - properties: - type: - type: string - description: The type of the object - enum: - - list - example: list - data: - type: array - description: A list of away status reason objects. - items: - "$ref": "#/components/schemas/away_status_reason" change_ticket_type_request: title: Change Ticket Type Request description: You can change the type of a Ticket @@ -25701,6 +25697,16 @@ components: description: Whether the contact is archived or not. example: false contact_blocked: + title: Contact Blocked + type: object + description: blocked contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + blocked: + type: boolean + description: Always true. + example: true content_bulk_action_request: title: Content Bulk Action Request Payload type: object @@ -25821,16 +25827,6 @@ components: status: type: string example: queued - title: Contact Blocked - type: object - description: blocked contact object - allOf: - - "$ref": "#/components/schemas/contact_reference" - properties: - blocked: - type: boolean - description: Always true. - example: true content_import_source: title: Content Import Source type: object @@ -25960,6 +25956,24 @@ components: description: The ISO 639 language code of the content source. example: en content_sources_list: + title: Content Source List + nullable: false + properties: + type: + type: string + enum: + - content_source.list + example: content_source.list + total_count: + type: integer + description: The total number of content sources used by AI Agent in the + conversation. + example: 1 + content_sources: + type: array + description: The content sources used by AI Agent in the conversation. + items: + "$ref": "#/components/schemas/content_source" content_snippet: title: Content Snippet type: object @@ -26348,24 +26362,6 @@ components: file_source_content: "#/components/schemas/content_search_default_item" internal_article: "#/components/schemas/content_search_default_item" article: "#/components/schemas/content_search_article_item" - title: Content Source List - nullable: false - properties: - type: - type: string - enum: - - content_source.list - example: content_source.list - total_count: - type: integer - description: The total number of content sources used by AI Agent in the - conversation. - example: 1 - content_sources: - type: array - description: The content sources used by AI Agent in the conversation. - items: - "$ref": "#/components/schemas/content_source" conversation_list_item: title: Conversation List Item type: object @@ -27509,38 +27505,6 @@ components: required: - ticket_type_id convert_visitor_request: - create_audience_request: - title: Create Audience Request - type: object - description: The request payload for creating an audience. - required: - - name - properties: - name: - type: string - description: The name of the audience. - example: VIP Customers - predicates: - type: array - description: The predicates that define which contacts belong to the audience. - items: - "$ref": "#/components/schemas/predicate" - example: - - attribute: company.name - type: string - comparison: contains - value: Acme - role_predicates: - type: array - description: Role-based predicates that further filter audience membership by - contact role. - items: - "$ref": "#/components/schemas/predicate" - example: - - attribute: role - type: role - comparison: eq - value: user description: You can merge a Visitor to a Contact of role type lead or user. type: object title: Convert Visitor Request Payload @@ -27601,6 +27565,38 @@ components: - type - user - visitor + create_audience_request: + title: Create Audience Request + type: object + description: The request payload for creating an audience. + required: + - name + properties: + name: + type: string + description: The name of the audience. + example: VIP Customers + predicates: + type: array + description: The predicates that define which contacts belong to the audience. + items: + "$ref": "#/components/schemas/predicate" + example: + - attribute: company.name + type: string + comparison: contains + value: Acme + role_predicates: + type: array + description: Role-based predicates that further filter audience membership by + contact role. + items: + "$ref": "#/components/schemas/predicate" + example: + - attribute: role + type: role + comparison: eq + value: user create_article_request: description: You can create an Article type: object @@ -29514,6 +29510,47 @@ components: - "$ref": "#/components/schemas/create_conversation_attribute_relationship_request" - "$ref": "#/components/schemas/create_conversation_attribute_files_request" update_conversation_attribute_request: + title: Update Conversation Attribute Request + type: object + description: Payload for updating a conversation attribute. + properties: + name: + type: string + description: Name of the attribute. + example: api_test_renamed + description: + type: string + description: Readable description of the attribute. + example: Updated via API + multiline: + type: boolean + description: "(String data type only) Whether this string attribute is multiline." + example: false + required: + type: boolean + description: Whether this attribute is required. + example: false + visible_to_team_ids: + type: array + description: Team IDs that can see this attribute. Empty array means all teams. + items: + type: string + example: [] + reference: + type: object + description: "(Relationship data type only) Reference configuration for related objects." + required: + - type + properties: + type: + type: string + description: "The cardinality of the relationship: `one` or `many`." + enum: + - one + - many + object_type_id: + type: string + description: The ID of the related custom object type. create_data_connector_request: title: Create Data Connector Request type: object @@ -30298,47 +30335,6 @@ components: type: boolean description: Whether the data connector was deleted successfully. example: true - title: Update Conversation Attribute Request - type: object - description: Payload for updating a conversation attribute. - properties: - name: - type: string - description: Name of the attribute. - example: api_test_renamed - description: - type: string - description: Readable description of the attribute. - example: Updated via API - multiline: - type: boolean - description: "(String data type only) Whether this string attribute is multiline." - example: false - required: - type: boolean - description: Whether this attribute is required. - example: false - visible_to_team_ids: - type: array - description: Team IDs that can see this attribute. Empty array means all teams. - items: - type: string - example: [] - reference: - type: object - description: "(Relationship data type only) Reference configuration for related objects." - required: - - type - properties: - type: - type: string - description: "The cardinality of the relationship: `one` or `many`." - enum: - - one - - many - object_type_id: - type: string - description: The ID of the related custom object type. data_event: title: Data Event type: object @@ -32086,6 +32082,28 @@ components: description: Base64-encoded cursor containing [updated_at, id] for pagination example: "WzE3MTk0OTM3NTcuMCwgIjEyMyJd" merge_contacts_request: + description: Merge contact data. + type: object + title: Merge contact data + required: + - from + - into + properties: + from: + type: string + description: The unique identifier for the contact to merge away from. Must + be a lead. + example: 5d70dd30de4efd54f42fd526 + into: + type: string + description: The unique identifier for the contact to merge into. Must be + a user. + example: 5ba682d23d7cf92bef87bfd4 + skip_duplicate_validation: + type: boolean + description: Set to `true` to merge two contacts that are not duplicates + (they share no matching email or phone). + example: true merge_history_item: title: Merge History Item type: object @@ -32138,28 +32156,6 @@ components: type: boolean description: Whether there are more results to fetch. example: false - description: Merge contact data. - type: object - title: Merge contact data - required: - - from - - into - properties: - from: - type: string - description: The unique identifier for the contact to merge away from. Must - be a lead. - example: 5d70dd30de4efd54f42fd526 - into: - type: string - description: The unique identifier for the contact to merge into. Must be - a user. - example: 5ba682d23d7cf92bef87bfd4 - skip_duplicate_validation: - type: boolean - description: Set to `true` to merge two contacts that are not duplicates - (they share no matching email or phone). - example: true merge_conversations_request: title: Merge Conversations Request type: object @@ -34166,6 +34162,35 @@ components: object. example: en untag_company_request: + description: You can tag a single company or a list of companies. + type: object + title: Untag Company Request Payload + properties: + name: + type: string + description: The name of the tag which will be untagged from the company + example: Independent + companies: + type: array + items: + properties: + id: + type: string + description: The Intercom defined id representing the company. + example: 531ee472cce572a6ec000006 + company_id: + type: string + description: The company id you have defined for the company. + example: '6' + untag: + type: boolean + description: Always set to true + example: 'true' + description: The id or company_id of the company can be passed as input + parameters. + required: + - name + - companies update_audience_request: title: Update Audience Request type: object @@ -34197,35 +34222,6 @@ components: type: role comparison: eq value: user - description: You can tag a single company or a list of companies. - type: object - title: Untag Company Request Payload - properties: - name: - type: string - description: The name of the tag which will be untagged from the company - example: Independent - companies: - type: array - items: - properties: - id: - type: string - description: The Intercom defined id representing the company. - example: 531ee472cce572a6ec000006 - company_id: - type: string - description: The company id you have defined for the company. - example: '6' - untag: - type: boolean - description: Always set to true - example: 'true' - description: The id or company_id of the company can be passed as input - parameters. - required: - - name - - companies publish_article_draft_request: description: | Optional body for publishing a staged article draft. On a single-language @@ -35295,19 +35291,37 @@ tags: 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.", - name: Articles description: Everything about your Articles +- name: Audiences + description: Everything about your Audiences - name: Away Status Reasons description: Everything about your Away Status Reasons +- name: Banners + description: | + Retrieve the banners a contact matches and record dismissals, so you can display + banners on surfaces outside the Messenger (native mobile apps, kiosks, embedded + tools). These endpoints require an OAuth token with the `read_write_users` scope. + Requesting a contact's banners records an impression for each banner returned, and + dismissals are shared with the web Messenger. - name: Brands description: Everything about your Brands +- name: Calls + description: Everything about your Calls - name: Companies description: Everything about your Companies - name: Contacts description: Everything about your contacts +- name: Content + description: Search and operations over Knowledge Hub content — articles, snippets, + external pages, uploaded files, and internal articles. +- name: Content Snippets + description: Everything about your Content Snippets - name: Conversations description: Everything about your Conversations externalDocs: description: What is a conversation? url: https://www.intercom.com/help/en/articles/4323904-what-is-a-conversation +- name: Conversations Attributes + description: Manage custom attributes for conversations - name: Custom Object Instances description: | Everything about your Custom Object instances. @@ -35316,6 +35330,8 @@ tags: {% /admonition %} - name: Data Attributes description: Everything about your Data Attributes +- name: Data Connectors + description: Everything about your Data Connectors - name: Data Events description: Everything about your Data Events - name: Data Export From f2f8b0bdade88f9913666d7786288d71f392c585 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 17:06:40 +0100 Subject: [PATCH 21/22] Remove all v2.16-graduated APIs from Preview spec Per team convention, the Preview spec (descriptions/0) documents only Unstable/Preview changes, not APIs already served by a numbered version. PR 540055 graduated 72 changes into v2.16, so remove them from Preview, leaving the 2.15 base plus the 34 still-Unstable changes. Removed from descriptions/0: - 70 graduated operations (macros, help-center redirects, article draft & version history, content tagging/search/bulk, content snippets, audiences, banners, data connectors, side conversations, office hours, conversation attributes, deleted-conversations list, team metrics, activity-log search, change-ticket-type, merge conversation, link/unlink ticket, whatsapp/message status, custom-object-instances list, merged-contact redirect, etc.) - 82 graduated fields from 24 shared base schemas (email_verified, channel, brand_id, agent-availability/fin-stats article fields, audience_ids, etc.) - 93 graduated-only schemas and 8 graduated tags - Reverted graduated breaking changes to their 2.15 form: contact.owner_id and ticket assignee ids back to their original types, conversation.priority enum, conversation assignee nullability, restored article parent_id/parent_type, repointed contact search / conversation-source-author / tag-create response to their 2.15 schemas, dropped the reporting-export no-reply note. Also removed the now-dead article-versions, /messages/status and merge_conversations_request entries from preview-openapi-overrides.yml. Result: no v2.16-graduated operation/schema/tag/field remains in Preview; all 17 still-Unstable operations retained; `fern check` passes with 0 errors (clears 3 pre-existing errors for the removed Preview-only endpoints). Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/0/api.intercom.io.yaml | 44015 ++++++++++---------------- fern/preview-openapi-overrides.yml | 25 - 2 files changed, 16547 insertions(+), 27493 deletions(-) diff --git a/descriptions/0/api.intercom.io.yaml b/descriptions/0/api.intercom.io.yaml index 33d6aa0c..fa357f4d 100644 --- a/descriptions/0/api.intercom.io.yaml +++ b/descriptions/0/api.intercom.io.yaml @@ -272,234 +272,6 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/admins/activity_logs/search": - post: - summary: Search activity logs - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Admins - operationId: searchActivityLogs - description: Search and filter admin activity logs using a POST request - with event type filter in the request body. You can find more details - about the available event types in the List all activity log event - types endpoint. - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - created_at_after - properties: - created_at_after: - type: integer - format: date-time - description: The start date that you request data for. It must - be formatted as a UNIX timestamp. - example: 1677253093 - created_at_before: - type: integer - format: date-time - description: The end date that you request data for. It must - be formatted as a UNIX timestamp. - example: 1677861493 - event_types: - type: array - description: An optional list of event types to filter activity - logs by. Use the list all activity log event types endpoint - to retrieve available values. - items: - type: string - example: - - app_name_change - - message_state_change - page: - type: integer - description: The page number of results to return. - default: 1 - example: 1 - per_page: - type: integer - description: The number of results per page. Must be between - 1 and 250. - default: 20 - minimum: 1 - maximum: 250 - example: 20 - examples: - search_with_event_types: - summary: Search with event types filter - value: - created_at_after: 1677253093 - created_at_before: 1677861493 - event_types: - - app_name_change - - message_state_change - search_without_filters: - summary: Search with date range only - value: - created_at_after: 1677253093 - created_at_before: 1677861493 - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: activity_log.list - pages: - type: pages - next: - page: 1 - per_page: 20 - total_pages: 1 - activity_logs: - - id: fca05814-4b72-4dce-ad4f-77a786a2c136 - performed_by: - type: admin - id: '991267464' - email: admin5@email.com - ip: 127.0.0.1 - metadata: - before: before - after: after - created_at: 1734537253 - activity_type: app_name_change - activity_description: Ciaran5 Lee changed your app name - from before to after. - schema: - "$ref": "#/components/schemas/activity_log_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 57cc6148-2c0a-471b-bd9e-859538110958 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/admins/activity_log_event_types": - get: - summary: List all activity log event types - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Admins - operationId: listActivityLogEventTypes - description: | - You can get a list of all activity log event types. This is useful for discovering valid values to use with the `event_types` filter on the List all activity logs endpoint. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: activity_log_event_type.list - event_types: - - admin_conversation_assignment_limit_change - - admin_ticket_assignment_limit_change - - admin_avatar_change - - admin_away_mode_change - - admin_deletion - - admin_deprovisioned - - admin_impersonation_end - - admin_impersonation_start - - admin_invite_change - - admin_invite_creation - - admin_invite_deletion - - admin_login_failure - - admin_login_success - - admin_logout - - admin_password_reset_request - - admin_password_reset_success - - admin_permission_change - - admin_provisioned - - admin_two_factor_auth_change - - admin_unauthorized_sign_in_method - - app_admin_join - - app_authentication_method_change - - app_data_deletion - - app_data_export - - app_google_sso_domain_change - - app_identity_verification_change - - app_name_change - - app_outbound_address_change - - app_package_installation - - app_package_token_regeneration - - app_package_uninstallation - - app_team_creation - - app_team_deletion - - app_team_membership_modification - - app_timezone_change - - app_webhook_creation - - app_webhook_deletion - - articles_in_messenger_enabled_change - - bulk_delete - - bulk_export - - campaign_deletion - - campaign_state_change - - conversation_part_deletion - - conversation_pdf_export - - conversation_topic_change - - conversation_topic_creation - - conversation_topic_deletion - - help_center_settings_change - - inbound_conversations_change - - inbox_access_change - - message_deletion - - message_state_change - - messenger_look_and_feel_change - - messenger_search_required_change - - messenger_spaces_change - - office_hours_change - - role_change - - role_creation - - role_deletion - - ruleset_activation_title_preview - - ruleset_creation - - ruleset_deletion - - search_browse_enabled_change - - search_browse_required_change - - seat_change - - seat_revoke - - security_settings_change - - temporary_expectation_change - - upfront_email_collection_change - - welcome_message_change - - hide_csat_from_agents_setting_change - schema: - "$ref": "#/components/schemas/activity_log_event_type_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 85a1e5b6-e743-4e89-a6e2-1d7c0c3f4a5b - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" "/admins": get: summary: List all admins @@ -1692,825 +1464,540 @@ paths: message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/articles/{id}/draft": + "/articles/search": get: - summary: Retrieve an article draft + summary: Search for articles parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the article which is given by Intercom. - example: 123 + - name: phrase + in: query + required: false + description: The phrase within your articles to search for. + example: Getting started schema: - type: integer - tags: - - Articles - operationId: retrieveArticleDraft - description: | - Fetch the staged draft of a published article by making a GET request to - `https://api.intercom.io/articles//draft`. The response is the article - rendered with its draft content, leaving the live article untouched. - - A draft exists only when a published article has unpublished changes staged - on top of it. Returns `404` when the article has no staged draft. - - Requires the `read_articles_scope` OAuth scope. - responses: - '200': - description: Article draft found - content: - application/json: - examples: - Article draft found: - value: - id: '45' - type: article - workspace_id: this_is_an_id74_that_should_be_at_least_4 - parent_ids: [] - title: This is the draft title - description: '' - body:

Unpublished changes staged as a draft

- body_markdown: "Unpublished changes staged as a draft\n" - author_id: 991267502 - state: published - created_at: 1734537292 - updated_at: 1734537292 - has_unpublished_changes: true - draft_updated_at: 1734537292 - url: http://help-center.test/myapp-74/en/articles/45-this-is-the-article-title - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true - schema: - "$ref": "#/components/schemas/article" - '404': - "$ref": "#/components/responses/ObjectNotFound" - '401': - "$ref": "#/components/responses/Unauthorized" - put: - summary: Stage an article draft - parameters: - - name: Intercom-Version - in: header + type: string + - name: state + in: query + required: false + description: The state of the Articles returned. One of `published`, `draft` + or `all`. + example: published schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the article which is given by Intercom. + type: string + - name: help_center_id + in: query + required: false + description: The ID of the Help Center to search in. example: 123 schema: type: integer + - name: highlight + in: query + required: false + description: Return a highlighted version of the matching content within your + articles. Refer to the response schema for more details. + example: false + schema: + type: boolean tags: - Articles - operationId: stageArticleDraft - description: | - Stage changes to a published article as a draft by making a PUT request to - `https://api.intercom.io/articles//draft`. The live article remains - unchanged until the draft is published. - - The article must already be published; staging a draft on an article that - has never been published returns `422`. - - Only versioned text content (such as `title` and `body`) is staged. - Non-versioned fields like AI availability are ignored, leaving the live - values untouched. - - Requires the `read_write_articles_scope` OAuth scope. + operationId: searchArticles + description: You can search for articles by making a GET request to `https://api.intercom.io/articles/search`. responses: '200': - description: Draft staged + description: Search successful content: application/json: examples: - Draft staged: + Search successful: value: - id: '48' - type: article - workspace_id: this_is_an_id80_that_should_be_at_least_4 - parent_ids: [] - title: Christmas is here! - description: '' - body:

New gifts in store for the jolly season

- body_markdown: "New gifts in store for the jolly season\n" - author_id: 991267508 - state: published - created_at: 1734537297 - updated_at: 1734537298 - has_unpublished_changes: true - draft_updated_at: 1734537298 - url: http://help-center.test/myapp-80/en/articles/48-christmas-is-here - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true + type: list + total_count: 1 + data: + articles: + - id: '55' + type: article + workspace_id: this_is_an_id92_that_should_be_at_least_4 + parent_ids: [] + tags: + type: tag.list + tags: [] + title: Title 1 + description: '' + body: '' + body_markdown: '' + author_id: 991267521 + state: draft + created_at: 1734537306 + updated_at: 1734537306 + url: + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + highlights: [] + pages: + type: pages + page: 1 + total_pages: 1 + per_page: 10 schema: - "$ref": "#/components/schemas/article" - '404': - "$ref": "#/components/responses/ObjectNotFound" - '422': - description: Article must be published before a draft can be staged + "$ref": "#/components/schemas/article_search_response" + '401': + description: Unauthorized content: application/json: examples: - Article not published: + Unauthorized: value: type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + request_id: c70746a8-a5b2-4772-afba-1a4b487ea75d errors: - - code: parameter_invalid - message: Article must be published before a draft can be staged + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_article_request" - examples: - Draft staged: - summary: Stage a draft - value: - title: Christmas is here! - body: "

New gifts in store for the jolly season

" - "/articles/{id}/draft/publish": - post: - summary: Publish an article draft + "/away_status_reasons": + get: + summary: List all away status reasons parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the article which is given by Intercom. - example: 123 - schema: - type: integer tags: - - Articles - operationId: publishArticleDraft - description: | - Publish a staged draft by making a POST request to - `https://api.intercom.io/articles//draft/publish`, promoting the draft - content to live. - - On a single-language workspace no body is required. On a multilingual - workspace you must list which locales to publish via the `locales` array; - omitting it returns `422`. Returns `422` when there is no staged draft to - publish, or when a requested locale has no pending changes. - - Requires the `read_write_articles_scope` OAuth scope. + - Away Status Reasons + operationId: listAwayStatusReasons + description: "Returns a list of all away status reasons configured for the workspace, including deleted ones." responses: '200': - description: Draft published - content: - application/json: - examples: - Draft published: - value: - id: '48' - type: article - workspace_id: this_is_an_id80_that_should_be_at_least_4 - parent_ids: [] - title: Christmas is here! - description: '' - body:

New gifts in store for the jolly season

- body_markdown: "New gifts in store for the jolly season\n" - author_id: 991267508 - state: published - created_at: 1734537297 - updated_at: 1734537299 - has_unpublished_changes: false - draft_updated_at: null - url: http://help-center.test/myapp-80/en/articles/48-christmas-is-here - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true - schema: - "$ref": "#/components/schemas/article" - '404': - "$ref": "#/components/responses/ObjectNotFound" - '422': - description: No draft to publish, locales not specified on a multilingual workspace, or a requested locale has no pending changes + description: Successful response content: application/json: - examples: - No draft to publish: - value: - type: error.list - request_id: 8a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d - errors: - - code: parameter_invalid - message: Article has no draft to publish - Locales required on a multilingual workspace: - value: - type: error.list - request_id: 9b2c3d4e-5f6a-7b8c-9d0e-1f2a3b4c5d6e - errors: - - code: parameter_not_found - message: locales must be specified to publish a draft on a multilingual workspace - Locale has no pending changes: - value: - type: error.list - request_id: 0c3d4e5f-6a7b-8c9d-0e1f-2a3b4c5d6e7f - errors: - - code: parameter_invalid - message: 'Cannot publish a draft for locale(s) without pending changes: fr' schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/away_status_reason_list" '401': "$ref": "#/components/responses/Unauthorized" - requestBody: - required: false - content: - application/json: - schema: - "$ref": "#/components/schemas/publish_article_draft_request" - examples: - Publish specific locales: - summary: Publish specific locales on a multilingual workspace - value: - locales: - - en - - fr - "/articles/{article_id}/versions": - get: - summary: List article versions + "/export/reporting_data/enqueue": + post: + summary: Enqueue a new reporting data export job + tags: [Reporting Data Export] parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: article_id - in: path + requestBody: required: true - description: The unique identifier for the article whose versions you are - listing. - example: 123 - schema: - type: integer - - name: page - in: query - required: false - description: The page of results to fetch. Defaults to the first page. - example: 1 - schema: - type: integer - - name: per_page - in: query - required: false - description: The number of results to return per page. - example: 25 - schema: - type: integer - - name: locale - in: query - required: false - description: Filter versions to a specific locale. Use the locale identifier - (for example `en`, `fr`). If the locale is not configured for the workspace, - a `400` is returned. - example: en - schema: - type: string - tags: - - Articles - operationId: listArticleVersions - description: | - Fetch the version history of an article by making a GET request to - `https://api.intercom.io/articles//versions`. Versions are - returned newest-first as a paginated list of metadata. Use - `GET /articles/{article_id}/versions/{id}` to retrieve a single version - with its full content. - - Requires the `read_articles_scope` OAuth scope. + content: + application/json: + schema: + type: object + required: [dataset_id, attribute_ids, start_time, end_time] + properties: + dataset_id: + type: string + example: conversation + attribute_ids: + type: array + description: List of attribute identifiers to include in the export. Requires qualified_id format (e.g., "people.Brand", "standard.conversation_id"). Use the qualified_id returned from the get_datasets response. + items: + type: string + example: [conversation_id, conversation_started_at] + start_time: + type: integer + format: int64 + example: 1717490000 + end_time: + type: integer + format: int64 + example: 1717510000 responses: '200': - description: Versions found + description: Job enqueued successfully content: application/json: - examples: - Versions found: - value: - type: list - pages: - type: pages - page: 1 - per_page: 25 - total_pages: 1 - total_count: 2 - data: - - type: article_version - id: '301' - article_id: '123' - title: This is the article title - description: '' - author_id: '991267502' - created_by_id: '5017691' - created_via: web - from_version_id: '300' - state: published - created_at: 1734537292 - - type: article_version - id: '300' - article_id: '123' - title: This was the earlier title - description: '' - author_id: '991267502' - created_by_id: '5017691' - created_via: api - from_version_id: null - state: draft - created_at: 1734530000 schema: - "$ref": "#/components/schemas/article_version_list" + type: object + properties: + job_identifier: + type: string + example: job1 + status: + type: string + example: pending + download_url: + type: string + download_expires_at: + type: string '400': - description: Unknown locale + description: Bad request (e.g. validation errors) content: application/json: examples: - Unknown locale: + No dataset_id: value: type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 errors: - - code: parameter_invalid - message: Unknown locale + - code: bad_request + message: "'dataset_id' is a required parameter" + Invalid dataset_id: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: imaginary is not a valid dataset_id + No attribute_ids: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: "'attribute_ids' is a required parameter" + Empty attribute_ids: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: attribute_ids must contain at least one attribute_id + Non array attribute_ids: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: "'attribute_ids' not an array must be of type Array" + Invalid attribute_ids: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: bad_request + message: "attribute_ids invalid for conversation dataset: non_existent" schema: "$ref": "#/components/schemas/error" - '404': - "$ref": "#/components/responses/ObjectNotFound" '401': - "$ref": "#/components/responses/Unauthorized" - "/articles/{article_id}/versions/{id}": - get: - summary: Retrieve an article version - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: article_id - in: path - required: true - description: The unique identifier for the article. - example: 123 - schema: - type: integer - - name: id - in: path - required: true - description: The unique identifier for the version. - example: '301' - schema: - type: string - - name: locale - in: query - required: false - description: Return the version's content for a specific locale. If the locale - is not configured for the workspace, a `400` is returned. - example: en - schema: - type: string - tags: - - Articles - operationId: retrieveArticleVersion - description: | - Fetch a single prior version of an article, including its body content, - by making a GET request to - `https://api.intercom.io/articles//versions/`. Returns - the version's full content; the live article remains untouched. - - Requires the `read_articles_scope` OAuth scope. - responses: - '200': - description: Version found + description: Unauthorized content: application/json: examples: - Version found: + Unauthorized: value: - type: article_version - id: '301' - article_id: '123' - title: This is the article title - description: '' - body:

Body of this version

- body_markdown: "Body of this version\n" - author_id: '991267502' - created_by_id: '5017691' - created_via: web - from_version_id: '300' - state: published - created_at: 1734537292 - updated_at: 1734537292 + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: unauthorized + message: Access Token Invalid schema: - "$ref": "#/components/schemas/article_version" - '400': - description: Unknown locale + "$ref": "#/components/schemas/error" + '429': + description: Too many jobs in progress content: application/json: examples: - Unknown locale: + Unauthorized: value: type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 errors: - - code: parameter_invalid - message: Unknown locale + - code: rate_limit_exceeded + message: Exceeded rate limit of 5 pending reporting dataset export jobs schema: "$ref": "#/components/schemas/error" - '404': - "$ref": "#/components/responses/ObjectNotFound" - '401': - "$ref": "#/components/responses/Unauthorized" - "/articles/{article_id}/tags": - post: - summary: Add a tag to an article - tags: - - Articles - - Tags + "/export/reporting_data/{job_identifier}": + get: + summary: Get export job status + tags: [Reporting Data Export] parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: article_id - in: path - required: true - description: The unique identifier for the article which is given by Intercom. - example: 123 - schema: - type: integer - operationId: attachTagToArticle - description: | - Apply an existing tag to an article. Returns the tag that was applied. - - The tag must already exist in the workspace (create tags with the Tags API), - and the authenticating teammate must have the `manage_knowledge_base_content` - permission. - - Requires the `read_write_articles_scope` OAuth scope. - requestBody: - content: - application/json: - schema: - type: object - required: - - id - properties: - id: - type: string - description: The unique identifier of the tag to apply, as given by - Intercom. - example: '7522907' - admin_id: - type: string - nullable: true - description: Optional id of the teammate to attribute the tagging to. - Defaults to the authenticating teammate. Does not affect authorization. - example: '1234' - examples: - successful: - summary: Apply a tag - value: - id: '7522907' + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: app_id + in: query + description: The Intercom defined code of the workspace the company is associated + to. + required: true + schema: + type: string + - name: client_id + in: query + required: true + schema: + type: string + - name: job_identifier + description: Unique identifier of the job. + in: query + required: true + schema: + type: string responses: '200': - description: Tag applied + description: Job status returned successfully content: application/json: examples: - Tag applied: + With complete status: value: - type: tag - id: '7522907' - name: Independent - applied_at: 1663597223 - applied_by: - type: admin - id: '1234' + job_identifier: job1 + status: complete + download_url: '' + download_expires_at: '' + With failed status: + value: + job_identifier: job1 + status: failed + download_url: '' + download_expires_at: '' schema: - "$ref": "#/components/schemas/tag" - '403': - description: Forbidden + type: object + properties: + job_identifier: + type: string + status: + type: string + download_url: + type: string + download_expires_at: + type: string + '404': + description: When job not found content: application/json: examples: - Forbidden: + Not found: value: type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 errors: - - code: forbidden - message: Not authorized to manage knowledge base content + - code: not_found + message: "Export job not found for identifier: job1" schema: "$ref": "#/components/schemas/error" + "/export/reporting_data/get_datasets": + get: + summary: List available datasets and attributes + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: [Reporting Data Export] + responses: + '200': + description: List of datasets + content: + application/json: + schema: + type: object + properties: + type: + type: string + example: list + data: + type: array + items: + type: object + properties: + id: + type: string + example: conversation + name: + type: string + example: Conversation + description: + type: string + example: "Conversation-level details: status, channel, assignee." + default_time_attribute_id: + type: string + example: conversation_started_at + attributes: + type: array + items: + type: object + properties: + id: + type: string + description: The simple attribute identifier. Note that this may be ambiguous if the same name exists across different attribute types. Use qualified_id when calling the enqueue endpoint. + example: conversation_id + qualified_id: + type: string + description: A namespaced identifier that uniquely identifies the attribute across all types. Format is "prefix.name" (e.g., "people.Brand", "conversation.Brand"). Required when calling the enqueue endpoint. + example: conversation.conversation_id + name: + type: string + example: Conversation ID + "/download/reporting_data/{job_identifier}": + get: + summary: Download completed export job data + description: | + Download the data from a completed reporting data export job. + + > Octet header required + > + > You will have to specify the header Accept: `application/octet-stream` when hitting this endpoint. + tags: [Reporting Data Export] + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: Accept + in: header + required: true + schema: + type: string + example: application/octet-stream + enum: + - application/octet-stream + description: "Required header for downloading the export file" + - name: app_id + in: query + required: true + schema: + type: string + - name: job_identifier + in: query + required: true + schema: + type: string + responses: + '200': + description: Export file downloaded '404': - description: Article or tag not found + description: When job not found content: application/json: examples: - Article not found: - value: - type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 - errors: - - code: article_not_found - message: Article not found - Tag not found: + Not found: value: type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 errors: - - code: tag_not_found - message: Tag not found + - code: not_found + message: "Export job not found for identifier: job1" schema: "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" - "/articles/{article_id}/tags/{id}": - delete: - summary: Remove a tag from an article - tags: - - Articles - - Tags + "/help_center/collections": + get: + summary: List all collections parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: article_id - in: path - required: true - description: The unique identifier for the article which is given by Intercom. - example: 123 - schema: - type: integer - - name: id - in: path - required: true - description: The unique identifier of the tag to remove, as given by Intercom. - example: '7522907' - schema: - type: string - operationId: detachTagFromArticle + tags: + - Help Center + operationId: listAllCollections description: | - Remove a tag from an article. Returns the tag that was removed, with null - `applied_at` and `applied_by`. - - The authenticating teammate must have the `manage_knowledge_base_content` - permission. + You can fetch a list of all collections by making a GET request to `https://api.intercom.io/help_center/collections`. - Requires the `read_write_articles_scope` OAuth scope. + Collections will be returned in descending order on the `updated_at` attribute. This means if you need to iterate through results then we'll show the most recently updated collections first. responses: '200': - description: Tag removed + description: Successful content: application/json: examples: - Tag removed: + Successful: value: - type: tag - id: '7522907' - name: Independent - applied_at: null - applied_by: null + type: list + data: + - id: '159' + workspace_id: this_is_an_id96_that_should_be_at_least_4 + name: English collection title + url: http://help-center.test/myapp-96/collection-17 + order: 17 + created_at: 1734537309 + updated_at: 1734537309 + description: english collection description + icon: bookmark + parent_id: + help_center_id: 79 + - id: '160' + workspace_id: this_is_an_id96_that_should_be_at_least_4 + name: English section title + url: http://help-center.test/myapp-96/section-1 + order: 1 + created_at: 1734537309 + updated_at: 1734537309 + description: + icon: bookmark + parent_id: '159' + help_center_id: + total_count: 2 + pages: + type: pages + page: 1 + per_page: 20 + total_pages: 1 schema: - "$ref": "#/components/schemas/tag" - '403': - description: Forbidden + "$ref": "#/components/schemas/collection_list" + '401': + description: Unauthorized content: application/json: examples: - Forbidden: + Unauthorized: value: type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + request_id: 12c2d3a0-77ef-462e-a5ed-e67ddff50b6e errors: - - code: forbidden - message: Not authorized to manage knowledge base content + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '404': - description: Article or tag not found - content: - application/json: - examples: - Article not found: - value: - type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 - errors: - - code: article_not_found - message: Article not found - Tag not found: - value: - type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 - errors: - - code: tag_not_found - message: Tag not found - schema: - "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" - "/articles/search": - get: - summary: Search for articles + post: + summary: Create a collection parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: phrase - in: query - required: false - description: The phrase within your articles to search for. - example: Getting started - schema: - type: string - - name: state - in: query - required: false - description: The state of the Articles returned. One of `published`, `draft` - or `all`. - example: published - schema: - type: string - - name: help_center_id - in: query - required: false - description: The ID of the Help Center to search in. - example: 123 - schema: - type: integer - - name: highlight - in: query - required: false - description: Return a highlighted version of the matching content within your - articles. Refer to the response schema for more details. - example: false - schema: - type: boolean tags: - - Articles - operationId: searchArticles - description: You can search for articles by making a GET request to `https://api.intercom.io/articles/search`. + - Help Center + operationId: createCollection + description: You can create a new collection by making a POST request to `https://api.intercom.io/help_center/collections.` responses: '200': - description: Search successful + description: collection created content: application/json: examples: - Search successful: + collection created: value: - type: list - total_count: 1 - data: - articles: - - id: '55' - type: article - workspace_id: this_is_an_id92_that_should_be_at_least_4 - parent_ids: [] - tags: - type: tag.list - tags: [] - title: Title 1 - description: '' - body: '' - body_markdown: '' - author_id: 991267521 - state: draft - created_at: 1734537306 - updated_at: 1734537306 - url: - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true - highlights: [] - pages: - type: pages - page: 1 - total_pages: 1 - per_page: 10 + id: '165' + workspace_id: this_is_an_id100_that_should_be_at_least_ + name: Thanks for everything + url: http://help-center.test/myapp-100/ + order: 1 + created_at: 1734537312 + updated_at: 1734537312 + description: '' + icon: book-bookmark + parent_id: + help_center_id: 81 schema: - "$ref": "#/components/schemas/article_search_response" - '401': - description: Unauthorized + "$ref": "#/components/schemas/collection" + '400': + description: Bad Request content: application/json: examples: - Unauthorized: + Bad Request: value: type: error.list - request_id: c70746a8-a5b2-4772-afba-1a4b487ea75d + request_id: 816186b3-3187-4b47-adf8-e201bea32208 errors: - - code: unauthorized - message: Access Token Invalid + - code: parameter_not_found + message: Name is a required parameter. schema: "$ref": "#/components/schemas/error" - "/away_status_reasons": - get: - summary: List all away status reasons - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Away Status Reasons - operationId: listAwayStatusReasons - description: "Returns a list of all away status reasons configured for the workspace, including deleted ones." - responses: - '200': - description: Successful response - content: - application/json: - schema: - "$ref": "#/components/schemas/away_status_reason_list" - '401': - "$ref": "#/components/responses/Unauthorized" - "/audiences": - get: - summary: List all audiences - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: page - in: query - required: false - description: The page of results to fetch. Defaults to first page. - example: 1 - schema: - type: integer - - name: per_page - in: query - required: false - description: The number of results to return per page. Defaults to 50. Maximum - is 50. - example: 50 - schema: - type: integer - maximum: 50 - tags: - - Audiences - operationId: listAudiences - description: You can fetch a list of all audiences for the workspace. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: list - data: - - type: audience - id: '123' - name: VIP Customers - predicates: - - attribute: company.name - type: string - comparison: contains - value: Acme - role_predicates: - - attribute: role - type: role - comparison: eq - value: user - created_at: 1717200000 - updated_at: 1717200000 - - type: audience - id: '456' - name: Enterprise Accounts - predicates: - - attribute: custom_attributes.plan - type: string - comparison: eq - value: enterprise - role_predicates: - - attribute: role - type: role - comparison: eq - value: user - created_at: 1717200000 - updated_at: 1717200000 - total_count: 2 - page: 1 - per_page: 50 - total_pages: 1 - schema: - "$ref": "#/components/schemas/audience_list" '401': description: Unauthorized content: @@ -2519,81 +2006,79 @@ paths: Unauthorized: value: type: error.list - request_id: b1939528-98f0-4a63-a442-2cc9203fc8c7 + request_id: 25d96ec2-641f-4354-b24e-83a85d33bd30 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - post: - summary: Create an audience - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Audiences - operationId: createAudience - description: You can create a new audience by making a POST request to `https://api.intercom.io/audiences`. requestBody: - required: true content: application/json: schema: - "$ref": "#/components/schemas/create_audience_request" + "$ref": "#/components/schemas/create_collection_request" examples: - audience_created: - summary: Audience created + collection_created: + summary: collection created value: - name: VIP Customers - predicates: - - attribute: company.name - type: string - comparison: contains - value: Acme - role_predicates: - - attribute: role - type: role - comparison: eq - value: user + name: Thanks for everything + bad_request: + summary: Bad Request + value: + description: Missing required parameter + "/help_center/collections/{id}": + get: + summary: Retrieve a collection + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the collection which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - Help Center + operationId: retrieveCollection + description: You can fetch the details of a single collection by making a GET + request to `https://api.intercom.io/help_center/collections/`. responses: - '201': - description: Audience created + '200': + description: Collection found content: application/json: examples: - Audience created: + Collection found: value: - type: audience - id: '789' - name: VIP Customers - predicates: - - attribute: company.name - type: string - comparison: contains - value: Acme - role_predicates: - - attribute: role - type: role - comparison: eq - value: user - created_at: 1717200000 - updated_at: 1717200000 - schema: - "$ref": "#/components/schemas/audience" - '422': - description: Validation error + id: '170' + workspace_id: this_is_an_id106_that_should_be_at_least_ + name: English collection title + url: http://help-center.test/myapp-106/collection-22 + order: 22 + created_at: 1734537315 + updated_at: 1734537315 + description: english collection description + icon: bookmark + parent_id: + help_center_id: 84 + schema: + "$ref": "#/components/schemas/collection" + '404': + description: Collection not found content: application/json: examples: - Validation error: + Collection not found: value: type: error.list - request_id: a3e6b0c1-4f2d-4e8a-9c7b-1d2e3f4a5b6c + request_id: a074a09e-97d1-44e2-b164-b703559c9f23 errors: - - code: validation_error - message: Name is required + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -2604,15 +2089,14 @@ paths: Unauthorized: value: type: error.list - request_id: c1d2e3f4-5a6b-7c8d-9e0f-1a2b3c4d5e6f + request_id: a29395a5-181c-4f3b-b069-5b2f32604c58 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/audiences/{id}": - get: - summary: Retrieve an audience + put: + summary: Update a collection parameters: - name: Intercom-Version in: header @@ -2621,49 +2105,45 @@ paths: - name: id in: path required: true - description: The unique identifier for the audience. - example: '123' + description: The unique identifier for the collection which is given by Intercom. + example: 123 schema: - type: string + type: integer tags: - - Audiences - operationId: retrieveAudience - description: You can fetch the details of a single audience by making a GET request - to `https://api.intercom.io/audiences/{id}`. + - Help Center + operationId: updateCollection + description: You can update the details of a single collection by making a PUT + request to `https://api.intercom.io/collections/`. responses: '200': - description: Audience found + description: successful content: application/json: examples: - Audience found: + successful: value: - type: audience - id: '123' - name: VIP Customers - predicates: - - attribute: company.name - type: string - comparison: contains - value: Acme - role_predicates: - - attribute: role - type: role - comparison: eq - value: user - created_at: 1717200000 - updated_at: 1717200000 - schema: - "$ref": "#/components/schemas/audience" + id: '176' + workspace_id: this_is_an_id112_that_should_be_at_least_ + name: Update collection name + url: http://help-center.test/myapp-112/collection-25 + order: 25 + created_at: 1734537318 + updated_at: 1734537319 + description: english collection description + icon: folder + parent_id: + help_center_id: 87 + schema: + "$ref": "#/components/schemas/collection" '404': - description: Audience not found + description: Collection Not Found content: application/json: examples: - Audience not found: + Collection Not Found: value: type: error.list - request_id: d5e6f7a8-1b2c-3d4e-5f6a-7b8c9d0e1f2a + request_id: 198e3add-d017-4e18-b478-fbe2cb8c538b errors: - code: not_found message: Resource Not Found @@ -2677,14 +2157,28 @@ paths: Unauthorized: value: type: error.list - request_id: c4d5e6f7-8a9b-0c1d-2e3f-4a5b6c7d8e9f + request_id: b286edcc-453d-43af-bf2f-40f303708c61 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - put: - summary: Update an audience + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_collection_request" + examples: + successful: + summary: successful + value: + name: Update collection name + collection_not_found: + summary: Collection Not Found + value: + name: Update collection name + delete: + summary: Delete a collection parameters: - name: Intercom-Version in: header @@ -2693,83 +2187,42 @@ paths: - name: id in: path required: true - description: The unique identifier for the audience. - example: '123' + description: The unique identifier for the collection which is given by Intercom. + example: 123 schema: - type: string + type: integer tags: - - Audiences - operationId: updateAudience - description: You can update the details of a single audience by making a PUT request - to `https://api.intercom.io/audiences/{id}`. - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_audience_request" - examples: - audience_updated: - summary: Audience updated - value: - name: Enterprise Accounts - predicates: - - attribute: custom_attributes.plan - type: string - comparison: eq - value: enterprise + - Help Center + operationId: deleteCollection + description: You can delete a single collection by making a DELETE request to + `https://api.intercom.io/collections/`. responses: '200': - description: Audience updated + description: successful content: application/json: examples: - Audience updated: + successful: value: - type: audience - id: '123' - name: Enterprise Accounts - predicates: - - attribute: custom_attributes.plan - type: string - comparison: eq - value: enterprise - role_predicates: - - attribute: role - type: role - comparison: eq - value: user - created_at: 1717200000 - updated_at: 1717200100 - schema: - "$ref": "#/components/schemas/audience" + id: '182' + object: collection + deleted: true + schema: + "$ref": "#/components/schemas/deleted_collection_object" '404': - description: Audience not found + description: collection Not Found content: application/json: examples: - Audience not found: + collection Not Found: value: type: error.list - request_id: e7f8a9b0-1c2d-3e4f-5a6b-7c8d9e0f1a2b + request_id: f0d0ea9b-ffaf-48f5-95d0-e99531c379e2 errors: - code: not_found message: Resource Not Found schema: "$ref": "#/components/schemas/error" - '422': - description: Validation error - content: - application/json: - examples: - Validation error: - value: - type: error.list - request_id: f0a1b2c3-4d5e-6f7a-8b9c-0d1e2f3a4b5c - errors: - - code: validation_error - message: Name must not be blank - schema: - "$ref": "#/components/schemas/error" '401': description: Unauthorized content: @@ -2778,14 +2231,15 @@ paths: Unauthorized: value: type: error.list - request_id: f8a9b0c1-2d3e-4f5a-6b7c-8d9e0f1a2b3c + request_id: d0d16fb5-93e6-45ca-b07d-f98fb92fd733 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - delete: - summary: Delete an audience + "/help_center/help_centers/{id}": + get: + summary: Retrieve a Help Center parameters: - name: Intercom-Version in: header @@ -2794,26 +2248,46 @@ paths: - name: id in: path required: true - description: The unique identifier for the audience. - example: '123' + description: The unique identifier for the collection which is given by Intercom. + example: 123 schema: - type: string + type: integer tags: - - Audiences - operationId: deleteAudience - description: You can delete a single audience by making a DELETE request to `https://api.intercom.io/audiences/{id}`. + - Help Center + operationId: retrieveHelpCenter + description: You can fetch the details of a single Help Center by making a GET + request to `https://api.intercom.io/help_center/help_center/`. responses: - '204': - description: Audience deleted + '200': + description: Collection found + content: + application/json: + examples: + Collection found: + value: + id: '93' + workspace_id: this_is_an_id124_that_should_be_at_least_ + created_at: 1734537325 + updated_at: 1734537325 + identifier: help-center-1 + website_turned_on: false + display_name: Intercom Help Center + url: https://help.mycompany.com + custom_domain: help.mycompany.com + default: false + locales: + - en + schema: + "$ref": "#/components/schemas/help_center" '404': - description: Audience not found + description: Collection not found content: application/json: examples: - Audience not found: + Collection not found: value: type: error.list - request_id: a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d + request_id: bbd5de60-49c4-4850-afff-1226cdaa0beb errors: - code: not_found message: Resource Not Found @@ -2827,635 +2301,413 @@ paths: Unauthorized: value: type: error.list - request_id: b2c3d4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e + request_id: c7c301f6-9206-418b-9792-98821970e48b errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/office_hours_schedules": + "/help_center/help_centers": get: - summary: List all office hours schedules + summary: List all Help Centers parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - - Office Hours - operationId: listOfficeHoursSchedules - description: You can fetch a list of all office hours schedules for the workspace. + - Help Center + operationId: listHelpCenters + description: You can list all Help Centers by making a GET request to `https://api.intercom.io/help_center/help_centers`. responses: '200': - description: Successful response + description: Help Centers found content: application/json: examples: - Successful response: + Help Centers found: value: - type: office_hours_schedule.list - data: - - type: office_hours_schedule - id: '123' - name: Standard Support Hours - time_zone_name: America/New_York - time_intervals: - - start_minute: 540 - end_minute: 1020 - day_of_week: 0 - - start_minute: 1980 - end_minute: 2460 - day_of_week: 1 - twenty_four_seven: false - created_at: 1717200000 - updated_at: 1717200000 - schema: - "$ref": "#/components/schemas/office_hours_schedule_list" + type: list + data: [] + schema: + "$ref": "#/components/schemas/help_center_list" '401': - "$ref": "#/components/responses/Unauthorized" - post: - summary: Create an office hours schedule - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Office Hours - operationId: createOfficeHoursSchedule - description: You can create a new office hours schedule for the workspace. - requestBody: - required: true - content: - application/json: - schema: - "$ref": "#/components/schemas/create_office_hours_schedule_request" - examples: - Create schedule: - value: - name: Standard Support Hours - time_zone_name: America/New_York - time_intervals: - - start_minute: 540 - end_minute: 1020 - responses: - '201': - description: Office hours schedule created + description: Unauthorized content: application/json: examples: - Office hours schedule created: + Unauthorized: value: - type: office_hours_schedule - id: '125' - name: Standard Support Hours - time_zone_name: America/New_York - time_intervals: - - start_minute: 540 - end_minute: 1020 - day_of_week: 0 - twenty_four_seven: false - created_at: 1717200000 - updated_at: 1717200000 + type: error.list + request_id: 76edbbb7-e463-4f6a-817a-b7905d467535 + errors: + - code: unauthorized + message: Access Token Invalid schema: - "$ref": "#/components/schemas/office_hours_schedule" - '401': - "$ref": "#/components/responses/Unauthorized" - '422': - "$ref": "#/components/responses/ValidationError" - "/office_hours_schedules/{id}": + "$ref": "#/components/schemas/error" + "/internal_articles": get: - summary: Retrieve an office hours schedule + summary: List all articles parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the office hours schedule. - example: '123' - schema: - type: string tags: - - Office Hours - operationId: getOfficeHoursSchedule - description: You can fetch the details of a single office hours schedule. + - Internal Articles + operationId: listInternalArticles + description: "You can fetch a list of all internal articles by making a GET request to + `https://api.intercom.io/internal_articles`." responses: '200': - description: Office hours schedule found + description: successful content: application/json: examples: - Office hours schedule found: + successful: value: - type: office_hours_schedule - id: '123' - name: Standard Support Hours - time_zone_name: America/New_York - time_intervals: - - start_minute: 540 - end_minute: 1020 - day_of_week: 0 - twenty_four_seven: false - created_at: 1717200000 - updated_at: 1717200000 + type: list + pages: + type: pages + page: 1 + per_page: 25 + total_pages: 1 + total_count: 1 + data: + - id: '39' + title: Thanks for everything + body: Body of the Article + body_markdown: "Body of the Article\n" + owner_id: 991266252 + author_id: 991266252 + locale: en + audience_ids: + - 1 + - 2 + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true schema: - "$ref": "#/components/schemas/office_hours_schedule" + "$ref": "#/components/schemas/internal_article_list" '401': - "$ref": "#/components/responses/Unauthorized" - '404': - "$ref": "#/components/responses/ObjectNotFound" - put: - summary: Update an office hours schedule - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the office hours schedule. - example: '123' - schema: - type: string - tags: - - Office Hours - operationId: updateOfficeHoursSchedule - description: You can update an existing office hours schedule. - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_office_hours_schedule_request" - examples: - Update schedule: - value: - name: Extended Support Hours - time_intervals: - - start_minute: 480 - end_minute: 1080 - responses: - '200': - description: Office hours schedule updated + description: Unauthorized content: application/json: examples: - Office hours schedule updated: + Unauthorized: value: - type: office_hours_schedule - id: '123' - name: Extended Support Hours - time_zone_name: America/New_York - time_intervals: - - start_minute: 480 - end_minute: 1080 - day_of_week: 0 - twenty_four_seven: false - created_at: 1717200000 - updated_at: 1717203600 + type: error.list + request_id: 2e760b85-9020-471b-89dc-f579ec8a0104 + errors: + - code: unauthorized + message: Access Token Invalid schema: - "$ref": "#/components/schemas/office_hours_schedule" - '401': - "$ref": "#/components/responses/Unauthorized" - '404': - "$ref": "#/components/responses/ObjectNotFound" - '422': - "$ref": "#/components/responses/ValidationError" - delete: - summary: Delete an office hours schedule + "$ref": "#/components/schemas/error" + post: + summary: Create an internal article parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the office hours schedule. - example: '123' - schema: - type: string tags: - - Office Hours - operationId: deleteOfficeHoursSchedule - description: You can delete a single office hours schedule. + - Internal Articles + operationId: createInternalArticle + description: You can create a new internal article by making a POST request to `https://api.intercom.io/internal_articles`. responses: '200': - description: Office hours schedule deleted + description: internal article created content: application/json: examples: - Office hours schedule deleted: + internal article created: value: - id: '123' - object: office_hours_schedule - deleted: true + id: '42' + title: Thanks for everything + body: Body of the Article + body_markdown: "Body of the Article\n" + owner_id: 991266252 + author_id: 991266252 + locale: en + audience_ids: + - 1 + - 2 + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true schema: - type: object - properties: - id: - type: string - example: '123' - object: - type: string - example: office_hours_schedule - deleted: - type: boolean - example: true - '401': - "$ref": "#/components/responses/Unauthorized" - '404': - "$ref": "#/components/responses/ObjectNotFound" - "/office_hours_schedules/{office_hours_schedule_id}/office_hours_exceptions": - get: - summary: List all office hours exceptions - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: office_hours_schedule_id - in: path - required: true - description: The unique identifier for the office hours schedule. - example: '123' - schema: - type: string - tags: - - Office Hours - operationId: listOfficeHoursExceptions - description: You can fetch a list of all exceptions for an office hours schedule. - responses: - '200': - description: Successful response + "$ref": "#/components/schemas/internal_article" + '400': + description: Bad Request content: application/json: examples: - Successful response: + Bad Request: value: - type: office_hours_exception.list - data: - - type: office_hours_exception - id: '456' - office_hours_schedule_id: '123' - exception_date: '2026-12-25' - exception_type: closed - name: Christmas Day - time_intervals: - recurring_annually: true - created_at: 1717200000 - updated_at: 1717200000 - - type: office_hours_exception - id: '457' - office_hours_schedule_id: '123' - exception_date: '2026-12-24' - exception_type: custom_hours - name: Christmas Eve - time_intervals: - - start_minute: 540 - end_minute: 780 - day_of_week: 3 - recurring_annually: true - created_at: 1717200000 - updated_at: 1717200000 - schema: - "$ref": "#/components/schemas/office_hours_exception_list" - '401': - "$ref": "#/components/responses/Unauthorized" + type: error.list + request_id: e522ca8a-cd15-404e-84b3-7f7536003d4a + errors: + - code: parameter_not_found + message: author_id must be in the main body or default locale + translated_content object + schema: + "$ref": "#/components/schemas/error" '404': - "$ref": "#/components/responses/ObjectNotFound" - post: - summary: Create an office hours exception - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: office_hours_schedule_id - in: path - required: true - description: The unique identifier for the office hours schedule. - example: '123' - schema: - type: string - tags: - - Office Hours - operationId: createOfficeHoursException - description: You can create an exception for an office hours schedule. Use `closed` - to mark the day closed (omit `time_intervals`) or `custom_hours` to supply - replacement intervals. - requestBody: - required: true - content: - application/json: - schema: - "$ref": "#/components/schemas/create_office_hours_exception_request" - examples: - Create exception: - value: - exception_date: '2026-12-25' - exception_type: closed - name: Christmas Day - recurring_annually: true - responses: - '201': - description: Office hours exception created + description: Unknown audience IDs content: application/json: examples: - Office hours exception created: + Unknown audience IDs: value: - type: office_hours_exception - id: '458' - office_hours_schedule_id: '123' - exception_date: '2026-12-25' - exception_type: closed - name: Christmas Day - time_intervals: - recurring_annually: true - created_at: 1717200000 - updated_at: 1717200000 + type: error.list + errors: + - code: parameter_invalid + message: 'audience_ids contains unknown audience IDs: 999' schema: - "$ref": "#/components/schemas/office_hours_exception" + "$ref": "#/components/schemas/error" '401': - "$ref": "#/components/responses/Unauthorized" - '404': - "$ref": "#/components/responses/ObjectNotFound" - '422': - "$ref": "#/components/responses/ValidationError" - "/office_hours_schedules/{office_hours_schedule_id}/office_hours_exceptions/{id}": + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 85e91429-72df-4e69-8a12-b55793dff59f + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_internal_article_request" + examples: + internal_article_created: + summary: internal article created + value: + title: Thanks for everything + body: Body of the Article + owner_id: 991266252 + author_id: 991266252 + locale: en + audience_ids: + - 1 + - 2 + bad_request: + summary: Bad Request + value: + title: Thanks for everything + body: Body of the Internal Article + "/internal_articles/{id}": get: - summary: Retrieve an office hours exception + summary: Retrieve an internal article parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: office_hours_schedule_id - in: path - required: true - description: The unique identifier for the office hours schedule. - example: '123' - schema: - type: string - name: id in: path required: true - description: The unique identifier for the office hours exception. - example: '456' + description: The unique identifier for the article which is given by Intercom. + example: 123 schema: - type: string + type: integer tags: - - Office Hours - operationId: getOfficeHoursException - description: You can fetch the details of a single office hours exception. + - Internal Articles + operationId: retrieveInternalArticle + description: You can fetch the details of a single internal article by making a GET request + to `https://api.intercom.io/internal_articles/`. responses: '200': - description: Office hours exception found + description: Internal article found content: application/json: examples: - Office hours exception found: + Internal article found: value: - type: office_hours_exception - id: '456' - office_hours_schedule_id: '123' - exception_date: '2026-12-25' - exception_type: closed - name: Christmas Day - time_intervals: - recurring_annually: true - created_at: 1717200000 - updated_at: 1717200000 - schema: - "$ref": "#/components/schemas/office_hours_exception" - '401': - "$ref": "#/components/responses/Unauthorized" + id: '45' + body: Body of the Article + body_markdown: "Body of the Article\n" + owner_id: 991266252 + author_id: 991266252 + locale: en + audience_ids: + - 1 + - 2 + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + schema: + "$ref": "#/components/schemas/internal_article" '404': - "$ref": "#/components/responses/ObjectNotFound" + description: Internal article not found + content: + application/json: + examples: + Internal article not found: + value: + type: error.list + request_id: 79abd27a-1bfb-42ec-a404-5728c76ba773 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2eab07fb-5092-49a4-ba74-44094f31f264 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" put: - summary: Update an office hours exception + summary: Update an internal article parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: office_hours_schedule_id - in: path - required: true - description: The unique identifier for the office hours schedule. - example: '123' - schema: - type: string - name: id in: path required: true - description: The unique identifier for the office hours exception. - example: '456' + description: The unique identifier for the internal article which is given by Intercom. + example: 123 schema: - type: string + type: integer tags: - - Office Hours - operationId: updateOfficeHoursException - description: You can update an existing office hours exception. - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_office_hours_exception_request" - examples: - Update exception: - value: - exception_type: custom_hours - name: Christmas Day (reduced hours) - time_intervals: - - start_minute: 540 - end_minute: 780 - recurring_annually: true + - Internal Articles + operationId: updateInternalArticle + description: You can update the details of a single internal article by making a PUT + request to `https://api.intercom.io/internal_articles/`. responses: '200': - description: Office hours exception updated + description: successful content: application/json: examples: - Office hours exception updated: + successful: value: - type: office_hours_exception - id: '456' - office_hours_schedule_id: '123' - exception_date: '2026-12-25' - exception_type: custom_hours - name: Christmas Day (reduced hours) - time_intervals: - - start_minute: 540 - end_minute: 780 - day_of_week: 4 - recurring_annually: true - created_at: 1717200000 - updated_at: 1717203600 - schema: - "$ref": "#/components/schemas/office_hours_exception" - '401': - "$ref": "#/components/responses/Unauthorized" + id: '48' + body: Body of the Article + body_markdown: "Body of the Article\n" + owner_id: 991266252 + author_id: 991266252 + locale: en + audience_ids: + - 1 + - 2 + ai_chatbot_availability: true + ai_copilot_availability: true + ai_sales_agent_availability: true + schema: + "$ref": "#/components/schemas/internal_article" '404': - "$ref": "#/components/responses/ObjectNotFound" - '422': - "$ref": "#/components/responses/ValidationError" + description: Internal article or audience ID not found + content: + application/json: + examples: + Internal article not found: + value: + type: error.list + request_id: f9adccb2-9fca-4b87-bbb7-65f2af5e1d78 + errors: + - code: not_found + message: Resource Not Found + Unknown audience IDs: + value: + type: error.list + errors: + - code: parameter_invalid + message: 'audience_ids contains unknown audience IDs: 999' + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: d1ea223d-bb62-42e3-8bcf-30fdcf7dbd99 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_internal_article_request" + examples: + successful: + summary: successful + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + audience_ids: + - 1 + - 2 + internal_article_not_found: + summary: Internal article not found + value: + title: Christmas is here! + body: "

New gifts in store for the jolly season

" delete: - summary: Delete an office hours exception + summary: Delete an internal article parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: office_hours_schedule_id - in: path - required: true - description: The unique identifier for the office hours schedule. - example: '123' - schema: - type: string - name: id in: path required: true - description: The unique identifier for the office hours exception. - example: '456' + description: The unique identifier for the internal article which is given by Intercom. + example: 123 schema: - type: string + type: integer tags: - - Office Hours - operationId: deleteOfficeHoursException - description: You can delete a single office hours exception. + - Internal Articles + operationId: deleteInternalArticle + description: You can delete a single internal article by making a DELETE request to `https://api.intercom.io/internal_articles/`. responses: '200': - description: Office hours exception deleted + description: successful content: application/json: examples: - Office hours exception deleted: + successful: value: - id: '456' - object: office_hours_exception + id: '51' + object: internal_article deleted: true schema: - type: object - properties: - id: - type: string - example: '456' - object: - type: string - example: office_hours_exception - deleted: - type: boolean - example: true - '401': - "$ref": "#/components/responses/Unauthorized" + "$ref": "#/components/schemas/deleted_internal_article_object" '404': - "$ref": "#/components/responses/ObjectNotFound" - "/export/reporting_data/enqueue": - post: - summary: Enqueue a new reporting data export job - description: For the **conversation** dataset, from version 2.16 onward this export returns all conversations, including those that never received a user reply. Earlier versions return only conversations that received at least one user reply. Other datasets are unaffected. - tags: [Reporting Data Export] - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - requestBody: - required: true - content: - application/json: - schema: - type: object - required: [dataset_id, attribute_ids, start_time, end_time] - properties: - dataset_id: - type: string - example: conversation - attribute_ids: - type: array - description: List of attribute identifiers to include in the export. Requires qualified_id format (e.g., "people.Brand", "standard.conversation_id"). Use the qualified_id returned from the get_datasets response. - items: - type: string - example: [conversation_id, conversation_started_at] - start_time: - type: integer - format: int64 - example: 1717490000 - end_time: - type: integer - format: int64 - example: 1717510000 - responses: - '200': - description: Job enqueued successfully - content: - application/json: - schema: - type: object - properties: - job_identifier: - type: string - example: job1 - status: - type: string - example: pending - download_url: - type: string - download_expires_at: - type: string - '400': - description: Bad request (e.g. validation errors) + description: Internal article not found content: application/json: examples: - No dataset_id: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: bad_request - message: "'dataset_id' is a required parameter" - Invalid dataset_id: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: bad_request - message: imaginary is not a valid dataset_id - No attribute_ids: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: bad_request - message: "'attribute_ids' is a required parameter" - Empty attribute_ids: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: bad_request - message: attribute_ids must contain at least one attribute_id - Non array attribute_ids: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: bad_request - message: "'attribute_ids' not an array must be of type Array" - Invalid attribute_ids: + Internal article not found: value: type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + request_id: afe37506-cc48-4727-8068-ae7ff0e7b0e3 errors: - - code: bad_request - message: "attribute_ids invalid for conversation dataset: non_existent" + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -3466,583 +2718,565 @@ paths: Unauthorized: value: type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + request_id: c6e86ce8-9402-4196-89c5-f1b2912b4bac errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '429': - description: Too many jobs in progress - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: rate_limit_exceeded - message: Exceeded rate limit of 5 pending reporting dataset export jobs - schema: - "$ref": "#/components/schemas/error" - "/export/reporting_data/{job_identifier}": + "/internal_articles/search": get: - summary: Get export job status - tags: [Reporting Data Export] + summary: Search for internal articles parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: app_id - in: query - description: The Intercom defined code of the workspace the company is associated - to. - required: true - schema: - type: string - - name: client_id - in: query - required: true - schema: - type: string - - name: job_identifier - description: Unique identifier of the job. - in: query - required: true - schema: - type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: folder_id + in: query + required: false + description: The ID of the folder to search in. Results will include articles from this folder and all its descendant folders. + example: 123 + schema: + type: integer + tags: + - Internal Articles + operationId: searchInternalArticles + description: You can search for internal articles by making a GET request to `https://api.intercom.io/internal_articles/search`. responses: '200': - description: Job status returned successfully + description: Search successful content: application/json: examples: - With complete status: - value: - job_identifier: job1 - status: complete - download_url: '' - download_expires_at: '' - With failed status: + Search successful: value: - job_identifier: job1 - status: failed - download_url: '' - download_expires_at: '' + type: list + total_count: 1 + data: + internal_articles: + - id: '55' + body: Body of the Article + owner_id: 991266252 + author_id: 991266252 + locale: en + folder_id: 123 + pages: + type: pages + page: 1 + total_pages: 1 + per_page: 10 schema: - type: object - properties: - job_identifier: - type: string - status: - type: string - download_url: - type: string - download_expires_at: - type: string - '404': - description: When job not found + "$ref": "#/components/schemas/internal_article_search_response" + '401': + description: Unauthorized content: application/json: examples: - Not found: + Unauthorized: value: type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + request_id: c70746a8-a5b2-4772-afba-1a4b487ea75d errors: - - code: not_found - message: "Export job not found for identifier: job1" + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/export/reporting_data/get_datasets": + "/folders": get: - summary: List available datasets and attributes + summary: List all folders parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - tags: [Reporting Data Export] + - name: page + in: query + description: The page number + schema: + type: integer + example: 1 + - name: per_page + in: query + description: Number of results per page + schema: + type: integer + example: 50 + maximum: 150 + - name: parent_folder_id + in: query + required: false + description: Filter folders by parent folder ID. Use this to list only direct children of a specific folder. + schema: + type: integer + example: 1 + tags: + - Folders + operationId: listFolders + description: "You can fetch a list of all folders for organizing content by making a GET request to `https://api.intercom.io/folders`." responses: '200': - description: List of datasets + description: successful content: application/json: - schema: - type: object + example: + type: list + data: + - id: 6 + name: Product Documentation + description: Internal product docs + emoji: "📚" + parent_folder_id: null + content_count: 5 + created_at: 1672928359 + updated_at: 1672928610 + total_count: 1 + pages: + type: pages + page: 1 + per_page: 50 + total_pages: 1 + schema: + type: object properties: type: type: string + enum: + - list example: list data: type: array items: - type: object - properties: - id: - type: string - example: conversation - name: - type: string - example: Conversation - description: - type: string - example: "Conversation-level details: status, channel, assignee." - default_time_attribute_id: - type: string - example: conversation_started_at - attributes: - type: array - items: - type: object - properties: - id: - type: string - description: The simple attribute identifier. Note that this may be ambiguous if the same name exists across different attribute types. Use qualified_id when calling the enqueue endpoint. - example: conversation_id - qualified_id: - type: string - description: A namespaced identifier that uniquely identifies the attribute across all types. Format is "prefix.name" (e.g., "people.Brand", "conversation.Brand"). Required when calling the enqueue endpoint. - example: conversation.conversation_id - name: - type: string - example: Conversation ID - "/download/reporting_data/{job_identifier}": - get: - summary: Download completed export job data - description: | - Download the data from a completed reporting data export job. - - > Octet header required - > - > You will have to specify the header Accept: `application/octet-stream` when hitting this endpoint. - tags: [Reporting Data Export] - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: Accept - in: header - required: true - schema: - type: string - example: application/octet-stream - enum: - - application/octet-stream - description: "Required header for downloading the export file" - - name: app_id - in: query - required: true - schema: - type: string - - name: job_identifier - in: query - required: true - schema: - type: string - responses: - '200': - description: Export file downloaded - '404': - description: When job not found + "$ref": "#/components/schemas/folder" + total_count: + type: integer + description: Total number of folders + example: 2 + pages: + "$ref": "#/components/schemas/cursor_pages" + '401': + description: Unauthorized content: application/json: - examples: - Not found: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: not_found - message: "Export job not found for identifier: job1" schema: "$ref": "#/components/schemas/error" - "/help_center/help_centers/{help_center_id}/redirects": - get: - summary: List all redirects for a help center + post: + summary: Create a folder parameters: - - name: help_center_id - in: path - required: true - description: The unique identifier for the help center. - example: '123' - schema: - type: string - - name: page - in: query - required: false - description: The page of results to fetch. Defaults to the first page. - example: 1 - schema: - type: integer - - name: per_page - in: query - required: false - description: The number of results to return per page. Defaults to 50, maximum 250. - example: 50 - schema: - type: integer - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - - Help Center - operationId: listHelpCenterRedirects - description: | - You can fetch a list of all URL redirects for a help center by making a GET request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects`. - - Redirects are returned in descending order on the `updated_at` attribute. - - Requires the `read_help_center_redirects_scope` OAuth scope. + - Folders + operationId: createFolder + description: "You can create a new folder for organizing content by making a POST request to `https://api.intercom.io/folders`." + requestBody: + content: + application/json: + schema: + type: object + required: + - folder + properties: + folder: + type: object + required: + - name + properties: + name: + type: string + description: The name of the folder + example: Product Documentation + description: + type: string + description: The description of the folder + example: Internal product documentation + emoji: + type: string + description: An emoji for the folder + example: "📚" + parent_folder_id: + type: integer + nullable: true + description: The ID of the parent folder + example: null + example: + folder: + name: Product Documentation + description: Internal product docs + emoji: "📚" responses: '200': - description: Successful + description: folder created content: application/json: - examples: - Successful: - value: - type: list - data: - - id: '26' - type: help_center_redirect - from_url: http://help-center.test/lovelyhelpcenter/legacy-page - locale: en - help_center_id: '7' - target_type: article - target_id: '11' - created_at: 1781619405 - updated_at: 1781619405 - total_count: 1 - pages: - type: pages - page: 1 - per_page: 50 - total_pages: 1 + example: + id: 6 + name: Product Documentation + description: Internal product docs + emoji: "📚" + parent_folder_id: null + content_count: 0 + created_at: 1672928359 + updated_at: 1672928359 schema: - "$ref": "#/components/schemas/help_center_redirect_list" + "$ref": "#/components/schemas/folder" '401': description: Unauthorized content: application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 12c2d3a0-77ef-462e-a5ed-e67ddff50b6e - errors: - - code: unauthorized - message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '404': - description: Help center not found + '400': + description: Bad request content: application/json: - examples: - Not Found: - value: - type: error.list - request_id: 6c2d3a0a-77ef-462e-a5ed-e67ddff50b6e - errors: - - code: not_found - message: Resource not found schema: "$ref": "#/components/schemas/error" - post: - summary: Create a redirect + "/folders/{id}": + get: + summary: Retrieve a folder parameters: - - name: help_center_id - in: path - required: true - description: The unique identifier for the help center. - example: '123' - schema: - type: string - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the folder + schema: + type: integer + example: 6 tags: - - Help Center - operationId: createHelpCenterRedirect - description: | - You can create a new URL redirect by making a POST request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects`. - - Requires the `read_write_help_center_redirects_scope` OAuth scope. + - Folders + operationId: retrieveFolder + description: "You can fetch the details of a single folder by making a GET request to `https://api.intercom.io/folders/`." responses: '200': - description: redirect created + description: folder found content: application/json: - examples: - redirect created: - value: - id: '26' - type: help_center_redirect - from_url: http://help-center.test/lovelyhelpcenter/old-page - locale: en - help_center_id: '7' - target_type: article - target_id: '11' - created_at: 1781619405 - updated_at: 1781619405 + example: + id: 6 + name: Product Documentation + description: Internal product docs + emoji: "📚" + parent_folder_id: null + content_count: 5 + created_at: 1672928359 + updated_at: 1672928610 schema: - "$ref": "#/components/schemas/help_center_redirect" - '400': - description: Bad Request + "$ref": "#/components/schemas/folder" + '401': + description: Unauthorized content: application/json: - examples: - Missing parameter: - value: - type: error.list - request_id: 816186b3-3187-4b47-adf8-e201bea32208 - errors: - - code: parameter_not_found - message: from_url is required - Invalid target_type: - value: - type: error.list - request_id: 816186b3-3187-4b47-adf8-e201bea32209 - errors: - - code: parameter_invalid - message: target_type must be 'article' or 'collection' schema: "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '404': + description: Folder not found content: application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 25d96ec2-641f-4354-b24e-83a85d33bd30 - errors: - - code: unauthorized - message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '409': - description: Conflict + put: + summary: Update a folder + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the folder + schema: + type: integer + example: 6 + tags: + - Folders + operationId: updateFolder + description: "You can update a folder by making a PUT request to `https://api.intercom.io/folders/`." + requestBody: + content: + application/json: + schema: + type: object + required: + - folder + properties: + folder: + type: object + properties: + name: + type: string + description: The name of the folder + example: Updated Product Documentation + description: + type: string + description: The description of the folder + example: Updated internal product documentation + emoji: + type: string + description: An emoji for the folder + example: "📖" + parent_folder_id: + type: integer + nullable: true + description: The ID of the parent folder + example: null + example: + folder: + name: Updated Product Documentation + emoji: "📖" + responses: + '200': + description: folder updated content: application/json: - examples: - Conflict: - value: - type: error.list - request_id: 35d96ec2-641f-4354-b24e-83a85d33bd31 - errors: - - code: resource_conflict - message: A redirect with that URL already exists + example: + id: 6 + name: Updated Product Documentation + description: Internal product docs + emoji: "📖" + parent_folder_id: null + content_count: 5 + created_at: 1672928359 + updated_at: 1672928900 schema: - "$ref": "#/components/schemas/error" - '422': - description: Unprocessable Entity + "$ref": "#/components/schemas/folder" + '401': + description: Unauthorized content: application/json: - examples: - Invalid data: - value: - type: error.list - request_id: 45d96ec2-641f-4354-b24e-83a85d33bd32 - errors: - - code: data_invalid - message: from_url must be an absolute URL within this help center's URL space schema: "$ref": "#/components/schemas/error" '404': - description: Help center not found + description: Folder not found content: application/json: - examples: - Not Found: - value: - type: error.list - request_id: 55d96ec2-641f-4354-b24e-83a85d33bd33 - errors: - - code: not_found - message: Resource not found schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_help_center_redirect_request" - examples: - redirect_created: - summary: redirect created - value: - from_url: http://help-center.test/lovelyhelpcenter/old-page - locale: en - target_type: article - target_id: '11' - "/help_center/help_centers/{help_center_id}/redirects/{id}": - get: - summary: Retrieve a redirect + '400': + description: Bad request + content: + application/json: + schema: + "$ref": "#/components/schemas/error" + delete: + summary: Delete a folder parameters: - - name: help_center_id - in: path - required: true - description: The unique identifier for the help center. - example: '123' + - name: Intercom-Version + in: header schema: - type: string + "$ref": "#/components/schemas/intercom_version" - name: id in: path required: true - description: The unique identifier for the redirect. - example: '26' - schema: - type: string - - name: Intercom-Version - in: header + description: The unique identifier for the folder schema: - "$ref": "#/components/schemas/intercom_version" + type: integer + example: 6 tags: - - Help Center - operationId: retrieveHelpCenterRedirect - description: | - You can fetch the details of a single redirect by making a GET request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects/{id}`. - - Requires the `read_help_center_redirects_scope` OAuth scope. + - Folders + operationId: deleteFolder + description: "You can delete a folder (if it contains no content) by making a DELETE request to `https://api.intercom.io/folders/`." responses: '200': - description: Successful + description: folder deleted content: application/json: - examples: - Successful: - value: - id: '26' - type: help_center_redirect - from_url: http://help-center.test/lovelyhelpcenter/old-page - locale: en - help_center_id: '7' - target_type: article - target_id: '11' - created_at: 1781619405 - updated_at: 1781619405 + example: + id: 6 + object: folder + deleted: true schema: - "$ref": "#/components/schemas/help_center_redirect" + "$ref": "#/components/schemas/deleted_folder_object" '401': description: Unauthorized content: application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 12c2d3a0-77ef-462e-a5ed-e67ddff50b6e - errors: - - code: unauthorized - message: Access Token Invalid schema: "$ref": "#/components/schemas/error" '404': - description: Not Found + description: Folder not found content: application/json: - examples: - Not Found: - value: - type: error.list - request_id: 6c2d3a0a-77ef-462e-a5ed-e67ddff50b6e - errors: - - code: not_found - message: Resource not found schema: "$ref": "#/components/schemas/error" - delete: - summary: Delete a redirect + '422': + description: Folder contains content + content: + application/json: + schema: + "$ref": "#/components/schemas/error" + "/companies": + post: + summary: Create or Update a company parameters: - - name: help_center_id - in: path - required: true - description: The unique identifier for the help center. - example: '123' - schema: - type: string - - name: id - in: path - required: true - description: The unique identifier for the redirect. - example: '26' - schema: - type: string - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - - Help Center - operationId: deleteHelpCenterRedirect + - Companies + operationId: createOrUpdateCompany description: | - You can delete a single redirect by making a DELETE request to `https://api.intercom.io/help_center/help_centers/{help_center_id}/redirects/{id}`. + You can create or update a company. + + Companies will be only visible in Intercom when there is at least one associated user. + + Companies are looked up via `company_id` in a `POST` request, if not found via `company_id`, the new company will be created, if found, that company will be updated. - Requires the `read_write_help_center_redirects_scope` OAuth scope. + {% admonition type="warning" name="Using `company_id`" %} + You can set a unique `company_id` value when creating a company. However, it is not possible to update `company_id`. Be sure to set a unique value once upon creation of the company. + {% /admonition %} responses: '200': - description: redirect deleted + description: Successful content: application/json: examples: - redirect deleted: + Successful: value: - id: '26' - object: help_center_redirect - deleted: true + type: company + company_id: company_remote_id + id: 6762f0761bb69f9f2193bae2 + app_id: this_is_an_id147_that_should_be_at_least_ + name: my company + remote_created_at: 1374138000 + created_at: 1734537334 + updated_at: 1734537334 + monthly_spend: 0 + session_count: 0 + user_count: 0 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + notes: + type: note.list + data: [] + url: "/companies/6762f0761bb69f9f2193bae2/notes" + total_count: 0 + has_more: false + plan: {} + custom_attributes: + industry: manufacturing schema: - "$ref": "#/components/schemas/deleted_help_center_redirect_object" - '401': - description: Unauthorized + "$ref": "#/components/schemas/company" + '400': + description: Bad Request content: application/json: examples: - Unauthorized: + Bad Request: value: type: error.list - request_id: 25d96ec2-641f-4354-b24e-83a85d33bd30 + request_id: errors: - - code: unauthorized - message: Access Token Invalid + - code: bad_request + message: bad 'test' parameter schema: "$ref": "#/components/schemas/error" - '404': - description: Not Found + '401': + description: Unauthorized content: application/json: examples: - Not Found: + Unauthorized: value: type: error.list - request_id: 6c2d3a0a-77ef-462e-a5ed-e67ddff50b6e + request_id: 8a9f415f-e9df-41e9-ba1f-739914f66551 errors: - - code: not_found - message: Resource not found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/help_center/collections": + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_or_update_company_request" + examples: + successful: + summary: Successful + value: + company_id: company_remote_id + name: my company + remote_created_at: 1374138000 + bad_request: + summary: Bad Request + value: + test: invalid get: - summary: List all collections + summary: Retrieve companies parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: name + in: query + required: false + description: The `name` of the company to filter by. + example: my company + schema: + type: string + - name: company_id + in: query + required: false + description: The `company_id` of the company to filter by. + example: '12345' + schema: + type: string + - name: tag_id + in: query + required: false + description: The `tag_id` of the company to filter by. + example: '678910' + schema: + type: string + - name: segment_id + in: query + required: false + description: The `segment_id` of the company to filter by. + example: '98765' + schema: + type: string + - name: page + in: query + required: false + description: The page of results to fetch. Defaults to first page + example: 1 + schema: + type: integer + - name: per_page + in: query + required: false + description: How many results to display per page. Defaults to 15 + example: 15 + schema: + type: integer tags: - - Help Center - operationId: listAllCollections + - Companies + operationId: retrieveCompany description: | - You can fetch a list of all collections by making a GET request to `https://api.intercom.io/help_center/collections`. + You can fetch a single company by passing in `company_id` or `name`. - Collections will be returned in descending order on the `updated_at` attribute. This means if you need to iterate through results then we'll show the most recently updated collections first. + `https://api.intercom.io/companies?name={name}` + + `https://api.intercom.io/companies?company_id={company_id}` + + You can fetch all companies and filter by `segment_id` or `tag_id` as a query parameter. + + `https://api.intercom.io/companies?tag_id={tag_id}` + + `https://api.intercom.io/companies?segment_id={segment_id}` responses: '200': description: Successful @@ -4053,36 +3287,54 @@ paths: value: type: list data: - - id: '159' - workspace_id: this_is_an_id96_that_should_be_at_least_4 - name: English collection title - url: http://help-center.test/myapp-96/collection-17 - order: 17 - created_at: 1734537309 - updated_at: 1734537309 - description: english collection description - icon: bookmark - parent_id: - help_center_id: 79 - - id: '160' - workspace_id: this_is_an_id96_that_should_be_at_least_4 - name: English section title - url: http://help-center.test/myapp-96/section-1 - order: 1 - created_at: 1734537309 - updated_at: 1734537309 - description: - icon: bookmark - parent_id: '159' - help_center_id: - total_count: 2 + - type: company + company_id: remote_companies_scroll_2 + id: 6762f07a1bb69f9f2193baea + app_id: this_is_an_id153_that_should_be_at_least_ + name: IntercomQATest1 + remote_created_at: 1734537338 + created_at: 1734537338 + updated_at: 1734537338 + monthly_spend: 0 + session_count: 0 + user_count: 4 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + notes: + type: note.list + data: [] + url: "/companies/6762f07a1bb69f9f2193baea/notes" + total_count: 0 + has_more: false + plan: {} + custom_attributes: {} pages: type: pages + next: page: 1 - per_page: 20 + per_page: 15 total_pages: 1 + total_count: 1 schema: - "$ref": "#/components/schemas/collection_list" + "$ref": "#/components/schemas/company_list" + '404': + description: Company Not Found + content: + application/json: + examples: + Company Not Found: + value: + type: error.list + request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 + errors: + - code: company_not_found + message: Company Not Found + schema: + "$ref": "#/components/schemas/error" '401': description: Unauthorized content: @@ -4091,56 +3343,78 @@ paths: Unauthorized: value: type: error.list - request_id: 12c2d3a0-77ef-462e-a5ed-e67ddff50b6e + request_id: 2fa563ba-f9c9-4281-a76b-10bfd777dfd7 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - post: - summary: Create a collection + "/companies/{id}": + get: + summary: Retrieve a company by ID parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + schema: + type: string tags: - - Help Center - operationId: createCollection - description: You can create a new collection by making a POST request to `https://api.intercom.io/help_center/collections.` + - Companies + operationId: RetrieveACompanyById + description: You can fetch a single company. responses: '200': - description: collection created + description: Successful content: application/json: examples: - collection created: + Successful: value: - id: '165' - workspace_id: this_is_an_id100_that_should_be_at_least_ - name: Thanks for everything - url: http://help-center.test/myapp-100/ - order: 1 - created_at: 1734537312 - updated_at: 1734537312 - description: '' - icon: book-bookmark - parent_id: - help_center_id: 81 + type: company + company_id: '1' + id: 6762f07f1bb69f9f2193baf5 + app_id: this_is_an_id159_that_should_be_at_least_ + name: company1 + remote_created_at: 1734537343 + created_at: 1734537343 + updated_at: 1734537343 + monthly_spend: 0 + session_count: 0 + user_count: 1 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + notes: + type: note.list + data: [] + url: "/companies/6762f0761bb69f9f2193bae2/notes" + total_count: 0 + has_more: false + plan: {} + custom_attributes: {} schema: - "$ref": "#/components/schemas/collection" - '400': - description: Bad Request + "$ref": "#/components/schemas/company" + '404': + description: Company Not Found content: application/json: examples: - Bad Request: + Company Not Found: value: type: error.list - request_id: 816186b3-3187-4b47-adf8-e201bea32208 + request_id: 57d57564-b5e2-4064-abfe-4653e5ac24c0 errors: - - code: parameter_not_found - message: Name is a required parameter. + - code: company_not_found + message: Company Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -4151,29 +3425,14 @@ paths: Unauthorized: value: type: error.list - request_id: 25d96ec2-641f-4354-b24e-83a85d33bd30 + request_id: caf73ce4-bda6-4f2b-bbfb-0d984d430335 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_collection_request" - examples: - collection_created: - summary: collection created - value: - name: Thanks for everything - bad_request: - summary: Bad Request - value: - description: Missing required parameter - "/help_center/collections/{id}": - get: - summary: Retrieve a collection + put: + summary: Update a company parameters: - name: Intercom-Version in: header @@ -4182,48 +3441,66 @@ paths: - name: id in: path required: true - description: The unique identifier for the collection which is given by Intercom. - example: 123 + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 schema: - type: integer + type: string tags: - - Help Center - operationId: retrieveCollection - description: You can fetch the details of a single collection by making a GET - request to `https://api.intercom.io/help_center/collections/`. - responses: - '200': - description: Collection found - content: - application/json: - examples: - Collection found: + - Companies + operationId: UpdateCompany + description: | + You can update a single company using the Intercom provisioned `id`. + + {% admonition type="warning" name="Using `company_id`" %} + When updating a company it is not possible to update `company_id`. This can only be set once upon creation of the company. + {% /admonition %} + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: value: - id: '170' - workspace_id: this_is_an_id106_that_should_be_at_least_ - name: English collection title - url: http://help-center.test/myapp-106/collection-22 - order: 22 - created_at: 1734537315 - updated_at: 1734537315 - description: english collection description - icon: bookmark - parent_id: - help_center_id: 84 + type: company + company_id: '1' + id: 6762f0841bb69f9f2193baff + app_id: this_is_an_id165_that_should_be_at_least_ + name: company2 + remote_created_at: 1734537348 + created_at: 1734537348 + updated_at: 1734537348 + monthly_spend: 0 + session_count: 0 + user_count: 1 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + notes: + type: note.list + data: [] + url: "/companies/6762f0841bb69f9f2193baff/notes" + total_count: 0 + has_more: false + plan: {} + custom_attributes: {} schema: - "$ref": "#/components/schemas/collection" + "$ref": "#/components/schemas/company" '404': - description: Collection not found + description: Company Not Found content: application/json: examples: - Collection not found: + Company Not Found: value: type: error.list - request_id: a074a09e-97d1-44e2-b164-b703559c9f23 + request_id: daa64b43-3e3c-4fc4-aef9-91eb40c7885c errors: - - code: not_found - message: Resource Not Found + - code: company_not_found + message: Company Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -4234,14 +3511,14 @@ paths: Unauthorized: value: type: error.list - request_id: a29395a5-181c-4f3b-b069-5b2f32604c58 + request_id: 4748eb32-3261-4798-ace0-a5825edf4eb5 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - put: - summary: Update a collection + delete: + summary: Delete a company parameters: - name: Intercom-Version in: header @@ -4250,48 +3527,48 @@ paths: - name: id in: path required: true - description: The unique identifier for the collection which is given by Intercom. - example: 123 + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 schema: - type: integer + type: string tags: - - Help Center - operationId: updateCollection - description: You can update the details of a single collection by making a PUT - request to `https://api.intercom.io/collections/`. + - Companies + operationId: deleteCompany + description: | + Delete a single company. + + This endpoint does not permanently remove the company. It archives the company record and detaches any contacts attached to it; the contacts themselves are not deleted. A `company.deleted` webhook is sent once archival completes. + + The endpoint returns `200` with `"deleted": true` as soon as the request is accepted — archival is processed asynchronously. + + {% admonition type="warning" %} + Third-party integrations that sync companies into Intercom (for example, Salesforce or Chargebee) will recreate any company deleted through this endpoint on their next sync. To prevent recreation, remove or filter the company at the source integration before deleting it via the API. + {% /admonition %} responses: '200': - description: successful + description: Successful content: application/json: examples: - successful: + Successful: value: - id: '176' - workspace_id: this_is_an_id112_that_should_be_at_least_ - name: Update collection name - url: http://help-center.test/myapp-112/collection-25 - order: 25 - created_at: 1734537318 - updated_at: 1734537319 - description: english collection description - icon: folder - parent_id: - help_center_id: 87 + id: 6762f0881bb69f9f2193bb09 + object: company + deleted: true schema: - "$ref": "#/components/schemas/collection" + "$ref": "#/components/schemas/deleted_company_object" '404': - description: Collection Not Found + description: Company Not Found content: application/json: examples: - Collection Not Found: + Company Not Found: value: type: error.list - request_id: 198e3add-d017-4e18-b478-fbe2cb8c538b + request_id: 4f41d1d6-7a42-45e3-a24e-544deb62da47 errors: - - code: not_found - message: Resource Not Found + - code: company_not_found + message: Company Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -4302,28 +3579,15 @@ paths: Unauthorized: value: type: error.list - request_id: b286edcc-453d-43af-bf2f-40f303708c61 + request_id: 7b13fd9c-31be-40de-94e1-d71f260a3458 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_collection_request" - examples: - successful: - summary: successful - value: - name: Update collection name - collection_not_found: - summary: Collection Not Found - value: - name: Update collection name - delete: - summary: Delete a collection + "/companies/{id}/contacts": + get: + summary: List attached contacts parameters: - name: Intercom-Version in: header @@ -4332,40 +3596,45 @@ paths: - name: id in: path required: true - description: The unique identifier for the collection which is given by Intercom. - example: 123 + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 schema: - type: integer + type: string tags: - - Help Center - operationId: deleteCollection - description: You can delete a single collection by making a DELETE request to - `https://api.intercom.io/collections/`. + - Companies + - Contacts + operationId: ListAttachedContacts + description: You can fetch a list of all contacts that belong to a company. responses: '200': - description: successful + description: Successful content: application/json: examples: - successful: + Successful: value: - id: '182' - object: collection - deleted: true + type: list + data: [] + total_count: 0 + pages: + type: pages + page: 1 + per_page: 50 + total_pages: 0 schema: - "$ref": "#/components/schemas/deleted_collection_object" + "$ref": "#/components/schemas/company_attached_contacts" '404': - description: collection Not Found + description: Company Not Found content: application/json: examples: - collection Not Found: + Company Not Found: value: type: error.list - request_id: f0d0ea9b-ffaf-48f5-95d0-e99531c379e2 + request_id: 5dde0b79-8c81-4d9e-a4d4-736a44cf2f00 errors: - - code: not_found - message: Resource Not Found + - code: company_not_found + message: Company Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -4376,15 +3645,15 @@ paths: Unauthorized: value: type: error.list - request_id: d0d16fb5-93e6-45ca-b07d-f98fb92fd733 + request_id: f7586690-c217-47db-9042-cb9550b81260 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/help_center/help_centers/{id}": + "/companies/{id}/segments": get: - summary: Retrieve a Help Center + summary: List attached segments for companies parameters: - name: Intercom-Version in: header @@ -4393,49 +3662,38 @@ paths: - name: id in: path required: true - description: The unique identifier for the collection which is given by Intercom. - example: 123 + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 schema: - type: integer + type: string tags: - - Help Center - operationId: retrieveHelpCenter - description: You can fetch the details of a single Help Center by making a GET - request to `https://api.intercom.io/help_center/help_center/`. + - Companies + operationId: ListAttachedSegmentsForCompanies + description: You can fetch a list of all segments that belong to a company. responses: '200': - description: Collection found + description: Successful content: application/json: examples: - Collection found: + Successful: value: - id: '93' - workspace_id: this_is_an_id124_that_should_be_at_least_ - created_at: 1734537325 - updated_at: 1734537325 - identifier: help-center-1 - website_turned_on: false - display_name: Intercom Help Center - url: https://help.mycompany.com - custom_domain: help.mycompany.com - default: false - locales: - - en + type: list + data: [] schema: - "$ref": "#/components/schemas/help_center" + "$ref": "#/components/schemas/company_attached_segments" '404': - description: Collection not found + description: Company Not Found content: application/json: examples: - Collection not found: + Company Not Found: value: type: error.list - request_id: bbd5de60-49c4-4850-afff-1226cdaa0beb + request_id: de5d939e-77fb-46d7-a3b9-f34199d9f25a errors: - - code: not_found - message: Resource Not Found + - code: company_not_found + message: Company Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -4446,94 +3704,202 @@ paths: Unauthorized: value: type: error.list - request_id: c7c301f6-9206-418b-9792-98821970e48b + request_id: 91f04dce-5759-4d80-981e-f598ec989d1a errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/help_center/help_centers": + "/companies/{company_id}/notes": get: - summary: List all Help Centers + summary: List all company notes parameters: + - name: company_id + in: path + required: true + description: The unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + schema: + type: string - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - - Help Center - operationId: listHelpCenters - description: You can list all Help Centers by making a GET request to `https://api.intercom.io/help_center/help_centers`. + - Notes + - Companies + operationId: listCompanyNotes + description: You can fetch a list of notes that are associated to a company. responses: '200': - description: Help Centers found + description: Successful response content: application/json: examples: - Help Centers found: + Successful response: value: type: list - data: [] + data: + - type: note + id: '26' + created_at: 1733932587 + company: + type: company + id: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + author: + type: admin + id: '991267581' + name: Ciaran122 Lee + email: admin122@email.com + away_mode_enabled: false + away_mode_reassign: false + away_status_reason_id: null + has_inbox_seat: true + team_ids: [] + team_priority_level: {} + body: "

This is a note.

" + - type: note + id: '25' + created_at: 1733846187 + company: + type: company + id: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + author: + type: admin + id: '991267581' + name: Ciaran122 Lee + email: admin122@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

This is a note.

" + - type: note + id: '24' + created_at: 1733846187 + company: + type: company + id: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + author: + type: admin + id: '991267581' + name: Ciaran122 Lee + email: admin122@email.com + away_mode_enabled: false + away_mode_reassign: false + away_status_reason_id: null + has_inbox_seat: true + team_ids: [] + team_priority_level: {} + body: "

This is a note.

" + total_count: 3 + pages: + type: pages + next: + page: 1 + per_page: 50 + total_pages: 1 schema: - "$ref": "#/components/schemas/help_center_list" - '401': - description: Unauthorized + "$ref": "#/components/schemas/note_list" + '404': + description: Company not found content: application/json: examples: - Unauthorized: + Company not found: value: type: error.list - request_id: 76edbbb7-e463-4f6a-817a-b7905d467535 + request_id: 57055cde-3d0d-4c67-b5c9-b20b80340bf0 errors: - - code: unauthorized - message: Access Token Invalid + - code: company_not_found + message: Company Not Found schema: "$ref": "#/components/schemas/error" - "/internal_articles": - get: - summary: List all articles + "/companies/list": + post: + summary: List all companies parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: page + in: query + required: false + description: The page of results to fetch. Defaults to first page + example: 1 + schema: + type: integer + - name: per_page + in: query + required: false + description: How many results to return per page. Defaults to 15 + example: 15 + schema: + type: integer + - name: order + in: query + required: false + description: "`asc` or `desc`. Return the companies in ascending or descending + order. Defaults to desc" + example: desc + schema: + type: string tags: - - Internal Articles - operationId: listInternalArticles - description: "You can fetch a list of all internal articles by making a GET request to - `https://api.intercom.io/internal_articles`." + - Companies + operationId: listAllCompanies + description: | + You can list companies. The company list is sorted by the `last_request_at` field and by default is ordered descending, most recently requested first. + + Note that the API does not include companies who have no associated users in list responses. + + When using the Companies endpoint and the pages object to iterate through the returned companies, there is a limit of 10,000 Companies that can be returned. If you need to list or iterate on more than 10,000 Companies, please use the [Scroll API](https://developers.intercom.com/reference#iterating-over-all-companies). + {% admonition type="warning" name="Pagination" %} + You can use pagination to limit the number of results returned. The default is `20` results per page. + See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#pagination-for-list-apis) for more details on how to use the `starting_after` param. + {% /admonition %} responses: '200': - description: successful + description: Successful content: application/json: examples: - successful: + Successful: value: type: list + data: + - type: company + company_id: remote_companies_scroll_2 + id: 6762f0941bb69f9f2193bb25 + app_id: this_is_an_id189_that_should_be_at_least_ + name: IntercomQATest1 + remote_created_at: 1734537364 + created_at: 1734537364 + updated_at: 1734537364 + monthly_spend: 0 + session_count: 0 + user_count: 4 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + notes: + type: note.list + data: [] + url: "/companies/6762f0941bb69f9f2193bb25/notes" + total_count: 0 + has_more: false + plan: {} + custom_attributes: {} pages: type: pages + next: page: 1 - per_page: 25 + per_page: 15 total_pages: 1 total_count: 1 - data: - - id: '39' - title: Thanks for everything - body: Body of the Article - body_markdown: "Body of the Article\n" - owner_id: 991266252 - author_id: 991266252 - locale: en - audience_ids: - - 1 - - 2 - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true schema: - "$ref": "#/components/schemas/internal_article_list" + "$ref": "#/components/schemas/company_list" '401': description: Unauthorized content: @@ -4542,72 +3908,186 @@ paths: Unauthorized: value: type: error.list - request_id: 2e760b85-9020-471b-89dc-f579ec8a0104 + request_id: 537ccc45-2cae-4e72-ac2f-849f1422a771 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - post: - summary: Create an internal article + "/companies/scroll": + get: + summary: Scroll over all companies parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: scroll_param + in: query + required: false + description: '' + schema: + type: string tags: - - Internal Articles - operationId: createInternalArticle - description: You can create a new internal article by making a POST request to `https://api.intercom.io/internal_articles`. + - Companies + operationId: scrollOverAllCompanies + description: |2 + The `list all companies` functionality does not work well for huge datasets, and can result in errors and performance problems when paging deeply. The Scroll API provides an efficient mechanism for iterating over all companies in a dataset. + + - Each app can only have 1 scroll open at a time. You'll get an error message if you try to have more than one open per app. + - If the scroll isn't used for 1 minute, it expires and calls with that scroll param will fail + - If the end of the scroll is reached, "companies" will be empty and the scroll parameter will expire + + {% admonition type="info" name="Scroll Parameter" %} + You can get the first page of companies by simply sending a GET request to the scroll endpoint. + For subsequent requests you will need to use the scroll parameter from the response. + {% /admonition %} + {% admonition type="danger" name="Scroll network timeouts" %} + Since scroll is often used on large datasets network errors such as timeouts can be encountered. When this occurs you will see a HTTP 500 error with the following message: + "Request failed due to an internal network error. Please restart the scroll operation." + If this happens, you will need to restart your scroll query: It is not possible to continue from a specific point when using scroll. + {% /admonition %} responses: '200': - description: internal article created + description: Successful content: application/json: examples: - internal article created: + Successful: value: - id: '42' - title: Thanks for everything - body: Body of the Article - body_markdown: "Body of the Article\n" - owner_id: 991266252 - author_id: 991266252 - locale: en - audience_ids: - - 1 - - 2 - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true + type: list + data: + - type: company + company_id: remote_companies_scroll_2 + id: 6762f0971bb69f9f2193bb2b + app_id: this_is_an_id193_that_should_be_at_least_ + name: IntercomQATest1 + remote_created_at: 1734537367 + created_at: 1734537367 + updated_at: 1734537367 + monthly_spend: 0 + session_count: 0 + user_count: 4 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + notes: + type: note.list + data: [] + url: "/companies/6762f0971bb69f9f2193bb2b/notes" + total_count: 0 + has_more: false + plan: {} + custom_attributes: {} + pages: + total_count: + scroll_param: 69352cd2-ab5b-42ac-b004-a13d4e55e9b0 schema: - "$ref": "#/components/schemas/internal_article" - '400': - description: Bad Request + "$ref": "#/components/schemas/company_scroll" + '401': + description: Unauthorized content: application/json: examples: - Bad Request: + Unauthorized: value: type: error.list - request_id: e522ca8a-cd15-404e-84b3-7f7536003d4a + request_id: ca269b05-8c42-4615-a28d-7df0eb1687c5 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/contacts/{id}/companies": + post: + summary: Attach a Contact to a Company + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the contact which is given by Intercom + schema: + type: string + tags: + - Companies + - Contacts + operationId: attachContactToACompany + description: You can attach a company to a single contact. + responses: + '200': + description: Successful + content: + application/json: + examples: + Successful: + value: + type: company + company_id: '1' + id: 6762f09a1bb69f9f2193bb34 + app_id: this_is_an_id197_that_should_be_at_least_ + name: company6 + remote_created_at: 1734537370 + created_at: 1734537370 + updated_at: 1734537370 + monthly_spend: 0 + session_count: 0 + user_count: 1 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + notes: + type: note.list + data: [] + url: "/companies/6762f09a1bb69f9f2193bb34/notes" + total_count: 0 + has_more: false + plan: {} + custom_attributes: {} + schema: + "$ref": "#/components/schemas/company" + '400': + description: Bad Request + content: + application/json: + examples: + Bad Request: + value: + type: error.list + request_id: 8879ee29-ade4-4b5a-a275-ab1ac531b82a errors: - code: parameter_not_found - message: author_id must be in the main body or default locale - translated_content object + message: company not specified + Contact Company Limit Exceeded: + value: + type: error.list + request_id: 9a3d0816-9707-4598-977e-c009ba630148 + errors: + - code: contact_company_limit_exceeded + message: Contact has reached the maximum of 1000 company associations schema: "$ref": "#/components/schemas/error" '404': - description: Unknown audience IDs + description: Company Not Found content: application/json: examples: - Unknown audience IDs: + Company Not Found: value: type: error.list + request_id: 981799ea-f19b-432d-828c-491a3b29ad29 errors: - - code: parameter_invalid - message: 'audience_ids contains unknown audience IDs: 999' + - code: company_not_found + message: Company Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -4618,7 +4098,7 @@ paths: Unauthorized: value: type: error.list - request_id: 85e91429-72df-4e69-8a12-b55793dff59f + request_id: 1f187e85-cd9a-4be4-964e-cdbb8c66334a errors: - code: unauthorized message: Access Token Invalid @@ -4628,78 +4108,97 @@ paths: content: application/json: schema: - "$ref": "#/components/schemas/create_internal_article_request" + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier for the company which is given + by Intercom + example: 58a430d35458202d41b1e65b examples: - internal_article_created: - summary: internal article created + successful: + summary: Successful value: - title: Thanks for everything - body: Body of the Article - owner_id: 991266252 - author_id: 991266252 - locale: en - audience_ids: - - 1 - - 2 + id: 6762f09a1bb69f9f2193bb34 bad_request: summary: Bad Request value: - title: Thanks for everything - body: Body of the Internal Article - "/internal_articles/{id}": + company_not_found: + summary: Company Not Found + value: + id: '123' get: - summary: Retrieve an internal article + summary: List attached companies for contact parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - name: id in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 required: true - description: The unique identifier for the article which is given by Intercom. - example: 123 schema: - type: integer + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" tags: - - Internal Articles - operationId: retrieveInternalArticle - description: You can fetch the details of a single internal article by making a GET request - to `https://api.intercom.io/internal_articles/`. + - Contacts + - Companies + operationId: listCompaniesForAContact + description: You can fetch a list of companies that are associated to a contact. responses: '200': - description: Internal article found + description: successful content: application/json: examples: - Internal article found: + successful: value: - id: '45' - body: Body of the Article - body_markdown: "Body of the Article\n" - owner_id: 991266252 - author_id: 991266252 - locale: en - audience_ids: - - 1 - - 2 - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true + type: list + data: + - type: company + company_id: '1' + id: 6762f0a61bb69f9f2193bb55 + app_id: this_is_an_id213_that_should_be_at_least_ + name: company12 + remote_created_at: 1734537382 + created_at: 1734537382 + updated_at: 1734537382 + last_request_at: 1734364582 + monthly_spend: 0 + session_count: 0 + user_count: 1 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: {} + pages: + type: pages + next: + page: 1 + per_page: 50 + total_pages: 1 + total_count: 1 schema: - "$ref": "#/components/schemas/internal_article" + "$ref": "#/components/schemas/contact_attached_companies" '404': - description: Internal article not found + description: Contact not found content: application/json: examples: - Internal article not found: + Contact not found: value: type: error.list - request_id: 79abd27a-1bfb-42ec-a404-5728c76ba773 + request_id: 32c856ba-901b-49c4-8e8d-d43fc3ee6ea5 errors: - code: not_found - message: Resource Not Found + message: User Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -4710,71 +4209,87 @@ paths: Unauthorized: value: type: error.list - request_id: 2eab07fb-5092-49a4-ba74-44094f31f264 + request_id: 565a4f38-5fa9-451d-bcf0-32076f79517f errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - put: - summary: Update an internal article + "/contacts/{contact_id}/companies/{id}": + delete: + summary: Detach a contact from a company parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + required: true + description: The unique identifier for the contact which is given by Intercom + example: 58a430d35458202d41b1e65b + schema: + type: string - name: id in: path required: true - description: The unique identifier for the internal article which is given by Intercom. - example: 123 + description: The unique identifier for the company which is given by Intercom + example: 58a430d35458202d41b1e65b schema: - type: integer + type: string tags: - - Internal Articles - operationId: updateInternalArticle - description: You can update the details of a single internal article by making a PUT - request to `https://api.intercom.io/internal_articles/`. + - Companies + - Contacts + operationId: detachContactFromACompany + description: You can detach a company from a single contact. responses: '200': - description: successful - content: - application/json: - examples: - successful: - value: - id: '48' - body: Body of the Article - body_markdown: "Body of the Article\n" - owner_id: 991266252 - author_id: 991266252 - locale: en - audience_ids: - - 1 - - 2 - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true - schema: - "$ref": "#/components/schemas/internal_article" - '404': - description: Internal article or audience ID not found + description: Successful content: application/json: examples: - Internal article not found: + Successful: value: - type: error.list - request_id: f9adccb2-9fca-4b87-bbb7-65f2af5e1d78 - errors: - - code: not_found - message: Resource Not Found - Unknown audience IDs: + type: company + company_id: '1' + id: 6762f0a01bb69f9f2193bb44 + app_id: this_is_an_id205_that_should_be_at_least_ + name: company8 + remote_created_at: 1734537376 + created_at: 1734537376 + updated_at: 1734537377 + monthly_spend: 0 + session_count: 0 + user_count: 0 + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + plan: {} + custom_attributes: {} + schema: + "$ref": "#/components/schemas/company" + '404': + description: Contact Not Found + content: + application/json: + examples: + Company Not Found: value: type: error.list + request_id: dcfc3465-8a51-4d78-b24c-2f215d48f339 errors: - - code: parameter_invalid - message: 'audience_ids contains unknown audience IDs: 999' + - code: company_not_found + message: Company Not Found + Contact Not Found: + value: + type: error.list + request_id: b5a1f332-1bf1-44bd-a068-2634244b6051 + errors: + - code: not_found + message: User Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -4785,327 +4300,358 @@ paths: Unauthorized: value: type: error.list - request_id: d1ea223d-bb62-42e3-8bcf-30fdcf7dbd99 + request_id: 9bc1e0cc-5cc4-412d-8037-57e073375ab0 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_internal_article_request" - examples: - successful: - summary: successful - value: - title: Christmas is here! - body: "

New gifts in store for the jolly season

" - audience_ids: - - 1 - - 2 - internal_article_not_found: - summary: Internal article not found - value: - title: Christmas is here! - body: "

New gifts in store for the jolly season

" - delete: - summary: Delete an internal article + "/contacts/{id}/notes": + get: + summary: List all contact notes parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - name: id in: path required: true - description: The unique identifier for the internal article which is given by Intercom. - example: 123 + description: The unique identifier of a contact. schema: type: integer + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" tags: - - Internal Articles - operationId: deleteInternalArticle - description: You can delete a single internal article by making a DELETE request to `https://api.intercom.io/internal_articles/`. + - Notes + - Contacts + operationId: listNotes + description: You can fetch a list of notes that are associated to a contact. responses: '200': - description: successful + description: Successful response content: application/json: examples: - successful: + Successful response: value: - id: '51' - object: internal_article - deleted: true + type: list + data: + - type: note + id: '26' + created_at: 1733932587 + contact: + type: contact + id: 6762f0ab1bb69f9f2193bb60 + author: + type: admin + id: '991267581' + name: Ciaran122 Lee + email: admin122@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

This is a note.

" + - type: note + id: '25' + created_at: 1733846187 + contact: + type: contact + id: 6762f0ab1bb69f9f2193bb60 + author: + type: admin + id: '991267581' + name: Ciaran122 Lee + email: admin122@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

This is a note.

" + - type: note + id: '24' + created_at: 1733846187 + contact: + type: contact + id: 6762f0ab1bb69f9f2193bb60 + author: + type: admin + id: '991267581' + name: Ciaran122 Lee + email: admin122@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

This is a note.

" + total_count: 3 + pages: + type: pages + next: + page: 1 + per_page: 50 + total_pages: 1 schema: - "$ref": "#/components/schemas/deleted_internal_article_object" + "$ref": "#/components/schemas/note_list" '404': - description: Internal article not found + description: Contact not found content: application/json: examples: - Internal article not found: + Contact not found: value: type: error.list - request_id: afe37506-cc48-4727-8068-ae7ff0e7b0e3 + request_id: 57055cde-3d0d-4c67-b5c9-b20b80340bf0 errors: - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: c6e86ce8-9402-4196-89c5-f1b2912b4bac - errors: - - code: unauthorized - message: Access Token Invalid + message: User Not Found schema: "$ref": "#/components/schemas/error" - "/internal_articles/{internal_article_id}/tags": post: - summary: Add a tag to an internal article - tags: - - Internal Articles - - Tags + summary: Create a note parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: internal_article_id + - name: id in: path required: true - description: The unique identifier for the internal article which is given by - Intercom. - example: 123 + description: The unique identifier of a given contact. + example: '123' schema: type: integer - operationId: attachTagToInternalArticle - description: | - Apply an existing tag to an internal article. Returns the tag that was applied. - - The tag must already exist in the workspace (create tags with the Tags API), - and the authenticating teammate must have the `manage_knowledge_base_content` - permission. - - Requires the `read_write_articles_scope` OAuth scope. - requestBody: - content: - application/json: - schema: - type: object - required: - - id - properties: - id: - type: string - description: The unique identifier of the tag to apply, as given by - Intercom. - example: '7522907' - admin_id: - type: string - nullable: true - description: Optional id of the teammate to attribute the tagging to. - Defaults to the authenticating teammate. Does not affect authorization. - example: '1234' - examples: - successful: - summary: Apply a tag - value: - id: '7522907' + tags: + - Notes + - Contacts + operationId: createNote + description: You can add a note to a single contact. responses: '200': - description: Tag applied + description: Successful response content: application/json: examples: - Tag applied: + Successful response: value: - type: tag - id: '7522907' - name: Independent - applied_at: 1663597223 - applied_by: + type: note + id: '31' + created_at: 1734537390 + contact: + type: contact + id: 6762f0ad1bb69f9f2193bb62 + author: type: admin - id: '1234' - schema: - "$ref": "#/components/schemas/tag" - '403': - description: Forbidden - content: - application/json: - examples: - Forbidden: - value: - type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f - errors: - - code: forbidden - message: Not authorized to manage knowledge base content + id: '991267583' + name: Ciaran124 Lee + email: admin124@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

Hello

" schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/note" '404': - description: Internal article or tag not found + description: Contact not found content: application/json: examples: - Internal article not found: + Admin not found: value: type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 + request_id: 168f1bc3-d198-4797-8422-9f93fe8af5ad errors: - - code: internal_article_not_found - message: Internal article not found - Tag not found: + - code: not_found + message: Resource Not Found + Contact not found: value: type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + request_id: 6f372239-0259-428f-9943-91b8f7a92162 errors: - - code: tag_not_found - message: Tag not found + - code: not_found + message: User Not Found schema: "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" - "/internal_articles/{internal_article_id}/tags/{id}": - delete: - summary: Remove a tag from an internal article - tags: - - Internal Articles - - Tags - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: internal_article_id - in: path - required: true - description: The unique identifier for the internal article which is given by - Intercom. - example: 123 - schema: - type: integer - - name: id + requestBody: + content: + application/json: + schema: + type: object + required: + - body + properties: + body: + type: string + description: The text of the note. + example: New note + contact_id: + type: string + description: The unique identifier of a given contact. + example: '123' + admin_id: + type: string + description: The unique identifier of a given admin. + example: '123' + examples: + successful_response: + summary: Successful response + value: + contact_id: 6762f0ad1bb69f9f2193bb62 + admin_id: 991267583 + body: Hello + admin_not_found: + summary: Admin not found + value: + contact_id: 6762f0af1bb69f9f2193bb63 + admin_id: 123 + body: Hello + contact_not_found: + summary: Contact not found + value: + contact_id: 123 + admin_id: 991267585 + body: Hello + "/contacts/{contact_id}/segments": + get: + summary: List attached segments for contact + parameters: + - name: contact_id in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 required: true - description: The unique identifier of the tag to remove, as given by Intercom. - example: '7522907' schema: type: string - operationId: detachTagFromInternalArticle - description: | - Remove a tag from an internal article. Returns the tag that was removed, with - null `applied_at` and `applied_by`. - - The authenticating teammate must have the `manage_knowledge_base_content` - permission. - - Requires the `read_write_articles_scope` OAuth scope. + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Contacts + - Segments + operationId: listSegmentsForAContact + description: You can fetch a list of segments that are associated to a contact. responses: '200': - description: Tag removed + description: successful content: application/json: examples: - Tag removed: + successful: value: - type: tag - id: '7522907' - name: Independent - applied_at: null - applied_by: null + type: list + data: + - type: segment + id: 6762f0b21bb69f9f2193bb65 + name: segment + created_at: 1734537394 + updated_at: 1734537394 + person_type: user schema: - "$ref": "#/components/schemas/tag" - '403': - description: Forbidden + "$ref": "#/components/schemas/contact_segments" + '404': + description: Contact not found content: application/json: examples: - Forbidden: + Contact not found: value: type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + request_id: 61c119c7-b2f0-4158-8457-fd53e83f936a errors: - - code: forbidden - message: Not authorized to manage knowledge base content + - code: not_found + message: User Not Found schema: "$ref": "#/components/schemas/error" - '404': - description: Internal article or tag not found + '401': + description: Unauthorized content: application/json: examples: - Internal article not found: - value: - type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 - errors: - - code: internal_article_not_found - message: Internal article not found - Tag not found: + Unauthorized: value: type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + request_id: 0273c219-51b7-4938-95d2-19996b2e2734 errors: - - code: tag_not_found - message: Tag not found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" - "/internal_articles/search": + "/contacts/{contact_id}/subscriptions": get: - summary: Search for internal articles + summary: List subscriptions for a contact parameters: + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: folder_id - in: query - required: false - description: The ID of the folder to search in. Results will include articles from this folder and all its descendant folders. - example: 123 - schema: - type: integer tags: - - Internal Articles - operationId: searchInternalArticles - description: You can search for internal articles by making a GET request to `https://api.intercom.io/internal_articles/search`. + - Contacts + - Subscription Types + operationId: listSubscriptionsForAContact + description: | + You can fetch a list of subscription types that are attached to a contact. These can be subscriptions that a user has 'opted-in' to or has 'opted-out' from, depending on the subscription type. + This will return a list of Subscription Type objects that the contact is associated with. + + The data property will show a combined list of: + + 1.Opt-out subscription types that the user has opted-out from. + 2.Opt-in subscription types that the user has opted-in to receiving. + + **Note:** This endpoint only returns subscriptions where the contact has explicitly configured their preference. Subscriptions that are in the default state — where the contact has not made an explicit opt-in or opt-out choice — are not included in the response. responses: '200': - description: Search successful + description: Successful content: application/json: examples: - Search successful: + Successful: value: type: list - total_count: 1 data: - internal_articles: - - id: '55' - body: Body of the Article - owner_id: 991266252 - author_id: 991266252 + - type: subscription + id: '91' + state: live + consent_type: opt_out + default_translation: + name: Newsletters + description: Lorem ipsum dolor sit amet locale: en - folder_id: 123 - pages: - type: pages - page: 1 - total_pages: 1 - per_page: 10 + translations: + - name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + content_types: + - email + - type: subscription + id: '93' + state: live + consent_type: opt_in + default_translation: + name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + translations: + - name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + content_types: + - sms_message schema: - "$ref": "#/components/schemas/internal_article_search_response" + "$ref": "#/components/schemas/subscription_type_list" + '404': + description: Contact not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: c9b793ad-ff39-436c-80c9-db6f24d0d444 + errors: + - code: not_found + message: User Not Found + schema: + "$ref": "#/components/schemas/error" '401': description: Unauthorized content: @@ -5114,647 +4660,705 @@ paths: Unauthorized: value: type: error.list - request_id: c70746a8-a5b2-4772-afba-1a4b487ea75d + request_id: 7323b97b-9ba4-4c54-946c-38cecea65b3c errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/folders": - get: - summary: List all folders + post: + summary: Add subscription to a contact + tags: + - Subscription Types + - Contacts parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: page - in: query - description: The page number - schema: - type: integer - example: 1 - - name: per_page - in: query - description: Number of results per page - schema: - type: integer - example: 50 - maximum: 150 - - name: parent_folder_id - in: query - required: false - description: Filter folders by parent folder ID. Use this to list only direct children of a specific folder. + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true schema: - type: integer - example: 1 - tags: - - Folders - operationId: listFolders - description: "You can fetch a list of all folders for organizing content by making a GET request to `https://api.intercom.io/folders`." + type: string + operationId: attachSubscriptionTypeToContact + description: | + You can add a specific subscription to a contact. In Intercom, we have two different subscription types based on user consent - opt-out and opt-in: + + 1.Attaching a contact to an opt-out subscription type will opt that user out from receiving messages related to that subscription type. + + 2.Attaching a contact to an opt-in subscription type will opt that user in to receiving messages related to that subscription type. + + This will return a subscription type model for the subscription type that was added to the contact. responses: '200': - description: successful + description: Successful content: application/json: - example: - type: list - data: - - id: 6 - name: Product Documentation - description: Internal product docs - emoji: "📚" - parent_folder_id: null - content_count: 5 - created_at: 1672928359 - updated_at: 1672928610 - total_count: 1 - pages: - type: pages - page: 1 - per_page: 50 - total_pages: 1 + examples: + Successful: + value: + type: subscription + id: '106' + state: live + consent_type: opt_in + default_translation: + name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + translations: + - name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + content_types: + - sms_message schema: - type: object - properties: - type: - type: string - enum: - - list - example: list - data: - type: array - items: - "$ref": "#/components/schemas/folder" - total_count: - type: integer - description: Total number of folders - example: 2 - pages: - "$ref": "#/components/schemas/cursor_pages" + "$ref": "#/components/schemas/subscription_type" + '404': + description: Resource not found + content: + application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 0c2871af-abed-4bce-a5c5-77efbe721711 + errors: + - code: not_found + message: User Not Found + Resource not found: + value: + type: error.list + request_id: 2774db46-34d9-4925-a24d-8203d4a39f65 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" '401': description: Unauthorized content: application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: f615465d-fd5f-4d68-8498-389130b897e4 + errors: + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - post: - summary: Create a folder - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Folders - operationId: createFolder - description: "You can create a new folder for organizing content by making a POST request to `https://api.intercom.io/folders`." requestBody: content: application/json: schema: type: object required: - - folder + - id + - consent_type properties: - folder: - type: object - required: - - name - properties: - name: - type: string - description: The name of the folder - example: Product Documentation - description: - type: string - description: The description of the folder - example: Internal product documentation - emoji: - type: string - description: An emoji for the folder - example: "📚" - parent_folder_id: - type: integer - nullable: true - description: The ID of the parent folder - example: null - example: - folder: - name: Product Documentation - description: Internal product docs - emoji: "📚" + id: + type: string + description: The unique identifier for the subscription which is + given by Intercom + example: '37846' + consent_type: + type: string + description: The consent_type of a subscription, opt_out or opt_in. + example: opt_in + examples: + successful: + summary: Successful + value: + id: 106 + consent_type: opt_in + contact_not_found: + summary: Contact not found + value: + id: 110 + consent_type: opt_in + resource_not_found: + summary: Resource not found + value: + id: invalid_id + consent_type: opt_in + "/contacts/{contact_id}/subscriptions/{id}": + delete: + summary: Remove subscription from a contact + tags: + - Subscription Types + - Contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + - name: id + in: path + description: The unique identifier for the subscription type which is given + by Intercom + example: '37846' + required: true + schema: + type: string + operationId: detachSubscriptionTypeToContact + description: You can remove a specific subscription from a contact. This will + return a subscription type model for the subscription type that was removed + from the contact. responses: '200': - description: folder created + description: Successful content: application/json: - example: - id: 6 - name: Product Documentation - description: Internal product docs - emoji: "📚" - parent_folder_id: null - content_count: 0 - created_at: 1672928359 - updated_at: 1672928359 + examples: + Successful: + value: + type: subscription + id: '122' + state: live + consent_type: opt_in + default_translation: + name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + translations: + - name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + content_types: + - sms_message schema: - "$ref": "#/components/schemas/folder" - '401': - description: Unauthorized + "$ref": "#/components/schemas/subscription_type" + '404': + description: Resource not found content: application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 82b37940-b43f-46ee-a492-11543a317c97 + errors: + - code: not_found + message: User Not Found + Resource not found: + value: + type: error.list + request_id: c18422ca-5454-42af-9e1d-dd92066e6e9d + errors: + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" - '400': - description: Bad request + '401': + description: Unauthorized content: application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: c7de741d-dc8f-49b1-8cbe-791668ade76c + errors: + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/folders/{id}": + "/contacts/{contact_id}/tags": get: - summary: Retrieve a folder + summary: List tags attached to a contact + tags: + - Contacts + - Tags parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id + - name: contact_id in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 required: true - description: The unique identifier for the folder schema: - type: integer - example: 6 - tags: - - Folders - operationId: retrieveFolder - description: "You can fetch the details of a single folder by making a GET request to `https://api.intercom.io/folders/`." + type: string + operationId: listTagsForAContact + description: You can fetch a list of all tags that are attached to a specific + contact. responses: '200': - description: folder found + description: successful content: application/json: - example: - id: 6 - name: Product Documentation - description: Internal product docs - emoji: "📚" - parent_folder_id: null - content_count: 5 - created_at: 1672928359 - updated_at: 1672928610 + examples: + successful: + value: + type: list + data: + - type: tag + id: '80' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' schema: - "$ref": "#/components/schemas/folder" - '401': - description: Unauthorized + "$ref": "#/components/schemas/tag_list" + '404': + description: Contact not found content: application/json: + examples: + Contact not found: + value: + type: error.list + request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 + errors: + - code: not_found + message: User Not Found schema: "$ref": "#/components/schemas/error" - '404': - description: Folder not found + '401': + description: Unauthorized content: application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: ca3c5e6e-c743-428b-aa8a-ac371a50cc39 + errors: + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - put: - summary: Update a folder + post: + summary: Add tag to a contact + tags: + - Tags + - Contacts parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id + - name: contact_id in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 required: true - description: The unique identifier for the folder schema: - type: integer - example: 6 - tags: - - Folders - operationId: updateFolder - description: "You can update a folder by making a PUT request to `https://api.intercom.io/folders/`." - requestBody: - content: - application/json: - schema: - type: object - required: - - folder - properties: - folder: - type: object - properties: - name: - type: string - description: The name of the folder - example: Updated Product Documentation - description: - type: string - description: The description of the folder - example: Updated internal product documentation - emoji: - type: string - description: An emoji for the folder - example: "📖" - parent_folder_id: - type: integer - nullable: true - description: The ID of the parent folder - example: null - example: - folder: - name: Updated Product Documentation - emoji: "📖" + type: string + operationId: attachTagToContact + description: You can tag a specific contact. This will return a tag object for + the tag that was added to the contact. responses: '200': - description: folder updated - content: - application/json: - example: - id: 6 - name: Updated Product Documentation - description: Internal product docs - emoji: "📖" - parent_folder_id: null - content_count: 5 - created_at: 1672928359 - updated_at: 1672928900 - schema: - "$ref": "#/components/schemas/folder" - '401': - description: Unauthorized + description: successful content: application/json: + examples: + successful: + value: + type: tag + id: '81' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/tag" '404': - description: Folder not found + description: Tag not found content: application/json: + examples: + Contact not found: + value: + type: error.list + request_id: f22a7847-ee33-449f-80c0-707efd295a53 + errors: + - code: not_found + message: User Not Found + Tag not found: + value: + type: error.list + request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + errors: + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" - '400': - description: Bad request + '401': + description: Unauthorized content: application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 9b1c9966-caeb-485a-8419-d707fd472c63 + errors: + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier for the tag which is given by + Intercom + example: '7522907' + examples: + successful: + summary: successful + value: + id: 81 + contact_not_found: + summary: Contact not found + value: + id: 82 + tag_not_found: + summary: Tag not found + value: + id: '123' + "/contacts/{contact_id}/tags/{id}": delete: - summary: Delete a folder + summary: Remove tag from a contact + tags: + - Tags + - Contacts parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: contact_id + in: path + description: The unique identifier for the contact which is given by Intercom + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string - name: id in: path + description: The unique identifier for the tag which is given by Intercom + example: '7522907' required: true - description: The unique identifier for the folder schema: - type: integer - example: 6 - tags: - - Folders - operationId: deleteFolder - description: "You can delete a folder (if it contains no content) by making a DELETE request to `https://api.intercom.io/folders/`." + type: string + operationId: detachTagFromContact + description: You can remove tag from a specific contact. This will return a + tag object for the tag that was removed from the contact. responses: '200': - description: folder deleted + description: successful content: application/json: - example: - id: 6 - object: folder - deleted: true + examples: + successful: + value: + type: tag + id: '84' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' schema: - "$ref": "#/components/schemas/deleted_folder_object" - '401': - description: Unauthorized + "$ref": "#/components/schemas/tag" + '404': + description: Tag not found content: application/json: + examples: + Contact not found: + value: + type: error.list + request_id: b3d41080-5b35-42b8-8584-31e4660d355f + errors: + - code: not_found + message: User Not Found + Tag not found: + value: + type: error.list + request_id: '02871f7a-860e-433a-8545-6a73fbbe5e22' + errors: + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" - '404': - description: Folder not found - content: - application/json: - schema: - "$ref": "#/components/schemas/error" - '422': - description: Folder contains content - content: - application/json: - schema: - "$ref": "#/components/schemas/error" - "/companies": - post: - summary: Create or Update a company - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Companies - operationId: createOrUpdateCompany - description: | - You can create or update a company. - - Companies will be only visible in Intercom when there is at least one associated user. - - Companies are looked up via `company_id` in a `POST` request, if not found via `company_id`, the new company will be created, if found, that company will be updated. - - {% admonition type="warning" name="Using `company_id`" %} - You can set a unique `company_id` value when creating a company. However, it is not possible to update `company_id`. Be sure to set a unique value once upon creation of the company. - {% /admonition %} - responses: - '200': - description: Successful - content: - application/json: - examples: - Successful: - value: - type: company - company_id: company_remote_id - id: 6762f0761bb69f9f2193bae2 - app_id: this_is_an_id147_that_should_be_at_least_ - name: my company - remote_created_at: 1374138000 - created_at: 1734537334 - updated_at: 1734537334 - monthly_spend: 0 - session_count: 0 - user_count: 0 - tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] - notes: - type: note.list - data: [] - url: "/companies/6762f0761bb69f9f2193bae2/notes" - total_count: 0 - has_more: false - plan: {} - custom_attributes: - industry: manufacturing - schema: - "$ref": "#/components/schemas/company" - '400': - description: Bad Request - content: - application/json: - examples: - Bad Request: - value: - type: error.list - request_id: - errors: - - code: bad_request - message: bad 'test' parameter - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '401': + description: Unauthorized content: application/json: examples: Unauthorized: value: type: error.list - request_id: 8a9f415f-e9df-41e9-ba1f-739914f66551 + request_id: 491beaa4-a452-4940-85e0-498c0ca5528d errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_or_update_company_request" - examples: - successful: - summary: Successful - value: - company_id: company_remote_id - name: my company - remote_created_at: 1374138000 - bad_request: - summary: Bad Request - value: - test: invalid - get: - summary: Retrieve companies + "/contacts/{id}": + put: + summary: Update a contact parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: name - in: query - required: false - description: The `name` of the company to filter by. - example: my company - schema: - type: string - - name: company_id - in: query - required: false - description: The `company_id` of the company to filter by. - example: '12345' - schema: - type: string - - name: tag_id - in: query - required: false - description: The `tag_id` of the company to filter by. - example: '678910' - schema: - type: string - - name: segment_id - in: query - required: false - description: The `segment_id` of the company to filter by. - example: '98765' + - name: id + in: path + description: id + example: 63a07ddf05a32042dffac965 + required: true schema: type: string - - name: page - in: query - required: false - description: The page of results to fetch. Defaults to first page - example: 1 - schema: - type: integer - - name: per_page + - name: include_merge_history in: query + description: Pass `true` to include the contact's merge history in the response. + Only returned for contacts with a `user` role. required: false - description: How many results to display per page. Defaults to 15 - example: 15 schema: - type: integer + type: boolean + default: false tags: - - Companies - operationId: retrieveCompany + - Contacts + - Custom Object Instances + operationId: UpdateContact description: | - You can fetch a single company by passing in `company_id` or `name`. - - `https://api.intercom.io/companies?name={name}` - - `https://api.intercom.io/companies?company_id={company_id}` - - You can fetch all companies and filter by `segment_id` or `tag_id` as a query parameter. + You can update an existing contact (ie. user or lead). - `https://api.intercom.io/companies?tag_id={tag_id}` + {% admonition type="info" %} + This endpoint handles both **contact updates** and **custom object associations**. - `https://api.intercom.io/companies?segment_id={segment_id}` + See _`update a contact with an association to a custom object instance`_ in the request/response examples to see the custom object association format. + {% /admonition %} responses: '200': - description: Successful - content: - application/json: - examples: - Successful: - value: - type: list - data: - - type: company - company_id: remote_companies_scroll_2 - id: 6762f07a1bb69f9f2193baea - app_id: this_is_an_id153_that_should_be_at_least_ - name: IntercomQATest1 - remote_created_at: 1734537338 - created_at: 1734537338 - updated_at: 1734537338 - monthly_spend: 0 - session_count: 0 - user_count: 4 - tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] - notes: - type: note.list - data: [] - url: "/companies/6762f07a1bb69f9f2193baea/notes" - total_count: 0 - has_more: false - plan: {} - custom_attributes: {} - pages: - type: pages - next: - page: 1 - per_page: 15 - total_pages: 1 - total_count: 1 - schema: - "$ref": "#/components/schemas/company_list" - '404': - description: Company Not Found - content: - application/json: - examples: - Company Not Found: - value: - type: error.list - request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 - errors: - - code: company_not_found - message: Company Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + description: successful content: application/json: examples: - Unauthorized: + successful: value: - type: error.list - request_id: 2fa563ba-f9c9-4281-a76b-10bfd777dfd7 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/companies/{id}": - get: - summary: Retrieve a company by ID - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the company which is given by Intercom - example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - schema: - type: string - tags: - - Companies - operationId: RetrieveACompanyById - description: You can fetch a single company. - responses: - '200': - description: Successful - content: - application/json: - examples: - Successful: - value: - type: company - company_id: '1' - id: 6762f07f1bb69f9f2193baf5 - app_id: this_is_an_id159_that_should_be_at_least_ - name: company1 - remote_created_at: 1734537343 - created_at: 1734537343 - updated_at: 1734537343 - monthly_spend: 0 - session_count: 0 - user_count: 1 + type: contact + id: 6762f0cd1bb69f9f2193bb7c + workspace_id: this_is_an_id279_that_should_be_at_least_ + external_id: '70' + role: user + email: joebloggs@intercom.io + phone: + formatted_phone: + name: joe bloggs + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537421 + updated_at: 1734537422 + signed_up_at: 1734537421 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/tags" + total_count: 0 + has_more: false notes: - type: note.list + type: list data: [] - url: "/companies/6762f0761bb69f9f2193bae2/notes" + url: "/contacts/6762f0cd1bb69f9f2193bb7c/notes" total_count: 0 has_more: false - plan: {} - custom_attributes: {} - schema: - "$ref": "#/components/schemas/company" - '404': - description: Company Not Found - content: - application/json: - examples: - Company Not Found: + companies: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: + update a contact with an association to a custom object instance: value: - type: error.list - request_id: 57d57564-b5e2-4064-abfe-4653e5ac24c0 - errors: - - code: company_not_found - message: Company Not Found + type: contact + id: 6762f0cd1bb69f9f2193bb7c + workspace_id: this_is_an_id279_that_should_be_at_least_ + external_id: '70' + role: user + email: joebloggs@intercom.io + phone: + formatted_phone: + name: joe bloggs + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537421 + updated_at: 1734537422 + signed_up_at: 1734537421 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: + order: + type: Order.list + instances: + - id: '21' + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + type: Order + tags: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: schema: - "$ref": "#/components/schemas/error" + allOf: + - "$ref": "#/components/schemas/contact" + properties: + enabled_push_messaging: + type: boolean + nullable: true + description: If the user has enabled push messaging. + example: true '401': description: Unauthorized content: @@ -5763,100 +5367,219 @@ paths: Unauthorized: value: type: error.list - request_id: caf73ce4-bda6-4f2b-bbfb-0d984d430335 + request_id: 89ce96d9-aae9-4eec-ace2-d68cc4f74879 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - put: - summary: Update a company - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the company which is given by Intercom - example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - schema: - type: string - tags: - - Companies - operationId: UpdateCompany - description: | - You can update a single company using the Intercom provisioned `id`. - - {% admonition type="warning" name="Using `company_id`" %} - When updating a company it is not possible to update `company_id`. This can only be set once upon creation of the company. + requestBody: + content: + application/json: + schema: + oneOf: + - "$ref": "#/components/schemas/update_contact_request" + examples: + successful: + summary: successful + value: + email: joebloggs@intercom.io + name: joe bloggs + update_a_contact_with_an_association_to_a_custom_object_instance: + summary: update a contact with an association to a custom object + instance + value: + custom_attributes: + order: + - '21' + get: + summary: Get a contact + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + description: id + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string + - name: include_merge_history + in: query + description: Pass `true` to include the contact's merge history in the response. + Only returned for contacts with a `user` role. + required: false + schema: + type: boolean + default: false + tags: + - Contacts + operationId: ShowContact + description: | + You can fetch the details of a single contact. + + {% admonition type="info" name="Merged contacts return 410 Gone" %} + If a contact has been merged into another contact via the Merge endpoint (`POST /contacts/merge`), requesting it by its original ID will return **HTTP 410 Gone** with a `Link` header pointing to the canonical (merged-into) contact. + + **Response headers:** + ``` + Link: ; rel="canonical" + ``` + + **Response body:** + ```json + { + "type": "error.list", + "errors": [{ "code": "contact_merged", "message": "This contact has been merged. See the 'Link' header for the canonical contact." }] + } + ``` + + The `Link` header contains the path to the final merge target, resolving multi-hop merge chains (up to 3 hops). {% /admonition %} responses: '200': - description: Successful + description: successful content: application/json: examples: - Successful: + successful: value: - type: company - company_id: '1' - id: 6762f0841bb69f9f2193baff - app_id: this_is_an_id165_that_should_be_at_least_ - name: company2 - remote_created_at: 1734537348 - created_at: 1734537348 - updated_at: 1734537348 - monthly_spend: 0 - session_count: 0 - user_count: 1 + type: contact + id: 6762f0d01bb69f9f2193bb7d + workspace_id: this_is_an_id283_that_should_be_at_least_ + external_id: '70' + role: user + email: joe@bloggs.com + phone: + formatted_phone: + name: Joe Bloggs + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537424 + updated_at: 1734537424 + signed_up_at: 1734537424 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] + type: list + data: [] + url: "/contacts/6762f0d01bb69f9f2193bb7d/tags" + total_count: 0 + has_more: false notes: - type: note.list + type: list data: [] - url: "/companies/6762f0841bb69f9f2193baff/notes" + url: "/contacts/6762f0d01bb69f9f2193bb7d/notes" total_count: 0 has_more: false - plan: {} - custom_attributes: {} + companies: + type: list + data: [] + url: "/contacts/6762f0d01bb69f9f2193bb7d/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0d01bb69f9f2193bb7d/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0d01bb69f9f2193bb7d/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: schema: - "$ref": "#/components/schemas/company" - '404': - description: Company Not Found + allOf: + - "$ref": "#/components/schemas/contact" + properties: + enabled_push_messaging: + type: boolean + nullable: true + description: If the user has enabled push messaging. + example: true + '401': + description: Unauthorized content: application/json: examples: - Company Not Found: + Unauthorized: value: type: error.list - request_id: daa64b43-3e3c-4fc4-aef9-91eb40c7885c + request_id: 45b30bd1-75d2-40cc-bb39-74ac133a2836 errors: - - code: company_not_found - message: Company Not Found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '410': + description: Contact Merged + headers: + Link: + description: 'Link to the canonical (merged-into) contact. Format: + `; rel="canonical"`' + schema: + type: string + example: '; rel="canonical"' content: application/json: examples: - Unauthorized: + Contact Merged: value: type: error.list - request_id: 4748eb32-3261-4798-ace0-a5825edf4eb5 + request_id: 45b30bd1-75d2-40cc-bb39-74ac133a2836 errors: - - code: unauthorized - message: Access Token Invalid + - code: contact_merged + message: This contact has been merged. See the 'Link' header + for the canonical contact. schema: "$ref": "#/components/schemas/error" delete: - summary: Delete a company + summary: Delete a contact parameters: - name: Intercom-Version in: header @@ -5864,51 +5587,21 @@ paths: "$ref": "#/components/schemas/intercom_version" - name: id in: path + description: id required: true - description: The unique identifier for the company which is given by Intercom - example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 schema: type: string tags: - - Companies - operationId: deleteCompany - description: | - Delete a single company. - - This endpoint does not permanently remove the company. It archives the company record and detaches any contacts attached to it; the contacts themselves are not deleted. A `company.deleted` webhook is sent once archival completes. - - The endpoint returns `200` with `"deleted": true` as soon as the request is accepted — archival is processed asynchronously. - - {% admonition type="warning" %} - Third-party integrations that sync companies into Intercom (for example, Salesforce or Chargebee) will recreate any company deleted through this endpoint on their next sync. To prevent recreation, remove or filter the company at the source integration before deleting it via the API. - {% /admonition %} + - Contacts + operationId: DeleteContact + description: You can delete a single contact. responses: '200': - description: Successful - content: - application/json: - examples: - Successful: - value: - id: 6762f0881bb69f9f2193bb09 - object: company - deleted: true - schema: - "$ref": "#/components/schemas/deleted_company_object" - '404': - description: Company Not Found + description: successful content: application/json: - examples: - Company Not Found: - value: - type: error.list - request_id: 4f41d1d6-7a42-45e3-a24e-544deb62da47 - errors: - - code: company_not_found - message: Company Not Found schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/contact_deleted" '401': description: Unauthorized content: @@ -5917,62 +5610,159 @@ paths: Unauthorized: value: type: error.list - request_id: 7b13fd9c-31be-40de-94e1-d71f260a3458 + request_id: a947b2f0-23d3-419d-9ec4-cdd191cea676 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/companies/{id}/contacts": - get: - summary: List attached contacts + "/contacts/merge": + post: + summary: Merge a lead and a user parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the company which is given by Intercom - example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + - name: include_merge_history + in: query + description: Pass `true` to include the merge history of the resulting contact + in the response. Only returned for contacts with a `user` role. + required: false schema: - type: string + type: boolean + default: false tags: - - Companies - Contacts - operationId: ListAttachedContacts - description: You can fetch a list of all contacts that belong to a company. + operationId: MergeContact + description: | + You can merge a contact with a `role` of `lead` into a contact with a `role` of `user`. + + {% admonition type="warning" name="Merged contacts are not retrievable via the API" %} + Once a merge is completed, the source contact (`from`) is permanently removed from the active contact list. This means: + - **GET /contacts/{id}** — Requesting the source contact by its original ID will return `410 Gone` with a `Link` header pointing to the canonical (merged-into) contact. + - **POST /contacts/search** — The source contact will not appear in search results, including queries filtered by `updated_at`. + - **GET /contacts** — The source contact will not appear in list results. + + Only the target contact (`into`) remains accessible. If your application stores contact IDs, update them to use the target contact's ID after a merge. + {% /admonition %} responses: '200': - description: Successful + description: successful content: application/json: examples: - Successful: + successful: value: - type: list - data: [] - total_count: 0 - pages: - type: pages - page: 1 - per_page: 50 - total_pages: 0 + type: contact + id: 6762f0d51bb69f9f2193bb80 + workspace_id: this_is_an_id291_that_should_be_at_least_ + external_id: '70' + role: user + email: joe@bloggs.com + phone: + formatted_phone: + name: Joe Bloggs + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537429 + updated_at: 1734537430 + signed_up_at: 1734537429 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} + tags: + type: list + data: [] + url: "/contacts/6762f0d51bb69f9f2193bb80/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f0d51bb69f9f2193bb80/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f0d51bb69f9f2193bb80/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0d51bb69f9f2193bb80/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0d51bb69f9f2193bb80/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: schema: - "$ref": "#/components/schemas/company_attached_contacts" - '404': - description: Company Not Found + allOf: + - "$ref": "#/components/schemas/contact" + properties: + enabled_push_messaging: + type: boolean + nullable: true + description: If the user has enabled push messaging. + example: true + '400': + description: Bad Request content: application/json: examples: - Company Not Found: + Not a duplicate: value: type: error.list - request_id: 5dde0b79-8c81-4d9e-a4d4-736a44cf2f00 errors: - - code: company_not_found - message: Company Not Found + - code: invalid_merge + message: Contacts can only be merged when they are duplicates + (matching email or phone). Pass skip_duplicate_validation=true + to override this check. schema: "$ref": "#/components/schemas/error" '401': @@ -5983,57 +5773,106 @@ paths: Unauthorized: value: type: error.list - request_id: f7586690-c217-47db-9042-cb9550b81260 + request_id: ff328c7c-6140-48eb-84dd-bb8960b66cd0 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/companies/{id}/segments": - get: - summary: List attached segments for companies + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/merge_contacts_request" + examples: + successful: + summary: successful + value: + from: 6762f0d51bb69f9f2193bb7f + into: 6762f0d51bb69f9f2193bb80 + skip duplicate validation: + summary: skip duplicate validation + value: + from: 6762f0d51bb69f9f2193bb7f + into: 6762f0d51bb69f9f2193bb80 + skip_duplicate_validation: true + "/contacts/merge/preview": + post: + summary: Preview a contact merge parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the company which is given by Intercom - example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - schema: - type: string tags: - - Companies - operationId: ListAttachedSegmentsForCompanies - description: You can fetch a list of all segments that belong to a company. + - Contacts + operationId: PreviewMergeContact + description: | + Preview the result of merging one contact into another without applying the merge. This is a read-only dry run: it reports whether the merge is allowed and, if so, exactly what would change, **without modifying any data**. + + Send the same `from` (a `lead`) and `into` (a `user`) contact IDs you would pass to [Merge a lead and a user](/docs/references/preview/rest-api/api.intercom.io/contacts/mergecontact). + + - When `allowed` is `true`, the response contains a `summary`: every attribute change (with the resulting value on the surviving contact) and the number of conversations, notes, and tags that would be reassigned. + - When `allowed` is `false`, the response contains `reasons`. Each reason has a stable `code` you can branch on and a human-readable `message` you can display. + + {% admonition type="warning" name="Previewing non-duplicate contacts" %} + By default a merge requires the two contacts to share an identifier (email, phone, or external ID). Set `skip_duplicate_validation` to `true` to preview a merge of contacts that don't — the same rule the merge endpoint enforces. + {% /admonition %} + + When `allowed` is `false`, `reasons[].code` is one of: + + | code | meaning | + | --- | --- | + | `invalid_merge_role_pair` | The `from`/`into` roles aren't mergeable. `from` must be a lead and `into` a user. | + | `no_shared_identifier` | The contacts share no email, phone, or external ID. Set `skip_duplicate_validation` to preview anyway. | + | `facebook_user` | Facebook contacts can't be merged. | + | `external_lead_channel_not_allowed` | The source is an external-channel lead that isn't eligible for merging. | + | `mailing_list` | Contacts created from a mailing list can't be merged. | responses: '200': - description: Successful + description: successful content: application/json: examples: - Successful: + allowed: + summary: Merge allowed value: - type: list - data: [] + allowed: true + summary: + attribute_changes: + attributes: + - field: name + outcome: adopted + from_value: Jo + new_into_value: Jo + - field: companies + outcome: merged + from_value: + - Beta + into_value: + - Acme + new_into_value: + - Acme + - Beta + - field: phone + outcome: discarded + from_value: "+1555" + into_value: "+1999" + new_into_value: "+1999" + total_count: 3 + reassignments: + conversations: 14 + tags: 3 + notes: 2 + blocked: + summary: Merge not allowed + value: + allowed: false + reasons: + - code: no_shared_identifier + message: These contacts don't share a common identifier (email, phone, or external ID), so they aren't recognised as duplicates. Set skip_duplicate_validation to true to preview the merge anyway. schema: - "$ref": "#/components/schemas/company_attached_segments" - '404': - description: Company Not Found - content: - application/json: - examples: - Company Not Found: - value: - type: error.list - request_id: de5d939e-77fb-46d7-a3b9-f34199d9f25a - errors: - - code: company_not_found - message: Company Not Found - schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/merge_preview_response" '401': description: Unauthorized content: @@ -6042,303 +5881,259 @@ paths: Unauthorized: value: type: error.list - request_id: 91f04dce-5759-4d80-981e-f598ec989d1a + request_id: ff328c7c-6140-48eb-84dd-bb8960b66cd0 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/companies/{company_id}/notes": - get: - summary: List all company notes + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/merge_preview_request" + examples: + allowed: + summary: successful + value: + from: 6762f0d51bb69f9f2193bb7f + into: 6762f0d51bb69f9f2193bb80 + "/contacts/search": + post: + summary: Search contacts parameters: - - name: company_id - in: path - required: true - description: The unique identifier for the company which is given by Intercom - example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - schema: - type: string - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: include_merge_history + in: query + description: Pass `true` to include a `merge_history` array on each contact + in the response. Only returned for contacts with a `user` role. + required: false + schema: + type: boolean + default: false tags: - - Notes - - Companies - operationId: listCompanyNotes - description: You can fetch a list of notes that are associated to a company. + - Contacts + operationId: SearchContacts + description: | + You can search for multiple contacts by the value of their attributes in order to fetch exactly who you want. + + To search for contacts, you need to send a `POST` request to `https://api.intercom.io/contacts/search`. + + This will accept a query object in the body which will define your filters in order to search for contacts. + + {% admonition type="warning" name="Optimizing search queries" %} + 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 `50` results per page. + See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#example-search-conversations-request) for more details on how to use the `starting_after` param. + {% /admonition %} + ### Merged Contacts + + Contacts that have been merged (via POST /contacts/merge) are excluded from search results. If a contact was recently merged into another, it will no longer appear in queries filtered by `updated_at` or any other field. Only the target contact from the merge remains searchable. + + ### Contact Creation Delay + + If a contact has recently been created, there is a possibility that it will not yet be available when searching. This means that it may not appear in the response. This delay can take a few minutes. If you need to be instantly notified it is recommended to use webhooks and iterate to see if they match your search filters. + + ### Nesting & Limitations + + 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: + * There's a limit of max 2 nested filters + * There's a limit of max 15 filters for each AND or OR group + + ### Searching for Timestamp Fields + + All timestamp fields (created_at, updated_at etc.) are filtered by UTC calendar day in Contact Search. An equality (=) query on a timestamp matches any contact whose value falls on the same UTC day, so filtering by a value the API returned reliably matches that contact regardless of your workspace's timezone. Comparisons (>, <) are evaluated at UTC day granularity. + For example, if you search for all Contacts with a created_at value greater (>) than 1577869200 (the UNIX timestamp for January 1st, 2020 9:00 AM UTC), that will be interpreted as 1577836800 (January 1st, 2020 12:00 AM UTC). The search results will then include Contacts created from January 2nd, 2020 12:00 AM UTC onwards. + If you'd like to get contacts created on January 1st, 2020 (UTC) you should search with a created_at value equal (=) to 1577836800 (January 1st, 2020 12:00 AM UTC). + This behaviour applies only to timestamps used in search queries. The search results will still contain the full UNIX timestamp and be sorted accordingly. + + ### Accepted Fields + + Most key listed as part of the Contacts Model are 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 | + | role | String
Accepts user or lead | + | name | String | + | avatar | String | + | owner_id | Integer | + | email | String | + | email_domain | String | + | phone | String | + | formatted_phone | String | + | external_id | String | + | created_at | Date (UNIX Timestamp) | + | signed_up_at | Date (UNIX Timestamp) | + | updated_at | Date (UNIX Timestamp) | + | last_seen_at | Date (UNIX Timestamp) | + | last_contacted_at | Date (UNIX Timestamp) | + | last_replied_at | Date (UNIX Timestamp) | + | last_email_opened_at | Date (UNIX Timestamp) | + | last_email_clicked_at | Date (UNIX Timestamp) | + | language_override | String | + | browser | String | + | browser_language | String | + | os | String | + | location.country | String | + | location.region | String | + | location.city | String | + | unsubscribed_from_emails | Boolean | + | marked_email_as_spam | Boolean | + | has_hard_bounced | Boolean | + | ios_last_seen_at | Date (UNIX Timestamp) | + | ios_app_version | String | + | ios_device | String | + | ios_app_device | String | + | ios_os_version | String | + | ios_app_name | String | + | ios_sdk_version | String | + | android_last_seen_at | Date (UNIX Timestamp) | + | android_app_version | String | + | android_device | String | + | android_app_name | String | + | andoid_sdk_version | String | + | segment_id | String | + | tag_id | String | + | custom_attributes.{attribute_name} | String | + + ### Accepted Operators + + {% admonition type="warning" name="Searching based on `created_at`" %} + You cannot use the `<=` or `>=` operators to search by `created_at`. + {% /admonition %} + + 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 must be in Array | + | NIN | All | Not In
Shortcut for `OR !` queries
Values must be in Array | + | > | Integer
Date (UNIX Timestamp) | Greater than | + | < | Integer
Date (UNIX Timestamp) | Lower than | + | ~ | String | Contains | + | !~ | String | Doesn't Contain | + | ^ | String | Starts With | + | $ | String | Ends With | responses: '200': - description: Successful response + description: successful content: application/json: examples: - Successful response: + successful: value: type: list - data: - - type: note - id: '26' - created_at: 1733932587 - company: - type: company - id: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - author: - type: admin - id: '991267581' - name: Ciaran122 Lee - email: admin122@email.com - away_mode_enabled: false - away_mode_reassign: false - away_status_reason_id: null - has_inbox_seat: true - team_ids: [] - team_priority_level: {} - body: "

This is a note.

" - - type: note - id: '25' - created_at: 1733846187 - company: - type: company - id: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - author: - type: admin - id: '991267581' - name: Ciaran122 Lee - email: admin122@email.com - away_mode_enabled: false - away_mode_reassign: false - body: "

This is a note.

" - - type: note - id: '24' - created_at: 1733846187 - company: - type: company - id: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - author: - type: admin - id: '991267581' - name: Ciaran122 Lee - email: admin122@email.com - away_mode_enabled: false - away_mode_reassign: false - away_status_reason_id: null - has_inbox_seat: true - team_ids: [] - team_priority_level: {} - body: "

This is a note.

" - total_count: 3 + data: [] + total_count: 0 pages: type: pages - next: page: 1 - per_page: 50 - total_pages: 1 + per_page: 5 + total_pages: 0 schema: - "$ref": "#/components/schemas/note_list" - '404': - description: Company not found + "$ref": "#/components/schemas/contact_list" + '401': + description: Unauthorized content: application/json: examples: - Company not found: + Unauthorized: value: type: error.list - request_id: 57055cde-3d0d-4c67-b5c9-b20b80340bf0 + request_id: f0dc95f1-9e46-4e8d-8150-89365c2c5195 errors: - - code: company_not_found - message: Company Not Found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - post: - summary: Create a company note - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: company_id - in: path - required: true - description: The unique identifier for the company which is given by Intercom - example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - schema: - type: string - tags: - - Notes - - Companies - operationId: createCompanyNote - description: You can add a note to a single company. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: note - id: '31' - created_at: 1734537390 - company: - type: company - id: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - author: - type: admin - id: '991267583' - name: Ciaran124 Lee - email: admin124@email.com - away_mode_enabled: false - away_mode_reassign: false - body: "

Hello

" - schema: - "$ref": "#/components/schemas/note" - '401': - description: Unauthorized - content: - application/json: - schema: - "$ref": "#/components/schemas/error" - '404': - description: Company or admin not found + '400': + description: Bad Request content: application/json: examples: - Admin not found: - value: - type: error.list - request_id: 168f1bc3-d198-4797-8422-9f93fe8af5ad - errors: - - code: not_found - message: Resource Not Found - Company not found: + Invalid sort order: value: type: error.list - request_id: 6f372239-0259-428f-9943-91b8f7a92162 + request_id: 8d6c1f0a-3b2e-4a17-9c5d-1f0e2a3b4c5d errors: - - code: company_not_found - message: Company Not Found + - code: invalid_sort_order + message: "Invalid sort order 'desc'. Must be one of: ascending, descending" schema: "$ref": "#/components/schemas/error" requestBody: content: application/json: schema: - type: object - required: - - body - properties: - body: - type: string - description: The text of the note. - example: New note - admin_id: - type: string - description: The unique identifier of the admin creating the note. If not provided, defaults to the admin associated with the access token. - example: '991267583' + "$ref": "#/components/schemas/search_request" examples: - successful_response: - summary: Successful response - value: - body: Hello - admin_id: '991267583' - admin_not_found: - summary: Admin not found - value: - body: Hello - admin_id: '123' - company_not_found: - summary: Company not found + successful: + summary: successful value: - body: Hello - "/companies/list": - post: - summary: List all companies + query: + operator: AND + value: + - field: created_at + operator: ">" + value: '1306054154' + sort: + field: created_at + order: ascending + pagination: + per_page: 5 + "/contacts": + get: + summary: List all contacts parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: page - in: query - required: false - description: The page of results to fetch. Defaults to first page - example: 1 - schema: - type: integer - - name: per_page - in: query - required: false - description: How many results to return per page. Defaults to 15 - example: 15 - schema: - type: integer - - name: order + - name: include_merge_history in: query + description: Pass `true` to include a `merge_history` array on each contact + in the response. Only returned for contacts with a `user` role. required: false - description: "`asc` or `desc`. Return the companies in ascending or descending - order. Defaults to desc" - example: desc schema: - type: string + type: boolean + default: false tags: - - Companies - operationId: listAllCompanies + - Contacts + operationId: ListContacts description: | - You can list companies. The company list is sorted by the `last_request_at` field and by default is ordered descending, most recently requested first. - - Note that the API does not include companies who have no associated users in list responses. - - When using the Companies endpoint and the pages object to iterate through the returned companies, there is a limit of 10,000 Companies that can be returned. If you need to list or iterate on more than 10,000 Companies, please use the [Scroll API](https://developers.intercom.com/reference#iterating-over-all-companies). + You can fetch a list of all contacts (ie. users or leads) in your workspace. + {% admonition type="info" name="Merged contacts" %} + Contacts that have been merged (via POST /contacts/merge) will not appear in list results. Only the target contact from the merge remains accessible. + {% /admonition %} {% admonition type="warning" name="Pagination" %} - You can use pagination to limit the number of results returned. The default is `20` results per page. + You can use pagination to limit the number of results returned. The default is `50` results per page. See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#pagination-for-list-apis) for more details on how to use the `starting_after` param. {% /admonition %} responses: '200': - description: Successful + description: successful content: application/json: examples: - Successful: + successful: value: type: list - data: - - type: company - company_id: remote_companies_scroll_2 - id: 6762f0941bb69f9f2193bb25 - app_id: this_is_an_id189_that_should_be_at_least_ - name: IntercomQATest1 - remote_created_at: 1734537364 - created_at: 1734537364 - updated_at: 1734537364 - monthly_spend: 0 - session_count: 0 - user_count: 4 - tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] - notes: - type: note.list - data: [] - url: "/companies/6762f0941bb69f9f2193bb25/notes" - total_count: 0 - has_more: false - plan: {} - custom_attributes: {} + data: [] + total_count: 0 pages: type: pages - next: page: 1 - per_page: 15 - total_pages: 1 - total_count: 1 + per_page: 10 + total_pages: 0 schema: - "$ref": "#/components/schemas/company_list" + "$ref": "#/components/schemas/contact_list" '401': description: Unauthorized content: @@ -6347,188 +6142,127 @@ paths: Unauthorized: value: type: error.list - request_id: 537ccc45-2cae-4e72-ac2f-849f1422a771 + request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/companies/scroll": - get: - summary: Scroll over all companies + post: + summary: Create contact parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: scroll_param - in: query - required: false - description: '' - schema: - type: string tags: - - Companies - operationId: scrollOverAllCompanies - description: |2 - The `list all companies` functionality does not work well for huge datasets, and can result in errors and performance problems when paging deeply. The Scroll API provides an efficient mechanism for iterating over all companies in a dataset. - - - Each app can only have 1 scroll open at a time. You'll get an error message if you try to have more than one open per app. - - If the scroll isn't used for 1 minute, it expires and calls with that scroll param will fail - - If the end of the scroll is reached, "companies" will be empty and the scroll parameter will expire - - {% admonition type="info" name="Scroll Parameter" %} - You can get the first page of companies by simply sending a GET request to the scroll endpoint. - For subsequent requests you will need to use the scroll parameter from the response. - {% /admonition %} - {% admonition type="danger" name="Scroll network timeouts" %} - Since scroll is often used on large datasets network errors such as timeouts can be encountered. When this occurs you will see a HTTP 500 error with the following message: - "Request failed due to an internal network error. Please restart the scroll operation." - If this happens, you will need to restart your scroll query: It is not possible to continue from a specific point when using scroll. - {% /admonition %} + - Contacts + operationId: CreateContact + description: You can create a new contact (ie. user or lead). responses: '200': - description: Successful - content: - application/json: - examples: - Successful: - value: - type: list - data: - - type: company - company_id: remote_companies_scroll_2 - id: 6762f0971bb69f9f2193bb2b - app_id: this_is_an_id193_that_should_be_at_least_ - name: IntercomQATest1 - remote_created_at: 1734537367 - created_at: 1734537367 - updated_at: 1734537367 - monthly_spend: 0 - session_count: 0 - user_count: 4 - tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] - notes: - type: note.list - data: [] - url: "/companies/6762f0971bb69f9f2193bb2b/notes" - total_count: 0 - has_more: false - plan: {} - custom_attributes: {} - pages: - total_count: - scroll_param: 69352cd2-ab5b-42ac-b004-a13d4e55e9b0 - schema: - "$ref": "#/components/schemas/company_scroll" - '401': - description: Unauthorized + description: successful content: application/json: examples: - Unauthorized: + successful: value: - type: error.list - request_id: ca269b05-8c42-4615-a28d-7df0eb1687c5 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/contacts/{id}/companies": - post: - summary: Attach a Contact to a Company - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the contact which is given by Intercom - schema: - type: string - tags: - - Companies - - Contacts - operationId: attachContactToACompany - description: You can attach a company to a single contact. - responses: - '200': - description: Successful - content: - application/json: - examples: - Successful: - value: - type: company - company_id: '1' - id: 6762f09a1bb69f9f2193bb34 - app_id: this_is_an_id197_that_should_be_at_least_ - name: company6 - remote_created_at: 1734537370 - created_at: 1734537370 - updated_at: 1734537370 - monthly_spend: 0 - session_count: 0 - user_count: 1 + type: contact + id: 6762f0dd1bb69f9f2193bb83 + workspace_id: this_is_an_id303_that_should_be_at_least_ + external_id: + role: user + email: joebloggs@intercom.io + phone: + formatted_phone: + name: + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537437 + updated_at: 1734537437 + signed_up_at: + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] + type: list + data: [] + url: "/contacts/6762f0dd1bb69f9f2193bb83/tags" + total_count: 0 + has_more: false notes: - type: note.list + type: list data: [] - url: "/companies/6762f09a1bb69f9f2193bb34/notes" + url: "/contacts/6762f0dd1bb69f9f2193bb83/notes" total_count: 0 has_more: false - plan: {} - custom_attributes: {} - schema: - "$ref": "#/components/schemas/company" - '400': - description: Bad Request - content: - application/json: - examples: - Bad Request: - value: - type: error.list - request_id: 8879ee29-ade4-4b5a-a275-ab1ac531b82a - errors: - - code: parameter_not_found - message: company not specified - Contact Company Limit Exceeded: - value: - type: error.list - request_id: 9a3d0816-9707-4598-977e-c009ba630148 - errors: - - code: contact_company_limit_exceeded - message: Contact has reached the maximum of 1000 company associations - schema: - "$ref": "#/components/schemas/error" - '404': - description: Company Not Found - content: - application/json: - examples: - Company Not Found: - value: - type: error.list - request_id: 981799ea-f19b-432d-828c-491a3b29ad29 - errors: - - code: company_not_found - message: Company Not Found + companies: + type: list + data: [] + url: "/contacts/6762f0dd1bb69f9f2193bb83/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0dd1bb69f9f2193bb83/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0dd1bb69f9f2193bb83/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: schema: - "$ref": "#/components/schemas/error" + allOf: + - "$ref": "#/components/schemas/contact" + properties: + enabled_push_messaging: + type: boolean + nullable: true + description: If the user has enabled push messaging. + example: true '401': description: Unauthorized content: @@ -6537,7 +6271,7 @@ paths: Unauthorized: value: type: error.list - request_id: 1f187e85-cd9a-4be4-964e-cdbb8c66334a + request_id: ff2353d3-d3d6-4f20-8268-847869d01e73 errors: - code: unauthorized message: Access Token Invalid @@ -6547,46 +6281,45 @@ paths: content: application/json: schema: - type: object - required: - - id - properties: - id: - type: string - description: The unique identifier for the company which is given - by Intercom - example: 58a430d35458202d41b1e65b + oneOf: + - "$ref": "#/components/schemas/create_contact_request" examples: successful: - summary: Successful - value: - id: 6762f09a1bb69f9f2193bb34 - bad_request: - summary: Bad Request - value: - company_not_found: - summary: Company Not Found + summary: successful value: - id: '123' + email: joebloggs@intercom.io + "/contacts/find_by_external_id/{external_id}": get: - summary: List attached companies for contact + summary: Get a contact by External ID parameters: - - name: id + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: external_id in: path - description: The unique identifier for the contact which is given by Intercom - example: 63a07ddf05a32042dffac965 required: true + example: cdd29344-5e0c-4ef0-ac56-f9ba2979bc27 + description: The external ID of the user that you want to retrieve schema: type: string - - name: Intercom-Version - in: header + - name: include_merge_history + in: query + description: Pass `true` to include the contact's merge history in the response. + Only returned for contacts with a `user` role. + required: false schema: - "$ref": "#/components/schemas/intercom_version" + type: boolean + default: false tags: - Contacts - - Companies - operationId: listCompaniesForAContact - description: You can fetch a list of companies that are associated to a contact. + operationId: ShowContactByExternalId + description: | + You can fetch the details of a single contact by external ID. Note that this endpoint only supports users and not leads. + + {% admonition type="info" name="Merged contacts return 410 Gone" %} + If the contact with this external ID has been merged into another contact, the API returns **HTTP 410 Gone** with a `Link` header pointing to the canonical (merged-into) contact. See `GET /contacts/{id}` for details on the response format. + {% /admonition %} responses: '200': description: successful @@ -6595,51 +6328,102 @@ paths: examples: successful: value: - type: list - data: - - type: company - company_id: '1' - id: 6762f0a61bb69f9f2193bb55 - app_id: this_is_an_id213_that_should_be_at_least_ - name: company12 - remote_created_at: 1734537382 - created_at: 1734537382 - updated_at: 1734537382 - last_request_at: 1734364582 - monthly_spend: 0 - session_count: 0 - user_count: 1 - tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] - plan: {} - custom_attributes: {} - pages: - type: pages - next: - page: 1 - per_page: 50 - total_pages: 1 - total_count: 1 - schema: - "$ref": "#/components/schemas/contact_attached_companies" - '404': - description: Contact not found - content: - application/json: - examples: - Contact not found: - value: - type: error.list - request_id: 32c856ba-901b-49c4-8e8d-d43fc3ee6ea5 - errors: - - code: not_found - message: User Not Found + type: contact + id: 6762f0df1bb69f9f2193bb84 + workspace_id: this_is_an_id307_that_should_be_at_least_ + external_id: '70' + role: user + email: joe@bloggs.com + phone: + formatted_phone: + name: Joe Bloggs + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734537439 + updated_at: 1734537439 + signed_up_at: 1734537439 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} + tags: + type: list + data: [] + url: "/contacts/6762f0df1bb69f9f2193bb84/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f0df1bb69f9f2193bb84/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f0df1bb69f9f2193bb84/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f0df1bb69f9f2193bb84/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f0df1bb69f9f2193bb84/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: schema: - "$ref": "#/components/schemas/error" + allOf: + - "$ref": "#/components/schemas/contact" + properties: + enabled_push_messaging: + type: boolean + nullable: true + description: If the user has enabled push messaging. + example: true '401': description: Unauthorized content: @@ -6648,199 +6432,240 @@ paths: Unauthorized: value: type: error.list - request_id: 565a4f38-5fa9-451d-bcf0-32076f79517f + request_id: 1fb28be7-cda6-4029-b4da-447ef61cb61a errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/contacts/{contact_id}/companies/{id}": - delete: - summary: Detach a contact from a company + '410': + description: Contact Merged + headers: + Link: + description: 'Link to the canonical (merged-into) contact. Format: + `; rel="canonical"`' + schema: + type: string + example: '; rel="canonical"' + content: + application/json: + examples: + Contact Merged: + value: + type: error.list + request_id: 1fb28be7-cda6-4029-b4da-447ef61cb61a + errors: + - code: contact_merged + message: This contact has been merged. See the 'Link' header + for the canonical contact. + schema: + "$ref": "#/components/schemas/error" + "/contacts/{id}/archive": + post: + summary: Archive contact parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: contact_id - in: path - required: true - description: The unique identifier for the contact which is given by Intercom - example: 58a430d35458202d41b1e65b - schema: - type: string - name: id in: path + description: id + example: 63a07ddf05a32042dffac965 required: true - description: The unique identifier for the company which is given by Intercom - example: 58a430d35458202d41b1e65b schema: type: string tags: - - Companies - Contacts - operationId: detachContactFromACompany - description: You can detach a company from a single contact. + operationId: ArchiveContact + description: You can archive a single contact. responses: '200': - description: Successful - content: - application/json: - examples: - Successful: - value: - type: company - company_id: '1' - id: 6762f0a01bb69f9f2193bb44 - app_id: this_is_an_id205_that_should_be_at_least_ - name: company8 - remote_created_at: 1734537376 - created_at: 1734537376 - updated_at: 1734537377 - monthly_spend: 0 - session_count: 0 - user_count: 0 - tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] - plan: {} - custom_attributes: {} - schema: - "$ref": "#/components/schemas/company" - '404': - description: Contact Not Found - content: - application/json: - examples: - Company Not Found: - value: - type: error.list - request_id: dcfc3465-8a51-4d78-b24c-2f215d48f339 - errors: - - code: company_not_found - message: Company Not Found - Contact Not Found: - value: - type: error.list - request_id: b5a1f332-1bf1-44bd-a068-2634244b6051 - errors: - - code: not_found - message: User Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + description: successful content: application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 9bc1e0cc-5cc4-412d-8037-57e073375ab0 - errors: - - code: unauthorized - message: Access Token Invalid schema: - "$ref": "#/components/schemas/error" - "/contacts/{id}/notes": - get: - summary: List all contact notes + "$ref": "#/components/schemas/contact_archived" + "/contacts/{id}/unarchive": + post: + summary: Unarchive contact parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" - name: id in: path + description: id + example: 63a07ddf05a32042dffac965 required: true - description: The unique identifier of a contact. schema: - type: integer + type: string + tags: + - Contacts + operationId: UnarchiveContact + description: You can unarchive a single contact. + responses: + '200': + description: successful + content: + application/json: + schema: + "$ref": "#/components/schemas/contact_unarchived" + "/contacts/{id}/block": + post: + summary: Block contact + parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + description: id + example: 63a07ddf05a32042dffac965 + required: true + schema: + type: string tags: - - Notes - Contacts - operationId: listNotes - description: You can fetch a list of notes that are associated to a contact. + operationId: BlockContact + description: Block a single contact.
**Note:** conversations of the contact will also be archived during the process.
More details in [FAQ How do I block Inbox spam?](https://www.intercom.com/help/en/articles/8838656-inbox-faqs) responses: '200': - description: Successful response + description: successful content: application/json: - examples: - Successful response: - value: - type: list - data: - - type: note - id: '26' - created_at: 1733932587 - contact: - type: contact - id: 6762f0ab1bb69f9f2193bb60 - author: - type: admin - id: '991267581' - name: Ciaran122 Lee - email: admin122@email.com - away_mode_enabled: false - away_mode_reassign: false - body: "

This is a note.

" - - type: note - id: '25' - created_at: 1733846187 - contact: - type: contact - id: 6762f0ab1bb69f9f2193bb60 - author: - type: admin - id: '991267581' - name: Ciaran122 Lee - email: admin122@email.com - away_mode_enabled: false - away_mode_reassign: false - body: "

This is a note.

" - - type: note - id: '24' - created_at: 1733846187 - contact: - type: contact - id: 6762f0ab1bb69f9f2193bb60 - author: - type: admin - id: '991267581' - name: Ciaran122 Lee - email: admin122@email.com - away_mode_enabled: false - away_mode_reassign: false - body: "

This is a note.

" - total_count: 3 - pages: - type: pages - next: - page: 1 - per_page: 50 - total_pages: 1 schema: - "$ref": "#/components/schemas/note_list" - '404': - description: Contact not found + "$ref": "#/components/schemas/contact_blocked" + "/contacts/bulk": + put: + summary: Bulk update contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Contacts + operationId: BulkUpdateContacts + description: | + You can bulk update contacts by submitting an array of contact objects with the fields to update. Each contact must include an `id` field identifying the contact to update. You can also add or remove tags on each contact by including a `tags` object. + + Only the fields listed in the request schema below can be set. Any other fields in a contact object are ignored. + + The endpoint creates an async job that processes the updates in the background. Use the returned job ID with `GET /contacts/bulk/{id}` to check the job status. + + {% admonition type="info" name="Limits" %} + - Maximum of 100 contacts per request. + - You can append tasks to an existing job by including `job.id` in the request body. + - Tag application is best-effort and processed asynchronously: unknown tag IDs are skipped, and per-tag results are not returned in the job status. + {% /admonition %} + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/bulk_update_contacts_request" + examples: + successful: + summary: Successful + value: + contacts: + - id: abc123 + language_override: fr + - id: def456 + name: Updated Name + - id: ghi789 + language_override: es + name: "María García" + with_tags: + summary: Add and remove tags + value: + contacts: + - id: abc123 + name: Updated Name + tags: + add: + - id: '123' + remove: + - id: '456' + append_to_existing_job: + summary: Append to existing job + value: + contacts: + - id: abc123 + language_override: de + job: + id: job_v2_1 + responses: + '202': + description: Accepted content: application/json: examples: - Contact not found: + successful: + value: + id: job_v2_1 + type: contacts.bulk.job + state: running + created_at: 1713360000 + updated_at: 1713360060 + completed_at: + tasks: + - id: task_v2_1 + item_count: 3 + state: pending + created_at: 1713360000 + started_at: + completed_at: + url: https://api.intercom.io/contacts/bulk/job_v2_1 + schema: + "$ref": "#/components/schemas/contacts_bulk_job" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: value: type: error.list - request_id: 57055cde-3d0d-4c67-b5c9-b20b80340bf0 + request_id: 2859da57-c83f-405c-8166-240a312442a3 errors: - - code: not_found - message: User Not Found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - post: - summary: Create a note + '422': + description: Unprocessable Entity + content: + application/json: + examples: + missing_contacts: + value: + type: error.list + request_id: 2859da57-c83f-405c-8166-240a312442a3 + errors: + - code: missing_field + message: contacts field must be supplied + missing_id: + value: + type: error.list + request_id: 2859da57-c83f-405c-8166-240a312442a3 + errors: + - code: missing_field + message: contacts must be identified by id + too_many_contacts: + value: + type: error.list + request_id: 2859da57-c83f-405c-8166-240a312442a3 + errors: + - code: invalid_parameter + message: maximum number of contacts per request is 100 + schema: + "$ref": "#/components/schemas/error" + "/contacts/bulk/{id}": + get: + summary: Get a bulk update job parameters: - name: Intercom-Version in: header @@ -6848,120 +6673,75 @@ paths: "$ref": "#/components/schemas/intercom_version" - name: id in: path + description: The unique identifier for the bulk job. + example: job_v2_1 required: true - description: The unique identifier of a given contact. - example: '123' schema: - type: integer + type: string tags: - - Notes - Contacts - operationId: createNote - description: You can add a note to a single contact. + operationId: ShowBulkUpdateContactsJob + description: | + You can check the status of a bulk contact update job. The `state` field indicates the overall job progress: `pending`, `running`, `completed`, or `completed_with_errors`. responses: '200': - description: Successful response + description: successful content: application/json: examples: - Successful response: + successful: value: - type: note - id: '31' - created_at: 1734537390 - contact: - type: contact - id: 6762f0ad1bb69f9f2193bb62 - author: - type: admin - id: '991267583' - name: Ciaran124 Lee - email: admin124@email.com - away_mode_enabled: false - away_mode_reassign: false - body: "

Hello

" + id: job_v2_1 + type: contacts.bulk.job + state: completed + created_at: 1713360000 + updated_at: 1713360120 + completed_at: 1713360120 + tasks: + - id: task_v2_1 + item_count: 3 + state: completed + created_at: 1713360000 + started_at: 1713360060 + completed_at: 1713360120 + url: https://api.intercom.io/contacts/bulk/job_v2_1 schema: - "$ref": "#/components/schemas/note" - '404': - description: Contact not found + "$ref": "#/components/schemas/contacts_bulk_job" + '401': + description: Unauthorized content: application/json: examples: - Admin not found: - value: - type: error.list - request_id: 168f1bc3-d198-4797-8422-9f93fe8af5ad - errors: - - code: not_found - message: Resource Not Found - Contact not found: + Unauthorized: value: type: error.list - request_id: 6f372239-0259-428f-9943-91b8f7a92162 + request_id: 2859da57-c83f-405c-8166-240a312442a3 errors: - - code: not_found - message: User Not Found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - type: object - required: - - body - properties: - body: - type: string - description: The text of the note. - example: New note - contact_id: - type: string - description: The unique identifier of a given contact. - example: '123' - admin_id: - type: string - description: The unique identifier of a given admin. - example: '123' - examples: - successful_response: - summary: Successful response - value: - contact_id: 6762f0ad1bb69f9f2193bb62 - admin_id: 991267583 - body: Hello - admin_not_found: - summary: Admin not found - value: - contact_id: 6762f0af1bb69f9f2193bb63 - admin_id: 123 - body: Hello - contact_not_found: - summary: Contact not found - value: - contact_id: 123 - admin_id: 991267585 - body: Hello - "/contacts/{contact_id}/segments": - get: - summary: List attached segments for contact + "/conversations/{conversation_id}/tags": + post: + summary: Add tag to a conversation parameters: - - name: contact_id - in: path - description: The unique identifier for the contact which is given by Intercom - example: 63a07ddf05a32042dffac965 - required: true - schema: - type: string - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + description: conversation_id + example: '64619700005694' + required: true + schema: + type: string tags: - - Contacts - - Segments - operationId: listSegmentsForAContact - description: You can fetch a list of segments that are associated to a contact. + - Tags + - Conversations + operationId: attachTagToConversation + description: You can tag a specific conversation. This will return a tag object + for the tag that was added to the conversation. responses: '200': description: successful @@ -6970,28 +6750,27 @@ paths: examples: successful: value: - type: list - data: - - type: segment - id: 6762f0b21bb69f9f2193bb65 - name: segment - created_at: 1734537394 - updated_at: 1734537394 - person_type: user + type: tag + id: '86' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' schema: - "$ref": "#/components/schemas/contact_segments" + "$ref": "#/components/schemas/tag" '404': - description: Contact not found + description: Conversation not found content: application/json: examples: - Contact not found: + Conversation not found: value: type: error.list - request_id: 61c119c7-b2f0-4158-8457-fd53e83f936a + request_id: c6e8c74f-a354-4dfd-a5be-6061d2d26341 errors: - code: not_found - message: User Not Found + message: Conversation not found schema: "$ref": "#/components/schemas/error" '401': @@ -7002,93 +6781,106 @@ paths: Unauthorized: value: type: error.list - request_id: 0273c219-51b7-4938-95d2-19996b2e2734 + request_id: 617bb25d-4dea-4a68-ae74-2fb8f4e87b39 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/contacts/{contact_id}/subscriptions": - get: - summary: List subscriptions for a contact + requestBody: + content: + application/json: + schema: + type: object + required: + - id + - admin_id + properties: + id: + type: string + description: The unique identifier for the tag which is given by + Intercom + example: '7522907' + admin_id: + type: string + description: The unique identifier for the admin which is given + by Intercom. + example: '780' + examples: + successful: + summary: successful + value: + id: 86 + admin_id: 991267618 + conversation_not_found: + summary: Conversation not found + value: + id: 87 + admin_id: 991267620 + "/conversations/{conversation_id}/tags/{id}": + delete: + summary: Remove tag from a conversation parameters: - - name: contact_id + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id in: path - description: The unique identifier for the contact which is given by Intercom - example: 63a07ddf05a32042dffac965 + description: conversation_id + example: '64619700005694' required: true schema: type: string - - name: Intercom-Version - in: header + - name: id + in: path + description: id + example: '7522907' + required: true schema: - "$ref": "#/components/schemas/intercom_version" + type: string tags: - - Contacts - - Subscription Types - operationId: listSubscriptionsForAContact - description: | - You can fetch a list of subscription types that are attached to a contact. These can be subscriptions that a user has 'opted-in' to or has 'opted-out' from, depending on the subscription type. - This will return a list of Subscription Type objects that the contact is associated with. - - The data property will show a combined list of: - - 1.Opt-out subscription types that the user has opted-out from. - 2.Opt-in subscription types that the user has opted-in to receiving. - - **Note:** This endpoint only returns subscriptions where the contact has explicitly configured their preference. Subscriptions that are in the default state — where the contact has not made an explicit opt-in or opt-out choice — are not included in the response. + - Tags + - Conversations + operationId: detachTagFromConversation + description: You can remove tag from a specific conversation. This will return + a tag object for the tag that was removed from the conversation. responses: '200': - description: Successful + description: successful content: application/json: examples: - Successful: + successful: value: - type: list - data: - - type: subscription - id: '91' - state: live - consent_type: opt_out - default_translation: - name: Newsletters - description: Lorem ipsum dolor sit amet - locale: en - translations: - - name: Newsletters - description: Lorem ipsum dolor sit amet - locale: en - content_types: - - email - - type: subscription - id: '93' - state: live - consent_type: opt_in - default_translation: - name: Newsletters - description: Lorem ipsum dolor sit amet - locale: en - translations: - - name: Newsletters - description: Lorem ipsum dolor sit amet - locale: en - content_types: - - sms_message + type: tag + id: '89' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' schema: - "$ref": "#/components/schemas/subscription_type_list" + "$ref": "#/components/schemas/tag" '404': - description: Contact not found + description: Tag not found content: application/json: examples: - Contact not found: + Conversation not found: value: type: error.list - request_id: c9b793ad-ff39-436c-80c9-db6f24d0d444 + request_id: 84db22c5-0fef-465a-a909-2643d8a22c69 errors: - code: not_found - message: User Not Found + message: Conversation not found + Tag not found: + value: + type: error.list + request_id: 1fe3e9ec-6a5b-4abc-b51c-a515f77d9577 + errors: + - code: tag_not_found + message: Tag not found schema: "$ref": "#/components/schemas/error" '401': @@ -7099,81 +6891,288 @@ paths: Unauthorized: value: type: error.list - request_id: 7323b97b-9ba4-4c54-946c-38cecea65b3c + request_id: df73b7b4-2352-44fd-8d14-4ea8536ad138 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - post: - summary: Add subscription to a contact - tags: - - Subscription Types - - Contacts + requestBody: + content: + application/json: + schema: + type: object + required: + - admin_id + properties: + admin_id: + type: string + description: The unique identifier for the admin which is given + by Intercom. + example: '123' + examples: + successful: + summary: successful + value: + admin_id: 991267622 + conversation_not_found: + summary: Conversation not found + value: + admin_id: 991267624 + tag_not_found: + summary: Tag not found + value: + admin_id: 991267625 + "/conversations": + get: + summary: List all conversations parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: contact_id - in: path - description: The unique identifier for the contact which is given by Intercom - example: 63a07ddf05a32042dffac965 - required: true + - name: per_page + in: query + schema: + type: integer + default: 20 + maximum: 150 + required: false + description: How many results per page + - name: starting_after + in: query + required: false + description: String used to get the next page of conversations. schema: type: string - operationId: attachSubscriptionTypeToContact + - name: include_monitors + in: query + required: false + description: If set to true, the response will include a `monitor_evaluations` array on each conversation with any QA monitor results that flagged it. + example: true + schema: + type: boolean + default: false + - name: include_scorecards + in: query + required: false + description: If set to true, the response will include a `scorecards` array on each conversation with any QA scorecard results. + example: true + schema: + type: boolean + default: false + tags: + - Conversations + operationId: listConversations description: | - You can add a specific subscription to a contact. In Intercom, we have two different subscription types based on user consent - opt-out and opt-in: + You can fetch a list of all conversations. - 1.Attaching a contact to an opt-out subscription type will opt that user out from receiving messages related to that subscription type. + You can optionally request the result page size and the cursor to start after to fetch the result. + {% admonition type="warning" name="Pagination" %} + You can use pagination to limit the number of results returned. The default is `20` results per page. + See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#pagination-for-list-apis) for more details on how to use the `starting_after` param. + {% /admonition %} + responses: + '200': + description: successful + content: + application/json: + examples: + successful: + value: + type: conversation.list + pages: + type: pages + page: 1 + per_page: 20 + total_pages: 1 + total_count: 1 + conversations: + - type: conversation + id: '471' + created_at: 1734537460 + updated_at: 1734537460 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918320' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267628' + name: Ciaran166 Lee + email: admin166@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f0f31bb69f9f2193bb8b + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + with QA evaluations: + summary: Response with `include_monitors=true` and `include_scorecards=true` + value: + type: conversation.list + pages: + type: pages + page: 1 + per_page: 20 + total_pages: 1 + total_count: 1 + conversations: + - type: conversation + id: '601' + created_at: 1734537700 + updated_at: 1734537760 + title: + open: true + state: open + read: true + priority: none + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + ai_agent_participated: false + monitor_evaluations: + - monitor_id: '12345' + monitor_name: Customer complaint handling + monitor_type: prompt + result: flagged + explanation: The customer mentioned wanting a refund without resolution. + evaluated_at: 1734537760 + scorecards: + - scorecard_id: '67890' + scorecard_version_id: '67891' + name: Standard QA Review + scorecard_type: human + passed: true + score: 0.85 + ai_score: 0.9 + evaluated_at: 1734537760 + reviewed_teammate: + type: admin + admin_id: '991267715' + evaluators: + - evaluator_id: '54321' + result: + value: pass + source: ai + reasoning: The agent acknowledged the issue and resolved it within the same response. + schema: + "$ref": "#/components/schemas/conversation_list" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b14d75ab-7d26-4191-b33f-77ca0a4d4ede + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 591a0c2f-78b3-41bb-bfa7-f1fae15107b9 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + post: + summary: Creates a conversation + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Conversations + operationId: createConversation + description: |+ + 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. - 2.Attaching a contact to an opt-in subscription type will opt that user in to receiving messages related to that subscription type. + {% admonition type="info" name="Sending for visitors" %} + 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. + {% /admonition %} + + This will return the Message model that has been created. - This will return a subscription type model for the subscription type that was added to the contact. responses: '200': - description: Successful + description: conversation created content: application/json: examples: - Successful: + conversation created: value: - type: subscription - id: '106' - state: live - consent_type: opt_in - default_translation: - name: Newsletters - description: Lorem ipsum dolor sit amet - locale: en - translations: - - name: Newsletters - description: Lorem ipsum dolor sit amet - locale: en - content_types: - - sms_message + type: user_message + id: '403918330' + created_at: 1734537501 + body: Hello there + message_type: inapp + conversation_id: '499' schema: - "$ref": "#/components/schemas/subscription_type" + allOf: + - "$ref": "#/components/schemas/message" + required: + - conversation_id '404': - description: Resource not found + description: Contact Not Found content: application/json: examples: - Contact not found: + Contact Not Found: value: type: error.list - request_id: 0c2871af-abed-4bce-a5c5-77efbe721711 + request_id: d7eb553e-74ae-4341-820b-5d38a94d4a99 errors: - code: not_found message: User Not Found - Resource not found: - value: - type: error.list - request_id: 2774db46-34d9-4925-a24d-8203d4a39f65 - errors: - - code: not_found - message: Resource Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -7184,803 +7183,524 @@ paths: Unauthorized: value: type: error.list - request_id: f615465d-fd5f-4d68-8498-389130b897e4 + request_id: 68e42c33-8220-48ea-906f-75584c3ec440 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: dcf1b373-3e66-4026-a987-98c16f00a908 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: content: application/json: schema: - type: object - required: - - id - - consent_type - properties: - id: - type: string - description: The unique identifier for the subscription which is - given by Intercom - example: '37846' - consent_type: - type: string - description: The consent_type of a subscription, opt_out or opt_in. - example: opt_in + "$ref": "#/components/schemas/create_conversation_request" examples: - successful: - summary: Successful + conversation_created: + summary: conversation created value: - id: 106 - consent_type: opt_in + from: + type: user + id: 6762f11b1bb69f9f2193bba3 + body: Hello there + brand_id: "123" contact_not_found: - summary: Contact not found - value: - id: 110 - consent_type: opt_in - resource_not_found: - summary: Resource not found + summary: Contact Not Found value: - id: invalid_id - consent_type: opt_in - "/contacts/{contact_id}/subscriptions/{id}": - delete: - summary: Remove subscription from a contact - tags: - - Subscription Types - - Contacts + from: + type: user + id: 123_doesnt_exist + body: Hello there + "/conversations/{id}": + get: + summary: Retrieve a conversation parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: contact_id - in: path - description: The unique identifier for the contact which is given by Intercom - example: 63a07ddf05a32042dffac965 - required: true - schema: - type: string - name: id in: path - description: The unique identifier for the subscription type which is given - by Intercom - example: '37846' required: true + description: The id of the conversation to target + example: 123 + schema: + type: integer + - name: display_as + in: query + required: false + description: Set to plaintext to retrieve conversation messages in plain text. This affects both the body and subject fields. Inline links are rendered as `label (url)`, preserving the link URL alongside the visible text. + example: plaintext schema: type: string - operationId: detachSubscriptionTypeToContact - description: You can remove a specific subscription from a contact. This will - return a subscription type model for the subscription type that was removed - from the contact. - responses: - '200': - description: Successful - content: - application/json: - examples: - Successful: - value: - type: subscription - id: '122' - state: live - consent_type: opt_in - default_translation: - name: Newsletters - description: Lorem ipsum dolor sit amet - locale: en - translations: - - name: Newsletters - description: Lorem ipsum dolor sit amet - locale: en - content_types: - - sms_message - schema: - "$ref": "#/components/schemas/subscription_type" - '404': - description: Resource not found - content: - application/json: - examples: - Contact not found: - value: - type: error.list - request_id: 82b37940-b43f-46ee-a492-11543a317c97 - errors: - - code: not_found - message: User Not Found - Resource not found: - value: - type: error.list - request_id: c18422ca-5454-42af-9e1d-dd92066e6e9d - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: c7de741d-dc8f-49b1-8cbe-791668ade76c - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/contacts/{contact_id}/tags": - get: - summary: List tags attached to a contact - tags: - - Contacts - - Tags - parameters: - - name: Intercom-Version - in: header + - name: include_translations + in: query + required: false + description: If set to true, conversation parts will be translated to the detected language of the conversation. + example: true schema: - "$ref": "#/components/schemas/intercom_version" - - name: contact_id - in: path - description: The unique identifier for the contact which is given by Intercom - example: 63a07ddf05a32042dffac965 - required: true + type: boolean + - name: include_email_history + in: query + required: false + description: If set to true, the source of the conversation will include the email history. + example: true schema: - type: string - operationId: listTagsForAContact - description: You can fetch a list of all tags that are attached to a specific - contact. + type: boolean + - name: include_monitors + in: query + required: false + description: If set to true, the response will include a `monitor_evaluations` array with any QA monitor results that flagged this conversation. + example: true + schema: + type: boolean + default: false + - name: include_scorecards + in: query + required: false + description: If set to true, the response will include a `scorecards` array with any QA scorecard results for this conversation. + example: true + schema: + type: boolean + default: false + tags: + - Conversations + operationId: retrieveConversation + description: |2 + + You can fetch the details of a single conversation. + + This will return a single Conversation model with all its conversation parts. + + {% admonition type="warning" name="Hard limit of 500 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. + {% /admonition %} + + For AI agent conversation metadata, please note that you need to have the agent enabled in your workspace, which is a [paid feature](https://www.intercom.com/help/en/articles/8205718-fin-resolutions#h_97f8c2e671). responses: '200': - description: successful + description: conversation found content: application/json: examples: - successful: + conversation found: value: - type: list - data: - - type: tag - id: '80' - name: Manual tag - applied_at: 1663597223 - applied_by: + type: conversation + id: '503' + created_at: 1734537511 + updated_at: 1734537511 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918334' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: type: admin - id: '456' - schema: - "$ref": "#/components/schemas/tag_list" - '404': - description: Contact not found - content: - application/json: - examples: - Contact not found: - value: - type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 - errors: - - code: not_found - message: User Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: ca3c5e6e-c743-428b-aa8a-ac371a50cc39 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - post: - summary: Add tag to a contact - tags: - - Tags - - Contacts - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: contact_id - in: path - description: The unique identifier for the contact which is given by Intercom - example: 63a07ddf05a32042dffac965 - required: true - schema: - type: string - operationId: attachTagToContact - description: You can tag a specific contact. This will return a tag object for - the tag that was added to the contact. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: tag - id: '81' - name: Manual tag - applied_at: 1663597223 - applied_by: - type: admin - id: '456' - schema: - "$ref": "#/components/schemas/tag" - '404': - description: Tag not found - content: - application/json: - examples: - Contact not found: - value: - type: error.list - request_id: f22a7847-ee33-449f-80c0-707efd295a53 - errors: - - code: not_found - message: User Not Found - Tag not found: - value: - type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: + id: '991267645' + name: Ciaran176 Lee + email: admin176@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1261bb69f9f2193bba7 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: + - type: tag + id: '123456' + name: Test tag + applied_at: 1663597223 + applied_by: + type: contact + id: '1a2b3c' + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: 1 + part_type: comment + body:

Okay!

+ created_at: 1663597223 + updated_at: 1663597260 + notified_at: 1663597260 + assigned_to: + type: contact + id: '1a2b3c' + author: + type: admin + id: '274' + name: Operator + email: operator+abcd1234@intercom.io + attachments: [] + external_id: 'abcd1234' + redacted: false + email_message_metadata: null + state: open + tags: + - type: tag + id: '123456' + name: Test tag + event_details: + app_package_code: null + - type: conversation_part + id: 2 + part_type: custom_action_started + body: + created_at: 1740141842 + updated_at: 1740141842 + notified_at: 1740141842 + assigned_to: + author: + type: admin + id: '274' + name: Jamie Oliver + email: jamie+abcd1234@intercom.io + attachments: [] + external_id: + redacted: false + email_message_metadata: null + state: open + tags: [] + event_details: + action: + name: Jira Create Issue + app_package_code: test-integration + - type: conversation_part + id: 3 + part_type: conversation_attribute_updated_by_admin + body: + created_at: 1740141851 + updated_at: 1740141851 + notified_at: 1740141851 + assigned_to: + author: + type: bot + id: '278' + name: Fin + email: operator+abcd1234@intercom.io + attachments: [] + external_id: + redacted: false + email_message_metadata: null + state: open + tags: [] + event_details: + attribute: + name: jira_issue_key + value: + name: PROJ-007 + app_package_code: null + - type: conversation_part + id: 4 + part_type: custom_action_finished + body: + created_at: 1740141857 + updated_at: 1740141857 + notified_at: 1740141857 + assigned_to: + author: + type: admin + id: '274' + name: Jamie Oliver + email: jamie+abcd1234@intercom.io + attachments: [] + external_id: + redacted: false + email_message_metadata: null + state: closed + tags: [] + event_details: + action: + name: Jira Create Issue + result: success + app_package_code: null + total_count: 4 + email conversation with history found: value: - type: error.list - request_id: 9b1c9966-caeb-485a-8419-d707fd472c63 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - type: object - required: - - id - properties: - id: - type: string - description: The unique identifier for the tag which is given by - Intercom - example: '7522907' - examples: - successful: - summary: successful - value: - id: 81 - contact_not_found: - summary: Contact not found - value: - id: 82 - tag_not_found: - summary: Tag not found - value: - id: '123' - "/contacts/{contact_id}/tags/{id}": - delete: - summary: Remove tag from a contact - tags: - - Tags - - Contacts - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: contact_id - in: path - description: The unique identifier for the contact which is given by Intercom - example: 63a07ddf05a32042dffac965 - required: true - schema: - type: string - - name: id - in: path - description: The unique identifier for the tag which is given by Intercom - example: '7522907' - required: true - schema: - type: string - operationId: detachTagFromContact - description: You can remove tag from a specific contact. This will return a - tag object for the tag that was removed from the contact. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: tag - id: '84' - name: Manual tag - applied_at: 1663597223 - applied_by: - type: admin - id: '456' - schema: - "$ref": "#/components/schemas/tag" - '404': - description: Tag not found - content: - application/json: - examples: - Contact not found: - value: - type: error.list - request_id: b3d41080-5b35-42b8-8584-31e4660d355f - errors: - - code: not_found - message: User Not Found - Tag not found: - value: - type: error.list - request_id: '02871f7a-860e-433a-8545-6a73fbbe5e22' - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 491beaa4-a452-4940-85e0-498c0ca5528d - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/contacts/{id}": - put: - summary: Update a contact - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - description: id - example: 63a07ddf05a32042dffac965 - required: true - schema: - type: string - - name: include_merge_history - in: query - description: Pass `true` to include the contact's merge history in the response. - Only returned for contacts with a `user` role. - required: false - schema: - type: boolean - default: false - tags: - - Contacts - - Custom Object Instances - operationId: UpdateContact - description: | - You can update an existing contact (ie. user or lead). - - {% admonition type="info" %} - This endpoint handles both **contact updates** and **custom object associations**. - - See _`update a contact with an association to a custom object instance`_ in the request/response examples to see the custom object association format. - {% /admonition %} - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: contact - id: 6762f0cd1bb69f9f2193bb7c - workspace_id: this_is_an_id279_that_should_be_at_least_ - external_id: '70' - role: user - email: joebloggs@intercom.io - phone: - formatted_phone: - name: joe bloggs - avatar: - owner_id: - social_profiles: - type: list - data: [] - has_hard_bounced: false - marked_email_as_spam: false - unsubscribed_from_emails: false - created_at: 1734537421 - updated_at: 1734537422 - signed_up_at: 1734537421 - last_seen_at: - last_replied_at: - last_contacted_at: - last_email_opened_at: - last_email_clicked_at: - language_override: - browser: - browser_version: - browser_language: - os: - location: - type: location - country: - region: - city: - country_code: - continent_code: - android_app_name: - android_app_version: - android_device: - android_os_version: - android_sdk_version: - android_last_seen_at: - ios_app_name: - ios_app_version: - ios_device: - ios_os_version: - ios_sdk_version: - ios_last_seen_at: - custom_attributes: {} + type: conversation + id: '504' + created_at: 1774370019 + updated_at: 1774370019 + waiting_since: 1774370020 + snoozed_until: null + source: + type: email + id: '403918334' + delivered_as: customer_initiated + subject: '

Re: Bug query

' + body: '

This is the message body

' + recipients: + - type: to + email: testing-workspace@email.com + reply_to: + - email: replies@example.com + name: Support Team + author: + type: lead + id: '991267645' + name: Ciaran176 Lee + email: admin176@email.com + attachments: [] + url: null + redacted: false + email_message_metadata: + message_id: 'abc-123@mail.example.com' + subject: 'Re: Bug query' + email_address_headers: + - type: from + name: User Name + email_address: user@example.com + - type: to + name: Another Name + email_address: anotheruser@example.com + history: '
On Jan 28, wrote:
Previous thread
' + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1261bb69f9f2193bba7 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false tags: + type: tag.list + tags: + - type: tag + id: '123456' + name: Test tag + applied_at: 1663597223 + applied_by: + type: contact + id: '1a2b3c' + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: type: list data: [] - url: "/contacts/6762f0cd1bb69f9f2193bb7c/tags" - total_count: 0 - has_more: false - notes: - type: list - data: [] - url: "/contacts/6762f0cd1bb69f9f2193bb7c/notes" - total_count: 0 - has_more: false - companies: - type: list - data: [] - url: "/contacts/6762f0cd1bb69f9f2193bb7c/companies" total_count: 0 has_more: false - opted_out_subscription_types: - type: list - data: [] - url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" - total_count: 0 - has_more: false - opted_in_subscription_types: - type: list - data: [] - url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" - total_count: 0 - has_more: false - utm_campaign: - utm_content: - utm_medium: - utm_source: - utm_term: - referrer: - enabled_push_messaging: - update a contact with an association to a custom object instance: - value: - type: contact - id: 6762f0cd1bb69f9f2193bb7c - workspace_id: this_is_an_id279_that_should_be_at_least_ - external_id: '70' - role: user - email: joebloggs@intercom.io - phone: - formatted_phone: - name: joe bloggs - avatar: - owner_id: - social_profiles: - type: list - data: [] - has_hard_bounced: false - marked_email_as_spam: false - unsubscribed_from_emails: false - created_at: 1734537421 - updated_at: 1734537422 - signed_up_at: 1734537421 - last_seen_at: - last_replied_at: - last_contacted_at: - last_email_opened_at: - last_email_clicked_at: - language_override: - browser: - browser_version: - browser_language: - os: - location: - type: location - country: - region: - city: - country_code: - continent_code: - android_app_name: - android_app_version: - android_device: - android_os_version: - android_sdk_version: - android_last_seen_at: - ios_app_name: - ios_app_version: - ios_device: - ios_os_version: - ios_sdk_version: - ios_last_seen_at: - custom_attributes: - order: - type: Order.list - instances: - - id: '21' - external_id: '123' - external_created_at: 1392036272 - external_updated_at: 1392036272 - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - type: Order - tags: - type: list - data: [] - url: "/contacts/6762f0cd1bb69f9f2193bb7c/tags" - total_count: 0 - has_more: false - notes: - type: list - data: [] - url: "/contacts/6762f0cd1bb69f9f2193bb7c/notes" - total_count: 0 - has_more: false - companies: - type: list - data: [] - url: "/contacts/6762f0cd1bb69f9f2193bb7c/companies" - total_count: 0 - has_more: false - opted_out_subscription_types: - type: list - data: [] - url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" - total_count: 0 - has_more: false - opted_in_subscription_types: - type: list - data: [] - url: "/contacts/6762f0cd1bb69f9f2193bb7c/subscriptions" - total_count: 0 - has_more: false - utm_campaign: - utm_content: - utm_medium: - utm_source: - utm_term: - referrer: - enabled_push_messaging: - schema: - allOf: - - "$ref": "#/components/schemas/contact" - properties: - enabled_push_messaging: - type: boolean - nullable: true - description: If the user has enabled push messaging. - example: true - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: 1 + part_type: comment + body:

Okay!

+ created_at: 1663597223 + updated_at: 1663597260 + notified_at: 1663597260 + assigned_to: + type: contact + id: '1a2b3c' + author: + type: admin + id: '274' + name: Operator + email: operator+abcd1234@intercom.io + attachments: [] + external_id: 'abcd1234' + redacted: false + email_message_metadata: null + state: open + tags: + - type: tag + id: '123456' + name: Test tag + event_details: + app_package_code: null + - type: conversation_part + id: 2 + part_type: custom_action_started + body: + created_at: 1740141842 + updated_at: 1740141842 + notified_at: 1740141842 + assigned_to: + author: + type: admin + id: '274' + name: Jamie Oliver + email: jamie+abcd1234@intercom.io + attachments: [] + external_id: + redacted: false + email_message_metadata: null + state: open + tags: [] + event_details: + action: + name: Jira Create Issue + app_package_code: test-integration + - type: conversation_part + id: 3 + part_type: conversation_attribute_updated_by_admin + body: + created_at: 1740141851 + updated_at: 1740141851 + notified_at: 1740141851 + assigned_to: + author: + type: bot + id: '278' + name: Fin + email: operator+abcd1234@intercom.io + attachments: [] + external_id: + redacted: false + email_message_metadata: null + state: open + tags: [] + event_details: + attribute: + name: jira_issue_key + value: + name: PROJ-007 + app_package_code: null + - type: conversation_part + id: 4 + part_type: custom_action_finished + body: + created_at: 1740141857 + updated_at: 1740141857 + notified_at: 1740141857 + assigned_to: + author: + type: admin + id: '274' + name: Jamie Oliver + email: jamie+abcd1234@intercom.io + attachments: [] + external_id: + redacted: false + email_message_metadata: null + state: closed + tags: [] + event_details: + action: + name: Jira Create Issue + result: success + app_package_code: null + total_count: 4 + with QA evaluations: + summary: Response with `include_monitors=true` and `include_scorecards=true` value: - type: error.list - request_id: 89ce96d9-aae9-4eec-ace2-d68cc4f74879 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - oneOf: - - "$ref": "#/components/schemas/update_contact_request" - examples: - successful: - summary: successful - value: - email: joebloggs@intercom.io - name: joe bloggs - update_a_contact_with_an_association_to_a_custom_object_instance: - summary: update a contact with an association to a custom object - instance - value: - custom_attributes: - order: - - '21' - get: - summary: Get a contact - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - description: id - example: 63a07ddf05a32042dffac965 - required: true - schema: - type: string - - name: include_merge_history - in: query - description: Pass `true` to include the contact's merge history in the response. - Only returned for contacts with a `user` role. - required: false - schema: - type: boolean - default: false - tags: - - Contacts - operationId: ShowContact - description: | - You can fetch the details of a single contact. - - {% admonition type="info" name="Merged contacts return 410 Gone" %} - If a contact has been merged into another contact via the Merge endpoint (`POST /contacts/merge`), requesting it by its original ID will return **HTTP 410 Gone** with a `Link` header pointing to the canonical (merged-into) contact. - - **Response headers:** - ``` - Link: ; rel="canonical" - ``` - - **Response body:** - ```json - { - "type": "error.list", - "errors": [{ "code": "contact_merged", "message": "This contact has been merged. See the 'Link' header for the canonical contact." }] - } - ``` - - The `Link` header contains the path to the final merge target, resolving multi-hop merge chains (up to 3 hops). - {% /admonition %} - responses: - '200': - description: successful + type: conversation + id: '601' + created_at: 1734537700 + updated_at: 1734537760 + title: + open: true + state: open + read: true + priority: none + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + ai_agent_participated: false + monitor_evaluations: + - monitor_id: '12345' + monitor_name: Customer complaint handling + monitor_type: prompt + result: flagged + explanation: The customer mentioned wanting a refund without resolution. + evaluated_at: 1734537760 + scorecards: + - scorecard_id: '67890' + scorecard_version_id: '67891' + name: Standard QA Review + scorecard_type: human + passed: true + score: 0.85 + ai_score: 0.9 + evaluated_at: 1734537760 + reviewed_teammate: + type: admin + admin_id: '991267715' + evaluators: + - evaluator_id: '54321' + result: + value: pass + source: ai + reasoning: The agent acknowledged the issue and resolved it within the same response. + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found content: application/json: examples: - successful: + Not found: value: - type: contact - id: 6762f0d01bb69f9f2193bb7d - workspace_id: this_is_an_id283_that_should_be_at_least_ - external_id: '70' - role: user - email: joe@bloggs.com - phone: - formatted_phone: - name: Joe Bloggs - avatar: - owner_id: - social_profiles: - type: list - data: [] - has_hard_bounced: false - marked_email_as_spam: false - unsubscribed_from_emails: false - created_at: 1734537424 - updated_at: 1734537424 - signed_up_at: 1734537424 - last_seen_at: - last_replied_at: - last_contacted_at: - last_email_opened_at: - last_email_clicked_at: - language_override: - browser: - browser_version: - browser_language: - os: - location: - type: location - country: - region: - city: - country_code: - continent_code: - android_app_name: - android_app_version: - android_device: - android_os_version: - android_sdk_version: - android_last_seen_at: - ios_app_name: - ios_app_version: - ios_device: - ios_os_version: - ios_sdk_version: - ios_last_seen_at: - custom_attributes: {} - tags: - type: list - data: [] - url: "/contacts/6762f0d01bb69f9f2193bb7d/tags" - total_count: 0 - has_more: false - notes: - type: list - data: [] - url: "/contacts/6762f0d01bb69f9f2193bb7d/notes" - total_count: 0 - has_more: false - companies: - type: list - data: [] - url: "/contacts/6762f0d01bb69f9f2193bb7d/companies" - total_count: 0 - has_more: false - opted_out_subscription_types: - type: list - data: [] - url: "/contacts/6762f0d01bb69f9f2193bb7d/subscriptions" - total_count: 0 - has_more: false - opted_in_subscription_types: - type: list - data: [] - url: "/contacts/6762f0d01bb69f9f2193bb7d/subscriptions" - total_count: 0 - has_more: false - utm_campaign: - utm_content: - utm_medium: - utm_source: - utm_term: - referrer: - enabled_push_messaging: + type: error.list + request_id: 8c288c4f-b699-4209-9de4-064398f02785 + errors: + - code: not_found + message: Resource Not Found schema: - allOf: - - "$ref": "#/components/schemas/contact" - properties: - enabled_push_messaging: - type: boolean - nullable: true - description: If the user has enabled push messaging. - example: true + "$ref": "#/components/schemas/error" '401': description: Unauthorized content: @@ -7989,36 +7709,28 @@ paths: Unauthorized: value: type: error.list - request_id: 45b30bd1-75d2-40cc-bb39-74ac133a2836 + request_id: 1350c241-0f22-48ca-bab9-169080340870 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '410': - description: Contact Merged - headers: - Link: - description: 'Link to the canonical (merged-into) contact. Format: - `; rel="canonical"`' - schema: - type: string - example: '; rel="canonical"' + '403': + description: API plan restricted content: application/json: examples: - Contact Merged: + API plan restricted: value: type: error.list - request_id: 45b30bd1-75d2-40cc-bb39-74ac133a2836 + request_id: 8b3deed3-fd8b-43d6-b6a8-428c9e17aabb errors: - - code: contact_merged - message: This contact has been merged. See the 'Link' header - for the canonical contact. + - code: api_plan_restricted + message: Active subscription needed. schema: "$ref": "#/components/schemas/error" - delete: - summary: Delete a contact + put: + summary: Update a conversation parameters: - name: Intercom-Version in: header @@ -8026,182 +7738,239 @@ paths: "$ref": "#/components/schemas/intercom_version" - name: id in: path - description: id required: true + description: The id of the conversation to target + example: 123 + schema: + type: integer + - name: display_as + in: query + required: false + description: Set to plaintext to retrieve conversation messages in plain text. This affects both the body and subject fields. Inline links are rendered as `label (url)`, preserving the link URL alongside the visible text. + example: plaintext schema: type: string tags: - - Contacts - operationId: DeleteContact - description: You can delete a single contact. - responses: - '200': - description: successful - content: - application/json: - schema: - "$ref": "#/components/schemas/contact_deleted" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: a947b2f0-23d3-419d-9ec4-cdd191cea676 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/contacts/merge": - post: - summary: Merge a lead and a user - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: include_merge_history - in: query - description: Pass `true` to include the merge history of the resulting contact - in the response. Only returned for contacts with a `user` role. - required: false - schema: - type: boolean - default: false - tags: - - Contacts - operationId: MergeContact - description: | - You can merge a contact with a `role` of `lead` into a contact with a `role` of `user`. + - Conversations + - Custom Object Instances + operationId: updateConversation + description: |2+ - {% admonition type="warning" name="Merged contacts are not retrievable via the API" %} - Once a merge is completed, the source contact (`from`) is permanently removed from the active contact list. This means: - - **GET /contacts/{id}** — Requesting the source contact by its original ID will return `410 Gone` with a `Link` header pointing to the canonical (merged-into) contact. - - **POST /contacts/search** — The source contact will not appear in search results, including queries filtered by `updated_at`. - - **GET /contacts** — The source contact will not appear in list results. + You can update an existing conversation. - Only the target contact (`into`) remains accessible. If your application stores contact IDs, update them to use the target contact's ID after a merge. + {% admonition type="info" name="Replying and other actions" %} + If you want to reply to a coveration or take an action such as assign, unassign, open, close or snooze, take a look at the reply and manage endpoints. + {% /admonition %} + + {% admonition type="info" %} + This endpoint handles both **conversation updates** and **custom object associations**. + + See _`update a conversation with an association to a custom object instance`_ in the request/response examples to see the custom object association format. + {% /admonition %} + + {% admonition type="danger" name="Breaking change: duplicate custom attribute names" %} + The `PUT /conversations/{id}` endpoint now returns a `400 INVALID_PARAMETER` error when the request includes `custom_attributes` and your workspace contains multiple non-archived conversation custom attributes with the same name. Previously, the update would silently apply to a non-deterministic attribute. + + To resolve, rename or archive the duplicate attribute so each name is unique, then retry the request. You can do this through: + + - The Conversation Attributes API — list with `GET /conversations/attributes`, then rename with `PUT /conversations/attributes/{id}` or archive with `DELETE /conversations/attributes/{id}` + - Your workspace settings (Settings → Data → Conversations) {% /admonition %} + responses: '200': - description: successful + description: update a conversation with an association to a custom object + instance content: application/json: examples: - successful: + conversation found: value: - type: contact - id: 6762f0d51bb69f9f2193bb80 - workspace_id: this_is_an_id291_that_should_be_at_least_ - external_id: '70' - role: user - email: joe@bloggs.com - phone: - formatted_phone: - name: Joe Bloggs - avatar: - owner_id: - social_profiles: - type: list - data: [] - has_hard_bounced: false - marked_email_as_spam: false - unsubscribed_from_emails: false - created_at: 1734537429 - updated_at: 1734537430 - signed_up_at: 1734537429 - last_seen_at: - last_replied_at: - last_contacted_at: - last_email_opened_at: - last_email_clicked_at: - language_override: - browser: - browser_version: - browser_language: - os: - location: - type: location - country: - region: - city: - country_code: - continent_code: - android_app_name: - android_app_version: - android_device: - android_os_version: - android_sdk_version: - android_last_seen_at: - ios_app_name: - ios_app_version: - ios_device: - ios_os_version: - ios_sdk_version: - ios_last_seen_at: - custom_attributes: {} + type: conversation + id: '507' + created_at: 1734537521 + updated_at: 1734537523 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918338' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267653' + name: Ciaran180 Lee + email: admin180@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1301bb69f9f2193bbab + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: true tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: + issue_type: Billing + priority: high + topics: {} + ticket: + linked_objects: type: list data: [] - url: "/contacts/6762f0d51bb69f9f2193bb80/tags" - total_count: 0 - has_more: false - notes: - type: list - data: [] - url: "/contacts/6762f0d51bb69f9f2193bb80/notes" - total_count: 0 - has_more: false - companies: - type: list - data: [] - url: "/contacts/6762f0d51bb69f9f2193bb80/companies" - total_count: 0 - has_more: false - opted_out_subscription_types: - type: list - data: [] - url: "/contacts/6762f0d51bb69f9f2193bb80/subscriptions" - total_count: 0 - has_more: false - opted_in_subscription_types: - type: list - data: [] - url: "/contacts/6762f0d51bb69f9f2193bb80/subscriptions" total_count: 0 has_more: false - utm_campaign: - utm_content: - utm_medium: - utm_source: - utm_term: - referrer: - enabled_push_messaging: - schema: - allOf: - - "$ref": "#/components/schemas/contact" - properties: - enabled_push_messaging: - type: boolean - nullable: true - description: If the user has enabled push messaging. - example: true - '400': - description: Bad Request - content: - application/json: - examples: - Not a duplicate: + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '129' + part_type: conversation_attribute_updated_by_admin + body: + created_at: 1734537523 + updated_at: 1734537523 + notified_at: 1734537523 + assigned_to: + author: + id: '991267654' + type: bot + name: Fin + email: operator+this_is_an_id354_that_should_be_at_least_@intercom.io + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + - type: conversation_part + id: '130' + part_type: conversation_attribute_updated_by_admin + body: + created_at: 1734537523 + updated_at: 1734537523 + notified_at: 1734537523 + assigned_to: + author: + id: '991267654' + type: bot + name: Fin + email: operator+this_is_an_id354_that_should_be_at_least_@intercom.io + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 2 + update a conversation with an association to a custom object instance: value: - type: error.list - errors: - - code: invalid_merge - message: Contacts can only be merged when they are duplicates - (matching email or phone). Pass skip_duplicate_validation=true - to override this check. + type: conversation + id: '508' + created_at: 1734537525 + updated_at: 1734537525 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918339' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267659' + name: Ciaran185 Lee + email: admin185@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1341bb69f9f2193bbac + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: + order: + type: Order.list + instances: + - id: '21' + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + type: Order + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: [] + total_count: 0 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: de1be01d-a0d3-48a6-9ea6-9789931a6887 + errors: + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -8212,106 +7981,109 @@ paths: Unauthorized: value: type: error.list - request_id: ff328c7c-6140-48eb-84dd-bb8960b66cd0 + request_id: de63ddb2-c525-4ebf-ad38-82ed8b44c896 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 34072e07-6b70-4f59-96bf-3106a3563a24 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" requestBody: content: application/json: schema: - "$ref": "#/components/schemas/merge_contacts_request" + "$ref": "#/components/schemas/update_conversation_request" examples: - successful: - summary: successful + conversation_found: + summary: conversation found value: - from: 6762f0d51bb69f9f2193bb7f - into: 6762f0d51bb69f9f2193bb80 - skip duplicate validation: - summary: skip duplicate validation + read: true + title: new conversation title + custom_attributes: + issue_type: Billing + priority: high + update_a_conversation_with_an_association_to_a_custom_object_instance: + summary: update a conversation with an association to a custom object + instance value: - from: 6762f0d51bb69f9f2193bb7f - into: 6762f0d51bb69f9f2193bb80 - skip_duplicate_validation: true - "/contacts/merge/preview": - post: - summary: Preview a contact merge + custom_attributes: + order: + - '21' + not_found: + summary: Not found + value: + read: true + title: new conversation title + custom_attributes: + issue_type: Billing + priority: high + delete: + summary: Delete a conversation parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + description: id + required: true + schema: + type: integer + - name: retain_metrics + in: query + required: false + description: If true (default), deletes the conversation while retaining reporting + data. If false, deletes the conversation and all associated reporting data. + Setting to false requires the `delete_conversations_and_metrics` OAuth scope. + example: true + schema: + type: boolean tags: - - Contacts - operationId: PreviewMergeContact + - Conversations + operationId: deleteConversation description: | - Preview the result of merging one contact into another without applying the merge. This is a read-only dry run: it reports whether the merge is allowed and, if so, exactly what would change, **without modifying any data**. + {% admonition type="warning" name="Irreversible operation" %} + Deleting a conversation is permanent and cannot be reversed. + {% /admonition %} - Send the same `from` (a `lead`) and `into` (a `user`) contact IDs you would pass to [Merge a lead and a user](/docs/references/preview/rest-api/api.intercom.io/contacts/mergecontact). + You can delete a single conversation. The behavior depends on the `retain_metrics` parameter: - - When `allowed` is `true`, the response contains a `summary`: every attribute change (with the resulting value on the surviving contact) and the number of conversations, notes, and tags that would be reassigned. - - When `allowed` is `false`, the response contains `reasons`. Each reason has a stable `code` you can branch on and a human-readable `message` you can display. + - **With `retain_metrics=true` (default)**: Deletes the conversation while retaining reporting data. The conversation will still appear in reporting, though some data may be incomplete due to the deletion. - {% admonition type="warning" name="Previewing non-duplicate contacts" %} - By default a merge requires the two contacts to share an identifier (email, phone, or external ID). Set `skip_duplicate_validation` to `true` to preview a merge of contacts that don't — the same rule the merge endpoint enforces. - {% /admonition %} + - **With `retain_metrics=false`**: Deletes the conversation and all associated reporting data. The conversation will be completely removed from both the inbox and all reporting. - When `allowed` is `false`, `reasons[].code` is one of: + {% admonition type="info" name="Required scope for retain_metrics=false" %} + Using `retain_metrics=false` requires the `delete_conversations_and_metrics` OAuth scope. + {% /admonition %} - | code | meaning | - | --- | --- | - | `invalid_merge_role_pair` | The `from`/`into` roles aren't mergeable. `from` must be a lead and `into` a user. | - | `no_shared_identifier` | The contacts share no email, phone, or external ID. Set `skip_duplicate_validation` to preview anyway. | - | `facebook_user` | Facebook contacts can't be merged. | - | `external_lead_channel_not_allowed` | The source is an external-channel lead that isn't eligible for merging. | - | `mailing_list` | Contacts created from a mailing list can't be merged. | + For more info, see [this help center article](https://www.intercom.com/help/en/articles/13885146-deleting-a-conversation). responses: '200': description: successful content: application/json: examples: - allowed: - summary: Merge allowed - value: - allowed: true - summary: - attribute_changes: - attributes: - - field: name - outcome: adopted - from_value: Jo - new_into_value: Jo - - field: companies - outcome: merged - from_value: - - Beta - into_value: - - Acme - new_into_value: - - Acme - - Beta - - field: phone - outcome: discarded - from_value: "+1555" - into_value: "+1999" - new_into_value: "+1999" - total_count: 3 - reassignments: - conversations: 14 - tags: 3 - notes: 2 - blocked: - summary: Merge not allowed + successful: value: - allowed: false - reasons: - - code: no_shared_identifier - message: These contacts don't share a common identifier (email, phone, or external ID), so they aren't recognised as duplicates. Set skip_duplicate_validation to true to preview the merge anyway. + id: '512' + object: conversation + deleted: true schema: - "$ref": "#/components/schemas/merge_preview_response" + "$ref": "#/components/schemas/conversation_deleted" '401': description: Unauthorized content: @@ -8320,147 +8092,153 @@ paths: Unauthorized: value: type: error.list - request_id: ff328c7c-6140-48eb-84dd-bb8960b66cd0 + request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/merge_preview_request" - examples: - allowed: - summary: successful - value: - from: 6762f0d51bb69f9f2193bb7f - into: 6762f0d51bb69f9f2193bb80 - "/contacts/search": + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 7a80b950-b392-499f-85db-ea7c6c424d37 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + "/conversations/search": post: - summary: Search contacts + summary: Search conversations parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: include_merge_history + - name: include_monitors + in: query + required: false + description: If set to true, the response will include a `monitor_evaluations` array on each conversation with any QA monitor results that flagged it. + example: true + schema: + type: boolean + default: false + - name: include_scorecards in: query - description: Pass `true` to include a `merge_history` array on each contact - in the response. Only returned for contacts with a `user` role. required: false + description: If set to true, the response will include a `scorecards` array on each conversation with any QA scorecard results. + example: true schema: type: boolean default: false tags: - - Contacts - operationId: SearchContacts + - Conversations + operationId: searchConversations description: | - You can search for multiple contacts by the value of their attributes in order to fetch exactly who you want. - - To search for contacts, you need to send a `POST` request to `https://api.intercom.io/contacts/search`. + You can search for multiple conversations by the value of their attributes in order to fetch exactly which ones you want. - This will accept a query object in the body which will define your filters in order to search for contacts. + 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. {% admonition type="warning" name="Optimizing search queries" %} 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 `50` results per page. + pagination to limit the number of results returned. The default is `20` results per page and maximum is `150`. See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#example-search-conversations-request) for more details on how to use the `starting_after` param. {% /admonition %} - ### Merged Contacts - - Contacts that have been merged (via POST /contacts/merge) are excluded from search results. If a contact was recently merged into another, it will no longer appear in queries filtered by `updated_at` or any other field. Only the target contact from the merge remains searchable. - - ### Contact Creation Delay - - If a contact has recently been created, there is a possibility that it will not yet be available when searching. This means that it may not appear in the response. This delay can take a few minutes. If you need to be instantly notified it is recommended to use webhooks and iterate to see if they match your search filters. ### Nesting & Limitations 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: - * There's a limit of max 2 nested filters - * There's a limit of max 15 filters for each AND or OR group - - ### Searching for Timestamp Fields - - All timestamp fields (created_at, updated_at etc.) are filtered by UTC calendar day in Contact Search. An equality (=) query on a timestamp matches any contact whose value falls on the same UTC day, so filtering by a value the API returned reliably matches that contact regardless of your workspace's timezone. Comparisons (>, <) are evaluated at UTC day granularity. - For example, if you search for all Contacts with a created_at value greater (>) than 1577869200 (the UNIX timestamp for January 1st, 2020 9:00 AM UTC), that will be interpreted as 1577836800 (January 1st, 2020 12:00 AM UTC). The search results will then include Contacts created from January 2nd, 2020 12:00 AM UTC onwards. - If you'd like to get contacts created on January 1st, 2020 (UTC) you should search with a created_at value equal (=) to 1577836800 (January 1st, 2020 12:00 AM UTC). - This behaviour applies only to timestamps used in search queries. The search results will still contain the full UNIX timestamp and be sorted accordingly. + - There's a limit of max 2 nested filters + - There's a limit of max 15 filters for each AND or OR group ### Accepted Fields - Most key listed as part of the Contacts Model are 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"`). + Most keys listed in the conversation model are 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"`). + The `source.body` field is unique as the search will not be performed against the entire value, but instead against every element of the value separately. For example, when searching for a conversation with a `"I need support"` body - the query should contain a `=` operator with the value `"support"` for such conversation to be returned. A query with a `=` operator and a `"need support"` value will not yield a result. - | Field | Type | - | ---------------------------------- | ------------------------------ | - | id | String | - | role | String
Accepts user or lead | - | name | String | - | avatar | String | - | owner_id | Integer | - | email | String | - | email_domain | String | - | phone | String | - | formatted_phone | String | - | external_id | String | - | created_at | Date (UNIX Timestamp) | - | signed_up_at | Date (UNIX Timestamp) | - | updated_at | Date (UNIX Timestamp) | - | last_seen_at | Date (UNIX Timestamp) | - | last_contacted_at | Date (UNIX Timestamp) | - | last_replied_at | Date (UNIX Timestamp) | - | last_email_opened_at | Date (UNIX Timestamp) | - | last_email_clicked_at | Date (UNIX Timestamp) | - | language_override | String | - | browser | String | - | browser_language | String | - | os | String | - | location.country | String | - | location.region | String | - | location.city | String | - | unsubscribed_from_emails | Boolean | - | marked_email_as_spam | Boolean | - | has_hard_bounced | Boolean | - | ios_last_seen_at | Date (UNIX Timestamp) | - | ios_app_version | String | - | ios_device | String | - | ios_app_device | String | - | ios_os_version | String | - | ios_app_name | String | - | ios_sdk_version | String | - | android_last_seen_at | Date (UNIX Timestamp) | - | android_app_version | String | - | android_device | String | - | android_app_name | String | - | andoid_sdk_version | String | - | segment_id | String | - | tag_id | String | - | custom_attributes.{attribute_name} | String | + | 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 | Integer | + | team_assignee_id | Integer | + | 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 | ### Accepted Operators - {% admonition type="warning" name="Searching based on `created_at`" %} - You cannot use the `<=` or `>=` operators to search by `created_at`. - {% /admonition %} - - 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). + 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 must be in Array | - | NIN | All | Not In
Shortcut for `OR !` queries
Values must be in Array | - | > | Integer
Date (UNIX Timestamp) | Greater than | - | < | Integer
Date (UNIX Timestamp) | Lower than | - | ~ | String | Contains | - | !~ | String | Doesn't Contain | - | ^ | String | Starts With | - | $ | String | Ends With | + | 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 | responses: '200': description: successful @@ -8469,49 +8247,124 @@ paths: examples: successful: value: - type: list - data: [] - total_count: 0 + type: conversation.list pages: type: pages page: 1 per_page: 5 - total_pages: 0 - schema: - "$ref": "#/components/schemas/contact_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: + total_pages: 1 + total_count: 1 + conversations: + - type: conversation + id: '515' + created_at: 1734537546 + updated_at: 1734537546 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918346' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267691' + name: Ciaran210 Lee + email: admin210@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f14a1bb69f9f2193bbb3 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + with QA evaluations: + summary: Response with `include_monitors=true` and `include_scorecards=true` value: - type: error.list - request_id: f0dc95f1-9e46-4e8d-8150-89365c2c5195 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '400': - description: Bad Request - content: - application/json: - examples: - Invalid sort order: - value: - type: error.list - request_id: 8d6c1f0a-3b2e-4a17-9c5d-1f0e2a3b4c5d - errors: - - code: invalid_sort_order - message: "Invalid sort order 'desc'. Must be one of: ascending, descending" + type: conversation.list + pages: + type: pages + page: 1 + per_page: 5 + total_pages: 1 + total_count: 1 + conversations: + - type: conversation + id: '601' + created_at: 1734537700 + updated_at: 1734537760 + title: + open: true + state: open + read: true + priority: none + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + ai_agent_participated: false + monitor_evaluations: + - monitor_id: '12345' + monitor_name: Customer complaint handling + monitor_type: prompt + result: flagged + explanation: The customer mentioned wanting a refund without resolution. + evaluated_at: 1734537760 + scorecards: + - scorecard_id: '67890' + scorecard_version_id: '67891' + name: Standard QA Review + scorecard_type: human + passed: true + score: 0.85 + ai_score: 0.9 + evaluated_at: 1734537760 + reviewed_teammate: + type: admin + admin_id: '991267715' + evaluators: + - evaluator_id: '54321' + result: + value: pass + source: ai + reasoning: The agent acknowledged the issue and resolved it within the same response. schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/conversation_list" requestBody: content: application/json: schema: - "$ref": "#/components/schemas/contact_search_request" + "$ref": "#/components/schemas/search_request" examples: successful: summary: successful @@ -8522,186 +8375,395 @@ paths: - field: created_at operator: ">" value: '1306054154' - sort: - field: created_at - order: ascending pagination: per_page: 5 - "/contacts": - get: - summary: List all contacts + "/conversations/{id}/reply": + post: + summary: Reply to a conversation parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: include_merge_history - in: query - description: Pass `true` to include a `merge_history` array on each contact - in the response. Only returned for contacts with a `user` role. - required: false + - name: id + in: path + required: true + description: The Intercom provisioned identifier for the conversation or the + string "last" to reply to the last part of the conversation + example: 123 or "last" schema: - type: boolean - default: false + type: string tags: - - Contacts - operationId: ListContacts - description: | - You can fetch a list of all contacts (ie. users or leads) in your workspace. - {% admonition type="info" name="Merged contacts" %} - Contacts that have been merged (via POST /contacts/merge) will not appear in list results. Only the target contact from the merge remains accessible. - {% /admonition %} - {% admonition type="warning" name="Pagination" %} - You can use pagination to limit the number of results returned. The default is `50` results per page. - See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#pagination-for-list-apis) for more details on how to use the `starting_after` param. + - Conversations + operationId: replyConversation + description: |- + You can reply to a conversation with a message from an admin or on behalf of a contact, or with a note for admins. + + {% admonition type="warning" name="Bot replies to inbound email" %} + By default, bot or Operator replies to an inbound email conversation aren't sent to your customer. The reply is stored as an unnotifiable bot comment, and no `seen` receipt is generated until an email is actually delivered. + + To send these replies as outbound emails, reach out to your accounts team to enable the email-reply feature flag for your workspace. {% /admonition %} responses: '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: list - data: [] - total_count: 0 - pages: - type: pages - page: 1 - per_page: 10 - total_pages: 0 - schema: - "$ref": "#/components/schemas/contact_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - post: - summary: Create contact - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Contacts - operationId: CreateContact - description: You can create a new contact (ie. user or lead). - responses: - '200': - description: successful + description: User last conversation reply content: application/json: examples: - successful: + User reply: value: - type: contact - id: 6762f0dd1bb69f9f2193bb83 - workspace_id: this_is_an_id303_that_should_be_at_least_ - external_id: - role: user - email: joebloggs@intercom.io - phone: - formatted_phone: - name: - avatar: - owner_id: - social_profiles: - type: list - data: [] - has_hard_bounced: false - marked_email_as_spam: false - unsubscribed_from_emails: false - created_at: 1734537437 - updated_at: 1734537437 - signed_up_at: - last_seen_at: - last_replied_at: - last_contacted_at: - last_email_opened_at: - last_email_clicked_at: - language_override: - browser: - browser_version: - browser_language: - os: - location: - type: location - country: - region: - city: - country_code: - continent_code: - android_app_name: - android_app_version: - android_device: - android_os_version: - android_sdk_version: - android_last_seen_at: - ios_app_name: - ios_app_version: - ios_device: - ios_os_version: - ios_sdk_version: - ios_last_seen_at: - custom_attributes: {} + type: conversation + id: '524' + created_at: 1734537559 + updated_at: 1734537561 + waiting_since: 1734537561 + snoozed_until: + source: + type: conversation + id: '403918349' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267694' + name: Ciaran212 Lee + email: admin212@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1571bb69f9f2193bbbb + external_id: '70' + first_contact_reply: + created_at: 1734537561 + type: conversation + url: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: false tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: type: list data: [] - url: "/contacts/6762f0dd1bb69f9f2193bb83/tags" total_count: 0 has_more: false - notes: - type: list - data: [] - url: "/contacts/6762f0dd1bb69f9f2193bb83/notes" - total_count: 0 - has_more: false - companies: + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '132' + part_type: open + body: "

Thanks again :)

" + created_at: 1734537561 + updated_at: 1734537561 + notified_at: 1734537561 + assigned_to: + author: + id: 6762f1571bb69f9f2193bbbb + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Admin Reply with a Note: + value: + type: conversation + id: '525' + created_at: 1734537563 + updated_at: 1734537565 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918350' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267696' + name: Ciaran213 Lee + email: admin213@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f15b1bb69f9f2193bbbc + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: type: list data: [] - url: "/contacts/6762f0dd1bb69f9f2193bb83/companies" total_count: 0 has_more: false - opted_out_subscription_types: + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '133' + part_type: note + body: |- +

An Unordered HTML List

+
    +
  • Coffee
  • +
  • Tea
  • +
  • Milk
  • +
+

An Ordered HTML List

+
    +
  1. Coffee
  2. +
  3. Tea
  4. +
  5. Milk
  6. +
+ created_at: 1734537565 + updated_at: 1734537565 + notified_at: 1734537565 + assigned_to: + author: + id: '991267696' + type: admin + name: Ciaran213 Lee + email: admin213@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Admin Reply to send Quick Reply Options: + value: + type: conversation + id: '526' + created_at: 1734537567 + updated_at: 1734537568 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918351' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267698' + name: Ciaran214 Lee + email: admin214@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f15e1bb69f9f2193bbbd + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: type: list data: [] - url: "/contacts/6762f0dd1bb69f9f2193bb83/subscriptions" total_count: 0 has_more: false - opted_in_subscription_types: + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '134' + part_type: quick_reply + body: + created_at: 1734537568 + updated_at: 1734537568 + notified_at: 1734537568 + assigned_to: + author: + id: '991267698' + type: admin + name: Ciaran214 Lee + email: admin214@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + User last conversation reply: + value: + type: conversation + id: '527' + created_at: 1734537571 + updated_at: 1734537572 + waiting_since: 1734537572 + snoozed_until: + source: + type: conversation + id: '403918352' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267700' + name: Ciaran215 Lee + email: admin215@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1621bb69f9f2193bbbe + external_id: '70' + first_contact_reply: + created_at: 1734537572 + type: conversation + url: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: type: list data: [] - url: "/contacts/6762f0dd1bb69f9f2193bb83/subscriptions" total_count: 0 has_more: false - utm_campaign: - utm_content: - utm_medium: - utm_source: - utm_term: - referrer: - enabled_push_messaging: + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '135' + part_type: open + body: "

Thanks again :)

" + created_at: 1734537572 + updated_at: 1734537572 + notified_at: 1734537572 + assigned_to: + author: + id: 6762f1621bb69f9f2193bbbe + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 schema: - allOf: - - "$ref": "#/components/schemas/contact" - properties: - enabled_push_messaging: - type: boolean - nullable: true - description: If the user has enabled push messaging. - example: true + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: '06234918-c245-4caa-a2cc-90247983c6ff' + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" '401': description: Unauthorized content: @@ -8710,224 +8772,655 @@ paths: Unauthorized: value: type: error.list - request_id: ff2353d3-d3d6-4f20-8268-847869d01e73 + request_id: 50f1e8d1-cf1a-450c-a7b5-87a264076241 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 48ad16d0-525c-40bf-b733-89239feb70e3 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" requestBody: content: application/json: schema: - oneOf: - - "$ref": "#/components/schemas/create_contact_request" + "$ref": "#/components/schemas/reply_conversation_request" examples: - successful: - summary: successful + user_reply: + summary: User reply value: - email: joebloggs@intercom.io - "/contacts/find_by_external_id/{external_id}": - get: - summary: Get a contact by External ID + message_type: comment + type: user + intercom_user_id: 6762f1571bb69f9f2193bbbb + body: Thanks again :) + admin_note_reply: + summary: Admin Reply with a Note + value: + message_type: note + type: admin + admin_id: 991267696 + body: "

An Unordered HTML List

  • Coffee
  • + \
  • Tea
  • Milk

An Ordered HTML List

+ \
  1. Coffee
  2. Tea
  3. Milk
+ \ " + admin_quick_reply_reply: + summary: Admin Reply to send Quick Reply Options + value: + message_type: quick_reply + type: admin + admin_id: 991267698 + reply_options: + - text: 'Yes' + uuid: a5e1c524-5ddd-4c3e-9328-6bca5d6e3edb + - text: 'No' + uuid: f4a98af1-be56-4948-a57e-e1a83f8484c6 + contact_quick_reply_reply: + summary: User reply with quick reply selection + value: + message_type: quick_reply + type: user + intercom_user_id: 6762f1621bb69f9f2193bbbe + reply_options: + - text: 'Yes' + uuid: a5e1c524-5ddd-4c3e-9328-6bca5d6e3edb + user_last_conversation_reply: + summary: User last conversation reply + value: + message_type: comment + type: user + intercom_user_id: 6762f1661bb69f9f2193bbbf + body: Thanks again :) + "/conversations/{id}/parts": + post: + summary: Manage a conversation parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: external_id + - name: id in: path required: true - example: cdd29344-5e0c-4ef0-ac56-f9ba2979bc27 - description: The external ID of the user that you want to retrieve + description: The identifier for the conversation as given by Intercom. + example: '123' schema: type: string - - name: include_merge_history - in: query - description: Pass `true` to include the contact's merge history in the response. - Only returned for contacts with a `user` role. - required: false - schema: - type: boolean - default: false tags: - - Contacts - operationId: ShowContactByExternalId + - Conversations + operationId: manageConversation description: | - You can fetch the details of a single contact by external ID. Note that this endpoint only supports users and not leads. - - {% admonition type="info" name="Merged contacts return 410 Gone" %} - If the contact with this external ID has been merged into another contact, the API returns **HTTP 410 Gone** with a `Link` header pointing to the canonical (merged-into) contact. See `GET /contacts/{id}` for details on the response format. - {% /admonition %} + For managing conversations you can: + - Close a conversation + - Snooze a conversation to reopen on a future date + - Open a conversation which is `snoozed` or `closed` + - Assign a conversation to an admin and/or team. responses: '200': - description: successful + description: Assign a conversation content: application/json: examples: - successful: + Close a conversation: value: - type: contact - id: 6762f0df1bb69f9f2193bb84 - workspace_id: this_is_an_id307_that_should_be_at_least_ - external_id: '70' - role: user - email: joe@bloggs.com - phone: - formatted_phone: - name: Joe Bloggs - avatar: - owner_id: - social_profiles: - type: list - data: [] - has_hard_bounced: false - marked_email_as_spam: false - unsubscribed_from_emails: false - created_at: 1734537439 - updated_at: 1734537439 - signed_up_at: 1734537439 - last_seen_at: - last_replied_at: - last_contacted_at: - last_email_opened_at: - last_email_clicked_at: - language_override: - browser: - browser_version: - browser_language: - os: - location: - type: location - country: - region: - city: - country_code: - continent_code: - android_app_name: - android_app_version: - android_device: - android_os_version: - android_sdk_version: - android_last_seen_at: - ios_app_name: - ios_app_version: - ios_device: - ios_os_version: - ios_sdk_version: - ios_last_seen_at: - custom_attributes: {} + type: conversation + id: '531' + created_at: 1734537582 + updated_at: 1734537584 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918356' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267708' + name: Ciaran219 Lee + email: admin219@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f16e1bb69f9f2193bbc2 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: false + state: closed + read: false tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: type: list data: [] - url: "/contacts/6762f0df1bb69f9f2193bb84/tags" total_count: 0 has_more: false - notes: - type: list - data: [] - url: "/contacts/6762f0df1bb69f9f2193bb84/notes" - total_count: 0 - has_more: false - companies: + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '136' + part_type: close + body: "

Goodbye :)

" + created_at: 1734537584 + updated_at: 1734537584 + notified_at: 1734537584 + assigned_to: + author: + id: '991267708' + type: admin + name: Ciaran219 Lee + email: admin219@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Snooze a conversation: + value: + type: conversation + id: '532' + created_at: 1734537586 + updated_at: 1734537587 + waiting_since: + snoozed_until: 1734541187 + source: + type: conversation + id: '403918357' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267710' + name: Ciaran220 Lee + email: admin220@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1711bb69f9f2193bbc3 + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: snoozed + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: type: list data: [] - url: "/contacts/6762f0df1bb69f9f2193bb84/companies" total_count: 0 has_more: false - opted_out_subscription_types: + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '137' + part_type: snoozed + body: + created_at: 1734537587 + updated_at: 1734537587 + notified_at: 1734537587 + assigned_to: + author: + id: '991267710' + type: admin + name: Ciaran220 Lee + email: admin220@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Open a conversation: + value: + type: conversation + id: '537' + created_at: 1734537587 + updated_at: 1734537601 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918358' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267712' + name: Ciaran221 Lee + email: admin221@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1781bb69f9f2193bbc8 + external_id: '74' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: true + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: '' + custom_attributes: {} + topics: {} + ticket: + linked_objects: type: list data: [] - url: "/contacts/6762f0df1bb69f9f2193bb84/subscriptions" total_count: 0 has_more: false - opted_in_subscription_types: + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '139' + part_type: open + body: + created_at: 1734537601 + updated_at: 1734537601 + notified_at: 1734537601 + assigned_to: + author: + id: '991267712' + type: admin + name: Ciaran221 Lee + email: admin221@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + Assign a conversation: + value: + type: conversation + id: '542' + created_at: 1734537603 + updated_at: 1734537605 + waiting_since: + snoozed_until: + source: + type: conversation + id: '403918361' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267715' + name: Ciaran223 Lee + email: admin223@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1831bb69f9f2193bbcc + external_id: '70' + first_contact_reply: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: false + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: type: list data: [] - url: "/contacts/6762f0df1bb69f9f2193bb84/subscriptions" total_count: 0 has_more: false - utm_campaign: - utm_content: - utm_medium: - utm_source: - utm_term: - referrer: - enabled_push_messaging: - schema: - allOf: - - "$ref": "#/components/schemas/contact" - properties: - enabled_push_messaging: - type: boolean - nullable: true - description: If the user has enabled push messaging. - example: true - '401': - description: Unauthorized - content: + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '140' + part_type: assign_and_reopen + body: + created_at: 1734537605 + updated_at: 1734537605 + notified_at: 1734537605 + assigned_to: + type: admin + id: '991267715' + author: + id: '991267715' + type: admin + name: Ciaran223 Lee + email: admin223@email.com + attachments: [] + external_id: + redacted: false + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found + content: + application/json: + examples: + Not found: + value: + type: error.list + request_id: e056b3c3-fae3-4a3c-9bcf-836b84efa331 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: application/json: examples: Unauthorized: value: type: error.list - request_id: 1fb28be7-cda6-4029-b4da-447ef61cb61a + request_id: 623bbbb8-f6fb-45f3-a2e2-4106ff3a4349 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '410': - description: Contact Merged - headers: - Link: - description: 'Link to the canonical (merged-into) contact. Format: - `; rel="canonical"`' - schema: - type: string - example: '; rel="canonical"' + '403': + description: API plan restricted content: application/json: examples: - Contact Merged: + API plan restricted: value: type: error.list - request_id: 1fb28be7-cda6-4029-b4da-447ef61cb61a + request_id: a57737d0-63a7-42bd-aa65-8380ef828124 errors: - - code: contact_merged - message: This contact has been merged. See the 'Link' header - for the canonical contact. + - code: api_plan_restricted + message: Active subscription needed. schema: "$ref": "#/components/schemas/error" - "/contacts/{id}/archive": - post: - summary: Archive contact + requestBody: + content: + application/json: + schema: + oneOf: + - "$ref": "#/components/schemas/close_conversation_request" + - "$ref": "#/components/schemas/snooze_conversation_request" + - "$ref": "#/components/schemas/open_conversation_request" + - "$ref": "#/components/schemas/assign_conversation_request" + examples: + close_a_conversation: + summary: Close a conversation + value: + message_type: close + type: admin + admin_id: 991267708 + body: Goodbye :) + snooze_a_conversation: + summary: Snooze a conversation + value: + message_type: snoozed + admin_id: 991267710 + snoozed_until: 1734541187 + open_a_conversation: + summary: Open a conversation + value: + message_type: open + admin_id: 991267712 + assign_a_conversation: + summary: Assign a conversation + value: + message_type: assignment + type: admin + admin_id: 991267715 + assignee_id: 991267715 + not_found: + summary: Not found + value: + message_type: close + type: admin + admin_id: 991267717 + body: Goodbye :) + "/conversations/{conversation_id}/conversation_parts/{id}": + put: + summary: Update a conversation part parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The identifier for the conversation as given by Intercom. + example: '123' + schema: + type: string - name: id in: path - description: id - example: 63a07ddf05a32042dffac965 required: true + description: The identifier for the conversation part. + example: '456' schema: type: string tags: - - Contacts - operationId: ArchiveContact - description: You can archive a single contact. + - Conversation Parts + operationId: updateConversationPart + description: | + You can update properties of a conversation part. Currently supports updating the send state of an external reply or marking a part as seen by an admin. + + {% admonition type="warning" name="Experimental" %} + This is an experimental endpoint. It requires a valid HMAC secret for authentication in addition to the standard bearer token. + {% /admonition %} responses: '200': - description: successful + description: Conversation part updated content: application/json: + examples: + Update send state: + value: + type: conversation_part + id: '456' + part_type: comment + body: "

Hello there!

" + created_at: 1734537559 + updated_at: 1734537561 + notified_at: 1734537559 + assigned_to: + author: + id: '991267694' + type: admin + name: Ciaran Lee + email: admin@email.com + attachments: [] + external_id: + external_reply_send_state: sent + Mark part as seen: + value: + type: conversation_part + id: '456' + part_type: comment + body: "

Hello there!

" + created_at: 1734537559 + updated_at: 1734537561 + notified_at: 1734537559 + assigned_to: + author: + id: '991267694' + type: admin + name: Ciaran Lee + email: admin@email.com + attachments: [] + external_id: + seen_state: + admin_seen: true schema: - "$ref": "#/components/schemas/contact_archived" - "/contacts/{id}/unarchive": + "$ref": "#/components/schemas/conversation_part" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: a3e5b8e2-1234-5678-9abc-def012345678 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: Forbidden + content: + application/json: + examples: + Forbidden: + value: + type: error.list + request_id: b4f6c9d3-2345-6789-abcd-ef0123456789 + errors: + - code: forbidden + message: Forbidden request + schema: + "$ref": "#/components/schemas/error" + '404': + description: Conversation part not found + content: + application/json: + examples: + Conversation part not found: + value: + type: error.list + request_id: c5a7d0e4-3456-789a-bcde-f01234567890 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_conversation_part_request" + examples: + update_send_state: + summary: Update send state + value: + send_state: sent + info_message: Message delivered successfully + experimental: true + secret: hmac_secret_value + mark_as_seen: + summary: Mark part as seen + value: + seen: true + admin_id: '991267694' + experimental: true + secret: hmac_secret_value + "/conversations/{id}/customers": post: - summary: Unarchive contact + summary: Attach a contact to a conversation parameters: - name: Intercom-Version in: header @@ -8935,113 +9428,48 @@ paths: "$ref": "#/components/schemas/intercom_version" - name: id in: path - description: id - example: 63a07ddf05a32042dffac965 required: true + description: The identifier for the conversation as given by Intercom. + example: '123' schema: type: string tags: - - Contacts - operationId: UnarchiveContact - description: You can unarchive a single contact. - responses: - '200': - description: successful - content: - application/json: - schema: - "$ref": "#/components/schemas/contact_unarchived" - "/contacts/{id}/block": - post: - summary: Block contact - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - description: id - example: 63a07ddf05a32042dffac965 - required: true - schema: - type: string - tags: - - Contacts - operationId: BlockContact - description: Block a single contact.
**Note:** conversations of the contact will also be archived during the process.
More details in [FAQ How do I block Inbox spam?](https://www.intercom.com/help/en/articles/8838656-inbox-faqs) + - Conversation Participants + operationId: attachContactToConversation + description: |+ + You can add participants who are contacts to a conversation, on behalf of either another contact or an admin. + + {% admonition type="warning" name="Contacts without an email" %} + 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`. + {% /admonition %} + responses: '200': - description: successful + description: Attach a contact to a conversation content: application/json: + examples: + Attach a contact to a conversation: + value: + customers: + - type: user + id: 6762f19b1bb69f9f2193bbd4 schema: - "$ref": "#/components/schemas/contact_blocked" - "/contacts/{id}/merge_history": - get: - summary: Get contact merge history - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - description: The id of the contact to fetch merge history for. - example: 63a07ddf05a32042dffac965 - required: true - schema: - type: string - - name: cursor - in: query - description: A cursor for pagination. Pass the `next_cursor` value from a - previous response to fetch the next page. - required: false - schema: - type: string - - name: per_page - in: query - description: The number of results to return per page (default 50, max 150). - required: false - schema: - type: integer - default: 50 - minimum: 1 - maximum: 150 - - name: order - in: query - description: The order to return results in. Defaults to descending. - required: false - schema: - type: string - enum: - - asc - - desc - tags: - - Contacts - operationId: ListContactMergeHistory - description: | - Retrieve the paginated list of contacts that have been merged into a given contact. - - Only available for contacts with a `user` role. Returns a `404` if the contact is not found or has a `lead` role. - responses: - '200': - description: successful + "$ref": "#/components/schemas/conversation" + '404': + description: Not found content: application/json: examples: - successful: + Not found: value: - type: list - data: - - type: merge_history - source_contact_id: 5ba682d23d7cf92bef87bfd3 - source_contact_role: lead - merged_at: 1571672154 - next_cursor: eyJpZCI6IjYyMzQ1NiJ9 - has_more: true - schema: - "$ref": "#/components/schemas/merge_history_list" + type: error.list + request_id: 86fd8b2e-7048-4fbd-9fb0-d73085d7210b + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" '401': description: Unauthorized content: @@ -9050,275 +9478,185 @@ paths: Unauthorized: value: type: error.list - request_id: 45b30bd1-75d2-40cc-bb39-74ac133a2836 + request_id: 9dc7c1a0-b818-472c-adf6-3e327f22f541 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '404': - description: Contact not found + '403': + description: API plan restricted content: application/json: examples: - Contact not found: + API plan restricted: value: type: error.list - request_id: 45b30bd1-75d2-40cc-bb39-74ac133a2836 + request_id: 99f72599-ac98-4b1e-af96-808654b6383e errors: - - code: not_found - message: Contact not found + - code: api_plan_restricted + message: Active subscription needed. schema: "$ref": "#/components/schemas/error" - "/contacts/{id}/banners": - get: - summary: List banners for a contact + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/attach_contact_to_conversation_request" + examples: + attach_a_contact_to_a_conversation: + summary: Attach a contact to a conversation + value: + admin_id: 991267731 + customer: + intercom_user_id: 6762f19b1bb69f9f2193bbd4 + not_found: + summary: Not found + value: + admin_id: 991267733 + customer: + intercom_user_id: 6762f19e1bb69f9f2193bbd5 + "/conversations/{conversation_id}/customers/{contact_id}": + delete: + summary: Detach a contact from a group conversation parameters: - - name: id + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id in: path required: true - description: The unique identifier of a contact. + description: The identifier for the conversation as given by Intercom. + example: '123' schema: type: string - - name: Intercom-Version - in: header + - name: contact_id + in: path + required: true + description: The identifier for the contact as given by Intercom. + example: '123' schema: - "$ref": "#/components/schemas/intercom_version" + type: string tags: - - Banners - - Contacts - operationId: listContactBanners - description: | - Returns the banners a contact currently matches, so you can display them on - surfaces outside the Messenger (native mobile apps, kiosks, embedded tools). + - Conversation Participants + operationId: detachContactFromConversation + description: |+ + You can remove participants who are contacts from a group conversation, on behalf of an admin. + + {% admonition type="warning" name="Removing the last participant" %} + You cannot remove the last remaining contact from a conversation. + {% /admonition %} - Each banner in the response includes a `view_id`. Use it to record a dismissal - with the dismiss endpoint. A returned banner is treated as shown: requesting - this endpoint records an impression for each banner returned, so call it at the - point you are about to display the banners, not speculatively. responses: '200': - description: Successful response + description: Detach a contact from a group conversation content: application/json: examples: - Successful response: + Detach a contact from a group conversation: value: - type: list - data: - - type: banner - id: '486517' - view_id: '645719311' - title: Hi there - body: "

Hi there!

" - style: inline - position: top - show_dismiss_button: true - action: - client_targeting: - created_at: 1780580493 - schema: - "$ref": "#/components/schemas/banner_list" + customers: + - type: user + id: 6762f1b41bb69f9f2193bbe0 + schema: + "$ref": "#/components/schemas/conversation" '404': description: Contact not found content: application/json: examples: + Conversation not found: + value: + type: error.list + request_id: 89835b60-6756-4d2a-b148-26ca0cb49f9f + errors: + - code: not_found + message: Resource Not Found Contact not found: value: type: error.list - request_id: 57055cde-3d0d-4c67-b5c9-b20b80340bf0 + request_id: ab1b9371-3185-417f-a53a-dcae35892980 errors: - code: not_found message: User Not Found schema: "$ref": "#/components/schemas/error" - "/contacts/{id}/banners/{view_id}/dismiss": - post: - summary: Dismiss a banner for a contact - parameters: - - name: id - in: path - required: true - description: The unique identifier of a contact. - schema: - type: string - - name: view_id - in: path - required: true - description: The `view_id` of the banner to dismiss, as returned by the list banners endpoint. - schema: - type: string - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Banners - - Contacts - operationId: dismissContactBanner - description: | - Records that a contact has dismissed a banner. Dismissals are shared across - surfaces, so a banner dismissed through this endpoint will also stop appearing - in the web Messenger for that contact, and vice versa. - - The request is idempotent: dismissing an already-dismissed banner succeeds and - returns the same response. - responses: - '200': - description: Successful response + '422': + description: Last customer content: application/json: examples: - Successful response: + Last customer: value: - type: banner_dismiss - view_id: '645719311' - dismissed: true + type: error.list + request_id: 8275e92f-66b7-40f9-82a8-9647ca8d7eb4 + errors: + - code: parameter_invalid + message: Removing the last customer is not allowed schema: - "$ref": "#/components/schemas/banner_dismiss" - '404': - description: Banner view not found + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized content: application/json: examples: - Banner view not found: + Unauthorized: value: type: error.list - request_id: 57055cde-3d0d-4c67-b5c9-b20b80340bf0 + request_id: 89ef64b2-d1f9-40c3-89e9-d39175d3d647 errors: - - code: not_found - message: Resource Not Found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/contacts/bulk": - put: - summary: Bulk update contacts - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Contacts - operationId: BulkUpdateContacts - description: | - You can bulk update contacts by submitting an array of contact objects with the fields to update. Each contact must include an `id` field identifying the contact to update. You can also add or remove tags on each contact by including a `tags` object. - - Only the fields listed in the request schema below can be set. Any other fields in a contact object are ignored. - - The endpoint creates an async job that processes the updates in the background. Use the returned job ID with `GET /contacts/bulk/{id}` to check the job status. - - {% admonition type="info" name="Limits" %} - - Maximum of 100 contacts per request. - - You can append tasks to an existing job by including `job.id` in the request body. - - Tag application is best-effort and processed asynchronously: unknown tag IDs are skipped, and per-tag results are not returned in the job status. - {% /admonition %} - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/bulk_update_contacts_request" - examples: - successful: - summary: Successful - value: - contacts: - - id: abc123 - language_override: fr - - id: def456 - name: Updated Name - - id: ghi789 - language_override: es - name: "María García" - with_tags: - summary: Add and remove tags - value: - contacts: - - id: abc123 - name: Updated Name - tags: - add: - - id: '123' - remove: - - id: '456' - append_to_existing_job: - summary: Append to existing job - value: - contacts: - - id: abc123 - language_override: de - job: - id: job_v2_1 - responses: - '202': - description: Accepted - content: - application/json: - examples: - successful: - value: - id: job_v2_1 - type: contacts.bulk.job - state: running - created_at: 1713360000 - updated_at: 1713360060 - completed_at: - tasks: - - id: task_v2_1 - item_count: 3 - state: pending - created_at: 1713360000 - started_at: - completed_at: - url: https://api.intercom.io/contacts/bulk/job_v2_1 - schema: - "$ref": "#/components/schemas/contacts_bulk_job" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 2859da57-c83f-405c-8166-240a312442a3 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '422': - description: Unprocessable Entity + '403': + description: API plan restricted content: application/json: examples: - missing_contacts: - value: - type: error.list - request_id: 2859da57-c83f-405c-8166-240a312442a3 - errors: - - code: missing_field - message: contacts field must be supplied - missing_id: - value: - type: error.list - request_id: 2859da57-c83f-405c-8166-240a312442a3 - errors: - - code: missing_field - message: contacts must be identified by id - too_many_contacts: + API plan restricted: value: type: error.list - request_id: 2859da57-c83f-405c-8166-240a312442a3 + request_id: 6fe4106b-967a-46ba-b1c9-9996aff6e8c3 errors: - - code: invalid_parameter - message: maximum number of contacts per request is 100 + - code: api_plan_restricted + message: Active subscription needed. schema: "$ref": "#/components/schemas/error" - "/contacts/bulk/{id}": + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/detach_contact_from_conversation_request" + examples: + detach_a_contact_from_a_group_conversation: + summary: Detach a contact from a group conversation + value: + admin_id: 991267739 + customer: + intercom_user_id: 6762f1a61bb69f9f2193bbd8 + conversation_not_found: + summary: Conversation not found + value: + admin_id: 991267742 + customer: + intercom_user_id: 6762f1b61bb69f9f2193bbe1 + contact_not_found: + summary: Contact not found + value: + admin_id: 991267745 + customer: + intercom_user_id: 6762f1c41bb69f9f2193bbe9 + last_customer: + summary: Last customer + value: + admin_id: 991267748 + customer: + intercom_user_id: 6762f1d11bb69f9f2193bbf1 + "/conversations/{id}/handling_events": get: - summary: Get a bulk update job + summary: List handling events parameters: - name: Intercom-Version in: header @@ -9326,1063 +9664,903 @@ paths: "$ref": "#/components/schemas/intercom_version" - name: id in: path - description: The unique identifier for the bulk job. - example: job_v2_1 required: true + description: The identifier for the conversation as given by Intercom. + example: '123' schema: type: string tags: - - Contacts - operationId: ShowBulkUpdateContactsJob + - Conversations + operationId: listHandlingEvents description: | - You can check the status of a bulk contact update job. The `state` field indicates the overall job progress: `pending`, `running`, `completed`, or `completed_with_errors`. + List all pause/resume events for a conversation. These events track when teammates paused or resumed handling a conversation. + + Requires the `read_conversations` OAuth scope. responses: '200': - description: successful + description: Successful response content: application/json: + schema: + "$ref": "#/components/schemas/handling_event_list" examples: - successful: + Successful response: value: - id: job_v2_1 - type: contacts.bulk.job - state: completed - created_at: 1713360000 - updated_at: 1713360120 - completed_at: 1713360120 - tasks: - - id: task_v2_1 - item_count: 3 - state: completed - created_at: 1713360000 - started_at: 1713360060 - completed_at: 1713360120 - url: https://api.intercom.io/contacts/bulk/job_v2_1 - schema: - "$ref": "#/components/schemas/contacts_bulk_job" + handling_events: + - teammate: + type: admin + id: 123 + name: Jane Example + email: jane@example.com + type: paused + timestamp: "2026-01-09T09:00:00Z" + reason: Paused + - teammate: + type: admin + id: 123 + name: Jane Example + email: jane@example.com + type: resumed + timestamp: "2026-01-09T09:10:00Z" '401': description: Unauthorized content: application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 2859da57-c83f-405c-8166-240a312442a3 - errors: - - code: unauthorized - message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/content/bulk_actions": + '404': + description: Conversation not found + content: + application/json: + schema: + "$ref": "#/components/schemas/error" + "/conversations/redact": post: - summary: Run a bulk action on Knowledge Hub content + summary: Redact a conversation part parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - - Content - operationId: bulkContentActions - description: | - Asynchronously run a bulk action over up to 1,000 Knowledge Hub content items. - - Six actions are supported: - * `publish` and `unpublish` — apply to `article_content` only. - * `delete` — permanently delete content (excludes synced sources and `external_content`). - * `set_availability` — toggle Fin AI Agent, Copilot, and Sales Agent availability flags. - * `set_audience` — manage segment membership on content. - * `update_tags` — apply and/or remove existing tags on content. Unlike the other - actions, `update_tags` addresses articles by the parent `article` id, not - `article_content`. Tags must already exist and not be archived; supply at least one of - `add_tag_ids` / `remove_tag_ids`. + - Conversation Parts + operationId: redactConversation + description: |+ + You can redact a conversation part or the source message of a conversation (as seen in the source object). - The endpoint validates the request, enqueues background work, and returns 202 with a - placeholder envelope. Items whose `type` is not in the action's allowlist are silently - dropped before processing. Articles imported from synced sources (Confluence, Notion, - Zendesk, Salesforce Knowledge, etc.) are silently skipped on `delete` — they can only be - removed by disconnecting the underlying import source. + {% admonition type="info" name="Redacting parts and messages" %} + 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. + {% /admonition %} - Requires the `write_content` OAuth scope. responses: - '202': - description: Accepted — work has been enqueued - content: - application/json: - examples: - Queued: - summary: Queued - value: - type: content_bulk_action - status: queued - schema: - "$ref": "#/components/schemas/content_bulk_action_response" - '401': - description: Unauthorized + '200': + description: Redact a conversation part content: application/json: examples: - Unauthorized: + Redact a conversation part: value: - type: error.list - request_id: 2e760b85-9020-471b-89dc-f579ec8a0104 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '403': - description: Forbidden — token is missing the `write_content` OAuth scope - content: - application/json: - schema: - "$ref": "#/components/schemas/error" - '422': - description: Invalid action, content_ids, or action-specific parameters - content: - application/json: - schema: - "$ref": "#/components/schemas/error" - requestBody: - required: true - content: - application/json: - schema: - "$ref": "#/components/schemas/content_bulk_action_request" - examples: - publish: - summary: Publish articles - value: - action: publish - content_ids: - - type: article_content - id: '12345678' - - type: article_content - id: '12345679' - unpublish: - summary: Unpublish articles - value: - action: unpublish - content_ids: - - type: article_content - id: '12345678' - delete: - summary: Delete content across types - value: - action: delete - content_ids: - - type: article_content - id: '12345678' - - type: internal_article - id: '12345679' - - type: content_snippet - id: '12345680' - set_availability: - summary: Toggle Fin AI Agent on, Copilot off - value: - action: set_availability - content_ids: - - type: article_content - id: '12345678' - availability: - ai_agent: true - copilot: false - set_audience: - summary: Add and remove segments - value: - action: set_audience - content_ids: - - type: article_content - id: '12345678' - audience: - add_segment_ids: - - 100 - remove_segment_ids: - - 200 - update_tags: - summary: Apply and remove tags on an article - value: - action: update_tags - content_ids: - - type: article - id: '12345678' - tags: - add_tag_ids: - - 100 - remove_tag_ids: - - 200 - "/content/search": - get: - summary: Search knowledge base contents - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: query - in: query - required: false - description: A free-text search term matched against the title and body of - each content item. When omitted, returns the most recent content items. - example: billing - schema: - type: string - maxLength: 500 - - name: page - in: query - required: false - description: The page number to fetch. Defaults to 1. Values below 1 are - clamped to 1. - example: 1 - schema: - type: integer - default: 1 - minimum: 1 - - name: per_page - in: query - required: false - description: Number of results per page. Defaults to 10. Maximum 50. - example: 10 - schema: - type: integer - default: 10 - minimum: 1 - maximum: 50 - - name: states - in: query - required: false - description: Filter by publication state. Accepts a comma-separated list - or repeated params. - example: published,draft - schema: - type: array - items: - type: string - enum: - - published - - draft - style: form - explode: false - - name: locales - in: query - required: false - description: Filter by locale codes (e.g. `en`, `fr`, `de`). Accepts a - comma-separated list or repeated params. - example: en,fr - schema: - type: array - items: - type: string - style: form - explode: false - - name: tag_ids - in: query - required: false - description: Filter by tag IDs. Pairs with `tag_operator` to control match - semantics. Accepts a comma-separated list or repeated params. - example: 1,2,3 - schema: - type: array - items: - type: integer - style: form - explode: false - - name: tag_operator - in: query - required: false - description: Match operator paired with `tag_ids`. `IN` returns content - matching any of the given tags; `NIN` excludes content matching any - of them. - example: IN - schema: - type: string - enum: - - IN - - NIN - - name: any_tag_ids - in: query - required: false - description: Filter by tag IDs using OR semantics — returns content - matching any of the given tags. Alternative to `tag_ids` + `tag_operator`. - Accepts a comma-separated list or repeated params. - example: 1,2,3 - schema: - type: array - items: - type: integer - style: form - explode: false - - name: folder_ids - in: query - required: false - description: Filter by folder IDs. Must be sent together with - `folder_entity_type`. Accepts a comma-separated list or repeated params. - example: 10,20 - schema: - type: array - items: - type: integer - style: form - explode: false - - name: folder_entity_type - in: query - required: false - description: Required when `folder_ids` is provided. Identifies the entity - type the folder IDs refer to. - example: folder - schema: - type: string - enum: - - folder - - name: content_types - in: query - required: false - description: Restrict the search to specific content types. When provided, - this REPLACES the default content type set rather than filtering on top - of it. Accepts a comma-separated list or repeated params. - example: article,snippet - schema: - type: array - items: - type: string - enum: - - snippet - - external_content - - file_source_content - - internal_article - - article - style: form - explode: false - - name: copilot_state - in: query - required: false - description: Filter by whether the content is enabled for Copilot. - example: 'on' - schema: - type: string - enum: - - 'on' - - 'off' - - name: fin_service_state - in: query - required: false - description: Filter by whether the content is enabled for Fin AI Agent - (customer-facing service). - example: 'on' - schema: - type: string - enum: - - 'on' - - 'off' - - name: fin_sales_state - in: query - required: false - description: Filter by whether the content is enabled for Fin Sales Agent. - example: 'on' - schema: - type: string - enum: - - 'on' - - 'off' - - name: created_by_ids - in: query - required: false - description: Filter by the admin IDs that created the content. Accepts a - comma-separated list or repeated params. - example: 991267464,991267465 - schema: - type: array - items: - type: integer - style: form - explode: false - - name: last_updated_by_ids - in: query - required: false - description: Filter by the admin IDs that last updated the content. - Accepts a comma-separated list or repeated params. - example: 991267464,991267465 - schema: - type: array - items: - type: integer - style: form - explode: false - - name: created_at_after - in: query - required: false - description: Return content created at or after this time. Unix epoch - seconds. - example: 1677253093 - schema: - type: integer - - name: created_at_before - in: query - required: false - description: Return content created at or before this time. Unix epoch - seconds. - example: 1677861493 - schema: - type: integer - - name: updated_at_after - in: query - required: false - description: Return content last updated at or after this time. Unix - epoch seconds. - example: 1677253093 - schema: - type: integer - - name: updated_at_before - in: query - required: false - description: Return content last updated at or before this time. Unix - epoch seconds. - example: 1677861493 - schema: - type: integer - tags: - - Content - operationId: searchContent - description: | - Search the knowledge base contents — articles, snippets, external pages, uploaded files, and internal articles — using a keyword query. - - Each result row has a `type` discriminator. Most types (`content_snippet`, `external_content`, `file_source_content`, `internal_article`) return a flat `{ type, id, title }` shape. Help center articles return a nested shape with a `contents[]` array, one entry per locale. - - Requires the `read_content` OAuth scope. - responses: - '200': - description: Search successful + type: conversation + id: '608' + created_at: 1734537721 + updated_at: 1734537724 + waiting_since: 1734537722 + snoozed_until: + source: + type: conversation + id: '403918391' + delivered_as: admin_initiated + subject: '' + body: "

this is the message body

" + author: + type: admin + id: '991267757' + name: Ciaran247 Lee + email: admin247@email.com + attachments: [] + url: + redacted: false + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f1f81bb69f9f2193bc09 + external_id: '70' + first_contact_reply: + created_at: 1734537722 + type: conversation + url: + admin_assignee_id: 991267715 + team_assignee_id: 5017691 + open: true + state: open + read: true + tags: + type: tag.list + tags: [] + priority: none + sla_applied: + statistics: + conversation_rating: + teammates: + title: + custom_attributes: {} + topics: {} + ticket: + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + ai_topics: + ai_agent: + ai_agent_participated: false + channel: + initial: messenger + current: messenger + conversation_parts: + type: conversation_part.list + conversation_parts: + - type: conversation_part + id: '149' + part_type: open + body: "

This message was deleted

" + created_at: 1734537722 + updated_at: 1734537724 + notified_at: 1734537722 + assigned_to: + author: + id: 6762f1f81bb69f9f2193bc09 + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + external_id: + redacted: true + metadata: {} + email_message_metadata: + app_package_code: null + total_count: 1 + schema: + "$ref": "#/components/schemas/conversation" + '404': + description: Not found content: application/json: examples: - Search successful: + Not found: value: - type: list - total_count: 5 - pages: - type: pages - page: 1 - per_page: 10 - total_pages: 1 - next: - prev: - data: - - type: content_snippet - id: '123' - title: Billing FAQ - - type: external_content - id: '456' - title: How to reset your password - - type: file_source_content - id: '789' - title: billing-guide.pdf - - type: internal_article - id: '012' - title: 'Internal SOP: Refunds' - - type: article - id: '345' - title: Billing FAQ - contents: - - type: article_content - id: '678' - title: Billing FAQ - locale: en - - type: article_content - id: '910' - title: Facturation FAQ - locale: fr + type: error.list + request_id: 5b7bb755-4031-4bfe-8897-54d0f1872bbc + errors: + - code: conversation_part_or_message_not_found + message: Conversation part or message not found schema: - "$ref": "#/components/schemas/content_search_response" + "$ref": "#/components/schemas/error" '401': - $ref: "#/components/responses/Unauthorized" - '422': - $ref: "#/components/responses/ValidationError" - "/content_snippets": - get: - summary: List all content snippets + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 4814668f-5d31-4bf7-8f66-b426aac054db + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/redact_conversation_request" + examples: + redact_a_conversation_part: + summary: Redact a conversation part + value: + type: conversation_part + conversation_id: 608 + conversation_part_id: 149 + not_found: + summary: Not found + value: + type: conversation_part + conversation_id: really_123_doesnt_exist + conversation_part_id: really_123_doesnt_exist + "/conversations/{id}/convert": + post: + summary: Convert a conversation to a ticket parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: page - in: query - required: false - description: The page of results to fetch. - schema: - type: integer - example: 1 - - name: per_page - in: query - required: false - description: The number of results to return per page. Max value of 50. + - name: id + in: path + required: true + description: The id of the conversation to target + example: 123 schema: type: integer - example: 20 tags: - - Content Snippets - operationId: listContentSnippets - description: You can fetch a list of all content snippets for a workspace. + - Conversations + description: You can convert a conversation to a ticket. + operationId: convertConversationToTicket responses: '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: list - data: - - type: content_snippet - id: '123' - title: How to reset your password - locale: en - json_blocks: - - type: paragraph - text: Navigate to Settings > Security > Reset password. - body_markdown: "# How to reset your password\n\nNavigate to Settings > Security > Reset password.\n" - chatbot_availability: 1 - copilot_availability: 1 - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true - created_at: 1663597223 - updated_at: 1663597223 - audience_ids: - - 1 - - 2 - total_count: 1 - page: 1 - per_page: 50 - total_pages: 1 - schema: - "$ref": "#/components/schemas/content_snippet_list" - post: - summary: Create a content snippet - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Content Snippets - operationId: createContentSnippet - description: You can create a new content snippet. - requestBody: - required: true - content: - application/json: - schema: - "$ref": "#/components/schemas/content_snippet_create_request" - examples: - Create a content snippet: - value: - title: How to reset your password - json_blocks: - - type: paragraph - text: Navigate to Settings > Security > Reset password. - locale: en - audience_ids: - - 1 - - 2 - responses: - '201': - description: Content snippet created + description: successful content: application/json: examples: - Content snippet created: + successful: value: - type: content_snippet - id: '456' - title: How to reset your password - locale: en - json_blocks: - - type: paragraph - text: Navigate to Settings > Security > Reset password. - body_markdown: "# How to reset your password\n\nNavigate to Settings > Security > Reset password.\n" - chatbot_availability: 1 - copilot_availability: 1 - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true - created_at: 1663597223 - updated_at: 1663597223 - audience_ids: - - 1 - - 2 + type: ticket + id: '611' + ticket_id: '22' + ticket_attributes: {} + ticket_state: + type: ticket_state + id: '7493' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_type: + type: ticket_type + id: '53' + name: my-ticket-type-1 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id442_that_should_be_at_least_ + archived: false + created_at: 1734537737 + updated_at: 1734537737 + is_internal: false + ticket_type_attributes: + type: list + data: [] + category: Customer + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f2041bb69f9f2193bc0c + external_id: '70' + admin_assignee_id: 0 + team_assignee_id: 0 + created_at: 1734537732 + updated_at: 1734537737 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '151' + part_type: comment + body: "

Comment for message

" + created_at: 1734537732 + updated_at: 1734537732 + author: + id: 6762f2041bb69f9f2193bc0c + type: user + name: Joe Bloggs + email: joe@bloggs.com + attachments: [] + redacted: false + app_package_code: test-integration + - type: ticket_part + id: '152' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537737 + updated_at: 1734537737 + author: + id: '991267767' + type: bot + name: Fin + email: operator+this_is_an_id442_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + app_package_code: test-integration + total_count: 2 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Customer + is_shared: true + previous_ticket_state_id: '7490' schema: - "$ref": "#/components/schemas/content_snippet" - '404': - description: Unknown audience IDs + "$ref": "#/components/schemas/ticket" + '400': + description: Bad request content: application/json: examples: - Unknown audience IDs: + Bad request: value: type: error.list + request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 errors: - code: parameter_invalid - message: 'audience_ids contains unknown audience IDs: 999' - schema: - "$ref": "#/components/schemas/error" - '422': - description: Validation error - content: - application/json: - examples: - Validation error: - value: - type: error.list - errors: - - code: validation_error - message: The language is not currently supported for Fin + message: Ticket type is not a customer ticket type schema: "$ref": "#/components/schemas/error" - "/content_snippets/{id}": - get: - summary: Retrieve a content snippet + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/convert_conversation_to_ticket_request" + examples: + successful: + summary: successful + value: + ticket_type_id: '53' + bad_request: + summary: Bad request + value: + ticket_type_id: '54' + "/custom_object_instances/{custom_object_type_identifier}": + parameters: + - name: custom_object_type_identifier + in: path + description: The unique identifier of the custom object type that defines the + structure of the custom object instance. + example: Order + required: true + schema: + type: string + post: + summary: Create or Update a Custom Object Instance parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the content snippet. - schema: - type: string - example: '123' tags: - - Content Snippets - operationId: getContentSnippet - description: You can fetch a single content snippet by its id. + - Custom Object Instances + operationId: createCustomObjectInstances + description: Create or update a custom object instance responses: '200': - description: Successful response + description: successful content: application/json: examples: - Successful response: + successful: value: - type: content_snippet - id: '123' - title: How to reset your password - locale: en - json_blocks: - - type: paragraph - text: Navigate to Settings > Security > Reset password. - body_markdown: "# How to reset your password\n\nNavigate to Settings > Security > Reset password.\n" - chatbot_availability: 1 - copilot_availability: 1 - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true - created_at: 1663597223 - updated_at: 1663597223 - audience_ids: - - 1 - - 2 + id: '22' + type: Order + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + created_at: 1734537745 + updated_at: 1734537745 schema: - "$ref": "#/components/schemas/content_snippet" + "$ref": "#/components/schemas/custom_object_instance" + '401': + $ref: "#/components/responses/Unauthorized" '404': - description: Content snippet not found - content: - application/json: - examples: - Content snippet not found: - value: - type: error.list - errors: - - code: not_found - message: Content snippet not found - schema: - "$ref": "#/components/schemas/error" - put: - summary: Update a content snippet - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the content snippet. - schema: - type: string - example: '123' - tags: - - Content Snippets - operationId: updateContentSnippet - description: You can update an existing content snippet. + $ref: "#/components/responses/TypeNotFound" requestBody: - required: true content: application/json: schema: - "$ref": "#/components/schemas/content_snippet_update_request" + "$ref": "#/components/schemas/create_or_update_custom_object_instance_request" examples: - Update a content snippet: + successful: + summary: successful value: - title: How to reset your password (updated) - json_blocks: - - type: paragraph - text: Go to Settings > Security > Reset password and follow the steps. - audience_ids: - - 1 - - 2 - responses: - '200': - description: Content snippet updated - content: - application/json: - examples: - Content snippet updated: - value: - type: content_snippet - id: '123' - title: How to reset your password (updated) - locale: en - json_blocks: - - type: paragraph - text: Go to Settings > Security > Reset password and follow the steps. - body_markdown: "# How to reset your password (updated)\n\nGo to Settings > Security > Reset password and follow the steps.\n" - chatbot_availability: 1 - copilot_availability: 1 - ai_chatbot_availability: true - ai_copilot_availability: true - ai_sales_agent_availability: true - created_at: 1663597223 - updated_at: 1663597300 - audience_ids: - - 1 - - 2 - schema: - "$ref": "#/components/schemas/content_snippet" - '404': - description: Content snippet or audience ID not found - content: - application/json: - examples: - Content snippet not found: - value: - type: error.list - errors: - - code: not_found - message: Content snippet not found - Unknown audience IDs: - value: - type: error.list - errors: - - code: parameter_invalid - message: 'audience_ids contains unknown audience IDs: 999' - schema: - "$ref": "#/components/schemas/error" - '422': - description: Validation error - content: - application/json: - examples: - Validation error: - value: - type: error.list - errors: - - code: validation_error - message: The language is not currently supported for Fin - schema: - "$ref": "#/components/schemas/error" + external_id: '123' + external_created_at: 1392036272 + external_updated_at: 1392036272 + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 delete: - summary: Delete a content snippet + summary: Delete a Custom Object Instance by External ID parameters: + - name: external_id + in: query + style: form + required: true + schema: + type: string + description: The unique identifier for the instance in the external system + it originated from. + title: Find by external_id + properties: + external_id: + type: string + required: + - external_id - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the content snippet. - schema: - type: string - example: '123' tags: - - Content Snippets - operationId: deleteContentSnippet - description: You can delete a single content snippet by its id. + - Custom Object Instances + operationId: deleteCustomObjectInstancesById + description: Delete a single Custom Object instance by external_id. responses: - '204': - description: Content snippet deleted - '404': - description: Content snippet not found - content: - application/json: - examples: - Content snippet not found: - value: - type: error.list - errors: - - code: not_found - message: Content snippet not found - schema: - "$ref": "#/components/schemas/error" - '422': - description: Content snippet has procedure dependencies + '200': + description: successful content: application/json: examples: - Content snippet has procedure dependencies: + successful: value: - type: error.list - errors: - - code: content_has_procedure_dependencies - message: Content snippet has dependent procedures and cannot - be deleted + id: '26' + object: Order + deleted: true schema: - "$ref": "#/components/schemas/error" - "/content_snippets/{content_snippet_id}/tags": - post: - summary: Add a tag to a content snippet - tags: - - Content Snippets - - Tags + "$ref": "#/components/schemas/custom_object_instance_deleted" + '401': + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/ObjectNotFound" + "/custom_object_instances/{custom_object_type_identifier}/{id}": + parameters: + - name: custom_object_type_identifier + in: path + description: The unique identifier of the custom object type that defines the + structure of the custom object instance. + example: Order + required: true + schema: + type: string + get: + summary: Get Custom Object Instance by ID parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: content_snippet_id + - name: id in: path + description: The id or external_id of the custom object instance required: true - description: The unique identifier for the content snippet. - example: '123' schema: type: string - operationId: attachTagToContentSnippet - description: | - Apply an existing tag to a content snippet. Returns the tag that was applied. - - The tag must already exist in the workspace (create tags with the Tags API), - and the authenticating teammate must have the `manage_knowledge_base_content` - permission. - - Requires the `read_write_content_snippets` OAuth scope. - requestBody: - content: - application/json: - schema: - type: object - required: - - id - properties: - id: - type: string - description: The unique identifier of the tag to apply, as given by - Intercom. - example: '7522907' - admin_id: - type: string - nullable: true - description: Optional id of the teammate to attribute the tagging to. - Defaults to the authenticating teammate. Does not affect authorization. - example: '1234' - examples: - successful: - summary: Apply a tag - value: - id: '7522907' + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: getCustomObjectInstancesById + description: Fetch a Custom Object Instance by id. responses: '200': - description: Tag applied - content: - application/json: - examples: - Tag applied: - value: - type: tag - id: '7522907' - name: Independent - applied_at: 1663597223 - applied_by: - type: admin - id: '1234' - schema: - "$ref": "#/components/schemas/tag" - '403': - description: Forbidden + description: successful content: application/json: examples: - Forbidden: + successful: value: - type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f - errors: - - code: forbidden - message: Not authorized to manage knowledge base content + id: '25' + type: Order + custom_attributes: + order_number: ORDER-12345 + total_amount: 99.99 + external_id: '123' + external_created_at: + external_updated_at: + created_at: 1734537750 + updated_at: 1734537750 schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/custom_object_instance" + '401': + $ref: "#/components/responses/Unauthorized" '404': - description: Content snippet or tag not found + $ref: "#/components/responses/ObjectNotFound" + delete: + summary: Delete a Custom Object Instance by ID + parameters: + - name: id + in: path + description: The Intercom defined id of the custom object instance + required: true + schema: + type: string + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Custom Object Instances + operationId: deleteCustomObjectInstancesByExternalId + description: Delete a single Custom Object instance using the Intercom defined + id. + responses: + '200': + description: successful content: application/json: examples: - Content snippet not found: - value: - type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 - errors: - - code: content_snippet_not_found - message: Content snippet not found - Tag not found: + successful: value: - type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 - errors: - - code: tag_not_found - message: Tag not found + id: '26' + object: Order + deleted: true schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/custom_object_instance_deleted" '401': - "$ref": "#/components/responses/Unauthorized" - "/content_snippets/{content_snippet_id}/tags/{id}": - delete: - summary: Remove a tag from a content snippet - tags: - - Content Snippets - - Tags + $ref: "#/components/responses/Unauthorized" + '404': + $ref: "#/components/responses/ObjectNotFound" + "/data_attributes": + get: + summary: List all data attributes parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: content_snippet_id - in: path - required: true - description: The unique identifier for the content snippet. - example: '123' + - name: model + in: query + required: false + description: "Specify the data attribute model to return. For conversation attributes, use `GET /conversations/attributes` instead." schema: type: string - - name: id - in: path - required: true - description: The unique identifier of the tag to remove, as given by Intercom. - example: '7522907' + enum: + - contact + - company + example: company + - name: include_archived + in: query + required: false + description: Include archived attributes in the list. By default we return + only non archived data attributes. + example: false schema: - type: string - operationId: detachTagFromContentSnippet + type: boolean + tags: + - Data Attributes + operationId: lisDataAttributes description: | - Remove a tag from a content snippet. Returns the tag that was removed, with - null `applied_at` and `applied_by`. - - The authenticating teammate must have the `manage_knowledge_base_content` - permission. + You can fetch a list of all data attributes belonging to a workspace for contacts or companies. - Requires the `read_write_content_snippets` OAuth scope. + {% admonition type="warning" name="Conversation attributes removed" %} + Conversation attributes are no longer returned by this endpoint. Calling without a `model` parameter no longer includes them in the response, and `model=conversation` returns a `422` error. Use [GET /conversations/attributes](/docs/references/preview/rest-api/api.intercom.io/conversations-attributes/listconversationattributes) instead. + {% /admonition %} responses: '200': - description: Tag removed + description: Successful response content: application/json: examples: - Tag removed: + Successful response: value: - type: tag - id: '7522907' - name: Independent - applied_at: null - applied_by: null - schema: - "$ref": "#/components/schemas/tag" - '403': - description: Forbidden - content: - application/json: + type: list + data: + - type: data_attribute + name: name + full_name: name + label: Company name + description: The name of a company + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: company_id + full_name: company_id + label: Company ID + description: A number identifying a company + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: last_request_at + full_name: last_request_at + label: Company last seen + description: The last day anyone from a company visited your + site or app + data_type: date + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: remote_created_at + full_name: remote_created_at + label: Company created at + description: The day a company was added to Intercom + data_type: date + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: user_count + full_name: user_count + label: People + description: The number of people in a company + data_type: integer + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: session_count + full_name: session_count + label: Company web sessions + description: All visits from anyone in a company to your product's + site or app + data_type: integer + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: name + full_name: plan.name + label: Plan + description: A specific plan or level within your product that + companies have signed up to + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: monthly_spend + full_name: monthly_spend + label: Monthly Spend + description: The monthly revenue you receive from a company + data_type: float + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: size + full_name: size + label: Company size + description: The number of people employed in this company, + expressed as a single number + data_type: integer + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: industry + full_name: industry + label: Company industry + description: The category or domain this company belongs to + e.g. 'ecommerce' or 'SaaS' + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: website + full_name: website + label: Company website + description: The web address for the company's primary marketing + site + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - id: 34 + type: data_attribute + name: The One Ring + full_name: custom_attributes.The One Ring + label: The One Ring + description: One ring to rule them all, one ring to find them, + One ring to bring them all and in the darkness bind them. + data_type: string + api_writable: true + ui_writable: false + messenger_writable: true + custom: true + archived: false + admin_id: '991267784' + created_at: 1734537753 + updated_at: 1734537753 + model: company + - type: data_attribute + name: id + full_name: id + label: ID + description: The Intercom defined id representing the company + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: created_at + full_name: created_at + label: Created at + description: The time the company was added to Intercom + data_type: date + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: updated_at + full_name: updated_at + label: Updated at + description: The last time the company was updated + data_type: date + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: id + full_name: plan.id + label: Plan ID + description: The Intercom defined id representing the plan + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + - type: data_attribute + name: app_id + full_name: app_id + label: App ID + description: The Intercom defined id representing the app + data_type: string + api_writable: false + ui_writable: false + messenger_writable: true + custom: false + archived: false + model: company + schema: + "$ref": "#/components/schemas/data_attribute_list" + '401': + description: Unauthorized + content: + application/json: examples: - Forbidden: + Unauthorized: value: type: error.list - request_id: 6f3c2b1a-2d4e-4f6a-9b8c-1a2b3c4d5e6f + request_id: 6d231766-b44b-4e78-bc9e-9c268ff19671 errors: - - code: forbidden - message: Not authorized to manage knowledge base content + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '404': - description: Content snippet or tag not found + '422': + description: Unprocessable entity - model=conversation is deprecated content: application/json: examples: - Content snippet not found: - value: - type: error.list - request_id: 302049fb-b8c1-4dc8-a327-a8f6e1923484 - errors: - - code: content_snippet_not_found - message: Content snippet not found - Tag not found: + Deprecated conversation model: value: type: error.list - request_id: 8a3e4f88-ae65-433a-b4eb-46780ffc5402 + request_id: b7912266-b12e-4d12-b2ce-9cd44d33f0c0 errors: - - code: tag_not_found - message: Tag not found + - code: parameter_invalid + message: model=conversation is no longer supported. Use GET /conversations/attributes instead schema: "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" - "/conversations/{conversation_id}/tags": post: - summary: Add tag to a conversation + summary: Create a data attribute parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: conversation_id - in: path - description: conversation_id - example: '64619700005694' - required: true - schema: - type: string tags: - - Tags - - Conversations - operationId: attachTagToConversation - description: You can tag a specific conversation. This will return a tag object - for the tag that was added to the conversation. + - Data Attributes + operationId: createDataAttribute + description: You can create a data attributes for a `contact` or a `company`. responses: '200': - description: successful + description: Successful content: application/json: examples: - successful: + Successful: value: - type: tag - id: '86' - name: Manual tag - applied_at: 1663597223 - applied_by: - type: admin - id: '456' + id: 37 + type: data_attribute + name: Mithril Shirt + full_name: custom_attributes.Mithril Shirt + label: Mithril Shirt + data_type: string + api_writable: true + ui_writable: false + messenger_writable: false + custom: true + archived: false + admin_id: '991267786' + created_at: 1734537756 + updated_at: 1734537756 + model: company schema: - "$ref": "#/components/schemas/tag" - '404': - description: Conversation not found + "$ref": "#/components/schemas/data_attribute" + '400': + description: Too few options for list content: application/json: examples: - Conversation not found: + Same name already exists: value: type: error.list - request_id: c6e8c74f-a354-4dfd-a5be-6061d2d26341 + request_id: da2a7037-11f4-4fcc-8d19-27da3b3a4336 errors: - - code: not_found - message: Conversation not found + - code: parameter_invalid + message: You already have 'The One Ring' in your company data. + To save this as new people data, use a different name. + Invalid name: + value: + type: error.list + request_id: 1c45cfd9-ffd1-4e3e-9f7a-2ac99abdf03d + errors: + - code: parameter_invalid + message: Your name for this attribute must only contain alphanumeric + characters, currency symbols, and hyphens + Attribute already exists: + value: + type: error.list + request_id: 55999605-a170-4894-a3d0-090c4fee8d11 + errors: + - code: parameter_invalid + message: You already have 'The One Ring' in your company data. + To save this as new company data, use a different name. + Invalid Data Type: + value: + type: error.list + request_id: e0a9ccc7-a540-4ef0-8ffc-28ab86658b04 + errors: + - code: parameter_invalid + message: Data Type isn't an option + Too few options for list: + value: + type: error.list + request_id: 6544ccf8-435d-49e1-91ed-e49356f14255 + errors: + - code: parameter_invalid + message: The Data Attribute model field must be either contact + or company schema: "$ref": "#/components/schemas/error" '401': @@ -10393,7 +10571,7 @@ paths: Unauthorized: value: type: error.list - request_id: 617bb25d-4dea-4a68-ae74-2fb8f4e87b39 + request_id: fa71b91c-4a25-4fe6-88a9-884f6950860e errors: - code: unauthorized message: Access Token Invalid @@ -10403,96 +10581,137 @@ paths: content: application/json: schema: - type: object - required: - - id - - admin_id - properties: - id: - type: string - description: The unique identifier for the tag which is given by - Intercom - example: '7522907' - admin_id: - type: string - description: The unique identifier for the admin which is given - by Intercom. - example: '780' + "$ref": "#/components/schemas/create_data_attribute_request" examples: successful: - summary: successful + summary: Successful value: - id: 86 - admin_id: 991267618 - conversation_not_found: - summary: Conversation not found + name: Mithril Shirt + model: company + data_type: string + same_name_already_exists: + summary: Same name already exists value: - id: 87 - admin_id: 991267620 - "/conversations/{conversation_id}/tags/{id}": - delete: - summary: Remove tag from a conversation + name: The One Ring + model: contact + data_type: integer + invalid_name: + summary: Invalid name + value: + name: "!nv@l!d n@me" + model: company + data_type: string + attribute_already_exists: + summary: Attribute already exists + value: + name: The One Ring + model: company + data_type: string + invalid_data_type: + summary: Invalid Data Type + value: + name: The Second Ring + model: company + data_type: mithril + too_few_options_for_list: + summary: Too few options for list + value: + description: Just a plain old ring + options: + - value: 1-10 + archived: false + "/data_attributes/{id}": + put: + summary: Update a data attribute parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: conversation_id - in: path - description: conversation_id - example: '64619700005694' - required: true - schema: - type: string - name: id in: path - description: id - example: '7522907' required: true + description: The data attribute id + example: 1 schema: - type: string + type: integer tags: - - Tags - - Conversations - operationId: detachTagFromConversation - description: You can remove tag from a specific conversation. This will return - a tag object for the tag that was removed from the conversation. + - Data Attributes + operationId: updateDataAttribute + description: "\nYou can update a data attribute.\n\n> \U0001F6A7 Updating the + data type is not possible\n>\n> It is currently a dangerous action to execute + changing a data attribute's type via the API. You will need to update the + type via the UI instead.\n" responses: '200': - description: successful + description: Successful content: application/json: examples: - successful: + Successful: value: - type: tag - id: '89' - name: Manual tag - applied_at: 1663597223 - applied_by: - type: admin - id: '456' + id: 44 + type: data_attribute + name: The One Ring + full_name: custom_attributes.The One Ring + label: The One Ring + description: Just a plain old ring + data_type: string + options: + - 1-10 + - 11-20 + api_writable: true + ui_writable: false + messenger_writable: true + custom: true + archived: false + admin_id: '991267793' + created_at: 1734537762 + updated_at: 1734537763 + model: company schema: - "$ref": "#/components/schemas/tag" + "$ref": "#/components/schemas/data_attribute" + '400': + description: Too few options in list + content: + application/json: + examples: + Too few options in list: + value: + type: error.list + request_id: 37cff4c5-5e1a-4958-a2ba-149b09d1915c + errors: + - code: parameter_invalid + message: Options isn't an array + schema: + "$ref": "#/components/schemas/error" '404': - description: Tag not found + description: Attribute Not Found content: application/json: examples: - Conversation not found: + Attribute Not Found: value: type: error.list - request_id: 84db22c5-0fef-465a-a909-2643d8a22c69 + request_id: eee16d31-0b0a-4b5f-b95a-25d37528c80f errors: - - code: not_found - message: Conversation not found - Tag not found: + - code: field_not_found + message: We couldn't find that data attribute to update + schema: + "$ref": "#/components/schemas/error" + '422': + description: Has Dependant Object + content: + application/json: + examples: + Has Dependant Object: value: type: error.list - request_id: 1fe3e9ec-6a5b-4abc-b51c-a515f77d9577 + request_id: f04b6b14-1c5b-46e1-9c95-4a914557062c errors: - - code: tag_not_found - message: Tag not found + - code: data_invalid + message: The Data Attribute you are trying to archive has a + dependant object schema: "$ref": "#/components/schemas/error" '401': @@ -10503,7 +10722,7 @@ paths: Unauthorized: value: type: error.list - request_id: df73b7b4-2352-44fd-8d14-4ea8536ad138 + request_id: c60ce63d-1c74-4fe2-8e21-31d1f817a0c2 errors: - code: unauthorized message: Access Token Invalid @@ -10513,806 +10732,579 @@ paths: content: application/json: schema: - type: object - required: - - admin_id - properties: - admin_id: - type: string - description: The unique identifier for the admin which is given - by Intercom. - example: '123' + "$ref": "#/components/schemas/update_data_attribute_request" examples: successful: - summary: successful + summary: Successful value: - admin_id: 991267622 - conversation_not_found: - summary: Conversation not found + description: Just a plain old ring + options: + - value: 1-10 + - value: 11-20 + archived: false + too_few_options_in_list: + summary: Too few options in list value: - admin_id: 991267624 - tag_not_found: - summary: Tag not found + description: Too few options + options: + value: 1-10 + archived: false + attribute_not_found: + summary: Attribute Not Found value: - admin_id: 991267625 - "/conversations": - get: - summary: List all conversations + description: Just a plain old ring + options: + - value: 1-10 + - value: 11-20 + archived: false + has_dependant_object: + summary: Has Dependant Object + value: + description: Trying to archieve + archived: true + "/ecommerce/connectors/{id}/catalog": + post: + summary: Upload a product catalog parameters: - name: Intercom-Version in: header schema: - "$ref": "#/components/schemas/intercom_version" - - name: per_page - in: query - schema: - type: integer - default: 20 - maximum: 150 - required: false - description: How many results per page - - name: starting_after - in: query - required: false - description: String used to get the next page of conversations. + "$ref": "#/components/schemas/intercom_version_preview" + - name: id + in: path + required: true + description: The unique identifier of the ecommerce connector. schema: type: string - - name: include_monitors - in: query - required: false - description: If set to true, the response will include a `monitor_evaluations` array on each conversation with any QA monitor results that flagged it. - example: true - schema: - type: boolean - default: false - - name: include_scorecards - in: query - required: false - description: If set to true, the response will include a `scorecards` array on each conversation with any QA scorecard results. - example: true - schema: - type: boolean - default: false + example: '42939' tags: - - Conversations - operationId: listConversations + - Ecommerce Connectors + operationId: uploadEcommerceCatalog description: | - You can fetch a list of all conversations. + Upload a product catalog to an ecommerce connector. The catalog must be a JSON + array of product objects. There are two upload modes: - You can optionally request the result page size and the cursor to start after to fetch the result. - {% admonition type="warning" name="Pagination" %} - You can use pagination to limit the number of results returned. The default is `20` results per page. - See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#pagination-for-list-apis) for more details on how to use the `starting_after` param. - {% /admonition %} + **Single-file upload** — POST a single catalog file (up to 99 MB per request). + Omit `finalize` and `import_job_id`. Returns `202 Accepted` when sync has started. + + **Multipart upload** — For catalogs that must be split across multiple requests: + + 1. POST the first part with `finalize=false` (no `import_job_id`). The response + returns an `import_job_id` and `next_part_number`. + 2. POST each subsequent part with `finalize=false`, the `import_job_id` from step 1, + and the `part_number` from the previous response. Each part must be ≤ 99 MB. + 3. POST with `finalize=true` and the `import_job_id` to complete the upload and + start the sync. No catalog file is required in the finalization request. + + Part uploads are idempotent — retrying the same `part_number` does not create + a duplicate. If a response is lost, retry with the same `part_number`. + + ## Product object structure + + The catalog file must be a JSON array where each element is a product object. + Only `id`, `title`, and `url` are required — all other fields are optional. + + | Field | Type | Required | Description | + |---|---|---|---| + | `id` | string | ✓ | Your unique product identifier. Used to match products on re-upload so only changed products are re-indexed. Also the delete key — any product ID absent from a new upload is removed from Fin's knowledge. Must be stable across uploads. | + | `title` | string | ✓ | Product name. Used by Fin when searching for and recommending products. | + | `url` | string | ✓ | Canonical product page URL shown in Fin's product recommendations. Must be a valid `https://` URL. | + | `description` | string | | Product description that Fin reads to understand what the product is. HTML formatting is supported and safely sanitized (`description_html` takes precedence if both are provided). This is the primary field Fin uses to match products to shopper questions — a richer description leads to better recommendations. | + | `featured_image_url` | string | | Primary product image shown in Fin's recommendation cards. Falls back to the first entry of `image_urls` if not provided. If no valid image can be resolved for a variant, that variant's card is not shown to the shopper. | + | `image_urls` | string[] | | Additional product images. Used as a fallback when `featured_image_url` is absent or when a variant has no specific image. | + | `price_min` | number | | Lowest price across all variants. If omitted, derived automatically from variant prices. Fin uses this to filter products when a shopper mentions a budget (e.g. "under $100"). Displayed as a range alongside `price_max`, or as a single value if both are equal. | + | `price_max` | number | | Highest price across all variants. If omitted, derived from variant prices. Used alongside `price_min` for budget filtering and price display. | + | `currency` | string | | ISO 4217 currency code (e.g. `"USD"`, `"EUR"`, `"GBP"`). Defaults to USD if omitted. Used to format prices with the correct symbol in Fin's responses and product cards. | + | `in_stock` | boolean | | Whether the product is available to purchase. If omitted, derived from variant stock — the product is in stock if at least one variant has `in_stock: true`. Products with no in-stock variants are hidden from Fin entirely. | + | `category_path` | string or string[] | Strongly recommended | Hierarchical category breadcrumb (e.g. `["Clothing", "Outerwear", "Jackets"]`). Fin understands the hierarchy — a shopper asking about "Clothing" sees products from all subcategories underneath it. The most specific category is shown in search results. | + | `collections` | string[] | Strongly recommended | Collections or groupings this product belongs to in your store. Fin uses collections to understand your catalog's structure and answer questions like "what's in the sale collection?". | + | `tags` | string[] | | Free-form keywords matching how shoppers phrase needs in chat (e.g. `["waterproof", "gift", "plus-size"]`). Complements `category_path` and `collections`. | + | `available_options` | object[] | | Option types and their possible values (e.g. `{"name": "Size", "values": ["S", "M", "L"]}`). Fin uses these to understand what choices a shopper can make and to correctly filter variants when asked for a specific size, colour, or other attribute. | + | `additional_data` | object | | Custom attributes for your business. Fin uses these to show each customer only relevant products. All keys must be consistent across all products in your catalog — the attribute schema is read from the first product in the file. | + | `variants` | object[] | | Individual purchasable variants. Fin recommends specific variants (not just products), so populating variants with accurate stock, price, and option data leads to more precise recommendations. See the variant table below. | + + ### Variant object structure + + Each object in the `variants` array may contain: + + | Field | Type | Required | Description | + |---|---|---|---| + | `id` | string | ✓ | Unique identifier for this variant within the product. | + | `title` | string | | Variant display name shown to shoppers (e.g. `"Small / Blue"`). | + | `price` | number | | Price of this specific variant. Fin uses variant prices for precise budget filtering and displays the variant price in recommendation cards. | + | `compare_at_price` | number | | Original price before a discount. When provided, Fin will naturally mention the saving (e.g. "down from $129 to $99"). | + | `in_stock` | boolean | | Whether this variant is currently available. Out-of-stock variants are not shown in Fin's recommendation cards and Fin will not suggest them to shoppers. | + | `image_url` | string | | Image specific to this variant. Takes precedence over the product's `featured_image_url`. Falls back to `featured_image_url`, then `image_urls`. If no valid image can be resolved, this variant's recommendation card will not be shown. | + | `selected_options` | object[] | | The specific option values that define this variant (e.g. `[{"name": "Size", "value": "Small"}, {"name": "Color", "value": "Blue"}]`). Fin uses these to match shopper requests like "do you have this in medium?" to the correct variant. | + | `url` | string | | Direct link to this variant's page. Takes precedence over the product URL in recommendation cards. If omitted, constructed automatically as `{product_url}?variant={id}`. | + + ### Example catalog file + + ```json + [ + { + "id": "prod-12345", + "title": "Classic Cotton T-Shirt", + "url": "https://example.com/products/classic-cotton-t-shirt", + "description": "A comfortable everyday t-shirt.", + "featured_image_url": "https://cdn.example.com/images/t-shirt.jpg", + "price_min": 19.99, + "price_max": 29.99, + "currency": "USD", + "in_stock": true, + "tags": ["organic", "bestseller"], + "collections": ["Summer Collection"], + "category_path": "Clothing > T-Shirts", + "available_options": [ + {"name": "Size", "values": ["S", "M", "L"]}, + {"name": "Color", "values": ["White", "Blue"]} + ], + "variants": [ + { + "id": "var-001", + "title": "S / White", + "price": 19.99, + "in_stock": true, + "selected_options": [ + {"name": "Size", "value": "S"}, + {"name": "Color", "value": "White"} + ] + }, + { + "id": "var-002", + "title": "M / Blue", + "price": 29.99, + "in_stock": true, + "selected_options": [ + {"name": "Size", "value": "M"}, + {"name": "Color", "value": "Blue"} + ] + } + ], + "additional_data": { + "sku": "TSHIRT-WHT-S", + "vendor": "Acme Apparel" + } + } + ] + ``` + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + catalog: + type: string + format: binary + description: | + The catalog JSON file. Required for all requests except finalization + (`finalize=true`). Must be a valid JSON array of product objects. Max 99 MB. + + Each element in the array must conform to the + [`ecommerce_catalog_product`](/docs/references/preview/rest-api/api.intercom.io/models/ecommerce_catalog_product) schema. + The `id`, `title`, and `url` fields are required on every product; + all other fields are optional. Variants, if provided, must conform to the + [`ecommerce_catalog_variant`](/docs/references/preview/rest-api/api.intercom.io/models/ecommerce_catalog_variant) schema. + finalize: + type: string + enum: + - 'true' + - 'false' + description: | + Set to `true` to finalize a multipart upload session and start the catalog sync. + No catalog file is required when finalizing. Set to `false` to upload a part in + a multipart session. Omit entirely for a single-file upload. + example: 'false' + import_job_id: + type: string + description: | + The import job ID returned from the first multipart upload request. Required + when uploading subsequent parts (`part_number` ≥ 2) and when finalizing + a multipart session (`finalize=true`). + example: 'job_01abc123' + part_number: + type: integer + description: | + The sequential part number for a multipart upload. Must be a positive integer. + The server returns `next_part_number` in each response to guide the next request. + Retrying the same `part_number` is safe and idempotent. + example: 2 + examples: + single_file_upload: + summary: Single-file upload + value: + catalog: "@products.json" + multipart_first_part: + summary: "Multipart — Step 1: First part" + value: + catalog: "@products_part1.json" + finalize: "false" + multipart_append_part: + summary: "Multipart — Step 2: Append part" + value: + catalog: "@products_part2.json" + finalize: "false" + import_job_id: "job_01abc123" + part_number: 2 + multipart_finalize: + summary: "Multipart — Step 3: Finalize" + value: + finalize: "true" + import_job_id: "job_01abc123" responses: '200': - description: successful + description: Multipart catalog part uploaded successfully. content: application/json: examples: - successful: + Part uploaded: value: - type: conversation.list - pages: - type: pages - page: 1 - per_page: 20 - total_pages: 1 - total_count: 1 - conversations: - - type: conversation - id: '471' - created_at: 1734537460 - updated_at: 1734537460 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918320' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267628' - name: Ciaran166 Lee - email: admin166@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f0f31bb69f9f2193bb8b - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - with QA evaluations: - summary: Response with `include_monitors=true` and `include_scorecards=true` - value: - type: conversation.list - pages: - type: pages - page: 1 - per_page: 20 - total_pages: 1 - total_count: 1 - conversations: - - type: conversation - id: '601' - created_at: 1734537700 - updated_at: 1734537760 - title: - open: true - state: open - read: true - priority: none - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - ai_agent_participated: false - monitor_evaluations: - - monitor_id: '12345' - monitor_name: Customer complaint handling - monitor_type: prompt - result: flagged - explanation: The customer mentioned wanting a refund without resolution. - evaluated_at: 1734537760 - scorecards: - - scorecard_id: '67890' - scorecard_version_id: '67891' - name: Standard QA Review - scorecard_type: human - passed: true - score: 0.85 - ai_score: 0.9 - evaluated_at: 1734537760 - reviewed_teammate: - type: admin - admin_id: '991267715' - evaluators: - - evaluator_id: '54321' - result: - value: pass - source: ai - reasoning: The agent acknowledged the issue and resolved it within the same response. + import_job_id: 'job_01abc123' + next_part_number: 2 schema: - "$ref": "#/components/schemas/conversation_list" - '401': - description: Unauthorized + "$ref": "#/components/schemas/ecommerce_catalog_upload_part_response" + '202': + description: Catalog accepted and sync has started. content: application/json: examples: - Unauthorized: + Sync started: value: - type: error.list - request_id: b14d75ab-7d26-4191-b33f-77ca0a4d4ede - errors: - - code: unauthorized - message: Access Token Invalid + import_job_id: 'job_01abc123' + status: processing + message: Catalog received. Sync has started. schema: - "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + "$ref": "#/components/schemas/ecommerce_catalog_upload_response" + '400': + description: Bad request. content: application/json: examples: - API plan restricted: + Missing catalog file: value: type: error.list - request_id: 591a0c2f-78b3-41bb-bfa7-f1fae15107b9 + request_id: test-uuid-replacement errors: - - code: api_plan_restricted - message: Active subscription needed. - schema: - "$ref": "#/components/schemas/error" - post: - summary: Creates a conversation - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Conversations - operationId: createConversation - description: |+ - 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. - - {% admonition type="info" name="Sending for visitors" %} - 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. - {% /admonition %} - - This will return the Message model that has been created. - - responses: - '200': - description: conversation created - content: - application/json: - examples: - conversation created: + - code: parameter_not_found + message: catalog file is required + Catalog is not a file: value: - type: user_message - id: '403918330' - created_at: 1734537501 - body: Hello there - message_type: inapp - conversation_id: '499' + type: error.list + request_id: test-uuid-replacement + errors: + - code: parameter_not_found + message: catalog must be an uploaded file schema: - allOf: - - "$ref": "#/components/schemas/message" - required: - - conversation_id + "$ref": "#/components/schemas/error" + '401': + "$ref": "#/components/responses/Unauthorized" '404': - description: Contact Not Found + description: Not found. content: application/json: examples: - Contact Not Found: + Connector not found: value: type: error.list - request_id: d7eb553e-74ae-4341-820b-5d38a94d4a99 + request_id: test-uuid-replacement + errors: + - code: import_source_not_found + message: No connector found with the provided id. + Feature not available: + value: + type: error.list + request_id: test-uuid-replacement errors: - code: not_found - message: User Not Found + message: The catalog API is not available for this workspace. + Upload session not found: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: upload_session_not_found + message: No active upload session found for the provided import_job_id. schema: "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + '409': + description: Conflict. content: application/json: examples: - Unauthorized: + Sync already in progress: value: type: error.list - request_id: 68e42c33-8220-48ea-906f-75584c3ec440 + request_id: test-uuid-replacement errors: - - code: unauthorized - message: Access Token Invalid + - code: sync_in_progress + message: A catalog upload is already in progress. Please wait for it to complete. + Multipart session already exists: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: sync_in_progress + message: A multipart upload is already in progress. Use import_job_id to continue. + Session cannot be finalized: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: upload_session_not_finalizable + message: Upload session cannot be finalized in its current state. schema: "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + '422': + description: Unprocessable content. content: application/json: examples: - API plan restricted: + Catalog is not a JSON array: value: type: error.list - request_id: dcf1b373-3e66-4026-a987-98c16f00a908 + request_id: test-uuid-replacement errors: - - code: api_plan_restricted - message: Active subscription needed. - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_conversation_request" - examples: - conversation_created: - summary: conversation created - value: - from: - type: user - id: 6762f11b1bb69f9f2193bba3 - body: Hello there - brand_id: "123" - contact_not_found: - summary: Contact Not Found - value: - from: - type: user - id: 123_doesnt_exist - body: Hello there - "/conversations/{id}": + - code: invalid_catalog_format + message: catalog must be a JSON array + Catalog items are not objects: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: invalid_catalog_format + message: each item in the catalog array must be a JSON object + Part number is not a positive integer: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: invalid_part_number + message: part_number must be a positive integer + Out-of-sequence part number: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: invalid_part_number + message: Expected part 2, got 3 + File exceeds size limit: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: payload_too_large + message: catalog file exceeds 99MB limit + import_job_id required for multipart: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: import_job_id_required + message: Include import_job_id to continue an existing upload session. + schema: + "$ref": "#/components/schemas/error" + '503': + description: Service unavailable. + content: + application/json: + examples: + Storage error: + value: + type: error.list + request_id: test-uuid-replacement + errors: + - code: internal_error + message: Failed to store catalog + schema: + "$ref": "#/components/schemas/error" + "/events": + post: + summary: Submit a data event + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Data Events + operationId: createDataEvent + description: |2+ + + You will need an Access Token that has write permissions to send Events. Once you have a key you can submit events via POST to the Events resource, which is located at https://api.intercom.io/events, or you can send events using one of the client libraries. When working with the HTTP API directly a client should send the event with a `Content-Type` of `application/json`. + + When using the JavaScript API, [adding the code to your app](http://docs.intercom.io/configuring-Intercom/tracking-user-events-in-your-app) makes the Events API available. Once added, you can submit an event using the `trackEvent` method. This will associate the event with the Lead or currently logged-in user or logged-out visitor/lead and send it to Intercom. The final parameter is a map that can be used to send optional metadata about the event. + + With the Ruby client you pass a hash describing the event to `Intercom::Event.create`, or call the `track_user` method directly on the current user object (e.g. `user.track_event`). + + **NB: For the JSON object types, please note that we do not currently support nested JSON structure.** + + | Type | Description | Example | + | :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------- | + | String | The value is a JSON String | `"source":"desktop"` | + | Number | The value is a JSON Number | `"load": 3.67` | + | Date | The key ends with the String `_date` and the value is a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time), assumed to be in the [UTC](http://en.wikipedia.org/wiki/Coordinated_Universal_Time) timezone. | `"contact_date": 1392036272` | + | Link | The value is a HTTP or HTTPS URI. | `"article": "https://example.org/ab1de.html"` | + | Rich Link | The value is a JSON object that contains `url` and `value` keys. | `"article": {"url": "https://example.org/ab1de.html", "value":"the dude abides"}` | + | Monetary Amount | The value is a JSON object that contains `amount` and `currency` keys. The `amount` key is a positive integer representing the amount in cents. The price in the example to the right denotes €349.99. | `"price": {"amount": 34999, "currency": "eur"}` | + + **Lead Events** + + When submitting events for Leads, you will need to specify the Lead's `id`. + + **Metadata behaviour** + + - We currently limit the number of tracked metadata keys to 10 per event. Once the quota is reached, we ignore any further keys we receive. The first 10 metadata keys are determined by the order in which they are sent in with the event. + - It is not possible to change the metadata keys once the event has been sent. A new event will need to be created with the new keys and you can archive the old one. + - There might be up to 24 hrs delay when you send a new metadata for an existing event. + + **Event de-duplication** + + The API may detect and ignore duplicate events. Each event is uniquely identified as a combination of the following data - the Workspace identifier, the Contact external identifier, the Data Event name and the Data Event created time. As a result, it is **strongly recommended** to send a second granularity Unix timestamp in the `created_at` field. + + Duplicated events are responded to using the normal `202 Accepted` code - an error is not thrown, however repeat requests will be counted against any rate limit that is in place. + + ### HTTP API Responses + + - Successful responses to submitted events return `202 Accepted` with an empty body. + - Unauthorised access will be rejected with a `401 Unauthorized` or `403 Forbidden` response code. + - Events sent about users that cannot be found will return a `404 Not Found`. + - Event lists containing duplicate events will have those duplicates ignored. + - Server errors will return a `500` response code and may contain an error message in the body. + + responses: + '202': + description: successful + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 212c8206-e7a6-44c8-8f27-5f0ad7f1d243 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_data_event_request" get: - summary: Retrieve a conversation + summary: List all data events parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path + - in: query + name: filter required: true - description: The id of the conversation to target - example: 123 + style: form + explode: true schema: - type: integer - - name: display_as + type: object + oneOf: + - title: user_id query parameter + properties: + user_id: + type: string + required: + - user_id + additionalProperties: false + - title: intercom_user_id query parameter + properties: + intercom_user_id: + type: string + required: + - intercom_user_id + additionalProperties: false + - title: email query parameter + properties: + email: + type: string + required: + - email + additionalProperties: false + - name: type in: query - required: false - description: Set to plaintext to retrieve conversation messages in plain text. This affects both the body and subject fields. Inline links are rendered as `label (url)`, preserving the link URL alongside the visible text. - example: plaintext + required: true + description: The value must be user schema: type: string - - name: include_translations - in: query - required: false - description: If set to true, conversation parts will be translated to the detected language of the conversation. - example: true - schema: - type: boolean - - name: include_email_history - in: query - required: false - description: If set to true, the source of the conversation will include the email history. - example: true - schema: - type: boolean - - name: include_monitors - in: query - required: false - description: If set to true, the response will include a `monitor_evaluations` array with any QA monitor results that flagged this conversation. - example: true - schema: - type: boolean - default: false - - name: include_scorecards + - name: summary in: query required: false - description: If set to true, the response will include a `scorecards` array with any QA scorecard results for this conversation. - example: true + description: summary flag schema: type: boolean - default: false tags: - - Conversations - operationId: retrieveConversation - description: |2 - - You can fetch the details of a single conversation. - - This will return a single Conversation model with all its conversation parts. - - {% admonition type="warning" name="Hard limit of 500 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. - {% /admonition %} - - For AI agent conversation metadata, please note that you need to have the agent enabled in your workspace, which is a [paid feature](https://www.intercom.com/help/en/articles/8205718-fin-resolutions#h_97f8c2e671). + - Data Events + operationId: lisDataEvents + description: "\n> \U0001F6A7\n>\n> Please note that you can only 'list' events + that are less than 90 days old. Event counts and summaries will still include + your events older than 90 days but you cannot 'list' these events individually + if they are older than 90 days\n\nThe events belonging to a customer can be + listed by sending a GET request to `https://api.intercom.io/events` with a + user or lead identifier along with a `type` parameter. The identifier parameter + can be one of `user_id`, `email` or `intercom_user_id`. The `type` parameter + value must be `user`.\n\n- `https://api.intercom.io/events?type=user&user_id={user_id}`\n- + `https://api.intercom.io/events?type=user&email={email}`\n- `https://api.intercom.io/events?type=user&intercom_user_id={id}` + (this call can be used to list leads)\n\nThe `email` parameter value should + be [url encoded](http://en.wikipedia.org/wiki/Percent-encoding) when sending.\n\nYou + can optionally define the result page size as well with the `per_page` parameter.\n" responses: '200': - description: conversation found + description: Successful response content: application/json: examples: - conversation found: + Successful response: value: - type: conversation - id: '503' - created_at: 1734537511 - updated_at: 1734537511 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918334' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267645' - name: Ciaran176 Lee - email: admin176@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1261bb69f9f2193bba7 - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: - - type: tag - id: '123456' - name: Test tag - applied_at: 1663597223 - applied_by: - type: contact - id: '1a2b3c' - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: 1 - part_type: comment - body:

Okay!

- created_at: 1663597223 - updated_at: 1663597260 - notified_at: 1663597260 - assigned_to: - type: contact - id: '1a2b3c' - author: - type: admin - id: '274' - name: Operator - email: operator+abcd1234@intercom.io - attachments: [] - external_id: 'abcd1234' - redacted: false - email_message_metadata: null - state: open - tags: - - type: tag - id: '123456' - name: Test tag - event_details: - app_package_code: null - - type: conversation_part - id: 2 - part_type: custom_action_started - body: - created_at: 1740141842 - updated_at: 1740141842 - notified_at: 1740141842 - assigned_to: - author: - type: admin - id: '274' - name: Jamie Oliver - email: jamie+abcd1234@intercom.io - attachments: [] - external_id: - redacted: false - email_message_metadata: null - state: open - tags: [] - event_details: - action: - name: Jira Create Issue - app_package_code: test-integration - - type: conversation_part - id: 3 - part_type: conversation_attribute_updated_by_admin - body: - created_at: 1740141851 - updated_at: 1740141851 - notified_at: 1740141851 - assigned_to: - author: - type: bot - id: '278' - name: Fin - email: operator+abcd1234@intercom.io - attachments: [] - external_id: - redacted: false - email_message_metadata: null - state: open - tags: [] - event_details: - attribute: - name: jira_issue_key - value: - name: PROJ-007 - app_package_code: null - - type: conversation_part - id: 4 - part_type: custom_action_finished - body: - created_at: 1740141857 - updated_at: 1740141857 - notified_at: 1740141857 - assigned_to: - author: - type: admin - id: '274' - name: Jamie Oliver - email: jamie+abcd1234@intercom.io - attachments: [] - external_id: - redacted: false - email_message_metadata: null - state: closed - tags: [] - event_details: - action: - name: Jira Create Issue - result: success - app_package_code: null - total_count: 4 - email conversation with history found: - value: - type: conversation - id: '504' - created_at: 1774370019 - updated_at: 1774370019 - waiting_since: 1774370020 - snoozed_until: null - source: - type: email - id: '403918334' - delivered_as: customer_initiated - subject: '

Re: Bug query

' - body: '

This is the message body

' - recipients: - - type: to - email: testing-workspace@email.com - reply_to: - - email: replies@example.com - name: Support Team - author: - type: lead - id: '991267645' - name: Ciaran176 Lee - email: admin176@email.com - attachments: [] - url: null - redacted: false - email_message_metadata: - message_id: 'abc-123@mail.example.com' - subject: 'Re: Bug query' - email_address_headers: - - type: from - name: User Name - email_address: user@example.com - - type: to - name: Another Name - email_address: anotheruser@example.com - history: '
On Jan 28, wrote:
Previous thread
' - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1261bb69f9f2193bba7 - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: - - type: tag - id: '123456' - name: Test tag - applied_at: 1663597223 - applied_by: - type: contact - id: '1a2b3c' - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: 1 - part_type: comment - body:

Okay!

- created_at: 1663597223 - updated_at: 1663597260 - notified_at: 1663597260 - assigned_to: - type: contact - id: '1a2b3c' - author: - type: admin - id: '274' - name: Operator - email: operator+abcd1234@intercom.io - attachments: [] - external_id: 'abcd1234' - redacted: false - email_message_metadata: null - state: open - tags: - - type: tag - id: '123456' - name: Test tag - event_details: - app_package_code: null - - type: conversation_part - id: 2 - part_type: custom_action_started - body: - created_at: 1740141842 - updated_at: 1740141842 - notified_at: 1740141842 - assigned_to: - author: - type: admin - id: '274' - name: Jamie Oliver - email: jamie+abcd1234@intercom.io - attachments: [] - external_id: - redacted: false - email_message_metadata: null - state: open - tags: [] - event_details: - action: - name: Jira Create Issue - app_package_code: test-integration - - type: conversation_part - id: 3 - part_type: conversation_attribute_updated_by_admin - body: - created_at: 1740141851 - updated_at: 1740141851 - notified_at: 1740141851 - assigned_to: - author: - type: bot - id: '278' - name: Fin - email: operator+abcd1234@intercom.io - attachments: [] - external_id: - redacted: false - email_message_metadata: null - state: open - tags: [] - event_details: - attribute: - name: jira_issue_key - value: - name: PROJ-007 - app_package_code: null - - type: conversation_part - id: 4 - part_type: custom_action_finished - body: - created_at: 1740141857 - updated_at: 1740141857 - notified_at: 1740141857 - assigned_to: - author: - type: admin - id: '274' - name: Jamie Oliver - email: jamie+abcd1234@intercom.io - attachments: [] - external_id: - redacted: false - email_message_metadata: null - state: closed - tags: [] - event_details: - action: - name: Jira Create Issue - result: success - app_package_code: null - total_count: 4 - with QA evaluations: - summary: Response with `include_monitors=true` and `include_scorecards=true` - value: - type: conversation - id: '601' - created_at: 1734537700 - updated_at: 1734537760 - title: - open: true - state: open - read: true - priority: none - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - ai_agent_participated: false - monitor_evaluations: - - monitor_id: '12345' - monitor_name: Customer complaint handling - monitor_type: prompt - result: flagged - explanation: The customer mentioned wanting a refund without resolution. - evaluated_at: 1734537760 - scorecards: - - scorecard_id: '67890' - scorecard_version_id: '67891' - name: Standard QA Review - scorecard_type: human - passed: true - score: 0.85 - ai_score: 0.9 - evaluated_at: 1734537760 - reviewed_teammate: - type: admin - admin_id: '991267715' - evaluators: - - evaluator_id: '54321' - result: - value: pass - source: ai - reasoning: The agent acknowledged the issue and resolved it within the same response. - schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Not found - content: - application/json: - examples: - Not found: + type: event.summary + events: [] + pages: + next: http://api.intercom.test/events?next page + email: user26@email.com + intercom_user_id: 6762f22b1bb69f9f2193bc12 + user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 + schema: + "$ref": "#/components/schemas/data_event_summary" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: value: type: error.list - request_id: 8c288c4f-b699-4209-9de4-064398f02785 + request_id: e6f50446-be4a-40ac-8c8d-6fb91e1040fd errors: - - code: not_found - message: Resource Not Found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + "/events/summaries": + post: + summary: Create event summaries + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Data Events + operationId: dataEventSummaries + description: "Create event summaries for a user. Event summaries are used to + track the number of times an event has occurred, the first time it occurred + and the last time it occurred.\n\n" + responses: + '200': + description: successful '401': description: Unauthorized content: @@ -11321,1061 +11313,682 @@ paths: Unauthorized: value: type: error.list - request_id: 1350c241-0f22-48ca-bab9-169080340870 + request_id: 7a7d8425-2c1b-46ab-8133-c043fc1e5711 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_data_event_summaries_request" + "/export/content/data": + post: + summary: Create content data export + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Data Export + operationId: createDataExport + description: "To create your export job, you need to send a `POST` request to + the export endpoint `https://api.intercom.io/export/content/data`.\n\nThis + endpoint exports **message delivery and engagement data** for outbound content + (Emails, Posts, Custom Bots, Surveys, Tours, Series, and more). The exported + data includes who received each message, when they received it, and how they + engaged with it (opens, clicks, replies, completions, dismissals, unsubscribes, + and bounces). It does not export raw message or conversation content.\n\nThe + only parameters you need to provide are the range of dates that you want exported.\n\n>\U0001F6A7 + Limit of one active job\n>\n> You can only have one active job per workspace. + You will receive a HTTP status code of 429 with the message Exceeded rate + limit of 1 pending message data export jobs if you attempt to create a second + concurrent job.\n\n>❗️ Updated_at not included\n>\n> It should be noted that + the timeframe only includes messages sent during the time period and not messages + that were only updated during this period. For example, if a message was updated + yesterday but sent two days ago, you would need to set the created_at_after + date before the message was sent to include that in your retrieval job.\n\n>\U0001F4D8 + Date ranges are inclusive\n>\n> Requesting data for 2018-06-01 until 2018-06-30 + will get all data for those days including those specified - e.g. 2018-06-01 + 00:00:00 until 2018-06-30 23:59:99.\n" + responses: + '200': + description: successful content: application/json: examples: - API plan restricted: + successful: value: - type: error.list - request_id: 8b3deed3-fd8b-43d6-b6a8-428c9e17aabb - errors: - - code: api_plan_restricted - message: Active subscription needed. + job_identifier: al9w983lwu88w1fd + status: pending + download_url: '' + download_expires_at: '' schema: - "$ref": "#/components/schemas/error" - put: - summary: Update a conversation + "$ref": "#/components/schemas/data_export" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_data_exports_request" + examples: + successful: + summary: successful + value: + created_at_after: 1734519776 + created_at_before: 1734537776 + "/export/content/data/{job_identifier}": + get: + summary: Show content data export parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id + - name: job_identifier in: path + description: job_identifier required: true - description: The id of the conversation to target - example: 123 - schema: - type: integer - - name: display_as - in: query - required: false - description: Set to plaintext to retrieve conversation messages in plain text. This affects both the body and subject fields. Inline links are rendered as `label (url)`, preserving the link URL alongside the visible text. - example: plaintext schema: type: string tags: - - Conversations - - Custom Object Instances - operationId: updateConversation - description: |2+ - - You can update an existing conversation. - - {% admonition type="info" name="Replying and other actions" %} - If you want to reply to a coveration or take an action such as assign, unassign, open, close or snooze, take a look at the reply and manage endpoints. - {% /admonition %} - - {% admonition type="info" %} - This endpoint handles both **conversation updates** and **custom object associations**. - - See _`update a conversation with an association to a custom object instance`_ in the request/response examples to see the custom object association format. - {% /admonition %} - - {% admonition type="danger" name="Breaking change: duplicate custom attribute names" %} - The `PUT /conversations/{id}` endpoint now returns a `400 INVALID_PARAMETER` error when the request includes `custom_attributes` and your workspace contains multiple non-archived conversation custom attributes with the same name. Previously, the update would silently apply to a non-deterministic attribute. - - To resolve, rename or archive the duplicate attribute so each name is unique, then retry the request. You can do this through: - - - The Conversation Attributes API — list with `GET /conversations/attributes`, then rename with `PUT /conversations/attributes/{id}` or archive with `DELETE /conversations/attributes/{id}` - - Your workspace settings (Settings → Data → Conversations) - {% /admonition %} - + - Data Export + operationId: getDataExport + description: "You can view the status of your job by sending a `GET` request + to the URL\n`https://api.intercom.io/export/content/data/{job_identifier}` + - the `{job_identifier}` is the value returned in the response when you first + created the export job. More on it can be seen in the Export Job Model.\n\n> + \U0001F6A7 Jobs expire after two days\n> All jobs that have completed processing + (and are thus available to download from the provided URL) will have an expiry + limit of two days from when the export ob completed. After this, the data + will no longer be available.\n" responses: '200': - description: update a conversation with an association to a custom object - instance + description: successful content: application/json: examples: - conversation found: - value: - type: conversation - id: '507' - created_at: 1734537521 - updated_at: 1734537523 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918338' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267653' - name: Ciaran180 Lee - email: admin180@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1301bb69f9f2193bbab - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: true - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: - issue_type: Billing - priority: high - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '129' - part_type: conversation_attribute_updated_by_admin - body: - created_at: 1734537523 - updated_at: 1734537523 - notified_at: 1734537523 - assigned_to: - author: - id: '991267654' - type: bot - name: Fin - email: operator+this_is_an_id354_that_should_be_at_least_@intercom.io - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - - type: conversation_part - id: '130' - part_type: conversation_attribute_updated_by_admin - body: - created_at: 1734537523 - updated_at: 1734537523 - notified_at: 1734537523 - assigned_to: - author: - id: '991267654' - type: bot - name: Fin - email: operator+this_is_an_id354_that_should_be_at_least_@intercom.io - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 2 - update a conversation with an association to a custom object instance: + successful: value: - type: conversation - id: '508' - created_at: 1734537525 - updated_at: 1734537525 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918339' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267659' - name: Ciaran185 Lee - email: admin185@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1341bb69f9f2193bbac - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: - order: - type: Order.list - instances: - - id: '21' - external_id: '123' - external_created_at: 1392036272 - external_updated_at: 1392036272 - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - type: Order - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: [] - total_count: 0 + job_identifier: braxwk3j039t6txy + status: pending + download_url: '' + download_expires_at: '' schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Not found + "$ref": "#/components/schemas/data_export" + "/export/cancel/{job_identifier}": + post: + summary: Cancel content data export + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: job_identifier + in: path + description: job_identifier + required: true + schema: + type: string + tags: + - Data Export + operationId: cancelDataExport + description: You can cancel your job + responses: + '200': + description: successful content: application/json: examples: - Not found: + successful: value: - type: error.list - request_id: de1be01d-a0d3-48a6-9ea6-9789931a6887 - errors: - - code: not_found - message: Resource Not Found + job_identifier: v134nyc2bku9hj91 + status: canceled + download_url: '' + download_expires_at: '' schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: de63ddb2-c525-4ebf-ad38-82ed8b44c896 - errors: - - code: unauthorized - message: Access Token Invalid + "$ref": "#/components/schemas/data_export" + "/export/workflows/{id}": + get: + summary: Export a workflow + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + description: The unique identifier for the workflow + required: true + schema: + type: string + example: "12345" + tags: + - Workflows + operationId: exportWorkflow + description: | + Export a workflow configuration by its ID. This endpoint returns the complete workflow definition including its steps, targeting rules, and attributes. + + This endpoint is designed for EU Data Act compliance, allowing customers to export their workflow configurations. + + {% admonition type="info" name="Preview API" %} + This endpoint is available in the Preview API version. We may make iterative improvements, including adding new fields or refining existing ones. + {% /admonition %} + responses: + '200': + description: Workflow exported successfully + content: + application/json: + examples: + successful: + value: + export_version: "1.0" + exported_at: "2026-01-26T12:00:00Z" + app_id: 12345 + workflow: + id: "67890" + title: "My Workflow" + description: "A workflow that handles customer inquiries" + trigger_type: "inbound_conversation" + state: "live" + target_channels: ["chat"] + preferred_devices: ["desktop", "mobile"] + created_at: "2025-06-15T10:30:00Z" + updated_at: "2026-01-20T14:45:00Z" + targeting: {} + snapshot: {} + attributes: [] + embedded_rules: [] + schema: + "$ref": "#/components/schemas/workflow_export" + '404': + description: Workflow not found + content: + application/json: + examples: + Workflow not found: + value: + type: error.list + request_id: b3c8c472-8478-4f10-a29e-a23dbf921c46 + errors: + - code: not_found + message: Workflow not found schema: "$ref": "#/components/schemas/error" '403': - description: API plan restricted + description: Workflow export is not available for this app content: application/json: examples: - API plan restricted: + Feature not available: value: type: error.list - request_id: 34072e07-6b70-4f59-96bf-3106a3563a24 + request_id: d92f7e84-5c31-4a2b-b8e6-9f4c3d2a1b0e errors: - code: api_plan_restricted - message: Active subscription needed. + message: Workflow export is not available for this app schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_conversation_request" - examples: - conversation_found: - summary: conversation found - value: - read: true - title: new conversation title - custom_attributes: - issue_type: Billing - priority: high - update_a_conversation_with_an_association_to_a_custom_object_instance: - summary: update a conversation with an association to a custom object - instance - value: - custom_attributes: - order: - - '21' - not_found: - summary: Not found - value: - read: true - title: new conversation title - custom_attributes: - issue_type: Billing - priority: high - delete: - summary: Delete a conversation + "/download/content/data/{job_identifier}": + get: + summary: Download content data export parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id + - name: job_identifier in: path - description: id + description: job_identifier required: true schema: - type: integer - - name: retain_metrics - in: query - required: false - description: If true (default), deletes the conversation while retaining reporting - data. If false, deletes the conversation and all associated reporting data. - Setting to false requires the `delete_conversations_and_metrics` OAuth scope. - example: true - schema: - type: boolean + type: string tags: - - Conversations - operationId: deleteConversation - description: | - {% admonition type="warning" name="Irreversible operation" %} - Deleting a conversation is permanent and cannot be reversed. - {% /admonition %} - - You can delete a single conversation. The behavior depends on the `retain_metrics` parameter: - - - **With `retain_metrics=true` (default)**: Deletes the conversation while retaining reporting data. The conversation will still appear in reporting, though some data may be incomplete due to the deletion. - - - **With `retain_metrics=false`**: Deletes the conversation and all associated reporting data. The conversation will be completely removed from both the inbox and all reporting. - - {% admonition type="info" name="Required scope for retain_metrics=false" %} - Using `retain_metrics=false` requires the `delete_conversations_and_metrics` OAuth scope. - {% /admonition %} - - For more info, see [this help center article](https://www.intercom.com/help/en/articles/13885146-deleting-a-conversation). + - Data Export + operationId: downloadDataExport + description: "When a job has a status of complete, and thus a filled download_url, + you can download your data by hitting that provided URL, formatted like so: + https://api.intercom.io/download/content/data/xyz1234.\n\nYour exported message + data will be streamed continuously back down to you in a gzipped CSV format.\n\n> + \U0001F4D8 Octet header required\n>\n> You will have to specify the header + Accept: `application/octet-stream` when hitting this endpoint.\n" responses: '200': description: successful + "/jobs/status/{id}": + get: + summary: Retrieve job status + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the job which is given by Intercom + schema: + type: string + tags: + - Jobs + operationId: jobsStatus + description: Retrieve the status of job execution. + responses: + '200': + description: Job execution status content: application/json: examples: - successful: + job status retrieved: value: - id: '512' - object: conversation - deleted: true + type: job + id: '2' + status: success + resource_type: ticket + resource_id: '20' + resource_url: 'https://api.intercom.io/tickets/20' schema: - "$ref": "#/components/schemas/conversation_deleted" - '401': - description: Unauthorized + "$ref": "#/components/schemas/jobs" + '404': + description: Job not found content: application/json: examples: - Unauthorized: + Job not found: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: 123e4567-e89b-12d3-a456-426614174000 errors: - - code: unauthorized - message: Access Token Invalid + - code: job_not_found + message: Job Not Found schema: "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + '401': + description: Unauthorized content: application/json: examples: - API plan restricted: + Unauthorized: value: type: error.list - request_id: 7a80b950-b392-499f-85db-ea7c6c424d37 + request_id: 2c8a20ee-ed09-42c0-a31d-a1b4f5d2742d errors: - - code: api_plan_restricted - message: Active subscription needed. + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/conversations/search": + "/messages": post: - summary: Search conversations + summary: Create a message parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: include_monitors - in: query - required: false - description: If set to true, the response will include a `monitor_evaluations` array on each conversation with any QA monitor results that flagged it. - example: true - schema: - type: boolean - default: false - - name: include_scorecards - in: query - required: false - description: If set to true, the response will include a `scorecards` array on each conversation with any QA scorecard results. - example: true - schema: - type: boolean - default: false tags: - - Conversations - operationId: searchConversations - description: | - 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. - {% admonition type="warning" name="Optimizing search queries" %} - 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](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#example-search-conversations-request) for more details on how to use the `starting_after` param. - {% /admonition %} - - ### Nesting & Limitations - - 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: - - There's a limit of max 2 nested filters - - There's a limit of max 15 filters for each AND or OR group - - ### Accepted Fields - - Most keys listed in the conversation model are 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"`). - The `source.body` field is unique as the search will not be performed against the entire value, but instead against every element of the value separately. For example, when searching for a conversation with a `"I need support"` body - the query should contain a `=` operator with the value `"support"` for such conversation to be returned. A query with a `=` operator and a `"need support"` value will not yield a result. - - | 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 | Integer | - | team_assignee_id | Integer | - | 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 | - - ### Accepted Operators - - 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 | + - Messages + operationId: createMessage + description: "You can create a message that has been initiated by an admin. + The conversation can be either an in-app message, an email, sms or whatsapp.\n\n> \U0001F6A7 + Sending for visitors\n>\n> There can be a short delay between when a contact + is created and when a contact becomes available to be messaged through the + API. A 404 Not Found error will be returned in this case.\n\nThis will return + the Message model that has been created.\n\n> \U0001F6A7 Retrieving Associated + Conversations\n>\n> As this is a message, there will be no conversation present + until the contact responds. Once they do, you will have to search for a contact's + conversations with the id of the message.\n" responses: '200': - description: successful + description: admin message created content: application/json: examples: - successful: + user message created: value: - type: conversation.list - pages: - type: pages - page: 1 - per_page: 5 - total_pages: 1 - total_count: 1 - conversations: - - type: conversation - id: '515' - created_at: 1734537546 - updated_at: 1734537546 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918346' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267691' - name: Ciaran210 Lee - email: admin210@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f14a1bb69f9f2193bbb3 - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - with QA evaluations: - summary: Response with `include_monitors=true` and `include_scorecards=true` + type: user_message + id: '403918396' + created_at: 1734537780 + body: heyy + message_type: inapp + conversation_id: '613' + lead message created: value: - type: conversation.list - pages: - type: pages - page: 1 - per_page: 5 - total_pages: 1 - total_count: 1 - conversations: - - type: conversation - id: '601' - created_at: 1734537700 - updated_at: 1734537760 - title: - open: true - state: open - read: true - priority: none - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - ai_agent_participated: false - monitor_evaluations: - - monitor_id: '12345' - monitor_name: Customer complaint handling - monitor_type: prompt - result: flagged - explanation: The customer mentioned wanting a refund without resolution. - evaluated_at: 1734537760 - scorecards: - - scorecard_id: '67890' - scorecard_version_id: '67891' - name: Standard QA Review - scorecard_type: human - passed: true - score: 0.85 - ai_score: 0.9 - evaluated_at: 1734537760 - reviewed_teammate: - type: admin - admin_id: '991267715' - evaluators: - - evaluator_id: '54321' - result: - value: pass - source: ai - reasoning: The agent acknowledged the issue and resolved it within the same response. + type: user_message + id: '403918397' + created_at: 1734537783 + body: heyy + message_type: inapp + conversation_id: '614' + admin message created: + value: + type: admin_message + id: '19' + created_at: 1734537786 + subject: heyy + body: heyy + message_type: inapp + owner: + type: admin + id: '991267816' + name: Ciaran299 Lee + email: admin299@email.com + away_mode_enabled: false + away_mode_reassign: false schema: - "$ref": "#/components/schemas/conversation_list" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/search_request" - examples: - successful: - summary: successful - value: - query: - operator: AND - value: - - field: created_at - operator: ">" - value: '1306054154' - pagination: - per_page: 5 - "/conversations/{id}/reply": - post: - summary: Reply to a conversation - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The Intercom provisioned identifier for the conversation or the - string "last" to reply to the last part of the conversation - example: 123 or "last" + "$ref": "#/components/schemas/message" + '400': + description: No body supplied for email message + content: + application/json: + examples: + No body supplied for message: + value: + type: error.list + request_id: 3f3e74cc-65af-4408-9bf5-9e71b55c8166 + errors: + - code: parameter_invalid + message: Body is required + No body supplied for email message: + value: + type: error.list + request_id: 2d6abc61-1441-4860-9ef0-777852f8b24f + errors: + - code: parameter_invalid + message: Body is required + Invalid body supplied for sms message: + value: + type: error.list + request_id: d7997515-65af-4860-9bf5-777852f8b24f + errors: + - code: parameter_invalid + message: Invalid SMS message body + schema: + "$ref": "#/components/schemas/error" + '422': + description: No subject supplied for email message + content: + application/json: + examples: + No subject supplied for email message: + value: + type: error.list + request_id: 97db463e-7070-4ac9-9846-9a5d31933772 + errors: + - code: parameter_not_found + message: No subject supplied for email message + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 2c8a20ee-ed09-42c0-a31d-a1b4f5d2742d + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 72b6821e-54ff-4a25-adf9-abdfef5fe72b + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/create_message_request" + examples: + user_message_created: + summary: user message created + value: + from: + type: user + id: 6762f2341bb69f9f2193bc17 + body: heyy + referer: https://twitter.com/bob + lead_message_created: + summary: lead message created + value: + from: + type: lead + id: 6762f2371bb69f9f2193bc18 + body: heyy + referer: https://twitter.com/bob + admin_message_created: + summary: admin message created + value: + from: + type: admin + id: '991267816' + to: + - type: user + id: 6762f2391bb69f9f2193bc19 + - type: lead + id: 6762f23c1bb69f9f2193bc1b + - type: user + id: 6762f23d1bb69f9f2193bc1c + cc: + - type: user + id: 6762f23e1bb69f9f2193bc1d + - type: user + id: 6762f23f1bb69f9f2193bc1e + bcc: + - type: user + id: 6762f23e1bb69f9f2193bc2f + message_type: conversation + body: heyy + admin_sms_message_created: + summary: admin sms message created + value: + from: + type: admin + id: '991267817' + to: + type: user + id: 6762f23a1bb69f9f2193bc1a + message_type: sms + body: heyy + admin_whatsapp_message_created: + summary: admin whatsapp message created + value: + from: + type: admin + id: '991267817' + to: + phone: +5547999998888 + name: John Doe + message_type: whatsapp + components: + - type: BODY + parameters: + - type: text + text: Username 123 + template: keep_live + locale: en + no_body_supplied_for_message: + summary: No body supplied for message + value: + from: + type: admin + id: '991267818' + to: + type: user + id: 6762f23b1bb69f9f2193bc1a + message_type: inapp + body: + subject: heyy + no_subject_supplied_for_email_message: + summary: No subject supplied for email message + value: + from: + type: admin + id: '991267819' + to: + type: user + user_id: '70' + message_type: email + body: hey there + no_body_supplied_for_email_message: + summary: No body supplied for email message + value: + from: + type: admin + id: '991267820' + to: + type: user + id: 6762f23d1bb69f9f2193bc1c + message_type: email + body: + subject: heyy + invalid_body_supplied_for_sms_message: + summary: Invalid body supplied for sms message + value: + from: + type: admin + id: '991267821' + to: + type: user + id: 6762f23b1bb69f9f2193bc1d + message_type: sms + body: heyy https://picsum.photos/200/300 + "/news/news_items": + get: + summary: List all news items + parameters: + - name: Intercom-Version + in: header schema: - type: string + "$ref": "#/components/schemas/intercom_version" tags: - - Conversations - operationId: replyConversation - description: |- - You can reply to a conversation with a message from an admin or on behalf of a contact, or with a note for admins. - - {% admonition type="warning" name="Bot replies to inbound email" %} - By default, bot or Operator replies to an inbound email conversation aren't sent to your customer. The reply is stored as an unnotifiable bot comment, and no `seen` receipt is generated until an email is actually delivered. - - To send these replies as outbound emails, reach out to your accounts team to enable the email-reply feature flag for your workspace. - {% /admonition %} + - News + operationId: listNewsItems + description: You can fetch a list of all news items responses: '200': - description: User last conversation reply + description: successful content: application/json: examples: - User reply: + successful: value: - type: conversation - id: '524' - created_at: 1734537559 - updated_at: 1734537561 - waiting_since: 1734537561 - snoozed_until: - source: - type: conversation - id: '403918349' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267694' - name: Ciaran212 Lee - email: admin212@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1571bb69f9f2193bbbb - external_id: '70' - first_contact_reply: - created_at: 1734537561 - type: conversation - url: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: true - state: open - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '132' - part_type: open - body: "

Thanks again :)

" - created_at: 1734537561 - updated_at: 1734537561 - notified_at: 1734537561 - assigned_to: - author: - id: 6762f1571bb69f9f2193bbbb - type: user - name: Joe Bloggs - email: joe@bloggs.com - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 - Admin Reply with a Note: + type: list + pages: + page: 1 + per_page: 10 + total_pages: 1 + type: pages + data: + - id: '29' + type: news-item + workspace_id: this_is_an_id530_that_should_be_at_least_ + title: We have news + body: "

Hello there,

" + sender_id: 991267825 + state: draft + labels: [] + cover_image_url: + reactions: + - + - + - + - + deliver_silently: false + created_at: 1734537793 + updated_at: 1734537793 + newsfeed_assignments: [] + - id: '30' + type: news-item + workspace_id: this_is_an_id530_that_should_be_at_least_ + title: We have news + body: "

Hello there,

" + sender_id: 991267827 + state: draft + labels: [] + cover_image_url: + reactions: + - + - + - + - + deliver_silently: false + created_at: 1734537793 + updated_at: 1734537793 + newsfeed_assignments: [] + total_count: 2 + schema: + "$ref": "#/components/schemas/paginated_response" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: value: - type: conversation - id: '525' - created_at: 1734537563 - updated_at: 1734537565 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918350' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267696' - name: Ciaran213 Lee - email: admin213@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f15b1bb69f9f2193bbbc - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '133' - part_type: note - body: |- -

An Unordered HTML List

-
    -
  • Coffee
  • -
  • Tea
  • -
  • Milk
  • -
-

An Ordered HTML List

-
    -
  1. Coffee
  2. -
  3. Tea
  4. -
  5. Milk
  6. -
- created_at: 1734537565 - updated_at: 1734537565 - notified_at: 1734537565 - assigned_to: - author: - id: '991267696' - type: admin - name: Ciaran213 Lee - email: admin213@email.com - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 - Admin Reply to send Quick Reply Options: + type: error.list + request_id: d7997515-cd92-4fe4-966c-cb1f4bdda1d4 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + post: + summary: Create a news item + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - News + operationId: createNewsItem + description: You can create a news item + responses: + '200': + description: successful + content: + application/json: + examples: + successful: value: - type: conversation - id: '526' - created_at: 1734537567 - updated_at: 1734537568 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918351' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267698' - name: Ciaran214 Lee - email: admin214@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f15e1bb69f9f2193bbbd - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '134' - part_type: quick_reply - body: - created_at: 1734537568 - updated_at: 1734537568 - notified_at: 1734537568 - assigned_to: - author: - id: '991267698' - type: admin - name: Ciaran214 Lee - email: admin214@email.com - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 - User last conversation reply: - value: - type: conversation - id: '527' - created_at: 1734537571 - updated_at: 1734537572 - waiting_since: 1734537572 - snoozed_until: - source: - type: conversation - id: '403918352' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267700' - name: Ciaran215 Lee - email: admin215@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1621bb69f9f2193bbbe - external_id: '70' - first_contact_reply: - created_at: 1734537572 - type: conversation - url: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: true - state: open - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '135' - part_type: open - body: "

Thanks again :)

" - created_at: 1734537572 - updated_at: 1734537572 - notified_at: 1734537572 - assigned_to: - author: - id: 6762f1621bb69f9f2193bbbe - type: user - name: Joe Bloggs - email: joe@bloggs.com - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 - schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Not found - content: - application/json: - examples: - Not found: - value: - type: error.list - request_id: '06234918-c245-4caa-a2cc-90247983c6ff' - errors: - - code: not_found - message: Resource Not Found + id: '33' + type: news-item + workspace_id: this_is_an_id534_that_should_be_at_least_ + title: Halloween is here! + body: "

New costumes in store for this spooky season

" + sender_id: 991267834 + state: live + labels: + - New + - Product + - Update + cover_image_url: + reactions: + - "\U0001F606" + - "\U0001F605" + deliver_silently: true + created_at: 1734537797 + updated_at: 1734537797 + newsfeed_assignments: + - newsfeed_id: 53 + published_at: 1664638214 schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/news_item" '401': description: Unauthorized content: @@ -12384,79 +11997,39 @@ paths: Unauthorized: value: type: error.list - request_id: 50f1e8d1-cf1a-450c-a7b5-87a264076241 + request_id: 5142ad8e-883e-4b71-9adb-6494851e9b77 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '403': - description: API plan restricted - content: - application/json: - examples: - API plan restricted: - value: - type: error.list - request_id: 48ad16d0-525c-40bf-b733-89239feb70e3 - errors: - - code: api_plan_restricted - message: Active subscription needed. - schema: - "$ref": "#/components/schemas/error" requestBody: content: application/json: schema: - "$ref": "#/components/schemas/reply_conversation_request" + "$ref": "#/components/schemas/news_item_request" examples: - user_reply: - summary: User reply - value: - message_type: comment - type: user - intercom_user_id: 6762f1571bb69f9f2193bbbb - body: Thanks again :) - admin_note_reply: - summary: Admin Reply with a Note - value: - message_type: note - type: admin - admin_id: 991267696 - body: "

An Unordered HTML List

  • Coffee
  • - \
  • Tea
  • Milk

An Ordered HTML List

- \
  1. Coffee
  2. Tea
  3. Milk
- \ " - admin_quick_reply_reply: - summary: Admin Reply to send Quick Reply Options - value: - message_type: quick_reply - type: admin - admin_id: 991267698 - reply_options: - - text: 'Yes' - uuid: a5e1c524-5ddd-4c3e-9328-6bca5d6e3edb - - text: 'No' - uuid: f4a98af1-be56-4948-a57e-e1a83f8484c6 - contact_quick_reply_reply: - summary: User reply with quick reply selection - value: - message_type: quick_reply - type: user - intercom_user_id: 6762f1621bb69f9f2193bbbe - reply_options: - - text: 'Yes' - uuid: a5e1c524-5ddd-4c3e-9328-6bca5d6e3edb - user_last_conversation_reply: - summary: User last conversation reply + successful: + summary: successful value: - message_type: comment - type: user - intercom_user_id: 6762f1661bb69f9f2193bbbf - body: Thanks again :) - "/conversations/{id}/parts": - post: - summary: Manage a conversation + title: Halloween is here! + body: "

New costumes in store for this spooky season

" + labels: + - Product + - Update + - New + sender_id: 991267834 + deliver_silently: true + reactions: + - "\U0001F606" + - "\U0001F605" + state: live + newsfeed_assignments: + - newsfeed_id: 53 + published_at: 1664638214 + "/news/news_items/{id}": + get: + summary: Retrieve a news item parameters: - name: Intercom-Version in: header @@ -12465,358 +12038,124 @@ paths: - name: id in: path required: true - description: The identifier for the conversation as given by Intercom. - example: '123' + description: The unique identifier for the news item which is given by Intercom. + example: 123 schema: - type: string + type: integer tags: - - Conversations - operationId: manageConversation - description: | - For managing conversations you can: - - Close a conversation - - Snooze a conversation to reopen on a future date - - Open a conversation which is `snoozed` or `closed` - - Assign a conversation to an admin and/or team. + - News + operationId: retrieveNewsItem + description: You can fetch the details of a single news item. responses: '200': - description: Assign a conversation + description: successful content: application/json: examples: - Close a conversation: + successful: value: - type: conversation - id: '531' - created_at: 1734537582 - updated_at: 1734537584 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918356' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267708' - name: Ciaran219 Lee - email: admin219@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f16e1bb69f9f2193bbc2 - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: false - state: closed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '136' - part_type: close - body: "

Goodbye :)

" - created_at: 1734537584 - updated_at: 1734537584 - notified_at: 1734537584 - assigned_to: - author: - id: '991267708' - type: admin - name: Ciaran219 Lee - email: admin219@email.com - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 - Snooze a conversation: + id: '34' + type: news-item + workspace_id: this_is_an_id538_that_should_be_at_least_ + title: We have news + body: "

Hello there,

" + sender_id: 991267837 + state: live + labels: [] + cover_image_url: + reactions: + - + - + - + - + deliver_silently: false + created_at: 1734537800 + updated_at: 1734537800 + newsfeed_assignments: + - newsfeed_id: 55 + published_at: 1734537800 + schema: + "$ref": "#/components/schemas/news_item" + '404': + description: News Item Not Found + content: + application/json: + examples: + News Item Not Found: value: - type: conversation - id: '532' - created_at: 1734537586 - updated_at: 1734537587 - waiting_since: - snoozed_until: 1734541187 - source: - type: conversation - id: '403918357' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267710' - name: Ciaran220 Lee - email: admin220@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1711bb69f9f2193bbc3 - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: true - state: snoozed - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '137' - part_type: snoozed - body: - created_at: 1734537587 - updated_at: 1734537587 - notified_at: 1734537587 - assigned_to: - author: - id: '991267710' - type: admin - name: Ciaran220 Lee - email: admin220@email.com - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 - Open a conversation: + type: error.list + request_id: da84e250-8626-47e8-815c-62b33f0f2c36 + errors: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: value: - type: conversation - id: '537' - created_at: 1734537587 - updated_at: 1734537601 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918358' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267712' - name: Ciaran221 Lee - email: admin221@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1781bb69f9f2193bbc8 - external_id: '74' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: true - state: open - read: true - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: '' - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '139' - part_type: open - body: - created_at: 1734537601 - updated_at: 1734537601 - notified_at: 1734537601 - assigned_to: - author: - id: '991267712' - type: admin - name: Ciaran221 Lee - email: admin221@email.com - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 - Assign a conversation: + type: error.list + request_id: 33ff62c6-ceb7-4bde-93d6-301bed6f24b2 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + put: + summary: Update a news item + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the news item which is given by Intercom. + example: 123 + schema: + type: integer + tags: + - News + operationId: updateNewsItem + responses: + '200': + description: successful + content: + application/json: + examples: + successful: value: - type: conversation - id: '542' - created_at: 1734537603 - updated_at: 1734537605 - waiting_since: - snoozed_until: - source: - type: conversation - id: '403918361' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267715' - name: Ciaran223 Lee - email: admin223@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1831bb69f9f2193bbcc - external_id: '70' - first_contact_reply: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: true - state: open - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '140' - part_type: assign_and_reopen - body: - created_at: 1734537605 - updated_at: 1734537605 - notified_at: 1734537605 - assigned_to: - type: admin - id: '991267715' - author: - id: '991267715' - type: admin - name: Ciaran223 Lee - email: admin223@email.com - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 + id: '37' + type: news-item + workspace_id: this_is_an_id544_that_should_be_at_least_ + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + sender_id: 991267845 + state: live + labels: [] + cover_image_url: + reactions: + - "\U0001F61D" + - "\U0001F602" + deliver_silently: false + created_at: 1734537803 + updated_at: 1734537804 + newsfeed_assignments: [] schema: - "$ref": "#/components/schemas/conversation" + "$ref": "#/components/schemas/news_item" '404': - description: Not found + description: News Item Not Found content: application/json: examples: - Not found: + News Item Not Found: value: type: error.list - request_id: e056b3c3-fae3-4a3c-9bcf-836b84efa331 + request_id: 2014d867-b634-495a-9b4f-ce56c4d657a9 errors: - code: not_found message: Resource Not Found @@ -12830,209 +12169,98 @@ paths: Unauthorized: value: type: error.list - request_id: 623bbbb8-f6fb-45f3-a2e2-4106ff3a4349 + request_id: 5838c54e-dd15-460b-82dd-794c4d0e12c5 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '403': - description: API plan restricted - content: - application/json: - examples: - API plan restricted: - value: - type: error.list - request_id: a57737d0-63a7-42bd-aa65-8380ef828124 - errors: - - code: api_plan_restricted - message: Active subscription needed. - schema: - "$ref": "#/components/schemas/error" requestBody: content: application/json: schema: - oneOf: - - "$ref": "#/components/schemas/close_conversation_request" - - "$ref": "#/components/schemas/snooze_conversation_request" - - "$ref": "#/components/schemas/open_conversation_request" - - "$ref": "#/components/schemas/assign_conversation_request" + "$ref": "#/components/schemas/news_item_request" examples: - close_a_conversation: - summary: Close a conversation - value: - message_type: close - type: admin - admin_id: 991267708 - body: Goodbye :) - snooze_a_conversation: - summary: Snooze a conversation - value: - message_type: snoozed - admin_id: 991267710 - snoozed_until: 1734541187 - open_a_conversation: - summary: Open a conversation - value: - message_type: open - admin_id: 991267712 - assign_a_conversation: - summary: Assign a conversation + successful: + summary: successful value: - message_type: assignment - type: admin - admin_id: 991267715 - assignee_id: 991267715 - not_found: - summary: Not found + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + sender_id: 991267845 + reactions: + - "\U0001F61D" + - "\U0001F602" + news_item_not_found: + summary: News Item Not Found value: - message_type: close - type: admin - admin_id: 991267717 - body: Goodbye :) - "/conversations/{conversation_id}/conversation_parts/{id}": - put: - summary: Update a conversation part + title: Christmas is here! + body: "

New gifts in store for the jolly season

" + sender_id: 991267848 + reactions: + - "\U0001F61D" + - "\U0001F602" + delete: + summary: Delete a news item parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: conversation_id - in: path - required: true - description: The identifier for the conversation as given by Intercom. - example: '123' - schema: - type: string - name: id in: path required: true - description: The identifier for the conversation part. - example: '456' + description: The unique identifier for the news item which is given by Intercom. + example: 123 schema: - type: string + type: integer tags: - - Conversation Parts - operationId: updateConversationPart - description: | - You can update properties of a conversation part. Currently supports updating the send state of an external reply or marking a part as seen by an admin. - - {% admonition type="warning" name="Experimental" %} - This is an experimental endpoint. It requires a valid HMAC secret for authentication in addition to the standard bearer token. - {% /admonition %} - responses: + - News + operationId: deleteNewsItem + description: You can delete a single news item. + responses: '200': - description: Conversation part updated - content: - application/json: - examples: - Update send state: - value: - type: conversation_part - id: '456' - part_type: comment - body: "

Hello there!

" - created_at: 1734537559 - updated_at: 1734537561 - notified_at: 1734537559 - assigned_to: - author: - id: '991267694' - type: admin - name: Ciaran Lee - email: admin@email.com - attachments: [] - external_id: - external_reply_send_state: sent - Mark part as seen: - value: - type: conversation_part - id: '456' - part_type: comment - body: "

Hello there!

" - created_at: 1734537559 - updated_at: 1734537561 - notified_at: 1734537559 - assigned_to: - author: - id: '991267694' - type: admin - name: Ciaran Lee - email: admin@email.com - attachments: [] - external_id: - seen_state: - admin_seen: true - schema: - "$ref": "#/components/schemas/conversation_part" - '401': - description: Unauthorized + description: successful content: application/json: examples: - Unauthorized: + successful: value: - type: error.list - request_id: a3e5b8e2-1234-5678-9abc-def012345678 - errors: - - code: unauthorized - message: Access Token Invalid + id: '40' + object: news-item + deleted: true schema: - "$ref": "#/components/schemas/error" - '403': - description: Forbidden + "$ref": "#/components/schemas/deleted_object" + '404': + description: News Item Not Found content: application/json: examples: - Forbidden: + News Item Not Found: value: type: error.list - request_id: b4f6c9d3-2345-6789-abcd-ef0123456789 + request_id: 23728e22-7b9f-44a9-9b8d-5028811b9cd0 errors: - - code: forbidden - message: Forbidden request + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" - '404': - description: Conversation part not found + '401': + description: Unauthorized content: application/json: examples: - Conversation part not found: + Unauthorized: value: type: error.list - request_id: c5a7d0e4-3456-789a-bcde-f01234567890 + request_id: e5357876-89be-4a04-80c3-16735b7f53ff errors: - - code: not_found - message: Resource Not Found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_conversation_part_request" - examples: - update_send_state: - summary: Update send state - value: - send_state: sent - info_message: Message delivered successfully - experimental: true - secret: hmac_secret_value - mark_as_seen: - summary: Mark part as seen - value: - seen: true - admin_id: '991267694' - experimental: true - secret: hmac_secret_value - "/conversations/{id}/customers": - post: - summary: Attach a contact to a conversation + "/news/newsfeeds/{id}/items": + get: + summary: List all live newsfeed items parameters: - name: Intercom-Version in: header @@ -13041,47 +12269,34 @@ paths: - name: id in: path required: true - description: The identifier for the conversation as given by Intercom. + description: The unique identifier for the news feed item which is given by + Intercom. example: '123' schema: type: string tags: - - Conversation Participants - operationId: attachContactToConversation - description: |+ - You can add participants who are contacts to a conversation, on behalf of either another contact or an admin. - - {% admonition type="warning" name="Contacts without an email" %} - 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`. - {% /admonition %} - + - News + operationId: listLiveNewsfeedItems + description: You can fetch a list of all news items that are live on a given + newsfeed responses: '200': - description: Attach a contact to a conversation - content: - application/json: - examples: - Attach a contact to a conversation: - value: - customers: - - type: user - id: 6762f19b1bb69f9f2193bbd4 - schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Not found + description: successful content: application/json: examples: - Not found: + successful: value: - type: error.list - request_id: 86fd8b2e-7048-4fbd-9fb0-d73085d7210b - errors: - - code: not_found - message: Resource Not Found + type: list + pages: + page: 1 + per_page: 20 + total_pages: 0 + type: pages + data: [] + total_count: 0 schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/paginated_response" '401': description: Unauthorized content: @@ -13090,124 +12305,101 @@ paths: Unauthorized: value: type: error.list - request_id: 9dc7c1a0-b818-472c-adf6-3e327f22f541 + request_id: 022ff8b0-d16f-437c-8217-754c13e16dee errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + "/news/newsfeeds": + get: + summary: List all newsfeeds + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - News + operationId: listNewsfeeds + description: You can fetch a list of all newsfeeds + responses: + '200': + description: successful content: application/json: examples: - API plan restricted: + successful: + value: + type: list + pages: + page: 1 + per_page: 10 + total_pages: 1 + type: pages + data: + - id: '68' + type: newsfeed + name: Visitor Feed + created_at: 1734537813 + updated_at: 1734537813 + - id: '69' + type: newsfeed + name: Visitor Feed + created_at: 1734537813 + updated_at: 1734537813 + total_count: 2 + schema: + "$ref": "#/components/schemas/paginated_response" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: value: type: error.list - request_id: 99f72599-ac98-4b1e-af96-808654b6383e + request_id: caa26d8b-6512-445d-9418-9fc5849ca304 errors: - - code: api_plan_restricted - message: Active subscription needed. + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/attach_contact_to_conversation_request" - examples: - attach_a_contact_to_a_conversation: - summary: Attach a contact to a conversation - value: - admin_id: 991267731 - customer: - intercom_user_id: 6762f19b1bb69f9f2193bbd4 - not_found: - summary: Not found - value: - admin_id: 991267733 - customer: - intercom_user_id: 6762f19e1bb69f9f2193bbd5 - "/conversations/{conversation_id}/customers/{contact_id}": - delete: - summary: Detach a contact from a group conversation + "/news/newsfeeds/{id}": + get: + summary: Retrieve a newsfeed parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: conversation_id - in: path - required: true - description: The identifier for the conversation as given by Intercom. - example: '123' - schema: - type: string - - name: contact_id + - name: id in: path required: true - description: The identifier for the contact as given by Intercom. + description: The unique identifier for the news feed item which is given by + Intercom. example: '123' schema: type: string tags: - - Conversation Participants - operationId: detachContactFromConversation - description: |+ - You can remove participants who are contacts from a group conversation, on behalf of an admin. - - {% admonition type="warning" name="Removing the last participant" %} - You cannot remove the last remaining contact from a conversation. - {% /admonition %} - + - News + operationId: retrieveNewsfeed + description: You can fetch the details of a single newsfeed responses: '200': - description: Detach a contact from a group conversation - content: - application/json: - examples: - Detach a contact from a group conversation: - value: - customers: - - type: user - id: 6762f1b41bb69f9f2193bbe0 - schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Contact not found - content: - application/json: - examples: - Conversation not found: - value: - type: error.list - request_id: 89835b60-6756-4d2a-b148-26ca0cb49f9f - errors: - - code: not_found - message: Resource Not Found - Contact not found: - value: - type: error.list - request_id: ab1b9371-3185-417f-a53a-dcae35892980 - errors: - - code: not_found - message: User Not Found - schema: - "$ref": "#/components/schemas/error" - '422': - description: Last customer + description: successful content: application/json: examples: - Last customer: + successful: value: - type: error.list - request_id: 8275e92f-66b7-40f9-82a8-9647ca8d7eb4 - errors: - - code: parameter_invalid - message: Removing the last customer is not allowed + id: '72' + type: newsfeed + name: Visitor Feed + created_at: 1734537815 + updated_at: 1734537815 schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/newsfeed" '401': description: Unauthorized content: @@ -13216,59 +12408,15 @@ paths: Unauthorized: value: type: error.list - request_id: 89ef64b2-d1f9-40c3-89e9-d39175d3d647 + request_id: 6d9a1bf5-aa08-4c93-a61a-5a21130b6553 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '403': - description: API plan restricted - content: - application/json: - examples: - API plan restricted: - value: - type: error.list - request_id: 6fe4106b-967a-46ba-b1c9-9996aff6e8c3 - errors: - - code: api_plan_restricted - message: Active subscription needed. - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/detach_contact_from_conversation_request" - examples: - detach_a_contact_from_a_group_conversation: - summary: Detach a contact from a group conversation - value: - admin_id: 991267739 - customer: - intercom_user_id: 6762f1a61bb69f9f2193bbd8 - conversation_not_found: - summary: Conversation not found - value: - admin_id: 991267742 - customer: - intercom_user_id: 6762f1b61bb69f9f2193bbe1 - contact_not_found: - summary: Contact not found - value: - admin_id: 991267745 - customer: - intercom_user_id: 6762f1c41bb69f9f2193bbe9 - last_customer: - summary: Last customer - value: - admin_id: 991267748 - customer: - intercom_user_id: 6762f1d11bb69f9f2193bbf1 - "/conversations/{id}/handling_events": + "/notes/{id}": get: - summary: List handling events + summary: Retrieve a note parameters: - name: Intercom-Version in: header @@ -13277,259 +12425,160 @@ paths: - name: id in: path required: true - description: The identifier for the conversation as given by Intercom. - example: '123' + description: The unique identifier of a given note + example: 1 schema: - type: string + type: integer tags: - - Conversations - operationId: listHandlingEvents - description: | - List all pause/resume events for a conversation. These events track when teammates paused or resumed handling a conversation. - - Requires the `read_conversations` OAuth scope. + - Notes + operationId: retrieveNote + description: You can fetch the details of a single note. responses: '200': - description: Successful response + description: Note found content: application/json: - schema: - "$ref": "#/components/schemas/handling_event_list" examples: - Successful response: + Note found: value: - handling_events: - - teammate: - type: admin - id: 123 - name: Jane Example - email: jane@example.com - type: paused - timestamp: "2026-01-09T09:00:00Z" - reason: Paused - - teammate: - type: admin - id: 123 - name: Jane Example - email: jane@example.com - type: resumed - timestamp: "2026-01-09T09:10:00Z" - '401': - description: Unauthorized + type: note + id: '34' + created_at: 1733846617 + contact: + type: contact + id: 6762f2591bb69f9f2193bc1f + author: + type: admin + id: '991267864' + name: Ciaran346 Lee + email: admin346@email.com + away_mode_enabled: false + away_mode_reassign: false + body: "

This is a note.

" + schema: + "$ref": "#/components/schemas/note" + '404': + description: Note not found content: application/json: + examples: + Note not found: + value: + type: error.list + request_id: bc300b1a-492a-405f-924e-a5881cb72e3a + errors: + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" - '404': - description: Conversation not found + '401': + description: Unauthorized content: application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 81384687-5818-4df9-b421-fba77edd6c17 + errors: + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/conversations/{id}/side_conversations": + "/secure_mode_secrets": get: - summary: List side conversations + summary: List all identity verification secrets parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The identifier for the conversation as given by Intercom. - example: '123' - schema: - type: string - - name: page - in: query - required: false - description: The page number of results to return (starting from 1). - schema: - type: integer - default: 1 - - name: per_page - in: query - required: false - description: The number of side conversations to return per page (max 50). - schema: - type: integer - default: 25 - maximum: 50 tags: - - Conversations - operationId: listSideConversations + - Identity Verification Secrets + operationId: listIdentityVerificationSecrets description: | - List side conversations for a given conversation. Side conversations are internal threads created by teammates from within a conversation. - - Each side conversation includes its conversation parts (messages). Results are paginated. + Returns the identity verification secrets configured for your workspace. - Requires the `read_conversations` OAuth scope. + Each entry includes metadata only — the HMAC signing material itself is **never** returned by this endpoint. The raw secret is only available once, in the response to `POST /secure_mode_secrets`. Persist it at that moment. responses: '200': description: Successful response content: application/json: - schema: - "$ref": "#/components/schemas/side_conversation_list" examples: Successful response: value: - type: side_conversation.list - side_conversations: - - side_conversation_id: '456' - conversation_parts: - - type: conversation_part - id: '789' - part_type: comment - body: "

Internal note about this issue

" - author: - type: admin - id: '123' - name: Jane Example - email: jane@example.com - created_at: 1663597223 - updated_at: 1663597223 - total_count: 1 - total_count: 1 - pages: - type: pages - page: 1 - per_page: 25 - total_pages: 1 + type: list + data: + - type: identity_verification_secret + id: '102' + name: Production Web + supports_android: false + supports_ios: false + supports_web: true + created_at: 1734537243 + schema: + "$ref": "#/components/schemas/identity_verification_secret_list" '401': description: Unauthorized content: application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: 6f8e61d8-6a9a-4f1e-bfbb-6c7c0c0aef1c + errors: + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '404': - description: Conversation not found - content: - application/json: - schema: - "$ref": "#/components/schemas/error" - "/conversations/redact": post: - summary: Redact a conversation part + summary: Create an identity verification secret parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - - Conversation Parts - operationId: redactConversation - description: |+ - You can redact a conversation part or the source message of a conversation (as seen in the source object). - - {% admonition type="info" name="Redacting parts and messages" %} - 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. - {% /admonition %} + - Identity Verification Secrets + operationId: createIdentityVerificationSecret + description: | + Creates a new identity verification secret for your workspace. Intercom generates a 256-bit, cryptographically random value server-side and returns it once in the response. + + **This is the only opportunity to capture the secret.** Store it in your secure configuration immediately. The `secret` field is omitted from all subsequent responses (including `GET /secure_mode_secrets`) — if you lose it, you must rotate a new secret in and delete this one. + You must enable the secret for at least one platform (`supports_android`, `supports_ios`, or `supports_web`). Rotation flow: create the new secret, roll it out to every client signing `user_hash` values, then delete the old secret with `DELETE /secure_mode_secrets/{id}` once traffic has cut over. responses: - '200': - description: Redact a conversation part + '201': + description: Secret created content: application/json: examples: - Redact a conversation part: + Secret created: value: - type: conversation - id: '608' - created_at: 1734537721 - updated_at: 1734537724 - waiting_since: 1734537722 - snoozed_until: - source: - type: conversation - id: '403918391' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267757' - name: Ciaran247 Lee - email: admin247@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1f81bb69f9f2193bc09 - external_id: '70' - first_contact_reply: - created_at: 1734537722 - type: conversation - url: - admin_assignee_id: 991267715 - team_assignee_id: 5017691 - open: true - state: open - read: true - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - channel: - initial: messenger - current: messenger - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '149' - part_type: open - body: "

This message was deleted

" - created_at: 1734537722 - updated_at: 1734537724 - notified_at: 1734537722 - assigned_to: - author: - id: 6762f1f81bb69f9f2193bc09 - type: user - name: Joe Bloggs - email: joe@bloggs.com - attachments: [] - external_id: - redacted: true - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 + type: identity_verification_secret + id: '103' + name: Production Web + secret: 9Zw0xNs3vKk0fPz9rwKqNbzH3mPVQmQxL9vhSm9Tk4A + supports_android: false + supports_ios: false + supports_web: true + created_at: 1734537500 schema: - "$ref": "#/components/schemas/conversation" - '404': - description: Not found + "$ref": "#/components/schemas/identity_verification_secret_with_material" + '422': + description: Invalid parameters content: application/json: examples: - Not found: + Invalid parameters: value: type: error.list - request_id: 5b7bb755-4031-4bfe-8897-54d0f1872bbc + request_id: 2fda7f9b-4a31-4c59-8b3f-3e5c4f8a1d22 errors: - - code: conversation_part_or_message_not_found - message: Conversation part or message not found + - code: parameter_invalid + message: name is required schema: "$ref": "#/components/schemas/error" '401': @@ -13540,7 +12589,7 @@ paths: Unauthorized: value: type: error.list - request_id: 4814668f-5d31-4bf7-8f66-b426aac054db + request_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 errors: - code: unauthorized message: Access Token Invalid @@ -13550,23 +12599,23 @@ paths: content: application/json: schema: - "$ref": "#/components/schemas/redact_conversation_request" + "$ref": "#/components/schemas/create_identity_verification_secret_request" examples: - redact_a_conversation_part: - summary: Redact a conversation part + web_only: + summary: Create a web-only secret value: - type: conversation_part - conversation_id: 608 - conversation_part_id: 149 - not_found: - summary: Not found + name: Production Web + supports_web: true + multi_platform: + summary: Create a secret for web and mobile value: - type: conversation_part - conversation_id: really_123_doesnt_exist - conversation_part_id: really_123_doesnt_exist - "/conversations/{id}/merge": - post: - summary: Merge a conversation + name: Production all-platform + supports_web: true + supports_ios: true + supports_android: true + "/secure_mode_secrets/{id}": + delete: + summary: Delete an identity verification secret parameters: - name: Intercom-Version in: header @@ -13574,121 +12623,31 @@ paths: "$ref": "#/components/schemas/intercom_version" - name: id in: path + description: The unique identifier of the identity verification secret + example: '102' required: true - description: The identifier for the secondary (source) conversation to merge away. - example: '123' schema: type: string tags: - - Conversations - operationId: mergeConversation + - Identity Verification Secrets + operationId: deleteIdentityVerificationSecret description: | - Merge a secondary (source) conversation into a primary (target) conversation. - The secondary conversation is closed and linked to the primary, which - becomes the surviving thread. Returns the primary conversation on success. - - Requires `write_conversations` OAuth scope. When the secondary is a ticket, - `write_tickets` scope is also required. + Soft-deletes an identity verification secret. After deletion, any `user_hash` values signed with that secret will no longer verify — Messenger sessions depending on it will be rejected on their next request. Use this to complete a rotation: create a new secret, roll it out, then delete the old one. responses: - '200': - description: Conversation merged - content: - application/json: - examples: - Conversation merged: - value: - type: conversation - id: '456' - created_at: 1734537559 - updated_at: 1734537561 - waiting_since: 1734537561 - snoozed_until: - source: - type: conversation - id: '403918349' - delivered_as: admin_initiated - subject: '' - body: "

this is the message body

" - author: - type: admin - id: '991267694' - name: Ciaran212 Lee - email: admin212@email.com - attachments: [] - url: - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1571bb69f9f2193bbbb - external_id: '70' - first_contact_reply: - created_at: 1734537561 - type: conversation - url: - admin_assignee_id: - team_assignee_id: - open: true - state: open - read: false - tags: - type: tag.list - tags: [] - priority: none - sla_applied: - statistics: - conversation_rating: - teammates: - title: - custom_attributes: {} - topics: {} - ticket: - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - ai_topics: - ai_agent: - ai_agent_participated: false - conversation_parts: - type: conversation_part.list - conversation_parts: - - type: conversation_part - id: '133' - part_type: merged_primary_conversation - body: - created_at: 1734537561 - updated_at: 1734537561 - notified_at: 1734537561 - assigned_to: - author: - id: '991267694' - type: bot - name: Operator - email: operator@intercom.io - attachments: [] - external_id: - redacted: false - metadata: {} - email_message_metadata: - app_package_code: null - total_count: 1 - schema: - "$ref": "#/components/schemas/conversation" - '400': - description: Bad request + '204': + description: Secret deleted + '404': + description: Secret not found content: application/json: examples: - Bad request: + Secret not found: value: type: error.list - request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 + request_id: 77b9d3c0-09e1-4d5f-8e6c-7d4a2f1b9a12 errors: - - code: parameter_invalid - message: merge_into_conversation_id must be a valid integer conversation ID + - code: identity_verification_secret_not_found + message: Identity verification secret not found schema: "$ref": "#/components/schemas/error" '401': @@ -13699,370 +12658,171 @@ paths: Unauthorized: value: type: error.list - request_id: a3e5b8e2-1234-5678-9abc-def012345678 + request_id: c1c0477c-5b80-4874-be65-01ec8a9ffe14 errors: - - code: token_unauthorized - message: Not authorized to access resource + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '403': - description: Forbidden - content: - application/json: - examples: - Forbidden: - value: - type: error.list - request_id: b4f6c9d3-2345-6789-abcd-ef0123456789 - errors: - - code: forbidden - message: Forbidden request - schema: - "$ref": "#/components/schemas/error" - '422': - description: Merge failed - content: - application/json: - examples: - Primary not found: - value: - type: error.list - request_id: c5a7d0e4-3456-789a-bcde-f01234567890 - errors: - - code: merge_failed - message: Primary conversation not found - Already merged: - value: - type: error.list - request_id: d6b8e1f5-4567-890b-cdef-012345678901 - errors: - - code: merge_failed - message: Secondary conversation has already been merged - Self-merge: - value: - type: error.list - request_id: e7c9f2a6-5678-901c-def0-123456789012 - errors: - - code: merge_failed - message: Cannot merge a conversation into itself - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/merge_conversations_request" - examples: - merge_a_conversation: - summary: Merge a conversation - value: - merge_into_conversation_id: 456 - "/conversations/{id}/convert": - post: - summary: Convert a conversation to a ticket + "/segments": + get: + summary: List all segments parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The id of the conversation to target - example: 123 + - name: include_count + in: query + required: false + description: It includes the count of contacts that belong to each segment. + example: true schema: - type: integer + type: boolean tags: - - Conversations - description: You can convert a conversation to a ticket. - operationId: convertConversationToTicket + - Segments + operationId: listSegments + description: You can fetch a list of all segments. responses: '200': - description: successful + description: Successful response content: application/json: examples: - successful: + Successful response: value: - type: ticket - id: '611' - ticket_id: '22' - ticket_attributes: {} - ticket_state: - type: ticket_state - id: '7493' - category: submitted - internal_label: Submitted - external_label: Submitted - ticket_type: - type: ticket_type - id: '53' - name: my-ticket-type-1 - description: my ticket type description is awesome. - icon: "\U0001F981" - workspace_id: this_is_an_id442_that_should_be_at_least_ - archived: false - created_at: 1734537737 - updated_at: 1734537737 - is_internal: false - ticket_type_attributes: - type: list - data: [] - category: Customer - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f2041bb69f9f2193bc0c - external_id: '70' - admin_assignee_id: 0 - team_assignee_id: 0 - created_at: 1734537732 - updated_at: 1734537737 - ticket_parts: - type: ticket_part.list - ticket_parts: - - type: ticket_part - id: '151' - part_type: comment - body: "

Comment for message

" - created_at: 1734537732 - updated_at: 1734537732 - author: - id: 6762f2041bb69f9f2193bc0c - type: user - name: Joe Bloggs - email: joe@bloggs.com - attachments: [] - redacted: false - app_package_code: test-integration - - type: ticket_part - id: '152' - part_type: ticket_state_updated_by_admin - ticket_state: submitted - previous_ticket_state: submitted - created_at: 1734537737 - updated_at: 1734537737 - author: - id: '991267767' - type: bot - name: Fin - email: operator+this_is_an_id442_that_should_be_at_least_@intercom.io - attachments: [] - redacted: false - app_package_code: test-integration - total_count: 2 - open: true - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - category: Customer - is_shared: true - previous_ticket_state_id: '7490' + type: segment.list + segments: + - type: segment + id: 6762f25c1bb69f9f2193bc22 + name: John segment + created_at: 1734537820 + updated_at: 1734537820 + person_type: user + - type: segment + id: 6762f25c1bb69f9f2193bc23 + name: Jane segment + created_at: 1734537820 + updated_at: 1734537820 + person_type: user schema: - "$ref": "#/components/schemas/ticket" - '400': - description: Bad request + "$ref": "#/components/schemas/segment_list" + '401': + description: Unauthorized content: application/json: examples: - Bad request: + Unauthorized: value: type: error.list - request_id: 450e0b22-ccc2-40dd-bf54-bc0faaa28f57 + request_id: b1939528-98f0-4a63-a442-2cc9203fc8c7 errors: - - code: parameter_invalid - message: Ticket type is not a customer ticket type + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/convert_conversation_to_ticket_request" - examples: - successful: - summary: successful - value: - ticket_type_id: '53' - bad_request: - summary: Bad request - value: - ticket_type_id: '54' - "/conversations/deleted": + "/segments/{id}": get: - summary: List all deleted conversation IDs + summary: Retrieve a segment parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: page - in: query - required: false - description: The page of results to fetch. Defaults to first page - example: 1 - schema: - type: integer - - name: per_page - in: query - required: false - description: How many results per page - schema: - type: integer - default: 20 - maximum: 60 - - name: order - in: query - required: false - description: "`asc` or `desc`. Returns the conversation IDs in ascending or descending order. Defaults to desc" - example: desc + - name: id + in: path + required: true + description: The unique identified of a given segment. + example: '123' schema: type: string tags: - - Conversations - operationId: listDeletedConversationIds - description: |+ - List all deleted conversation IDs. - - {% admonition type="warning" name="Pagination" %} - You can use pagination to limit the number of results returned. The default is `20` results per page. You can navigate to next pages using the `page` param. - {% /admonition %} + - Segments + operationId: retrieveSegment + description: You can fetch the details of a single segment. responses: '200': - description: View all deleted conversation IDs + description: Successful response content: application/json: examples: - successful: + Successful response: value: - type: conversations.list - total_count: 4 - pages: - type: pages - next: https://api.intercom.io/conversations/deleted?per_page=2&order=desc&page=2 - page: 1 - per_page: 2 - total_pages: 2 - conversations: - - type: conversation - id: '512' - metrics_retained: false - deleted_at: 1734537460 - - type: conversation - id: '513' - metrics_retained: true - deleted_at: 1734537400 + type: segment + id: 6762f25f1bb69f9f2193bc26 + name: John segment + created_at: 1734537823 + updated_at: 1734537823 + person_type: user schema: - "$ref": "#/components/schemas/deleted_conversation_list" - '401': - description: Unauthorized + "$ref": "#/components/schemas/segment" + '404': + description: Segment not found content: application/json: examples: - Unauthorized: + Segment not found: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: bd697cc6-7757-488c-a89f-16e6feaf7585 errors: - - code: unauthorized - message: Access Token Invalid + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" - '400': - description: Resource not available + '401': + description: Unauthorized content: application/json: examples: - Resource not available: + Unauthorized: value: type: error.list - request_id: 7a80b950-b392-499f-85db-ea7c6c424d37 + request_id: be0d5309-d722-4d2a-aae9-77f4bc0a2cd0 errors: - - code: intercom_version_invalid - message: Requested resource is not available in current API version. + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/conversations/attributes": + "/subscription_types": get: - summary: List all conversation attributes + summary: List subscription types parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: include_archived - in: query - required: false - description: Include archived attributes in the list. Default `false`. - schema: - type: boolean - example: false tags: - - Conversations Attributes - operationId: listConversationAttributes - description: You can fetch a list of all conversation attributes for your workspace. - responses: - '200': - description: Successful response + - Subscription Types + operationId: listSubscriptionTypes + description: You can list all subscription types. A list of subscription type + objects will be returned. + responses: + '200': + description: Successful content: application/json: examples: - Successful response: + Successful: value: type: list data: - - type: conversation_attribute - id: 3 - name: test 2 - description: '' - data_type: string - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777473061 - updated_at: 1777473061 - admin_id: '16' - multiline: false - - type: conversation_attribute - id: 2 - name: test list - description: '' - data_type: list - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777472538 - updated_at: 1777537799 - admin_id: '16' - options: - - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - label: '1' - archived: false - - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 - label: '2' - archived: false - - id: c3d4e5f6-a7b8-9012-cdef-012345678912 - label: '3' - archived: false - - type: conversation_attribute - id: 6 - name: Ref to Test - description: '' - data_type: relationship - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777547482 - updated_at: 1777547482 - admin_id: '16' - reference: - type: many - object_type_id: Test_Object - schema: - "$ref": "#/components/schemas/conversation_attribute_list" + - type: subscription + id: '135' + state: live + consent_type: opt_out + default_translation: + name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + translations: + - name: Newsletters + description: Lorem ipsum dolor sit amet + locale: en + content_types: + - email + schema: + "$ref": "#/components/schemas/subscription_type_list" '401': description: Unauthorized content: @@ -14071,59 +12831,61 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: 06d15b1f-19b0-42cc-aff9-a9d9db39402b errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + "/phone_call_redirects": post: - summary: Create a conversation attribute + summary: Create a phone Switch parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - - Conversations Attributes - operationId: createConversationAttribute - description: Create a new conversation attribute. + - Switch + operationId: createPhoneSwitch + description: | + You can use the API to deflect phone calls to the Intercom Messenger. + Calling this endpoint will send an SMS with a link to the Messenger to the phone number specified. + + If custom attributes are specified, they will be added to the user or lead's custom data attributes. responses: '200': - description: Successful response + description: successful content: application/json: examples: - Successful response: + successful: value: - type: conversation_attribute - id: 8 - name: api_test_attr - description: Created via API test - data_type: string - required: false - visible_to_team_ids: [] - archived: false - created_at: 1778239701 - updated_at: 1778239701 - admin_id: '16' - multiline: false + url: http://via.intercom.io/msgr/1add3dd1-a75e-4a96-96fd-984d16aba059 + type: phone_call_redirect schema: - "$ref": "#/components/schemas/conversation_attribute" + "$ref": "#/components/schemas/phone_switch" + '400': + description: bad request - invalid number + content: + application/json: + examples: + bad request - exception sending sms: + value: + error_key: sms_failed + message: SMS was not sent due to an unknown error + bad request - invalid number: + value: + error_key: invalid_phone_number + message: Invalid phone number '422': - description: Invalid data_type + description: unprocessable entity content: application/json: examples: - Invalid data_type: + unprocessable entity: value: - type: error.list - request_id: 4be81317-ba5a-455a-a80d-862fe4ad888b - errors: - - code: parameter_invalid - message: "data_type 'invalid_type' is not valid. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files" - schema: - "$ref": "#/components/schemas/error" + error_key: some_error '401': description: Unauthorized content: @@ -14132,80 +12894,91 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: e1ed4f34-9477-492a-8ddb-22f10af39734 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" requestBody: - required: true content: application/json: schema: - "$ref": "#/components/schemas/create_conversation_attribute_request" + "$ref": "#/components/schemas/create_phone_switch_request" examples: - Create string attribute: - summary: Create a string attribute + successful: + summary: successful value: - name: api_test_attr - data_type: string - description: Created via API test - "/conversations/attributes/{id}": + phone: "+353832345678" + custom_attributes: + issue_type: Billing + priority: high + bad_request_-_exception_sending_sms: + summary: bad request - exception sending sms + value: + phone: "+353832345678" + custom_attributes: + issue_type: Billing + priority: high + bad_request_-_invalid_number: + summary: bad request - invalid number + value: + phone: "+353832345678" + custom_attributes: + issue_type: Billing + priority: high + unprocessable_entity: + summary: unprocessable entity + value: + phone: "+40241100100" + custom_attributes: + issue_type: Billing + priority: high + "/calls": get: - summary: Get a conversation attribute + summary: List all calls parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The conversation attribute id - example: 3 + - name: page + in: query + required: false + description: The page of results to fetch. Defaults to first page + example: 1 + schema: + type: integer + - name: per_page + in: query + required: false + description: How many results to display per page. Defaults to 25. Max 25. + example: 25 schema: type: integer tags: - - Conversations Attributes - operationId: getConversationAttribute - description: Retrieve a single conversation attribute by ID. + - Calls + operationId: listCalls + description: | + Retrieve a paginated list of calls. responses: '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: conversation_attribute - id: 3 - name: test 2 - description: '' - data_type: string - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777473061 - updated_at: 1777473061 - admin_id: '16' - multiline: false - schema: - "$ref": "#/components/schemas/conversation_attribute" - '404': - description: Conversation attribute not found + description: successful content: application/json: examples: - Not found: + successful: value: - type: error.list - request_id: null - errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found + type: list + data: [] + total_count: 0 + pages: + type: pages + page: 1 + per_page: 25 + total_pages: 0 schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/call_list" '401': description: Unauthorized content: @@ -14214,14 +12987,15 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - put: - summary: Update a conversation attribute + "/calls/{id}": + get: + summary: Get a call parameters: - name: Intercom-Version in: header @@ -14230,48 +13004,58 @@ paths: - name: id in: path required: true - description: The conversation attribute id - example: 8 + description: The id of the call to retrieve schema: - type: integer + type: string tags: - - Conversations Attributes - operationId: updateConversationAttribute - description: Update an existing conversation attribute. + - Calls + operationId: showCall + description: Retrieve a single call by id. responses: '200': - description: Successful response + description: successful content: application/json: examples: - Successful response: + successful: value: - type: conversation_attribute - id: 8 - name: api_test_renamed - description: Updated via API - data_type: string - required: false - visible_to_team_ids: [] - archived: false - created_at: 1778239701 - updated_at: 1778239718 - admin_id: '16' - multiline: false + type: call + id: "123" + conversation_id: "456" + admin_id: "789" + contact_id: "6762f0dd1bb69f9f2193bb83" + state: completed + initiated_at: 1734537437 + answered_at: 1734537440 + ended_at: 1734537530 + created_at: 1734537437 + updated_at: 1734537531 + recording_url: "https://api.intercom.io/calls/123/recording" + transcription_url: "https://api.intercom.io/calls/123/transcript" + call_type: phone + direction: outbound + ended_reason: answered + phone: "+15551234567" + fin_recording_url: "https://api.intercom.io/calls/124/recording" + fin_transcription_url: "https://api.intercom.io/calls/124/transcript" + duration: 90 + talk_time: 85 + queue_time: 3 + hold_time: null schema: - "$ref": "#/components/schemas/conversation_attribute" + "$ref": "#/components/schemas/call" '404': - description: Conversation attribute not found + description: Not Found content: application/json: examples: - Not found: + Not Found: value: type: error.list - request_id: null + request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found + - code: not_found + message: Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -14282,26 +13066,15 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - required: true - content: - application/json: - schema: - "$ref": "#/components/schemas/update_conversation_attribute_request" - examples: - Update name: - summary: Update name and description - value: - name: api_test_renamed - description: Updated via API - delete: - summary: Delete (archive) a conversation attribute + "/calls/{id}/recording": + get: + summary: Get call recording by call id parameters: - name: Intercom-Version in: header @@ -14310,48 +13083,34 @@ paths: - name: id in: path required: true - description: The conversation attribute id - example: 8 + description: The id of the call schema: - type: integer + type: string tags: - - Conversations Attributes - operationId: deleteConversationAttribute - description: "Archive a conversation attribute (soft delete). The attribute is marked as archived but not permanently deleted." + - Calls + operationId: showCallRecording + description: Redirects to a signed URL for the call's recording if it exists. responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: conversation_attribute - id: 8 - name: api_test_renamed - description: Updated via API - data_type: string - required: false - visible_to_team_ids: [] - archived: true - created_at: 1778239701 - updated_at: 1778239721 - admin_id: '16' - multiline: false - schema: - "$ref": "#/components/schemas/conversation_attribute" + '302': + description: Redirect to signed recording URL + headers: + Location: + description: The signed recording URL + schema: + type: string + format: uri '404': - description: Conversation attribute not found + description: Recording not found content: application/json: examples: - Not found: + Not Found: value: type: error.list - request_id: null + request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found + - code: not_found + message: Recording Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -14362,15 +13121,15 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/conversations/attributes/{id}/options": - post: - summary: Add an option to a list conversation attribute + "/calls/{id}/transcript": + get: + summary: Get call transcript by call id parameters: - name: Intercom-Version in: header @@ -14379,95 +13138,140 @@ paths: - name: id in: path required: true - description: The conversation attribute id - example: 2 + description: The id of the call schema: - type: integer + type: string tags: - - Conversations Attributes - operationId: createConversationAttributeOption - description: Add a new option to a list-type conversation attribute. Returns the full attribute with the updated options array. - responses: + - Calls + operationId: showCallTranscript + description: | + Returns the transcript for the specified call as a downloadable text file. + responses: '200': - description: Successful response + description: successful + headers: + Content-Disposition: + description: File attachment directive and suggested filename for the transcript + schema: + type: string + example: "attachment; filename=transcription_data-2025-07-17.txt" content: - application/json: - examples: - Successful response: - value: - type: conversation_attribute - id: 2 - name: test list - description: '' - data_type: list - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777472538 - updated_at: 1778240000 - admin_id: '16' - options: - - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - label: '1' - archived: false - - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 - label: '2' - archived: false - - id: c3d4e5f6-a7b8-9012-cdef-012345678912 - label: '3' - archived: false - - id: d4e5f6a7-b8c9-0123-defa-123456789023 - label: High - archived: false + text/plain: schema: - "$ref": "#/components/schemas/conversation_attribute" + type: string + description: Transcript text + examples: + transcript_txt: + value: |- + [00:00:03] Teammate 1: "Hello, thanks for calling. How can I help today?" + [00:00:09] User: "I need help recovering access to my account." + [00:00:15] Teammate 1: "I can help with that. For security, I’ll ask a few generic verification questions." + [00:00:22] User: "Okay." + [00:00:28] Teammate 1: "Please confirm general details on the account (no sensitive data over this call)." + [00:00:35] User: "I can provide non-sensitive info." + [00:00:41] Teammate 1: "Thank you. I’ll initiate a standard account recovery process and send the next steps." + [00:00:48] User: "Great, thanks." + [00:00:53] Teammate 1: "You should receive a message shortly with instructions to complete recovery." '404': - description: Conversation attribute not found + description: Not Found content: application/json: examples: - Not found: + Not Found: value: type: error.list - request_id: null + request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found + - code: not_found + message: Not Found schema: "$ref": "#/components/schemas/error" - '422': - description: Unprocessable entity + "/calls/search": + post: + summary: List calls with transcripts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Calls + operationId: listCallsWithTranscripts + description: | + Retrieve calls by a list of conversation ids and include transcripts when available. + A maximum of 20 `conversation_ids` can be provided. If none are provided or more than 20 are provided, a 400 error is returned. + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - conversation_ids + properties: + conversation_ids: + type: array + description: A list of conversation ids to fetch calls for. Maximum 20. + minItems: 1 + maxItems: 20 + items: + type: string + examples: + example: + value: + conversation_ids: + - "64619700005694" + - "64619700005695" + responses: + '200': + description: successful content: application/json: examples: - Not a list type: - value: - type: error.list - request_id: null - errors: - - code: parameter_invalid - message: Options can only be managed on list attributes - Label required: - value: - type: error.list - request_id: null - errors: - - code: parameter_invalid - message: label is required - Label not a string: + successful: value: - type: error.list - request_id: null - errors: - - code: parameter_invalid - message: label must be a string - Unexpected key in body: + type: list + data: + - type: call + id: "123" + conversation_id: "64619700005694" + transcript: + - {} + transcript_status: completed + schema: + type: object + properties: + type: + type: string + example: list + data: + type: array + items: + allOf: + - "$ref": "#/components/schemas/call" + - type: object + properties: + transcript: + type: array + description: The call transcript if available, otherwise an empty array. + items: + type: object + additionalProperties: true + transcript_status: + type: string + nullable: true + description: The status of the transcript if available. + '400': + description: Bad Request + content: + application/json: + examples: + too_many_ids: value: type: error.list - request_id: null errors: - - code: parameter_invalid - message: only 'label' is accepted + - code: conversation_id_limit_exceeded + message: "A list of up to 20 conversation IDs is required" schema: "$ref": "#/components/schemas/error" '401': @@ -14478,134 +13282,101 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - required: true - content: - application/json: - schema: - "$ref": "#/components/schemas/create_conversation_attribute_option_request" - examples: - Add option: - summary: Add a new list option - value: - label: High - "/conversations/attributes/{id}/options/{option_id}": - put: - summary: Update an option on a list conversation attribute + "/tags": + get: + summary: List all tags parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The conversation attribute id - example: 2 - schema: - type: integer - - name: option_id - in: path - required: true - description: The UUID of the list option to update (from the `id` field in the options array) - example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - schema: - type: string tags: - - Conversations Attributes - operationId: updateConversationAttributeOption - description: Update the label of a single option on a list-type conversation attribute. Returns the full attribute with the updated options array. + - Tags + operationId: listTags + description: "You can fetch a list of all tags for a given workspace.\n\n" responses: '200': - description: Successful response + description: successful content: application/json: examples: - Successful response: + successful: value: - type: conversation_attribute - id: 2 - name: test list - description: '' - data_type: list - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777472538 - updated_at: 1778240001 - admin_id: '16' - options: - - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - label: Renamed - archived: false - - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 - label: '2' - archived: false - - id: c3d4e5f6-a7b8-9012-cdef-012345678912 - label: '3' - archived: false + type: list + data: + - type: tag + id: '102' + name: Manual tag 1 schema: - "$ref": "#/components/schemas/conversation_attribute" - '404': - description: Conversation attribute or option not found + "$ref": "#/components/schemas/tag_list" + '401': + description: Unauthorized content: application/json: examples: - Attribute not found: - value: - type: error.list - request_id: null - errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found - Option not found: + Unauthorized: value: type: error.list - request_id: null + request_id: 2859da57-c83f-405c-8166-240a312442a3 errors: - - code: conversation_attribute_not_found - message: List option not found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '422': - description: Unprocessable entity + post: + summary: Create or update a tag, Tag or untag companies, Tag contacts + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Tags + operationId: createTag + description: | + You can use this endpoint to perform the following operations: + + **1. Create a new tag:** You can create a new tag by passing in the tag name as specified in "Create or Update Tag Request Payload" described below. + + **2. Update an existing tag:** You can update an existing tag by passing the id of the tag as specified in "Create or Update Tag Request Payload" described below. + + **3. Tag Companies:** You can tag single company or a list of companies. You can tag a company by passing in the tag name and the company details as specified in "Tag Company Request Payload" described below. Also, if the tag doesn't exist then a new one will be created automatically. + + **4. Untag Companies:** You can untag a single company or a list of companies. You can untag a company by passing in the tag id and the company details as specified in "Untag Company Request Payload" described below. + + **5. Tag Multiple Users:** You can tag a list of users. You can tag the users by passing in the tag name and the user details as specified in "Tag Users Request Payload" described below. + + Each operation will return a tag object. + responses: + '200': + description: Action successful content: application/json: examples: - Not a list type: - value: - type: error.list - request_id: null - errors: - - code: parameter_invalid - message: Options can only be managed on list attributes - Label required: - value: - type: error.list - request_id: null - errors: - - code: parameter_invalid - message: label is required - Label not a string: + Action successful: value: - type: error.list - request_id: null - errors: - - code: parameter_invalid - message: label must be a string - Unexpected key in body: + type: tag + id: '105' + name: test + schema: + "$ref": "#/components/schemas/tag_basic" + '400': + description: Invalid parameters + content: + application/json: + examples: + Invalid parameters: value: type: error.list - request_id: null + request_id: 33a05108-3bf7-411f-a270-72db40b5a31c errors: - code: parameter_invalid - message: only 'label' is accepted + message: invalid tag parameters schema: "$ref": "#/components/schemas/error" '401': @@ -14616,119 +13387,141 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: f230e3a7-00a9-456b-bf1c-2ad4b7dc49f6 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" requestBody: - required: true content: application/json: schema: - "$ref": "#/components/schemas/update_conversation_attribute_option_request" + oneOf: + - "$ref": "#/components/schemas/create_or_update_tag_request" + - "$ref": "#/components/schemas/tag_company_request" + - "$ref": "#/components/schemas/untag_company_request" + - "$ref": "#/components/schemas/tag_multiple_users_request" examples: - Rename option: - summary: Rename an existing option + action_successful: + summary: Action successful value: - label: Renamed - delete: - summary: Archive an option on a list conversation attribute - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The conversation attribute id - example: 2 + name: test + invalid_parameters: + summary: Invalid parameters + value: + test: invalid + "/tags/{id}": + get: + summary: Find a specific tag + parameters: + - name: Intercom-Version + in: header schema: - type: integer - - name: option_id + "$ref": "#/components/schemas/intercom_version" + - name: id in: path + description: The unique identifier of a given tag + example: '123' required: true - description: The UUID of the list option to archive (from the `id` field in the options array) - example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 schema: type: string tags: - - Conversations Attributes - operationId: deleteConversationAttributeOption - description: "Archive a single option on a list-type conversation attribute (soft delete). The option remains in the response with `archived: true`. Returns the full attribute with the updated options array." + - Tags + operationId: findTag + description: | + You can fetch the details of tags that are on the workspace by their id. + This will return a tag object. responses: '200': - description: Successful response + description: Tag found content: application/json: examples: - Successful response: + Tag found: value: - type: conversation_attribute - id: 2 - name: test list - description: '' - data_type: list - required: false - visible_to_team_ids: [] - archived: false - created_at: 1777472538 - updated_at: 1778240002 - admin_id: '16' - options: - - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - label: '1' - archived: true - - id: b2c3d4e5-f6a7-8901-bcde-f01234567891 - label: '2' - archived: false - - id: c3d4e5f6-a7b8-9012-cdef-012345678912 - label: '3' - archived: false + type: tag + id: '113' + name: Manual tag schema: - "$ref": "#/components/schemas/conversation_attribute" + "$ref": "#/components/schemas/tag_basic" '404': - description: Conversation attribute or option not found + description: Tag not found content: application/json: examples: - Attribute not found: + Tag not found: value: type: error.list - request_id: null + request_id: e20c89d2-29c6-4abb-aa3d-c860e1cec1ca errors: - - code: conversation_attribute_not_found - message: Conversation attribute not found - Option not found: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: value: type: error.list - request_id: null + request_id: c1c0477c-5b80-4874-be65-01ec8a9ffe14 errors: - - code: conversation_attribute_not_found - message: List option not found + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '422': - description: Unprocessable entity + delete: + summary: Delete tag + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + description: The unique identifier of a given tag + example: '123' + required: true + schema: + type: string + tags: + - Tags + operationId: deleteTag + description: You can delete the details of tags that are on the workspace by + passing in the id. + responses: + '200': + description: Successful + '404': + description: Resource not found content: application/json: examples: - Not a list type: + Resource not found: value: type: error.list - request_id: null + request_id: 49536975-bbc5-4a2f-ab8b-7928275cb4d3 errors: - - code: parameter_invalid - message: Options can only be managed on list attributes - Minimum options: + - code: not_found + message: Resource Not Found + schema: + "$ref": "#/components/schemas/error" + '400': + description: Tag has dependent objects + content: + application/json: + examples: + Tag has dependent objects: value: type: error.list - request_id: null + request_id: 28960d1e-a056-46c0-bf18-a0d798eb889f errors: - - code: parameter_invalid - message: A list attribute must have at least 2 active options + - code: tag_has_dependent_objects + message: 'Unable to delete Tag with dependent objects. Segments: + Seg 1.' schema: "$ref": "#/components/schemas/error" '401': @@ -14739,33 +13532,24 @@ paths: Unauthorized: value: type: error.list - request_id: 310f55b0-2660-43e8-bed4-7e82b2f40920 + request_id: 90a369be-14bb-48d1-8ed6-6287976f6a64 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/custom_object_instances/{custom_object_type_identifier}": - parameters: - - name: custom_object_type_identifier - in: path - description: The unique identifier of the custom object type that defines the - structure of the custom object instance. - example: Order - required: true - schema: - type: string - post: - summary: Create or Update a Custom Object Instance + "/teams": + get: + summary: List all teams parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - - Custom Object Instances - operationId: createCustomObjectInstances - description: Create or update a custom object instance + - Teams + operationId: listTeams + description: This will return a list of team objects for the App. responses: '200': description: successful @@ -14774,153 +13558,44 @@ paths: examples: successful: value: - id: '22' - type: Order - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - external_id: '123' - external_created_at: 1392036272 - external_updated_at: 1392036272 - created_at: 1734537745 - updated_at: 1734537745 + type: team.list + teams: [] schema: - "$ref": "#/components/schemas/custom_object_instance" + "$ref": "#/components/schemas/team_list" '401': - $ref: "#/components/responses/Unauthorized" - '404': - $ref: "#/components/responses/TypeNotFound" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_or_update_custom_object_instance_request" - examples: - successful: - summary: successful - value: - external_id: '123' - external_created_at: 1392036272 - external_updated_at: 1392036272 - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - get: - summary: List Custom Object Instances - parameters: - - name: references_contact_id - in: query - required: false - description: Return instances associated with the given contact ID. - schema: - type: string - - name: references_conversation_id - in: query - required: false - description: Return instances associated with the given conversation ID. - schema: - type: string - - name: external_id - in: query - required: false - description: Return the single instance with this external ID. When provided, - the response is a single object rather than a list. - schema: - type: string - - name: page - in: query - required: false - description: Page number of results to fetch. - schema: - type: integer - - name: per_page - in: query - required: false - description: Number of results per page. Maximum 150. - schema: - type: integer - maximum: 150 - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Custom Object Instances - operationId: listCustomObjectInstances - description: |- - List instances of a custom object type. Three modes are supported: - - **No filter** — returns all instances for the type. - - **`references_contact_id`** — returns instances associated with the given contact. - - **`references_conversation_id`** — returns instances associated with the given conversation. - - When **`external_id`** is provided, returns a single matching instance (not a list). - responses: - '200': - description: successful + description: Unauthorized content: application/json: examples: - successful: + Unauthorized: value: - type: list - pages: - type: pages - page: 1 - per_page: 20 - total_pages: 1 - total_count: 2 - data: - - id: '2' - type: Order - custom_attributes: - order_number: ORDER-98765 - total_amount: 149.99 - external_id: order_002 - external_created_at: - external_updated_at: - created_at: 1734537800 - updated_at: 1734537800 - - id: '1' - type: Order - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - external_id: order_001 - external_created_at: 1734537100 - external_updated_at: 1734537100 - created_at: 1734537100 - updated_at: 1734537100 - schema: - "$ref": "#/components/schemas/custom_object_instances_paginated_list" - '401': - $ref: "#/components/responses/Unauthorized" - '404': - $ref: "#/components/responses/TypeNotFound" - delete: - summary: Delete a Custom Object Instance by External ID + type: error.list + request_id: a77dadbc-1f1e-4875-bac3-f0d09bbc214a + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + "/teams/{id}": + get: + summary: Retrieve a team parameters: - - name: external_id - in: query - style: form - required: true - schema: - type: string - description: The unique identifier for the instance in the external system - it originated from. - title: Find by external_id - properties: - external_id: - type: string - required: - - external_id - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier of a given team. + example: '123' + schema: + type: string tags: - - Custom Object Instances - operationId: deleteCustomObjectInstancesById - description: Delete a single Custom Object instance by external_id. + - Teams + operationId: retrieveTeam + description: You can fetch the details of a single team, containing an array + of admins that belong to this team. responses: '200': description: successful @@ -14929,363 +13604,238 @@ paths: examples: successful: value: - id: '26' - object: Order - deleted: true + type: team + id: '991267902' + name: team 1 + admin_ids: [] schema: - "$ref": "#/components/schemas/custom_object_instance_deleted" - '401': - $ref: "#/components/responses/Unauthorized" + "$ref": "#/components/schemas/team" '404': - $ref: "#/components/responses/ObjectNotFound" - "/custom_object_instances/{custom_object_type_identifier}/{id}": - parameters: - - name: custom_object_type_identifier - in: path - description: The unique identifier of the custom object type that defines the - structure of the custom object instance. - example: Order - required: true - schema: - type: string - get: - summary: Get Custom Object Instance by ID - parameters: - - name: id - in: path - description: The id or external_id of the custom object instance - required: true - schema: - type: string - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Custom Object Instances - operationId: getCustomObjectInstancesById - description: Fetch a Custom Object Instance by id. - responses: - '200': - description: successful + description: Team not found content: application/json: examples: - successful: + Team not found: value: - id: '25' - type: Order - custom_attributes: - order_number: ORDER-12345 - total_amount: 99.99 - external_id: '123' - external_created_at: - external_updated_at: - created_at: 1734537750 - updated_at: 1734537750 + type: error.list + request_id: 3ff156ba-a66e-40d4-93ff-cb6e6afc3c9d + errors: + - code: team_not_found + message: Team not found schema: - "$ref": "#/components/schemas/custom_object_instance" + "$ref": "#/components/schemas/error" '401': - $ref: "#/components/responses/Unauthorized" - '404': - $ref: "#/components/responses/ObjectNotFound" - delete: - summary: Delete a Custom Object Instance by ID - parameters: - - name: id - in: path - description: The Intercom defined id of the custom object instance - required: true - schema: - type: string - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Custom Object Instances - operationId: deleteCustomObjectInstancesByExternalId - description: Delete a single Custom Object instance using the Intercom defined - id. - responses: - '200': - description: successful + description: Unauthorized content: application/json: examples: - successful: + Unauthorized: value: - id: '26' - object: Order - deleted: true + type: error.list + request_id: fc4b741b-b9f1-4ef9-92c7-eb71e9811df3 + errors: + - code: unauthorized + message: Access Token Invalid schema: - "$ref": "#/components/schemas/custom_object_instance_deleted" - '401': - $ref: "#/components/responses/Unauthorized" - '404': - $ref: "#/components/responses/ObjectNotFound" - "/data_attributes": + "$ref": "#/components/schemas/error" + "/ticket_states": get: - summary: List all data attributes + summary: List all ticket states parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: model - in: query - required: false - description: "Specify the data attribute model to return. For conversation attributes, use `GET /conversations/attributes` instead." - schema: - type: string - enum: - - contact - - company - example: company - - name: include_archived - in: query - required: false - description: Include archived attributes in the list. By default we return - only non archived data attributes. - example: false - schema: - type: boolean tags: - - Data Attributes - operationId: lisDataAttributes - description: | - You can fetch a list of all data attributes belonging to a workspace for contacts or companies. - - {% admonition type="warning" name="Conversation attributes removed" %} - Conversation attributes are no longer returned by this endpoint. Calling without a `model` parameter no longer includes them in the response, and `model=conversation` returns a `422` error. Use [GET /conversations/attributes](/docs/references/preview/rest-api/api.intercom.io/conversations-attributes/listconversationattributes) instead. - {% /admonition %} + - Ticket States + operationId: listTicketStates + description: You can get a list of all ticket states for a workspace. responses: '200': - description: Successful response + description: successful content: application/json: examples: - Successful response: + successful: value: type: list data: - - type: data_attribute - name: name - full_name: name - label: Company name - description: The name of a company - data_type: string - api_writable: true - ui_writable: false - messenger_writable: true - custom: false + - type: ticket_state + id: '8269' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_types: + type: list + data: + - type: ticket_type + id: '55' + name: my-ticket-type-3 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '56' + name: my-ticket-type-4 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '58' + name: my-ticket-type-6 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office archived: false - model: company - - type: data_attribute - name: company_id - full_name: company_id - label: Company ID - description: A number identifying a company - data_type: string - api_writable: false - ui_writable: false - messenger_writable: true - custom: false + - type: ticket_state + id: '8270' + category: in_progress + internal_label: In progress + external_label: In progress + ticket_types: + type: list + data: + - type: ticket_type + id: '55' + name: my-ticket-type-3 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '56' + name: my-ticket-type-4 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '58' + name: my-ticket-type-6 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office archived: false - model: company - - type: data_attribute - name: last_request_at - full_name: last_request_at - label: Company last seen - description: The last day anyone from a company visited your - site or app - data_type: date - api_writable: false - ui_writable: false - messenger_writable: true - custom: false + - type: ticket_state + id: '8271' + category: waiting_on_customer + internal_label: Waiting on customer + external_label: Waiting on you + ticket_types: + type: list + data: + - type: ticket_type + id: '55' + name: my-ticket-type-3 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '56' + name: my-ticket-type-4 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '58' + name: my-ticket-type-6 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office archived: false - model: company - - type: data_attribute - name: remote_created_at - full_name: remote_created_at - label: Company created at - description: The day a company was added to Intercom - data_type: date - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: user_count - full_name: user_count - label: People - description: The number of people in a company - data_type: integer - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: session_count - full_name: session_count - label: Company web sessions - description: All visits from anyone in a company to your product's - site or app - data_type: integer - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: name - full_name: plan.name - label: Plan - description: A specific plan or level within your product that - companies have signed up to - data_type: string - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: monthly_spend - full_name: monthly_spend - label: Monthly Spend - description: The monthly revenue you receive from a company - data_type: float - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: size - full_name: size - label: Company size - description: The number of people employed in this company, - expressed as a single number - data_type: integer - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: industry - full_name: industry - label: Company industry - description: The category or domain this company belongs to - e.g. 'ecommerce' or 'SaaS' - data_type: string - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: website - full_name: website - label: Company website - description: The web address for the company's primary marketing - site - data_type: string - api_writable: true - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - id: 34 - type: data_attribute - name: The One Ring - full_name: custom_attributes.The One Ring - label: The One Ring - description: One ring to rule them all, one ring to find them, - One ring to bring them all and in the darkness bind them. - data_type: string - api_writable: true - ui_writable: false - messenger_writable: true - custom: true - archived: false - admin_id: '991267784' - created_at: 1734537753 - updated_at: 1734537753 - model: company - - type: data_attribute - name: id - full_name: id - label: ID - description: The Intercom defined id representing the company - data_type: string - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: created_at - full_name: created_at - label: Created at - description: The time the company was added to Intercom - data_type: date - api_writable: false - ui_writable: false - messenger_writable: true - custom: false - archived: false - model: company - - type: data_attribute - name: updated_at - full_name: updated_at - label: Updated at - description: The last time the company was updated - data_type: date - api_writable: false - ui_writable: false - messenger_writable: true - custom: false + - type: ticket_state + id: '8272' + category: resolved + internal_label: Resolved + external_label: Resolved + ticket_types: + type: list + data: + - type: ticket_type + id: '55' + name: my-ticket-type-3 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '56' + name: my-ticket-type-4 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '58' + name: my-ticket-type-6 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office archived: false - model: company - - type: data_attribute - name: id - full_name: plan.id - label: Plan ID - description: The Intercom defined id representing the plan - data_type: string - api_writable: false - ui_writable: false - messenger_writable: true - custom: false + - type: ticket_state + id: '8273' + category: submitted + internal_label: Admin label 1 + external_label: User label + ticket_types: + type: list + data: + - type: ticket_type + id: '55' + name: my-ticket-type-3 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office + - type: ticket_type + id: '56' + name: my-ticket-type-4 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office archived: false - model: company - - type: data_attribute - name: app_id - full_name: app_id - label: App ID - description: The Intercom defined id representing the app - data_type: string - api_writable: false - ui_writable: false - messenger_writable: true - custom: false + - type: ticket_state + id: '8274' + category: submitted + internal_label: Admin label 2 + external_label: User label + ticket_types: + type: list + data: + - type: ticket_type + id: '58' + name: my-ticket-type-6 + description: my ticket type description is awesome. + icon: "\U0001F981" + archived: false + is_internal: false + category: Back-office archived: false - model: company schema: - "$ref": "#/components/schemas/data_attribute_list" + "$ref": "#/components/schemas/ticket_state_list" '401': description: Unauthorized content: @@ -15294,108 +13844,58 @@ paths: Unauthorized: value: type: error.list - request_id: 6d231766-b44b-4e78-bc9e-9c268ff19671 + request_id: 5e0bd231-7307-42e6-a6ee-babf05bd163b errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '422': - description: Unprocessable entity - model=conversation is deprecated - content: - application/json: - examples: - Deprecated conversation model: - value: - type: error.list - request_id: b7912266-b12e-4d12-b2ce-9cd44d33f0c0 - errors: - - code: parameter_invalid - message: model=conversation is no longer supported. Use GET /conversations/attributes instead - schema: - "$ref": "#/components/schemas/error" + "/ticket_types/{ticket_type_id}/attributes": post: - summary: Create a data attribute + summary: Create a new attribute for a ticket type parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: ticket_type_id + in: path + required: true + description: The unique identifier for the ticket type which is given by Intercom. + schema: + type: string tags: - - Data Attributes - operationId: createDataAttribute - description: You can create a data attributes for a `contact` or a `company`. + - Ticket Type Attributes + description: You can create a new attribute for a ticket type. + operationId: createTicketTypeAttribute responses: '200': - description: Successful + description: Ticket Type Attribute created content: application/json: examples: - Successful: + Ticket Type Attribute created: value: - id: 37 - type: data_attribute - name: Mithril Shirt - full_name: custom_attributes.Mithril Shirt - label: Mithril Shirt + type: ticket_type_attribute + id: '157' + workspace_id: this_is_an_id640_that_should_be_at_least_ + name: Attribute Title + description: Attribute Description data_type: string - api_writable: true - ui_writable: false - messenger_writable: false - custom: true + input_options: + multiline: false + order: 2 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: false + ticket_type_id: 63 archived: false - admin_id: '991267786' - created_at: 1734537756 - updated_at: 1734537756 - model: company - schema: - "$ref": "#/components/schemas/data_attribute" - '400': - description: Too few options for list - content: - application/json: - examples: - Same name already exists: - value: - type: error.list - request_id: da2a7037-11f4-4fcc-8d19-27da3b3a4336 - errors: - - code: parameter_invalid - message: You already have 'The One Ring' in your company data. - To save this as new people data, use a different name. - Invalid name: - value: - type: error.list - request_id: 1c45cfd9-ffd1-4e3e-9f7a-2ac99abdf03d - errors: - - code: parameter_invalid - message: Your name for this attribute must only contain alphanumeric - characters, currency symbols, and hyphens - Attribute already exists: - value: - type: error.list - request_id: 55999605-a170-4894-a3d0-090c4fee8d11 - errors: - - code: parameter_invalid - message: You already have 'The One Ring' in your company data. - To save this as new company data, use a different name. - Invalid Data Type: - value: - type: error.list - request_id: e0a9ccc7-a540-4ef0-8ffc-28ab86658b04 - errors: - - code: parameter_invalid - message: Data Type isn't an option - Too few options for list: - value: - type: error.list - request_id: 6544ccf8-435d-49e1-91ed-e49356f14255 - errors: - - code: parameter_invalid - message: The Data Attribute model field must be either contact - or company + created_at: 1734537862 + updated_at: 1734537862 schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/ticket_type_attribute" '401': description: Unauthorized content: @@ -15404,7 +13904,7 @@ paths: Unauthorized: value: type: error.list - request_id: fa71b91c-4a25-4fe6-88a9-884f6950860e + request_id: 6c9836ed-8485-4f1d-929d-b9d7e153daed errors: - code: unauthorized message: Access Token Invalid @@ -15414,139 +13914,315 @@ paths: content: application/json: schema: - "$ref": "#/components/schemas/create_data_attribute_request" + "$ref": "#/components/schemas/create_ticket_type_attribute_request" examples: - successful: - summary: Successful - value: - name: Mithril Shirt - model: company - data_type: string - same_name_already_exists: - summary: Same name already exists - value: - name: The One Ring - model: contact - data_type: integer - invalid_name: - summary: Invalid name - value: - name: "!nv@l!d n@me" - model: company - data_type: string - attribute_already_exists: - summary: Attribute already exists + ticket_type_attribute_created: + summary: Ticket Type Attribute created value: - name: The One Ring - model: company + name: Attribute Title + description: Attribute Description data_type: string - invalid_data_type: - summary: Invalid Data Type - value: - name: The Second Ring - model: company - data_type: mithril - too_few_options_for_list: - summary: Too few options for list - value: - description: Just a plain old ring - options: - - value: 1-10 - archived: false - "/data_attributes/{id}": + required_to_create: false + "/ticket_types/{ticket_type_id}/attributes/{id}": put: - summary: Update a data attribute + summary: Update an existing attribute for a ticket type parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: ticket_type_id + in: path + required: true + description: The unique identifier for the ticket type which is given by Intercom. + schema: + type: string - name: id in: path required: true - description: The data attribute id - example: 1 + description: The unique identifier for the ticket type attribute which is + given by Intercom. schema: - type: integer + type: string tags: - - Data Attributes - operationId: updateDataAttribute - description: "\nYou can update a data attribute.\n\n> \U0001F6A7 Updating the - data type is not possible\n>\n> It is currently a dangerous action to execute - changing a data attribute's type via the API. You will need to update the - type via the UI instead.\n" + - Ticket Type Attributes + description: You can update an existing attribute for a ticket type. + operationId: updateTicketTypeAttribute responses: '200': - description: Successful + description: Ticket Type Attribute updated content: application/json: examples: - Successful: + Ticket Type Attribute updated: value: - id: 44 - type: data_attribute - name: The One Ring - full_name: custom_attributes.The One Ring - label: The One Ring - description: Just a plain old ring + type: ticket_type_attribute + id: '162' + workspace_id: this_is_an_id644_that_should_be_at_least_ + name: name + description: New Attribute Description data_type: string - options: - - 1-10 - - 11-20 - api_writable: true - ui_writable: false - messenger_writable: true - custom: true + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: false + visible_to_contacts: false + default: false + ticket_type_id: 65 archived: false - admin_id: '991267793' - created_at: 1734537762 - updated_at: 1734537763 - model: company + created_at: 1734537864 + updated_at: 1734537864 schema: - "$ref": "#/components/schemas/data_attribute" - '400': - description: Too few options in list + "$ref": "#/components/schemas/ticket_type_attribute" + '401': + description: Unauthorized content: application/json: examples: - Too few options in list: + Unauthorized: value: type: error.list - request_id: 37cff4c5-5e1a-4958-a2ba-149b09d1915c + request_id: cd303186-b33e-4409-8bfc-5814b176d6e1 errors: - - code: parameter_invalid - message: Options isn't an array + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '404': - description: Attribute Not Found + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_ticket_type_attribute_request" + examples: + ticket_type_attribute_updated: + summary: Ticket Type Attribute updated + value: + description: New Attribute Description + "/ticket_types": + get: + summary: List all ticket types + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Ticket Types + operationId: listTicketTypes + description: You can get a list of all ticket types for a workspace. + responses: + '200': + description: successful content: application/json: examples: - Attribute Not Found: + successful: value: - type: error.list - request_id: eee16d31-0b0a-4b5f-b95a-25d37528c80f - errors: - - code: field_not_found - message: We couldn't find that data attribute to update + type: list + data: + - type: ticket_type + id: '67' + name: Bug Report + description: Bug Report Template + icon: "\U0001F39F️" + workspace_id: this_is_an_id648_that_should_be_at_least_ + archived: false + created_at: 1734537866 + updated_at: 1734537866 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '165' + workspace_id: this_is_an_id648_that_should_be_at_least_ + name: _default_title_ + description: '' + data_type: string + input_options: + multiline: false + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 67 + archived: false + created_at: 1734537866 + updated_at: 1734537866 + - type: ticket_type_attribute + id: '167' + workspace_id: this_is_an_id648_that_should_be_at_least_ + name: name + description: description + data_type: string + input_options: + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: false + visible_to_contacts: false + default: false + ticket_type_id: 67 + archived: false + created_at: 1734537866 + updated_at: 1734537866 + - type: ticket_type_attribute + id: '166' + workspace_id: this_is_an_id648_that_should_be_at_least_ + name: _default_description_ + description: '' + data_type: string + input_options: + multiline: true + order: 1 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 67 + archived: false + created_at: 1734537866 + updated_at: 1734537866 + category: Customer + ticket_states: + type: list + data: + - type: ticket_state + id: '8321' + category: submitted + internal_label: Submitted + external_label: Submitted + - type: ticket_state + id: '8322' + category: in_progress + internal_label: In progress + external_label: In progress + - type: ticket_state + id: '8323' + category: waiting_on_customer + internal_label: Waiting on customer + external_label: Waiting on you + - type: ticket_state + id: '8324' + category: resolved + internal_label: Resolved + external_label: Resolved schema: - "$ref": "#/components/schemas/error" - '422': - description: Has Dependant Object + "$ref": "#/components/schemas/ticket_type_list" + '401': + description: Unauthorized content: application/json: examples: - Has Dependant Object: + Unauthorized: value: type: error.list - request_id: f04b6b14-1c5b-46e1-9c95-4a914557062c + request_id: a63507c2-3b3b-4a1a-aafa-f08b87eb2c12 errors: - - code: data_invalid - message: The Data Attribute you are trying to archive has a - dependant object + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" + post: + summary: Create a ticket type + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Ticket Types + operationId: createTicketType + description: "You can create a new ticket type.\n> \U0001F4D8 Creating ticket + types.\n>\n> Every ticket type will be created with two default attributes: + _default_title_ and _default_description_.\n> For the `icon` propery, use + an emoji from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/)\n" + responses: + '200': + description: Ticket type created + content: + application/json: + examples: + Ticket type created: + value: + type: ticket_type + id: '70' + name: Customer Issue + description: Customer Report Template + icon: "\U0001F39F️" + workspace_id: this_is_an_id652_that_should_be_at_least_ + archived: false + created_at: 1734537869 + updated_at: 1734537869 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '174' + workspace_id: this_is_an_id652_that_should_be_at_least_ + name: _default_title_ + description: '' + data_type: string + input_options: + multiline: false + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 70 + archived: false + created_at: 1734537869 + updated_at: 1734537869 + - type: ticket_type_attribute + id: '175' + workspace_id: this_is_an_id652_that_should_be_at_least_ + name: _default_description_ + description: '' + data_type: string + input_options: + multiline: true + order: 1 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 70 + archived: false + created_at: 1734537869 + updated_at: 1734537869 + category: Customer + ticket_states: + type: list + data: + - type: ticket_state + id: '8337' + category: submitted + internal_label: Submitted + external_label: Submitted + - type: ticket_state + id: '8338' + category: in_progress + internal_label: In progress + external_label: In progress + - type: ticket_state + id: '8339' + category: waiting_on_customer + internal_label: Waiting on customer + external_label: Waiting on you + - type: ticket_state + id: '8340' + category: resolved + internal_label: Resolved + external_label: Resolved + schema: + "$ref": "#/components/schemas/ticket_type" '401': description: Unauthorized content: @@ -15555,7 +14231,7 @@ paths: Unauthorized: value: type: error.list - request_id: c60ce63d-1c74-4fe2-8e21-31d1f817a0c2 + request_id: 36b79d0c-b78f-4e1d-bd6d-bfc3dcc71f53 errors: - code: unauthorized message: Access Token Invalid @@ -15565,107 +14241,133 @@ paths: content: application/json: schema: - "$ref": "#/components/schemas/update_data_attribute_request" + "$ref": "#/components/schemas/create_ticket_type_request" examples: - successful: - summary: Successful - value: - description: Just a plain old ring - options: - - value: 1-10 - - value: 11-20 - archived: false - too_few_options_in_list: - summary: Too few options in list - value: - description: Too few options - options: - value: 1-10 - archived: false - attribute_not_found: - summary: Attribute Not Found - value: - description: Just a plain old ring - options: - - value: 1-10 - - value: 11-20 - archived: false - has_dependant_object: - summary: Has Dependant Object + ticket_type_created: + summary: Ticket type created value: - description: Trying to archieve - archived: true - "/data_connectors": + name: Customer Issue + description: Customer Report Template + icon: "\U0001F39F️" + category: Customer + "/ticket_types/{id}": get: - summary: List all data connectors + summary: Retrieve a ticket type parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: per_page - in: query - required: false - description: The number of results to return per page. Defaults to 20, minimum 1, maximum 50. - schema: - type: integer - default: 20 - minimum: 1 - maximum: 50 - - name: starting_after - in: query - required: false - description: The cursor value from `pages.next.starting_after` in a previous response. Used to paginate through results. + - name: id + in: path + required: true + description: The unique identifier for the ticket type which is given by Intercom. schema: type: string tags: - - Data Connectors - operationId: listDataConnectors - description: | - Returns a paginated list of all data connectors for the workspace, ordered by most recently updated first. Data connectors allow workflows and AI agents to make HTTP requests to external APIs. + - Ticket Types + operationId: getTicketType + description: You can fetch the details of a single ticket type. responses: '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: list - data: - - type: data_connector - id: '12345' - name: Order Status Service - description: Fetches order status from external fulfillment API - state: live - http_method: post - direct_fin_usage: false - created_by_admin_id: '128' - updated_by_admin_id: '128' - created_at: '2025-11-15T09:30:00Z' - updated_at: '2026-01-20T14:22:15Z' - execution_results_url: "/data_connectors/12345/execution_results" - pages: - type: pages - per_page: 20 - next: - starting_after: WzE3MDc1OTQ3MTUuMCwxMjM0NV0= - schema: - "$ref": "#/components/schemas/data_connector_list" - '400': - description: Bad Request + description: Ticket type found content: application/json: examples: - Invalid cursor: + Ticket type found: value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: client_error - message: Invalid starting_after param. Please try again using a starting_after value from a paginated response + type: ticket_type + id: '72' + name: Bug Report + description: Bug Report Template + icon: "\U0001F39F️" + workspace_id: this_is_an_id656_that_should_be_at_least_ + archived: false + created_at: 1734537870 + updated_at: 1734537870 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '179' + workspace_id: this_is_an_id656_that_should_be_at_least_ + name: _default_title_ + description: '' + data_type: string + input_options: + multiline: false + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 72 + archived: false + created_at: 1734537871 + updated_at: 1734537871 + - type: ticket_type_attribute + id: '181' + workspace_id: this_is_an_id656_that_should_be_at_least_ + name: name + description: description + data_type: string + input_options: + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: false + visible_to_contacts: false + default: false + ticket_type_id: 72 + archived: false + created_at: 1734537871 + updated_at: 1734537871 + - type: ticket_type_attribute + id: '180' + workspace_id: this_is_an_id656_that_should_be_at_least_ + name: _default_description_ + description: '' + data_type: string + input_options: + multiline: true + order: 1 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 72 + archived: false + created_at: 1734537871 + updated_at: 1734537871 + category: Customer + ticket_states: + type: list + data: + - type: ticket_state + id: '8353' + category: submitted + internal_label: Submitted + external_label: Submitted + - type: ticket_state + id: '8354' + category: in_progress + internal_label: In progress + external_label: In progress + - type: ticket_state + id: '8355' + category: waiting_on_customer + internal_label: Waiting on customer + external_label: Waiting on you + - type: ticket_state + id: '8356' + category: resolved + internal_label: Resolved + external_label: Resolved schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/ticket_type" '401': description: Unauthorized content: @@ -15674,86 +14376,130 @@ paths: Unauthorized: value: type: error.list - request_id: test-uuid-replacement + request_id: c9a2c3da-7536-4eba-bde7-c38c2d9e2942 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - post: - summary: Create a data connector + put: + summary: Update a ticket type parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier for the ticket type which is given by Intercom. + schema: + type: string tags: - - Data Connectors - operationId: createDataConnector - description: | - Create a new data connector. The connector is created in `draft` state. Configure its URL, headers, data inputs, and other settings, then set it to `live` when ready. + - Ticket Types + operationId: updateTicketType + description: "\nYou can update a ticket type.\n\n> \U0001F4D8 Updating a ticket + type.\n>\n> For the `icon` propery, use an emoji from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/)\n" responses: - '201': - description: Data connector created - content: - application/json: - examples: - Data connector created: - value: - type: data_connector - id: '125' - name: Get Order Status - description: Looks up order status from an external service - state: draft - http_method: get - direct_fin_usage: true - audiences: - - leads - - visitors - execution_type: server_side - configuration_response_type: test_response_type - data_transformation_type: full_access - client_function_timeout_ms: 30000 - data_inputs: - - name: order_id - type: string - description: The order ID to look up - required: true - default_value: '' - response_fields: [] - object_mappings: [] - token_ids: [] - customer_authentication: true - bypass_authentication: false - validate_missing_attributes: true - created_by_admin_id: '128' - updated_by_admin_id: '128' - created_at: '2026-03-19T11:27:36Z' - updated_at: '2026-03-19T11:27:36Z' - execution_results_url: "/data_connectors/125/execution_results" - schema: - "$ref": "#/components/schemas/data_connector_detail" - '422': - description: Invalid parameter + '200': + description: Ticket type updated content: application/json: examples: - Missing name: - value: - type: error.list - request_id: b4a45e2c-7a8d-4f3e-9c1a-2d5e8f7a6b3c - errors: - - code: parameter_not_found - message: Name is required - Invalid audiences: + Ticket type updated: value: - type: error.list - request_id: c5b56f3d-8b9e-5g4f-0d2b-3e6f9g8b7c4d - errors: - - code: parameter_invalid - message: "Invalid audiences. Must be a subset of: leads, users, visitors" + type: ticket_type + id: '74' + name: Bug Report 2 + description: Bug Report Template + icon: "\U0001F39F️" + workspace_id: this_is_an_id660_that_should_be_at_least_ + archived: false + created_at: 1734537873 + updated_at: 1734537874 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '185' + workspace_id: this_is_an_id660_that_should_be_at_least_ + name: _default_title_ + description: '' + data_type: string + input_options: + multiline: false + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 74 + archived: false + created_at: 1734537873 + updated_at: 1734537873 + - type: ticket_type_attribute + id: '187' + workspace_id: this_is_an_id660_that_should_be_at_least_ + name: name + description: description + data_type: string + input_options: + order: 0 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: false + visible_to_contacts: false + default: false + ticket_type_id: 74 + archived: false + created_at: 1734537873 + updated_at: 1734537873 + - type: ticket_type_attribute + id: '186' + workspace_id: this_is_an_id660_that_should_be_at_least_ + name: _default_description_ + description: '' + data_type: string + input_options: + multiline: true + order: 1 + required_to_create: false + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: true + default: true + ticket_type_id: 74 + archived: false + created_at: 1734537873 + updated_at: 1734537873 + category: Customer + ticket_states: + type: list + data: + - type: ticket_state + id: '8369' + category: submitted + internal_label: Submitted + external_label: Submitted + - type: ticket_state + id: '8370' + category: in_progress + internal_label: In progress + external_label: In progress + - type: ticket_state + id: '8371' + category: waiting_on_customer + internal_label: Waiting on customer + external_label: Waiting on you + - type: ticket_state + id: '8372' + category: resolved + internal_label: Resolved + external_label: Resolved schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/ticket_type" '401': description: Unauthorized content: @@ -15762,7 +14508,7 @@ paths: Unauthorized: value: type: error.list - request_id: test-uuid-replacement + request_id: 2fc2ae95-64ec-4581-80f0-79ecfdc2e759 errors: - code: unauthorized message: Access Token Invalid @@ -15772,147 +14518,113 @@ paths: content: application/json: schema: - "$ref": "#/components/schemas/create_data_connector_request" + "$ref": "#/components/schemas/update_ticket_type_request" examples: - data_connector_created: - summary: Data connector created - value: - name: Get Order Status - description: Looks up order status from an external service - http_method: get - url: "https://api.example.com/orders/{{order_id}}/status" - direct_fin_usage: true - audiences: - - leads - - visitors - headers: - - name: Content-Type - value: application/json - data_inputs: - - name: order_id - type: string - description: The order ID to look up - required: true - default_value: '' - customer_authentication: true - bypass_authentication: false - validate_missing_attributes: true - minimal: - summary: Minimal - name only - value: - name: My Connector - with_mock_response: - summary: With mock response + ticket_type_updated: + summary: Ticket type updated value: - name: Order Lookup - mock_response: - order: - id: 12345 - status: shipped - "/data_connectors/{id}": - get: - summary: Retrieve a data connector - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" + name: Bug Report 2 + "/tickets/{id}/reply": + post: + summary: Reply to a ticket + operationId: replyTicket + description: You can reply to a ticket with a message from an admin or on behalf + of a contact, or with a note for admins. + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" - name: id in: path - description: The unique identifier of the data connector. - example: '12345' required: true schema: + title: Ticket ID type: string - - name: state_version - in: query - required: false - description: Which version of the data connector to return. Defaults to live. - schema: - type: string - enum: - - draft - - live - default: live + description: | + The id of the ticket to target. + {% admonition type="info" name="Not the Inbox ticket ID" %} + This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. + {% /admonition %} + example: '123' tags: - - Data Connectors - operationId: RetrieveDataConnector - description: | - You can retrieve the full detail of a single data connector by its ID. - - The response includes configuration, data inputs, response fields, and object mappings. + - Tickets responses: - '200': - description: Data connector found - content: - application/json: - examples: - Data connector found: - value: - type: data_connector - id: '12345' - name: Order Status Service - description: Fetches order status from external fulfillment API - state: live - http_method: post - direct_fin_usage: false - audiences: - - users - - leads - execution_type: server_side - configuration_response_type: test_response_type - data_transformation_type: - client_function_name: - client_function_timeout_ms: - data_inputs: - - name: conversation_id - type: string - description: The Intercom conversation ID - required: true - default_value: '' - response_fields: - - path: status - type: string - example_value: ok - redacted: false - object_mappings: [] - token_ids: [] - customer_authentication: false - bypass_authentication: false - validate_missing_attributes: - created_by_admin_id: '456' - updated_by_admin_id: '456' - created_at: '2025-11-15T09:30:00Z' - updated_at: '2026-01-20T14:22:15Z' - execution_results_url: "/data_connectors/12345/execution_results" - schema: - "$ref": "#/components/schemas/data_connector_detail" '400': - description: Invalid state_version parameter + description: User reply content: application/json: examples: - Invalid state_version: + User reply: value: type: error.list - request_id: b4a45e2c-7a8d-4f3e-9c1a-2d5e8f7a6b3c + request_id: 603ce1da-f2bf-4641-a1ee-d1f13ebf9172 errors: - - code: parameter_invalid - message: "Invalid state_version. Must be one of: live, draft" + - code: parameter_mismatch + message: User replies are not allowed on Backoffice tickets schema: "$ref": "#/components/schemas/error" + '200': + description: Admin Reply to send Quick Reply Options + content: + application/json: + examples: + Admin note reply: + value: + type: ticket_part + id: '156' + part_type: note + body: |- +

An Unordered HTML List

+
    +
  • Coffee
  • +
  • Tea
  • +
  • Milk
  • +
+

An Ordered HTML List

+
    +
  1. Coffee
  2. +
  3. Tea
  4. +
  5. Milk
  6. +
+ created_at: 1734537884 + updated_at: 1734537884 + author: + id: '991267943' + type: admin + name: Ciaran419 Lee + email: admin419@email.com + attachments: [] + redacted: false + app_package_code: test-integration + Admin quick_reply reply: + value: + type: ticket_part + id: '158' + part_type: quick_reply + created_at: 1734537890 + updated_at: 1734537890 + author: + id: '991267948' + type: admin + name: Ciaran423 Lee + email: admin423@email.com + attachments: [] + redacted: false + schema: + "$ref": "#/components/schemas/ticket_reply" '404': - description: Data connector not found + description: Not found content: application/json: examples: - Data connector not found: + Not found: value: type: error.list - request_id: b4a45e2c-7a8d-4f3e-9c1a-2d5e8f7a6b3c + request_id: 24561472-06a4-41b2-aca2-97b3ccd9ca19 errors: - - code: data_connector_not_found - message: Data connector not found + - code: not_found + message: Resource Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -15923,77 +14635,119 @@ paths: Unauthorized: value: type: error.list - request_id: test-uuid-replacement + request_id: ed4305b3-4364-4fab-9f8d-e07e9a8190ab errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - delete: - summary: Delete a data connector + requestBody: + content: + application/json: + schema: + oneOf: + - "$ref": "#/components/schemas/contact_reply_ticket_request" + - "$ref": "#/components/schemas/admin_reply_ticket_request" + properties: + skip_notifications: + type: boolean + description: Option to disable notifications when replying to a + Ticket. + example: true + examples: + user_reply: + summary: User reply + value: + message_type: comment + type: user + intercom_user_id: 6762f2971bb69f9f2193bc49 + body: Thanks again :) + admin_note_reply: + summary: Admin note reply + value: + message_type: note + type: admin + admin_id: 991267943 + body: "

An Unordered HTML List

  • Coffee
  • + \
  • Tea
  • Milk

An Ordered HTML List

+ \
  1. Coffee
  2. Tea
  3. Milk
+ \ " + admin_note_cross_post_reply: + summary: Admin note reply with cross-post to linked conversations + value: + message_type: note + type: admin + admin_id: 991267943 + body: This note will be cross-posted to all linked conversations. + cross_post: true + admin_quick_reply_reply: + summary: Admin quick_reply reply + value: + message_type: quick_reply + type: admin + admin_id: 991267948 + reply_options: + - text: 'Yes' + uuid: 0df48b85-9a93-4c66-a167-753eff0baaec + - text: 'No' + uuid: 4f0b5145-4193-4b4f-8cad-ce19478a3938 + not_found: + summary: Not found + value: + message_type: comment + type: user + intercom_user_id: 6762f2a41bb69f9f2193bc4c + body: Thanks again :) + "/tickets/{ticket_id}/tags": + post: + summary: Add tag to a ticket parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id + - name: ticket_id in: path + description: ticket_id + example: '64619700005694' required: true - description: The unique identifier of the data connector - example: '12345' schema: type: string tags: - - Data Connectors - operationId: deleteDataConnector - description: | - Delete an existing data connector. The connector must be in `draft` state and must not be in use by any workflows or AI agents. + - Tags + - Tickets + operationId: attachTagToTicket + description: You can tag a specific ticket. This will return a tag object for + the tag that was added to the ticket. responses: '200': - description: Data connector deleted + description: successful content: application/json: examples: - Data connector deleted: + successful: value: - id: '125' - object: data_connector - deleted: true + type: tag + id: '121' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' schema: - "$ref": "#/components/schemas/deleted_data_connector_object" + "$ref": "#/components/schemas/tag" '404': - description: Data connector not found - content: - application/json: - examples: - Data connector not found: - value: - type: error.list - request_id: b4a45e2c-7a8d-4f3e-9c1a-2d5e8f7a6b3c - errors: - - code: data_connector_not_found - message: Data connector not found - schema: - "$ref": "#/components/schemas/error" - '409': - description: Conflict + description: Ticket not found content: application/json: examples: - Data connector in use: - value: - type: error.list - request_id: d6c78e4f-1a2b-3c4d-5e6f-7a8b9c0d1e2f - errors: - - code: data_connector_in_use - message: Data connector is in use by other resources and cannot be deleted - Data connector not in draft: + Ticket not found: value: type: error.list - request_id: e7d89f5g-2b3c-4d5e-6f7g-8a9b0c1d2e3f + request_id: b44cff1d-c6f8-4d60-ab6f-33522cd739d8 errors: - - code: conflict - message: Data connector must be in draft state to be deleted + - code: ticket_not_found + message: Ticket not found schema: "$ref": "#/components/schemas/error" '401': @@ -16004,153 +14758,106 @@ paths: Unauthorized: value: type: error.list - request_id: test-uuid-replacement + request_id: 2bed74fe-1b04-4c07-8813-02c700e8dcad errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - patch: - summary: Update a data connector + requestBody: + content: + application/json: + schema: + type: object + required: + - id + - admin_id + properties: + id: + type: string + description: The unique identifier for the tag which is given by + Intercom + example: '7522907' + admin_id: + type: string + description: The unique identifier for the admin which is given + by Intercom. + example: '780' + examples: + successful: + summary: successful + value: + id: 121 + admin_id: 991267958 + ticket_not_found: + summary: Ticket not found + value: + id: 122 + admin_id: 991267963 + "/tickets/{ticket_id}/tags/{id}": + delete: + summary: Remove tag from a ticket parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: ticket_id + in: path + description: ticket_id + example: '64619700005694' + required: true + schema: + type: string - name: id in: path + description: The unique identifier for the tag which is given by Intercom + example: '7522907' required: true - description: The unique identifier of the data connector. - example: '12345' schema: type: string tags: - - Data Connectors - operationId: updateDataConnector - description: | - Update an existing data connector. Only provided fields are changed. Set `state` to `live` or `draft` to change the connector's state. - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_data_connector_request" - examples: - Update name and description: - summary: Update basic fields - value: - name: Updated Connector Name - description: Updated description - Set state to live: - summary: Set a connector to live - value: - state: live - Set state to draft: - summary: Set a connector to draft - value: - state: draft - with_mock_response: - summary: Update with mock response - value: - mock_response: - user: - name: Alice - email: alice@example.com + - Tags + - Tickets + operationId: detachTagFromTicket + description: You can remove tag from a specific ticket. This will return a tag + object for the tag that was removed from the ticket. responses: '200': - description: Data connector updated - content: - application/json: - examples: - Data connector updated: - value: - type: data_connector - id: '12345' - name: Updated Connector Name - description: Updated description - state: draft - http_method: post - direct_fin_usage: false - audiences: - - users - - leads - execution_type: server_side - configuration_response_type: test_response_type - data_transformation_type: - client_function_name: - client_function_timeout_ms: - data_inputs: - - name: conversation_id - type: string - description: The Intercom conversation ID - required: true - default_value: '' - response_fields: [] - object_mappings: [] - token_ids: [] - customer_authentication: false - bypass_authentication: false - validate_missing_attributes: false - created_by_admin_id: '456' - updated_by_admin_id: '456' - created_at: '2025-11-15T09:30:00Z' - updated_at: '2026-03-24T14:22:15Z' - execution_results_url: "/data_connectors/12345/execution_results" - schema: - "$ref": "#/components/schemas/data_connector_detail" - '404': - description: Data connector not found - content: - application/json: - examples: - Data connector not found: - value: - type: error.list - request_id: b4a45e2c-7a8d-4f3e-9c1a-2d5e8f7a6b3c - errors: - - code: data_connector_not_found - message: Data connector not found - schema: - "$ref": "#/components/schemas/error" - '409': - description: Conflict + description: successful content: application/json: examples: - Data connector in use: + successful: value: - type: error.list - request_id: d6c78e4f-1a2b-3c4d-5e6f-7a8b9c0d1e2f - errors: - - code: data_connector_in_use - message: Data connector is in use by other resources and cannot be set to draft + type: tag + id: '124' + name: Manual tag + applied_at: 1663597223 + applied_by: + type: admin + id: '456' schema: - "$ref": "#/components/schemas/error" - '422': - description: Invalid parameter + "$ref": "#/components/schemas/tag" + '404': + description: Tag not found content: application/json: examples: - Invalid audiences: - value: - type: error.list - request_id: a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d - errors: - - code: parameter_invalid - message: "Invalid audiences. Must be a subset of: leads, users, visitors" - Invalid field value: + Ticket not found: value: type: error.list - request_id: a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d + request_id: 734019dc-1d61-4fad-a86e-e3fb06244c4d errors: - - code: parameter_invalid - message: "Http Method isn't an option" - Invalid state: + - code: ticket_not_found + message: Ticket not found + Tag not found: value: type: error.list - request_id: a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d + request_id: a3658b9a-3562-48a7-8afe-362284632d67 errors: - - code: parameter_invalid - message: "Invalid state. Must be one of: draft, live" + - code: tag_not_found + message: Tag not found schema: "$ref": "#/components/schemas/error" '401': @@ -16161,137 +14868,157 @@ paths: Unauthorized: value: type: error.list - request_id: test-uuid-replacement + request_id: 2e87c98e-4ffc-407e-b7bc-065d4d456ea7 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/data_connectors/{data_connector_id}/execution_results": - get: - summary: List execution results for a data connector + requestBody: + content: + application/json: + schema: + type: object + required: + - admin_id + properties: + admin_id: + type: string + description: The unique identifier for the admin which is given + by Intercom. + example: '123' + examples: + successful: + summary: successful + value: + admin_id: 991267973 + ticket_not_found: + summary: Ticket not found + value: + admin_id: 991267978 + tag_not_found: + summary: Tag not found + value: + admin_id: 991267983 + "/tickets": + post: + summary: Create a ticket parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: data_connector_id - in: path - required: true - description: The unique identifier for the data connector. - schema: - type: string - example: '12345' - - name: per_page - in: query - required: false - description: The number of results per page (1-30, default 10). - schema: - type: integer - default: 10 - minimum: 1 - maximum: 30 - - name: starting_after - in: query - required: false - description: Cursor for pagination. Use the value from `pages.next.starting_after` in a previous response. - schema: - type: string - - name: success - in: query - required: false - description: Filter by success status. Use `true`, `false`, or omit for all. - schema: - type: string - enum: - - 'true' - - 'false' - - name: error_type - in: query - required: false - description: Filter by error type. - schema: - type: string - enum: - - request_configuration_error - - faraday_error - - 3rd_party_error - - response_mapping_error - - token_refresh_error - - fin_action_response_formatting_error - - fin_action_identity_verification_error - - email_verification_error - - non_fin_standalone_action_identity_verification_error - - request_validation_error - - client_side_action_error - - name: start_ts - in: query - required: false - description: Unix timestamp for start of time range (default 1 hour ago). - schema: - type: integer - - name: end_ts - in: query - required: false - description: Unix timestamp for end of time range (default now). - schema: - type: integer - - name: include_bodies - in: query - required: false - description: Include request/response bodies in the response (default false). - schema: - type: string - enum: - - 'true' - - 'false' tags: - - Data Connectors - operationId: listDataConnectorExecutionResults - description: | - Retrieve paginated execution logs for a specific data connector. - Results from the last hour are returned by default. Use `start_ts` and `end_ts` to customize the time range. - - Request/response bodies are excluded by default. Use `include_bodies=true` to include them. + - Tickets + description: You can create a new ticket. + operationId: createTicket responses: '200': - description: successful + description: Successful response content: application/json: examples: - successful: + Successful response: value: - type: list - data: - - type: data_connector.execution - id: '99001' - data_connector_id: '12345' - success: true - http_status: 200 - http_method: post - request_url: https://api.vendor.com/webhook - execution_time_ms: 150 - source_type: workflow - source_id: '5001' - conversation_id: '8001' - created_at: '2026-02-10T18:15:32Z' - - type: data_connector.execution - id: '99000' - data_connector_id: '12345' - success: false - http_status: - http_method: post - error_type: 3rd_party_error - error_message: Connection refused - source_type: inbox - created_at: '2026-02-10T17:45:15Z' - pages: - type: pages - per_page: 10 - next: - starting_after: WzE3MDc1OTQ3MTUuMCw5OTAwMF0= + type: ticket + id: '626' + ticket_id: '33' + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + ticket_state: + type: ticket_state + id: '8481' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_type: + type: ticket_type + id: '88' + name: my-ticket-type-23 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id688_that_should_be_at_least_ + archived: false + created_at: 1734537943 + updated_at: 1734537943 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '196' + workspace_id: this_is_an_id688_that_should_be_at_least_ + name: _default_title_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 88 + archived: false + created_at: 1734537943 + updated_at: 1734537943 + - type: ticket_type_attribute + id: '197' + workspace_id: this_is_an_id688_that_should_be_at_least_ + name: _default_description_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 88 + archived: false + created_at: 1734537943 + updated_at: 1734537943 + category: Back-office + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f2d81bb69f9f2193bc54 + external_id: '70' + admin_assignee_id: 0 + team_assignee_id: 0 + created_at: 1734537944 + updated_at: 1734537946 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '175' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537945 + updated_at: 1734537945 + author: + id: '991267999' + type: bot + name: Fin + email: operator+this_is_an_id688_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + total_count: 1 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Back-office + is_shared: false schema: - "$ref": "#/components/schemas/data_connector_execution_result_list" + "$ref": "#/components/schemas/ticket" '401': description: Unauthorized content: @@ -16300,100 +15027,83 @@ paths: Unauthorized: value: type: error.list - request_id: test-uuid-replacement + request_id: c7bf358f-135e-48d7-8286-a4988a8a1d9b errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '400': - description: Invalid parameter - content: - application/json: - examples: - Invalid error_type: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: parameter_invalid - message: "Invalid error_type. Must be one of: request_configuration_error, faraday_error, 3rd_party_error, response_mapping_error, token_refresh_error, fin_action_response_formatting_error, fin_action_identity_verification_error, email_verification_error, non_fin_standalone_action_identity_verification_error, request_validation_error, client_side_action_error" - Invalid timestamp: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: parameter_invalid - message: start_ts must be a Unix timestamp (integer) - schema: - "$ref": "#/components/schemas/error" - '404': - description: Data connector not found - content: - application/json: - examples: - Data connector not found: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: data_connector_not_found - message: Data connector not found - schema: - "$ref": "#/components/schemas/error" - "/data_connectors/{data_connector_id}/execution_results/{id}": - get: - summary: Retrieve an execution result + requestBody: + content: + application/json: + schema: + allOf: + - "$ref": "#/components/schemas/create_ticket_request" + properties: + skip_notifications: + type: boolean + description: Option to disable notifications when a Ticket is created. + example: true + examples: + successful_response: + summary: Successful response + value: + ticket_type_id: 88 + contacts: + - id: 6762f2d81bb69f9f2193bc54 + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + "/tickets/enqueue": + post: + summary: Enqueue create ticket + description: Enqueues ticket creation for asynchronous processing, returning if the job was enqueued successfully to be processed. We attempt to perform a best-effort validation on inputs before tasks are enqueued. If the given parameters are incorrect, we won't enqueue the job. + operationId: enqueueCreateTicket + tags: + - Tickets parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: data_connector_id - in: path - required: true - description: The unique identifier for the data connector. - schema: - type: string - example: '12345' - - name: id - in: path - required: true - description: The unique identifier for the execution result. - schema: - type: string - example: '99001' - tags: - - Data Connectors - operationId: showDataConnectorExecutionResult - description: | - Retrieve details for a specific data connector execution result. - Always includes request/response bodies and the sanitised request URL. + requestBody: + content: + application/json: + schema: + allOf: + - "$ref": "#/components/schemas/create_ticket_request" + properties: + skip_notifications: + type: boolean + description: Option to disable notifications when a Ticket is created. + example: true + examples: + successful_response: + summary: Successful response + value: + ticket_type_id: 88 + contacts: + - id: 6762f2d81bb69f9f2193bc54 + ticket_attributes: + _default_title_: example + _default_description_: there is a problem responses: '200': - description: successful + description: Successful response content: application/json: examples: - successful: + Successful response: value: - type: data_connector.execution - id: '99001' - data_connector_id: '12345' - success: true - http_status: 200 - http_method: post - execution_time_ms: 150 - source_type: workflow - source_id: '5001' - conversation_id: '8001' - created_at: '2026-02-10T18:15:32Z' - request_url: https://api.example.com/webhook - request_body: '{"channel": "#alerts", "text": "Conversation updated"}' - response_body: '{"ok": true}' - raw_response_body: '{"ok": true}' - schema: - "$ref": "#/components/schemas/data_connector_execution_result" + type: job + id: "20" + status: pending + url: https://api.intercom.io/jobs/status/20 + resource_type: ticket + resource_id: null + resource_url: null + schema: + "$ref": "#/components/schemas/jobs" '401': description: Unauthorized content: @@ -16402,446 +15112,273 @@ paths: Unauthorized: value: type: error.list - request_id: test-uuid-replacement + request_id: c7bf358f-135e-48d7-8286-a4988a8a1d9b errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '404': - description: Execution result not found + '400': + description: Bad Request content: application/json: examples: - Data connector not found: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: data_connector_not_found - message: Data connector not found - Execution result not found: + Bad Request: value: type: error.list - request_id: test-uuid-replacement + request_id: c7bf358f-135e-48d7-8286-a4988a8a1456 errors: - - code: execution_result_not_found - message: Execution result not found + - code: parameter_invalid + message: "Missing required ticket attributes" schema: "$ref": "#/components/schemas/error" - "/ecommerce/connectors/{id}/catalog": - post: - summary: Upload a product catalog + "/tickets/{id}": + put: + summary: Update a ticket parameters: - name: Intercom-Version in: header schema: - "$ref": "#/components/schemas/intercom_version_preview" + "$ref": "#/components/schemas/intercom_version" - name: id in: path required: true - description: The unique identifier of the ecommerce connector. + description: | + The unique identifier for the ticket which is given by Intercom. + {% admonition type="info" name="Not the Inbox ticket ID" %} + This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. + {% /admonition %} schema: type: string - example: '42939' tags: - - Ecommerce Connectors - operationId: uploadEcommerceCatalog - description: | - Upload a product catalog to an ecommerce connector. The catalog must be a JSON - array of product objects. There are two upload modes: - - **Single-file upload** — POST a single catalog file (up to 99 MB per request). - Omit `finalize` and `import_job_id`. Returns `202 Accepted` when sync has started. - - **Multipart upload** — For catalogs that must be split across multiple requests: - - 1. POST the first part with `finalize=false` (no `import_job_id`). The response - returns an `import_job_id` and `next_part_number`. - 2. POST each subsequent part with `finalize=false`, the `import_job_id` from step 1, - and the `part_number` from the previous response. Each part must be ≤ 99 MB. - 3. POST with `finalize=true` and the `import_job_id` to complete the upload and - start the sync. No catalog file is required in the finalization request. - - Part uploads are idempotent — retrying the same `part_number` does not create - a duplicate. If a response is lost, retry with the same `part_number`. - - ## Product object structure - - The catalog file must be a JSON array where each element is a product object. - Only `id`, `title`, and `url` are required — all other fields are optional. - - | Field | Type | Required | Description | - |---|---|---|---| - | `id` | string | ✓ | Your unique product identifier. Used to match products on re-upload so only changed products are re-indexed. Also the delete key — any product ID absent from a new upload is removed from Fin's knowledge. Must be stable across uploads. | - | `title` | string | ✓ | Product name. Used by Fin when searching for and recommending products. | - | `url` | string | ✓ | Canonical product page URL shown in Fin's product recommendations. Must be a valid `https://` URL. | - | `description` | string | | Product description that Fin reads to understand what the product is. HTML formatting is supported and safely sanitized (`description_html` takes precedence if both are provided). This is the primary field Fin uses to match products to shopper questions — a richer description leads to better recommendations. | - | `featured_image_url` | string | | Primary product image shown in Fin's recommendation cards. Falls back to the first entry of `image_urls` if not provided. If no valid image can be resolved for a variant, that variant's card is not shown to the shopper. | - | `image_urls` | string[] | | Additional product images. Used as a fallback when `featured_image_url` is absent or when a variant has no specific image. | - | `price_min` | number | | Lowest price across all variants. If omitted, derived automatically from variant prices. Fin uses this to filter products when a shopper mentions a budget (e.g. "under $100"). Displayed as a range alongside `price_max`, or as a single value if both are equal. | - | `price_max` | number | | Highest price across all variants. If omitted, derived from variant prices. Used alongside `price_min` for budget filtering and price display. | - | `currency` | string | | ISO 4217 currency code (e.g. `"USD"`, `"EUR"`, `"GBP"`). Defaults to USD if omitted. Used to format prices with the correct symbol in Fin's responses and product cards. | - | `in_stock` | boolean | | Whether the product is available to purchase. If omitted, derived from variant stock — the product is in stock if at least one variant has `in_stock: true`. Products with no in-stock variants are hidden from Fin entirely. | - | `category_path` | string or string[] | Strongly recommended | Hierarchical category breadcrumb (e.g. `["Clothing", "Outerwear", "Jackets"]`). Fin understands the hierarchy — a shopper asking about "Clothing" sees products from all subcategories underneath it. The most specific category is shown in search results. | - | `collections` | string[] | Strongly recommended | Collections or groupings this product belongs to in your store. Fin uses collections to understand your catalog's structure and answer questions like "what's in the sale collection?". | - | `tags` | string[] | | Free-form keywords matching how shoppers phrase needs in chat (e.g. `["waterproof", "gift", "plus-size"]`). Complements `category_path` and `collections`. | - | `available_options` | object[] | | Option types and their possible values (e.g. `{"name": "Size", "values": ["S", "M", "L"]}`). Fin uses these to understand what choices a shopper can make and to correctly filter variants when asked for a specific size, colour, or other attribute. | - | `additional_data` | object | | Custom attributes for your business. Fin uses these to show each customer only relevant products. All keys must be consistent across all products in your catalog — the attribute schema is read from the first product in the file. | - | `variants` | object[] | | Individual purchasable variants. Fin recommends specific variants (not just products), so populating variants with accurate stock, price, and option data leads to more precise recommendations. See the variant table below. | - - ### Variant object structure - - Each object in the `variants` array may contain: - - | Field | Type | Required | Description | - |---|---|---|---| - | `id` | string | ✓ | Unique identifier for this variant within the product. | - | `title` | string | | Variant display name shown to shoppers (e.g. `"Small / Blue"`). | - | `price` | number | | Price of this specific variant. Fin uses variant prices for precise budget filtering and displays the variant price in recommendation cards. | - | `compare_at_price` | number | | Original price before a discount. When provided, Fin will naturally mention the saving (e.g. "down from $129 to $99"). | - | `in_stock` | boolean | | Whether this variant is currently available. Out-of-stock variants are not shown in Fin's recommendation cards and Fin will not suggest them to shoppers. | - | `image_url` | string | | Image specific to this variant. Takes precedence over the product's `featured_image_url`. Falls back to `featured_image_url`, then `image_urls`. If no valid image can be resolved, this variant's recommendation card will not be shown. | - | `selected_options` | object[] | | The specific option values that define this variant (e.g. `[{"name": "Size", "value": "Small"}, {"name": "Color", "value": "Blue"}]`). Fin uses these to match shopper requests like "do you have this in medium?" to the correct variant. | - | `url` | string | | Direct link to this variant's page. Takes precedence over the product URL in recommendation cards. If omitted, constructed automatically as `{product_url}?variant={id}`. | - - ### Example catalog file - - ```json - [ - { - "id": "prod-12345", - "title": "Classic Cotton T-Shirt", - "url": "https://example.com/products/classic-cotton-t-shirt", - "description": "A comfortable everyday t-shirt.", - "featured_image_url": "https://cdn.example.com/images/t-shirt.jpg", - "price_min": 19.99, - "price_max": 29.99, - "currency": "USD", - "in_stock": true, - "tags": ["organic", "bestseller"], - "collections": ["Summer Collection"], - "category_path": "Clothing > T-Shirts", - "available_options": [ - {"name": "Size", "values": ["S", "M", "L"]}, - {"name": "Color", "values": ["White", "Blue"]} - ], - "variants": [ - { - "id": "var-001", - "title": "S / White", - "price": 19.99, - "in_stock": true, - "selected_options": [ - {"name": "Size", "value": "S"}, - {"name": "Color", "value": "White"} - ] - }, - { - "id": "var-002", - "title": "M / Blue", - "price": 29.99, - "in_stock": true, - "selected_options": [ - {"name": "Size", "value": "M"}, - {"name": "Color", "value": "Blue"} - ] - } - ], - "additional_data": { - "sku": "TSHIRT-WHT-S", - "vendor": "Acme Apparel" - } - } - ] - ``` - requestBody: - content: - multipart/form-data: - schema: - type: object - properties: - catalog: - type: string - format: binary - description: | - The catalog JSON file. Required for all requests except finalization - (`finalize=true`). Must be a valid JSON array of product objects. Max 99 MB. - - Each element in the array must conform to the - [`ecommerce_catalog_product`](/docs/references/preview/rest-api/api.intercom.io/models/ecommerce_catalog_product) schema. - The `id`, `title`, and `url` fields are required on every product; - all other fields are optional. Variants, if provided, must conform to the - [`ecommerce_catalog_variant`](/docs/references/preview/rest-api/api.intercom.io/models/ecommerce_catalog_variant) schema. - finalize: - type: string - enum: - - 'true' - - 'false' - description: | - Set to `true` to finalize a multipart upload session and start the catalog sync. - No catalog file is required when finalizing. Set to `false` to upload a part in - a multipart session. Omit entirely for a single-file upload. - example: 'false' - import_job_id: - type: string - description: | - The import job ID returned from the first multipart upload request. Required - when uploading subsequent parts (`part_number` ≥ 2) and when finalizing - a multipart session (`finalize=true`). - example: 'job_01abc123' - part_number: - type: integer - description: | - The sequential part number for a multipart upload. Must be a positive integer. - The server returns `next_part_number` in each response to guide the next request. - Retrying the same `part_number` is safe and idempotent. - example: 2 - examples: - single_file_upload: - summary: Single-file upload - value: - catalog: "@products.json" - multipart_first_part: - summary: "Multipart — Step 1: First part" - value: - catalog: "@products_part1.json" - finalize: "false" - multipart_append_part: - summary: "Multipart — Step 2: Append part" - value: - catalog: "@products_part2.json" - finalize: "false" - import_job_id: "job_01abc123" - part_number: 2 - multipart_finalize: - summary: "Multipart — Step 3: Finalize" - value: - finalize: "true" - import_job_id: "job_01abc123" + - Tickets + operationId: updateTicket + description: You can update a ticket. responses: '200': - description: Multipart catalog part uploaded successfully. + description: Successful response content: application/json: examples: - Part uploaded: + Successful response: value: - import_job_id: 'job_01abc123' - next_part_number: 2 + type: ticket + id: '627' + ticket_id: '34' + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + ticket_state: + type: ticket_state + id: '8498' + category: in_progress + internal_label: In progress + external_label: In progress + ticket_type: + type: ticket_type + id: '90' + name: my-ticket-type-25 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id692_that_should_be_at_least_ + archived: false + created_at: 1734537948 + updated_at: 1734537948 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '200' + workspace_id: this_is_an_id692_that_should_be_at_least_ + name: _default_title_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 90 + archived: false + created_at: 1734537949 + updated_at: 1734537949 + - type: ticket_type_attribute + id: '201' + workspace_id: this_is_an_id692_that_should_be_at_least_ + name: _default_description_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 90 + archived: false + created_at: 1734537949 + updated_at: 1734537949 + category: Back-office + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f2dd1bb69f9f2193bc55 + external_id: 8df1fa21-b41d-4621-9229-d6f7a3a590ce + admin_assignee_id: 991268013 + team_assignee_id: 0 + created_at: 1734537950 + updated_at: 1734537955 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '176' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537951 + updated_at: 1734537951 + author: + id: '991268011' + type: admin + name: Ciaran477 Lee + email: admin477@email.com + attachments: [] + redacted: false + - type: ticket_part + id: '177' + part_type: ticket_attribute_updated_by_admin + created_at: 1734537953 + updated_at: 1734537953 + author: + id: '991268012' + type: bot + name: Fin + email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + updated_attribute_data: + attribute: + type: "attribute" + id: "10" + label: "Photo" + value: + type: "value" + id: [2] + label: ["photo.png"] + - type: ticket_part + id: '178' + part_type: ticket_attribute_updated_by_admin + created_at: 1734537953 + updated_at: 1734537953 + author: + id: '991268012' + type: bot + name: Fin + email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + updated_attribute_data: + attribute: + type: "attribute" + id: "7" + label: "Progress" + value: + type: "value" + id: "Fast" + label: "Fast" + - type: ticket_part + id: '179' + part_type: ticket_state_updated_by_admin + ticket_state: in_progress + previous_ticket_state: submitted + created_at: 1734537954 + updated_at: 1734537954 + author: + id: '991268012' + type: bot + name: Fin + email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + app_package_code: test-integration + - type: ticket_part + id: '180' + part_type: assignment + created_at: 1734537954 + updated_at: 1734537954 + assigned_to: + type: admin + id: '991268013' + author: + id: '991268011' + type: admin + name: Ciaran477 Lee + email: admin477@email.com + attachments: [] + redacted: false + - type: ticket_part + id: '181' + part_type: snoozed + created_at: 1734537955 + updated_at: 1734537955 + author: + id: '991268012' + type: bot + name: Fin + email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io + attachments: [] + redacted: false + total_count: 6 + open: true + snoozed_until: 1734627600 + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Back-office + is_shared: false schema: - "$ref": "#/components/schemas/ecommerce_catalog_upload_part_response" - '202': - description: Catalog accepted and sync has started. + "$ref": "#/components/schemas/ticket" + '404': + description: Assignee not found content: application/json: examples: - Sync started: + Admin not found: value: - import_job_id: 'job_01abc123' - status: processing - message: Catalog received. Sync has started. - schema: - "$ref": "#/components/schemas/ecommerce_catalog_upload_response" + type: error.list + request_id: f9757add-b48a-4519-a6e0-04b2ef9c8c6c + errors: + - code: assignee_not_found + message: Assignee not found + Assignee not found: + value: + type: error.list + request_id: 39cf6495-768c-450c-a2c4-c9c3c4ea2e01 + errors: + - code: assignee_not_found + message: Assignee not found '400': - description: Bad request. + description: Ticket state id is not valid or is not associated with the + ticket type. content: application/json: examples: - Missing catalog file: + Ticket state id is not valid or is not associated with the ticket type.: value: type: error.list - request_id: test-uuid-replacement + request_id: 28b71de1-b451-433a-a08c-845f2b1736b6 errors: - - code: parameter_not_found - message: catalog file is required - Catalog is not a file: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: parameter_not_found - message: catalog must be an uploaded file - schema: - "$ref": "#/components/schemas/error" - '401': - "$ref": "#/components/responses/Unauthorized" - '404': - description: Not found. - content: - application/json: - examples: - Connector not found: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: import_source_not_found - message: No connector found with the provided id. - Feature not available: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: not_found - message: The catalog API is not available for this workspace. - Upload session not found: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: upload_session_not_found - message: No active upload session found for the provided import_job_id. - schema: - "$ref": "#/components/schemas/error" - '409': - description: Conflict. - content: - application/json: - examples: - Sync already in progress: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: sync_in_progress - message: A catalog upload is already in progress. Please wait for it to complete. - Multipart session already exists: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: sync_in_progress - message: A multipart upload is already in progress. Use import_job_id to continue. - Session cannot be finalized: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: upload_session_not_finalizable - message: Upload session cannot be finalized in its current state. - schema: - "$ref": "#/components/schemas/error" - '422': - description: Unprocessable content. - content: - application/json: - examples: - Catalog is not a JSON array: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: invalid_catalog_format - message: catalog must be a JSON array - Catalog items are not objects: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: invalid_catalog_format - message: each item in the catalog array must be a JSON object - Part number is not a positive integer: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: invalid_part_number - message: part_number must be a positive integer - Out-of-sequence part number: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: invalid_part_number - message: Expected part 2, got 3 - File exceeds size limit: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: payload_too_large - message: catalog file exceeds 99MB limit - import_job_id required for multipart: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: import_job_id_required - message: Include import_job_id to continue an existing upload session. - schema: - "$ref": "#/components/schemas/error" - '503': - description: Service unavailable. - content: - application/json: - examples: - Storage error: - value: - type: error.list - request_id: test-uuid-replacement - errors: - - code: internal_error - message: Failed to store catalog - schema: - "$ref": "#/components/schemas/error" - "/events": - post: - summary: Submit a data event - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Data Events - operationId: createDataEvent - description: |2+ - - You will need an Access Token that has write permissions to send Events. Once you have a key you can submit events via POST to the Events resource, which is located at https://api.intercom.io/events, or you can send events using one of the client libraries. When working with the HTTP API directly a client should send the event with a `Content-Type` of `application/json`. - - When using the JavaScript API, [adding the code to your app](http://docs.intercom.io/configuring-Intercom/tracking-user-events-in-your-app) makes the Events API available. Once added, you can submit an event using the `trackEvent` method. This will associate the event with the Lead or currently logged-in user or logged-out visitor/lead and send it to Intercom. The final parameter is a map that can be used to send optional metadata about the event. - - With the Ruby client you pass a hash describing the event to `Intercom::Event.create`, or call the `track_user` method directly on the current user object (e.g. `user.track_event`). - - **NB: For the JSON object types, please note that we do not currently support nested JSON structure.** - - | Type | Description | Example | - | :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------- | - | String | The value is a JSON String | `"source":"desktop"` | - | Number | The value is a JSON Number | `"load": 3.67` | - | Date | The key ends with the String `_date` and the value is a [Unix timestamp](http://en.wikipedia.org/wiki/Unix_time), assumed to be in the [UTC](http://en.wikipedia.org/wiki/Coordinated_Universal_Time) timezone. | `"contact_date": 1392036272` | - | Link | The value is a HTTP or HTTPS URI. | `"article": "https://example.org/ab1de.html"` | - | Rich Link | The value is a JSON object that contains `url` and `value` keys. | `"article": {"url": "https://example.org/ab1de.html", "value":"the dude abides"}` | - | Monetary Amount | The value is a JSON object that contains `amount` and `currency` keys. The `amount` key is a positive integer representing the amount in cents. The price in the example to the right denotes €349.99. | `"price": {"amount": 34999, "currency": "eur"}` | - - **Lead Events** - - When submitting events for Leads, you will need to specify the Lead's `id`. - - **Metadata behaviour** - - - We currently limit the number of tracked metadata keys to 10 per event. Once the quota is reached, we ignore any further keys we receive. The first 10 metadata keys are determined by the order in which they are sent in with the event. - - It is not possible to change the metadata keys once the event has been sent. A new event will need to be created with the new keys and you can archive the old one. - - There might be up to 24 hrs delay when you send a new metadata for an existing event. - - **Event de-duplication** - - The API may detect and ignore duplicate events. Each event is uniquely identified as a combination of the following data - the Workspace identifier, the Contact external identifier, the Data Event name and the Data Event created time. As a result, it is **strongly recommended** to send a second granularity Unix timestamp in the `created_at` field. - - Duplicated events are responded to using the normal `202 Accepted` code - an error is not thrown, however repeat requests will be counted against any rate limit that is in place. - - ### HTTP API Responses - - - Successful responses to submitted events return `202 Accepted` with an empty body. - - Unauthorised access will be rejected with a `401 Unauthorized` or `403 Forbidden` response code. - - Events sent about users that cannot be found will return a `404 Not Found`. - - Event lists containing duplicate events will have those duplicates ignored. - - Server errors will return a `500` response code and may contain an error message in the body. - - responses: - '202': - description: successful + - code: ticket_state_id_invalid + message: Ticket state id is not valid or is not associated with + the ticket type '401': description: Unauthorized content: @@ -16850,7 +15387,7 @@ paths: Unauthorized: value: type: error.list - request_id: 212c8206-e7a6-44c8-8f27-5f0ad7f1d243 + request_id: 17db783e-1e43-41c9-b4db-0c05da78a909 errors: - code: unauthorized message: Access Token Invalid @@ -16860,87 +15397,177 @@ paths: content: application/json: schema: - "$ref": "#/components/schemas/create_data_event_request" + allOf: + - "$ref": "#/components/schemas/update_ticket_request" + properties: + skip_notifications: + type: boolean + description: Option to disable notifications when a Ticket is updated. + example: true + examples: + successful_response: + summary: Successful response + value: + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + admin_id: 991268011 + assignee_id: 991268013 + open: true + snoozed_until: 1673609604 + ticket_state_id: 8498 + admin_not_found: + summary: Admin not found + value: + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + admin_id: 991268011 + assignee_id: 991268013 + ticket_state_id: 8506 + assignee_not_found: + summary: Assignee not found + value: + ticket_attributes: + _default_title_: example + _default_description_: there is a problem + admin_id: 991268011 + assignee_id: 991268013 + ticket_state_id: 8514 + ticket_state_id_is_not_valid_or_is_not_associated_with_the_ticket_type: + summary: Ticket state id is not valid or is not associated with the + ticket type. + value: + ticket_state_id: 0 get: - summary: List all data events + summary: Retrieve a ticket parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - in: query - name: filter + - name: id + in: path required: true - style: form - explode: true - schema: - type: object - oneOf: - - title: user_id query parameter - properties: - user_id: - type: string - required: - - user_id - additionalProperties: false - - title: intercom_user_id query parameter - properties: - intercom_user_id: - type: string - required: - - intercom_user_id - additionalProperties: false - - title: email query parameter - properties: - email: - type: string - required: - - email - additionalProperties: false - - name: type - in: query - required: true - description: The value must be user + description: | + The unique identifier for the ticket which is given by Intercom. + {% admonition type="info" name="Not the Inbox ticket ID" %} + This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. + {% /admonition %} schema: type: string - - name: summary - in: query - required: false - description: summary flag - schema: - type: boolean tags: - - Data Events - operationId: lisDataEvents - description: "\n> \U0001F6A7\n>\n> Please note that you can only 'list' events - that are less than 90 days old. Event counts and summaries will still include - your events older than 90 days but you cannot 'list' these events individually - if they are older than 90 days\n\nThe events belonging to a customer can be - listed by sending a GET request to `https://api.intercom.io/events` with a - user or lead identifier along with a `type` parameter. The identifier parameter - can be one of `user_id`, `email` or `intercom_user_id`. The `type` parameter - value must be `user`.\n\n- `https://api.intercom.io/events?type=user&user_id={user_id}`\n- - `https://api.intercom.io/events?type=user&email={email}`\n- `https://api.intercom.io/events?type=user&intercom_user_id={id}` - (this call can be used to list leads)\n\nThe `email` parameter value should - be [url encoded](http://en.wikipedia.org/wiki/Percent-encoding) when sending.\n\nYou - can optionally define the result page size as well with the `per_page` parameter.\n" + - Tickets + operationId: getTicket + description: You can fetch the details of a single ticket. responses: '200': - description: Successful response + description: Ticket found content: application/json: examples: - Successful response: + Ticket found: value: - type: event.summary - events: [] - pages: - next: http://api.intercom.test/events?next page - email: user26@email.com - intercom_user_id: 6762f22b1bb69f9f2193bc12 - user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 + type: ticket + id: '631' + ticket_id: '38' + ticket_attributes: + _default_title_: attribute_value + _default_description_: + ticket_state: + type: ticket_state + id: '8537' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_type: + type: ticket_type + id: '95' + name: my-ticket-type-30 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id702_that_should_be_at_least_ + archived: false + created_at: 1734537973 + updated_at: 1734537973 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '210' + workspace_id: this_is_an_id702_that_should_be_at_least_ + name: _default_title_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 95 + archived: false + created_at: 1734537973 + updated_at: 1734537973 + - type: ticket_type_attribute + id: '211' + workspace_id: this_is_an_id702_that_should_be_at_least_ + name: _default_description_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 95 + archived: false + created_at: 1734537973 + updated_at: 1734537973 + category: Back-office + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f2f61bb69f9f2193bc59 + external_id: b16afa36-2637-4880-adee-a46d145bc27f + admin_assignee_id: 0 + team_assignee_id: 0 + created_at: 1734537974 + updated_at: 1734537976 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '185' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537975 + updated_at: 1734537975 + author: + id: '991268047' + type: admin + name: Ciaran509 Lee + email: admin509@email.com + attachments: [] + redacted: false + app_package_code: test-integration + total_count: 1 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Back-office + is_shared: false schema: - "$ref": "#/components/schemas/data_event_summary" + "$ref": "#/components/schemas/ticket" '401': description: Unauthorized content: @@ -16949,29 +15576,65 @@ paths: Unauthorized: value: type: error.list - request_id: e6f50446-be4a-40ac-8c8d-6fb91e1040fd + request_id: d719ad4f-5ae2-492f-88d6-98ba0a9ab6cc errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/events/summaries": - post: - summary: Create event summaries + delete: + summary: Delete a ticket parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: | + The unique identifier for the ticket which is given by Intercom. + {% admonition type="info" name="Not the Inbox ticket ID" %} + This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. + {% /admonition %} + schema: + type: string tags: - - Data Events - operationId: dataEventSummaries - description: "Create event summaries for a user. Event summaries are used to - track the number of times an event has occurred, the first time it occurred - and the last time it occurred.\n\n" + - Tickets + operationId: deleteTicket + description: | + {% admonition type="warning" name="Irreversible operation" %} + Deleting a ticket is permanent and cannot be reversed. + {% /admonition %} + + Deleting a ticket permanently removes it from the inbox. All sensitive data is deleted, including admin and user replies, ticket attributes, uploads, and related content. The ticket will still appear in reporting, though some data may be incomplete due to the deletion. responses: '200': description: successful + content: + application/json: + examples: + successful: + value: + id: '632' + object: ticket + deleted: true + schema: + "$ref": "#/components/schemas/ticket_deleted" + '404': + description: Ticket not found + content: + application/json: + examples: + Ticket not found: + value: + type: error.list + request_id: 34a070f1-122e-42dc-a94e-9b86768df26c + errors: + - code: ticket_not_found + message: Ticket not found + schema: + "$ref": "#/components/schemas/error" '401': description: Unauthorized content: @@ -16980,48 +15643,108 @@ paths: Unauthorized: value: type: error.list - request_id: 7a7d8425-2c1b-46ab-8133-c043fc1e5711 + request_id: 50348131-55cd-4ca1-a65f-de093b232adb errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_data_event_summaries_request" - "/export/content/data": + '403': + description: API plan restricted + content: + application/json: + examples: + API plan restricted: + value: + type: error.list + request_id: 7a80b950-b392-499f-85db-ea7c6c424d37 + errors: + - code: api_plan_restricted + message: Active subscription needed. + schema: + "$ref": "#/components/schemas/error" + "/tickets/search": post: - summary: Create content data export + summary: Search tickets + operationId: searchTickets parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - - Data Export - operationId: createDataExport - description: "To create your export job, you need to send a `POST` request to - the export endpoint `https://api.intercom.io/export/content/data`.\n\nThis - endpoint exports **message delivery and engagement data** for outbound content - (Emails, Posts, Custom Bots, Surveys, Tours, Series, and more). The exported - data includes who received each message, when they received it, and how they - engaged with it (opens, clicks, replies, completions, dismissals, unsubscribes, - and bounces). It does not export raw message or conversation content.\n\nThe - only parameters you need to provide are the range of dates that you want exported.\n\n>\U0001F6A7 - Limit of one active job\n>\n> You can only have one active job per workspace. - You will receive a HTTP status code of 429 with the message Exceeded rate - limit of 1 pending message data export jobs if you attempt to create a second - concurrent job.\n\n>❗️ Updated_at not included\n>\n> It should be noted that - the timeframe only includes messages sent during the time period and not messages - that were only updated during this period. For example, if a message was updated - yesterday but sent two days ago, you would need to set the created_at_after - date before the message was sent to include that in your retrieval job.\n\n>\U0001F4D8 - Date ranges are inclusive\n>\n> Requesting data for 2018-06-01 until 2018-06-30 - will get all data for those days including those specified - e.g. 2018-06-01 - 00:00:00 until 2018-06-30 23:59:99.\n" - responses: + - Tickets + description: | + You can search for multiple tickets by the value of their attributes in order to fetch exactly which ones you want. + + To search for tickets, you send a `POST` request to `https://api.intercom.io/tickets/search`. + + This will accept a query object in the body which will define your filters. + {% admonition type="warning" name="Optimizing search queries" %} + 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. + See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#example-search-conversations-request) for more details on how to use the `starting_after` param. + {% /admonition %} + + ### Nesting & Limitations + + 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 multiples there can be: + - There's a limit of max 2 nested filters + - There's a limit of max 15 filters for each AND or OR group + + ### Accepted Fields + + Most keys listed as part of the Ticket model are 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 `"foobar"`). + The `source.body` field is unique as the search will not be performed against the entire value, but instead against every element of the value separately. For example, when searching for a conversation with a `"I need support"` body - the query should contain a `=` operator with the value `"support"` for such conversation to be returned. A query with a `=` operator and a `"need support"` value will not yield a result. + + | Field | Type | + | :---------------------------------------- | :--------------------------------------------------------------------------------------- | + | id | String | + | created_at | Date (UNIX timestamp) | + | updated_at | Date (UNIX timestamp) | + | title | String | + | description | String | + | category | String | + | ticket_type_id | String | + | contact_ids | String | + | teammate_ids | String | + | admin_assignee_id | Integer | + | team_assignee_id | Integer | + | open | Boolean | + | state | String | + | snoozed_until | Date (UNIX timestamp) | + | ticket_attribute.{id} | String or Boolean or Date (UNIX timestamp) or Float or Integer | + + {% admonition type="info" name="Searching by Category" %} + When searching for tickets by the **`category`** field, specific terms must be used instead of the category names: + * For **Customer** category tickets, use the term `request`. + * For **Back-office** category tickets, use the term `task`. + * For **Tracker** category tickets, use the term `tracker`. + {% /admonition %} + + ### Accepted Operators + + {% admonition type="info" name="Searching based on `created_at`" %} + You may use the `<=` or `>=` operators to search by `created_at`. + {% /admonition %} + + 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 | + responses: '200': description: successful content: @@ -17029,48 +15752,147 @@ paths: examples: successful: value: - job_identifier: al9w983lwu88w1fd - status: pending - download_url: '' - download_expires_at: '' + type: ticket.list + pages: + type: pages + page: 1 + per_page: 5 + total_pages: 1 + total_count: 1 + tickets: + - type: ticket + id: '633' + ticket_id: '40' + ticket_attributes: + _default_title_: attribute_value + _default_description_: + ticket_state: + type: ticket_state + id: '8577' + category: submitted + internal_label: Submitted + external_label: Submitted + ticket_type: + type: ticket_type + id: '100' + name: my-ticket-type-35 + description: my ticket type description is awesome. + icon: "\U0001F981" + workspace_id: this_is_an_id712_that_should_be_at_least_ + archived: false + created_at: 1734537989 + updated_at: 1734537989 + is_internal: false + ticket_type_attributes: + type: list + data: + - type: ticket_type_attribute + id: '220' + workspace_id: this_is_an_id712_that_should_be_at_least_ + name: _default_title_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 100 + archived: false + created_at: 1734537989 + updated_at: 1734537989 + - type: ticket_type_attribute + id: '221' + workspace_id: this_is_an_id712_that_should_be_at_least_ + name: _default_description_ + description: ola + data_type: string + input_options: + order: 0 + required_to_create: true + required_to_create_for_contacts: false + visible_on_create: true + visible_to_contacts: false + default: false + ticket_type_id: 100 + archived: false + created_at: 1734537989 + updated_at: 1734537989 + category: Back-office + contacts: + type: contact.list + contacts: + - type: contact + id: 6762f3061bb69f9f2193bc5b + external_id: 9b913927-c084-4391-b1db-098341b5ffe3 + admin_assignee_id: 0 + team_assignee_id: 0 + created_at: 1734537990 + updated_at: 1734537992 + ticket_parts: + type: ticket_part.list + ticket_parts: + - type: ticket_part + id: '188' + part_type: ticket_state_updated_by_admin + ticket_state: submitted + previous_ticket_state: submitted + created_at: 1734537991 + updated_at: 1734537991 + author: + id: '991268079' + type: admin + name: Ciaran539 Lee + email: admin539@email.com + attachments: [] + redacted: false + total_count: 1 + open: true + linked_objects: + type: list + data: [] + total_count: 0 + has_more: false + category: Back-office + is_shared: false schema: - "$ref": "#/components/schemas/data_export" + "$ref": "#/components/schemas/ticket_list" requestBody: content: application/json: schema: - "$ref": "#/components/schemas/create_data_exports_request" + "$ref": "#/components/schemas/search_request" examples: successful: summary: successful value: - created_at_after: 1734519776 - created_at_before: 1734537776 - "/export/content/data/{job_identifier}": - get: - summary: Show content data export + query: + operator: AND + value: + - field: created_at + operator: ">" + value: '1306054154' + pagination: + per_page: 5 + "/visitors": + put: + summary: Update a visitor parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: job_identifier - in: path - description: job_identifier - required: true - schema: - type: string tags: - - Data Export - operationId: getDataExport - description: "You can view the status of your job by sending a `GET` request - to the URL\n`https://api.intercom.io/export/content/data/{job_identifier}` - - the `{job_identifier}` is the value returned in the response when you first - created the export job. More on it can be seen in the Export Job Model.\n\n> - \U0001F6A7 Jobs expire after two days\n> All jobs that have completed processing - (and are thus available to download from the provided URL) will have an expiry - limit of two days from when the export ob completed. After this, the data - will no longer be available.\n" + - Visitors + operationId: updateVisitor + description: | + Sending a PUT request to `/visitors` will result in an update of an existing Visitor. + + **Option 1.** You can update a visitor by passing in the `user_id` of the visitor in the Request body. + + **Option 2.** You can update a visitor by passing in the `id` of the visitor in the Request body. responses: '200': description: successful @@ -17079,197 +15901,177 @@ paths: examples: successful: value: - job_identifier: braxwk3j039t6txy - status: pending - download_url: '' - download_expires_at: '' - schema: - "$ref": "#/components/schemas/data_export" - "/export/cancel/{job_identifier}": - post: - summary: Cancel content data export - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: job_identifier - in: path - description: job_identifier - required: true - schema: - type: string - tags: - - Data Export - operationId: cancelDataExport - description: You can cancel your job - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - job_identifier: v134nyc2bku9hj91 - status: canceled - download_url: '' - download_expires_at: '' - schema: - "$ref": "#/components/schemas/data_export" - "/export/workflows/{id}": - get: - summary: Export a workflow - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - description: The unique identifier for the workflow - required: true - schema: - type: string - example: "12345" - tags: - - Workflows - operationId: exportWorkflow - description: | - Export a workflow configuration by its ID. This endpoint returns the complete workflow definition including its steps, targeting rules, and attributes. - - This endpoint is designed for EU Data Act compliance, allowing customers to export their workflow configurations. - - {% admonition type="info" name="Preview API" %} - This endpoint is available in the Preview API version. We may make iterative improvements, including adding new fields or refining existing ones. - {% /admonition %} - responses: - '200': - description: Workflow exported successfully - content: - application/json: - examples: - successful: - value: - export_version: "1.0" - exported_at: "2026-01-26T12:00:00Z" - app_id: 12345 - workflow: - id: "67890" - title: "My Workflow" - description: "A workflow that handles customer inquiries" - trigger_type: "inbound_conversation" - state: "live" - target_channels: ["chat"] - preferred_devices: ["desktop", "mobile"] - created_at: "2025-06-15T10:30:00Z" - updated_at: "2026-01-20T14:45:00Z" - targeting: {} - snapshot: {} - attributes: [] - embedded_rules: [] + type: visitor + id: 6762f30c1bb69f9f2193bc5e + user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 + anonymous: true + email: '' + phone: + name: Gareth Bale + pseudonym: Violet Suitcase + avatar: + type: avatar + image_url: https://static.intercomassets.com/app/pseudonym_avatars_2019/violet-suitcase.png + app_id: this_is_an_id716_that_should_be_at_least_ + companies: + type: company.list + companies: [] + location_data: {} + last_request_at: + created_at: 1734537996 + remote_created_at: 1734537996 + signed_up_at: 1734537996 + updated_at: 1734537997 + session_count: 0 + social_profiles: + type: social_profile.list + social_profiles: [] + owner_id: + unsubscribed_from_emails: false + marked_email_as_spam: false + has_hard_bounced: false + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + custom_attributes: {} + referrer: + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + do_not_track: schema: - "$ref": "#/components/schemas/workflow_export" + "$ref": "#/components/schemas/visitor" '404': - description: Workflow not found + description: visitor Not Found content: application/json: examples: - Workflow not found: + visitor Not Found: value: type: error.list - request_id: b3c8c472-8478-4f10-a29e-a23dbf921c46 + request_id: 6a6d5522-54e2-437d-8fd0-1109686af965 errors: - code: not_found - message: Workflow not found + message: Visitor Not Found schema: "$ref": "#/components/schemas/error" - '403': - description: Workflow export is not available for this app + '401': + description: Unauthorized content: application/json: examples: - Feature not available: + Unauthorized: value: type: error.list - request_id: d92f7e84-5c31-4a2b-b8e6-9f4c3d2a1b0e + request_id: 3f474ec4-4e61-42ee-9acc-eac64982e393 errors: - - code: api_plan_restricted - message: Workflow export is not available for this app + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/download/content/data/{job_identifier}": + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/update_visitor_request" + examples: + successful: + summary: successful + value: + id: 6762f30c1bb69f9f2193bc5e + name: Gareth Bale + visitor_not_found: + summary: visitor Not Found + value: + user_id: fail + name: Christian Fail get: - summary: Download content data export + summary: Retrieve a visitor with User ID parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: job_identifier - in: path - description: job_identifier + - name: user_id + in: query + description: The user_id of the Visitor you want to retrieve. required: true schema: type: string tags: - - Data Export - operationId: downloadDataExport - description: "When a job has a status of complete, and thus a filled download_url, - you can download your data by hitting that provided URL, formatted like so: - https://api.intercom.io/download/content/data/xyz1234.\n\nYour exported message - data will be streamed continuously back down to you in a gzipped CSV format.\n\n> - \U0001F4D8 Octet header required\n>\n> You will have to specify the header - Accept: `application/octet-stream` when hitting this endpoint.\n" + - Visitors + operationId: retrieveVisitorWithUserId + description: You can fetch the details of a single visitor. responses: '200': description: successful - "/jobs/status/{id}": - get: - summary: Retrieve job status - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the job which is given by Intercom - schema: - type: string - tags: - - Jobs - operationId: jobsStatus - description: Retrieve the status of job execution. - responses: - '200': - description: Job execution status content: application/json: examples: - job status retrieved: + successful: value: - type: job - id: '2' - status: success - resource_type: ticket - resource_id: '20' - resource_url: 'https://api.intercom.io/tickets/20' + type: visitor + id: 6762f3101bb69f9f2193bc64 + user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 + anonymous: true + email: '' + phone: + name: + pseudonym: + avatar: + type: avatar + image_url: + app_id: this_is_an_id722_that_should_be_at_least_ + companies: + type: company.list + companies: [] + location_data: {} + last_request_at: + created_at: 1734538000 + remote_created_at: 1734538000 + signed_up_at: 1734538000 + updated_at: 1734538000 + session_count: 0 + social_profiles: + type: social_profile.list + social_profiles: [] + owner_id: + unsubscribed_from_emails: false + marked_email_as_spam: false + has_hard_bounced: false + tags: + type: tag.list + tags: [] + segments: + type: segment.list + segments: [] + custom_attributes: {} + referrer: + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + do_not_track: schema: - "$ref": "#/components/schemas/jobs" + "$ref": "#/components/schemas/visitor" '404': - description: Job not found + description: Visitor not found content: application/json: examples: - Job not found: + Visitor not found: value: type: error.list - request_id: 123e4567-e89b-12d3-a456-426614174000 + request_id: 3c1b017d-39fb-4d13-8cc9-540ad0d37106 errors: - - code: job_not_found - message: Job Not Found + - code: not_found + message: Visitor Not Found schema: "$ref": "#/components/schemas/error" '401': @@ -17280,267 +16082,125 @@ paths: Unauthorized: value: type: error.list - request_id: 2c8a20ee-ed09-42c0-a31d-a1b4f5d2742d + request_id: 1d7f49b3-10bc-4bf8-a28a-1ac95de3a6ff errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/macros": - get: - summary: List all macros + "/visitors/convert": + post: + summary: Convert a visitor parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: per_page - in: query - schema: - type: integer - minimum: 1 - maximum: 150 - default: 50 - description: The number of results per page - example: 50 - - name: starting_after - in: query - schema: - type: string - description: Base64-encoded cursor containing [updated_at, id] for pagination - example: "WzE3MTk0OTM3NTcuMCwgIjEyMyJd" - - name: updated_since - in: query - schema: - type: integer - format: int64 - description: Unix timestamp to filter macros updated after this time - example: 1719474966 tags: - - Macros - operationId: listMacros - description: | - 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: `` - x-code-samples: - - lang: 'cURL' - source: | - curl -X GET 'https://api.intercom.io/macros?per_page=25&starting_after=WzE3MTk0OTM3NTcuMCwgIjEyMyJd' \ - -H 'Authorization: Bearer ' \ - -H 'Accept: application/json' \ - -H 'Intercom-Version: Preview' - - lang: 'Node.js' - source: | - const response = await fetch('https://api.intercom.io/macros?per_page=25&starting_after=WzE3MTk0OTM3NTcuMCwgIjEyMyJd', { - headers: { - 'Authorization': 'Bearer ', - 'Accept': 'application/json', - 'Intercom-Version': 'Preview' - } - }); - const macros = await response.json(); - - lang: 'Python' - source: | - import requests - - headers = { - 'Authorization': 'Bearer ', - 'Accept': 'application/json', - 'Intercom-Version': 'Preview' - } - - params = { - 'per_page': 25, - 'starting_after': 'WzE3MTk0OTM3NTcuMCwgIjEyMyJd' - } - - response = requests.get('https://api.intercom.io/macros', - headers=headers, - params=params) - macros = response.json() - - lang: 'Ruby' - source: | - require 'net/http' - require 'json' - - uri = URI('https://api.intercom.io/macros') - params = { - per_page: 25, - starting_after: 'WzE3MTk0OTM3NTcuMCwgIjEyMyJd' - } - uri.query = URI.encode_www_form(params) - - http = Net::HTTP.new(uri.host, uri.port) - http.use_ssl = true - - request = Net::HTTP::Get.new(uri) - request['Authorization'] = 'Bearer ' - request['Accept'] = 'application/json' - request['Intercom-Version'] = 'Preview' - - response = http.request(request) - macros = JSON.parse(response.body) + - Visitors + operationId: convertVisitor + description: "You can merge a Visitor to a Contact of role type `lead` or `user`.\n\n> + \U0001F4D8 What happens upon a visitor being converted?\n>\n> If the User + exists, then the Visitor will be merged into it, the Visitor deleted and the + User returned. If the User does not exist, the Visitor will be converted to + a User, with the User identifiers replacing it's Visitor identifiers.\n" responses: '200': - description: Successful response - content: - application/json: - examples: - basic_list: - summary: Basic list of macros - value: - type: list - data: - - type: macro - id: "123" - name: "Order Status Update" - body: "

Hi , your order # is ready for pickup!

" - body_text: "Hi {{user.name|fallback:\"there\"}}, your order #{{order.number}} is ready for pickup!" - created_at: "2025-07-17T11:18:08.000Z" - updated_at: "2025-07-17T15:30:24.000Z" - visible_to: "everyone" - visible_to_team_ids: [] - available_on: ["inbox", "messenger"] - - type: macro - id: "456" - name: "Welcome Message" - body: "

Welcome to our support! I'm . How can I help you today?

" - body_text: "Welcome to our support! I'm {{teammate.name}}. How can I help you today?" - created_at: "2025-07-21T14:44:35.000Z" - updated_at: "2025-07-21T14:44:35.000Z" - visible_to: "specific_teams" - visible_to_team_ids: ["789", "101"] - available_on: ["inbox"] - pages: - type: pages - per_page: 50 - next: - starting_after: "WzE3MTk0OTM3NTcuMCwgIjEyMyJd" - pagination_with_cursor: - summary: Paginated response using starting_after cursor - value: - type: list - data: - - type: macro - id: "789" - name: "Refund Process" - body: "

I understand you'd like a refund for order #. The refund will be processed within 3-5 business days.

" - body_text: "I understand you'd like a refund for order #{{conversation.custom_attributes.order_number}}. The refund will be processed within 3-5 business days." - created_at: "2025-07-21T07:15:34.000Z" - updated_at: "2025-07-21T07:15:34.000Z" - visible_to: "everyone" - visible_to_team_ids: [] - available_on: ["inbox", "messenger"] - - type: macro - id: "101" - name: "Product Inquiry Response" - body: "

Thank you for your interest in . I'd be happy to provide more information!

" - body_text: "Thank you for your interest in {{product.name|fallback:\"our products\"}}. I'd be happy to provide more information!" - created_at: "2025-07-20T05:33:20.000Z" - updated_at: "2025-07-21T10:00:00.000Z" - visible_to: "everyone" - visible_to_team_ids: [] - available_on: ["inbox", "messenger"] - pages: - type: pages - per_page: 50 - next: - starting_after: "WzE3MTk0MDAwMDAuMCwgIjEwMSJd" - filtered_by_timestamp: - summary: Macros filtered by updated_since parameter - value: - type: list - data: - - type: macro - id: "234" - name: "Shipping Update Template" - body: "

Your order has been shipped via . Tracking number:

" - body_text: "Your order has been shipped via {{shipping.carrier|fallback:\"our shipping partner\"}}. Tracking number: {{shipping.tracking_number}}" - created_at: "2025-07-22T05:31:01.000Z" - updated_at: "2025-07-22T18:45:12.000Z" - visible_to: "everyone" - visible_to_team_ids: [] - available_on: ["inbox"] - pages: - type: pages - per_page: 50 - next: null - complex_placeholders: - summary: Macros with various placeholder formats - value: - type: list - data: - - type: macro - id: "567" - name: "Account Status Review" - body: "

Hi ,

Your account status:

Last activity:

" - body_text: "Hi {{user.first_name|fallback:\"there\"}},\n\nYour account status: {{user.custom_attributes.account_status|fallback:\"pending review\"}}\n\nLast activity: {{user.last_seen_at}}" - created_at: "2025-07-21T09:00:00.000Z" - updated_at: "2025-07-21T09:00:00.000Z" - visible_to: "specific_teams" - visible_to_team_ids: ["security_team"] - available_on: ["inbox"] - pages: - type: pages - per_page: 50 - next: null - empty_result: - summary: Empty macro list (no macros or all filtered out) - value: - type: list - data: [] - pages: - type: pages - per_page: 50 - next: null - large_list_preview: - summary: Large list with performance optimization - value: - type: list - data: - - type: macro - id: "1001" - name: "Quick Response 1" - body: null - body_text: null - created_at: "2025-07-22T11:08:20.000Z" - updated_at: "2025-07-23T11:08:20.000Z" - visible_to: "everyone" - visible_to_team_ids: [] - available_on: ["inbox"] - # Note: When returning 30+ macros, body rendering may be skipped for performance - pages: - type: pages - per_page: 50 - next: - starting_after: "WzE3MTk0OTAxMDAuMCwgIjEwMDIiXQ==" - schema: - "$ref": "#/components/schemas/macro_list" - '400': - description: Bad Request + description: successful content: application/json: examples: - Invalid parameter: + successful: value: - type: error.list - request_id: bc300b1a-492a-405f-924e-a5881cb72e3a - errors: - - code: parameter_invalid - message: Invalid updated_since timestamp + type: contact + id: 6762f3141bb69f9f2193bc6b + workspace_id: this_is_an_id728_that_should_be_at_least_ + external_id: + role: user + email: foo@bar.com + phone: + formatted_phone: + name: + avatar: + owner_id: + social_profiles: + type: list + data: [] + has_hard_bounced: false + marked_email_as_spam: false + unsubscribed_from_emails: false + created_at: 1734538004 + updated_at: 1734538005 + signed_up_at: 1734538004 + last_seen_at: + last_replied_at: + last_contacted_at: + last_email_opened_at: + last_email_clicked_at: + language_override: + browser: + browser_version: + browser_language: + os: + location: + type: location + country: + region: + city: + country_code: + continent_code: + android_app_name: + android_app_version: + android_device: + android_os_version: + android_sdk_version: + android_last_seen_at: + ios_app_name: + ios_app_version: + ios_device: + ios_os_version: + ios_sdk_version: + ios_last_seen_at: + custom_attributes: {} + tags: + type: list + data: [] + url: "/contacts/6762f3141bb69f9f2193bc6b/tags" + total_count: 0 + has_more: false + notes: + type: list + data: [] + url: "/contacts/6762f3141bb69f9f2193bc6b/notes" + total_count: 0 + has_more: false + companies: + type: list + data: [] + url: "/contacts/6762f3141bb69f9f2193bc6b/companies" + total_count: 0 + has_more: false + opted_out_subscription_types: + type: list + data: [] + url: "/contacts/6762f3141bb69f9f2193bc6b/subscriptions" + total_count: 0 + has_more: false + opted_in_subscription_types: + type: list + data: [] + url: "/contacts/6762f3141bb69f9f2193bc6b/subscriptions" + total_count: 0 + has_more: false + utm_campaign: + utm_content: + utm_medium: + utm_source: + utm_term: + referrer: + enabled_push_messaging: schema: - "$ref": "#/components/schemas/error" + "$ref": "#/components/schemas/contact" '401': description: Unauthorized content: @@ -17549,885 +16209,651 @@ paths: Unauthorized: value: type: error.list - request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef + request_id: b3e71306-0600-41e4-9f44-83b52906d2b7 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - '403': - description: Forbidden - missing required OAuth scope - content: - application/json: - examples: - Missing required scope: - summary: OAuth token lacks read_conversations scope - value: - type: error.list - request_id: f097e446-9ae6-44a8-8e13-2bf3008b87ef - errors: - - code: forbidden - message: You do not have the required scope (read_conversations) to access this resource - schema: - "$ref": "#/components/schemas/error" - "/macros/{id}": + requestBody: + content: + application/json: + schema: + "$ref": "#/components/schemas/convert_visitor_request" + examples: + successful: + summary: successful + value: + visitor: + user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 + user: + email: foo@bar.com + type: user + "/brands": get: - summary: Retrieve a macro - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier of the macro - schema: - type: string - example: "123" + summary: List all brands tags: - - Macros - operationId: getMacro + - Brands + operationId: listBrands description: | - 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: `` - - Default values in placeholders are HTML-escaped for security. - x-code-samples: - - lang: 'cURL' - source: | - curl -X GET 'https://api.intercom.io/macros/123' \ - -H 'Authorization: Bearer ' \ - -H 'Accept: application/json' \ - -H 'Intercom-Version: Preview' - - lang: 'Node.js' - source: | - const response = await fetch('https://api.intercom.io/macros/123', { - headers: { - 'Authorization': 'Bearer ', - 'Accept': 'application/json', - 'Intercom-Version': 'Preview' - } - }); - const macro = await response.json(); - - lang: 'Python' - source: | - import requests - - headers = { - 'Authorization': 'Bearer ', - 'Accept': 'application/json', - 'Intercom-Version': 'Preview' - } - - response = requests.get('https://api.intercom.io/macros/123', - headers=headers) - macro = response.json() - - lang: 'Ruby' - source: | - require 'net/http' - require 'json' - - uri = URI('https://api.intercom.io/macros/123') - - http = Net::HTTP.new(uri.host, uri.port) - http.use_ssl = true - - request = Net::HTTP::Get.new(uri) - request['Authorization'] = 'Bearer ' - request['Accept'] = 'application/json' - request['Intercom-Version'] = 'Preview' - - response = http.request(request) - macro = JSON.parse(response.body) + Retrieves all brands for the workspace, including the default brand. + The default brand id always matches the workspace + parameters: + - name: Intercom-Version + in: header + schema: + $ref: "#/components/schemas/intercom_version" responses: '200': - description: Macro found - content: - application/json: - examples: - support_macro: - summary: Customer support macro with placeholders - value: - type: macro - id: "789" - name: "Refund Process Explanation" - body: "

Hi ,

I understand you'd like a refund for order #. The refund will be processed within 3-5 business days to your .

Is there anything else I can help you with?

" - 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"] - sales_macro: - summary: Sales team macro for product inquiries - value: - type: macro - id: "456" - name: "Product Demo Request" - body: "

Hello ,

Thank you for your interest in ! I'd love to schedule a personalized demo for your team at .

Would work for you?

" - body_text: "Hello {{user.name|fallback:\"valued customer\"}},\n\nThank you for your interest in {{product.name|fallback:\"our products\"}}! I'd love to schedule a personalized demo for your team at {{company.name|fallback:\"your company\"}}.\n\nWould {{suggested_time|fallback:\"next Tuesday at 2 PM EST\"}} work for you?" - created_at: "2025-07-22T11:06:40.000Z" - updated_at: "2025-07-23T00:00:00.000Z" - visible_to: "specific_teams" - visible_to_team_ids: ["sales_team_us", "sales_team_eu"] - available_on: ["messenger"] - technical_support: - summary: Technical support macro with nested attributes - value: - type: macro - id: "890" - name: "API Integration Help" - body: "

Hi ,

I see you're having trouble with the integration. Your API key for app is configured correctly.

Error code:

Let me help you resolve this issue.

" - body_text: "Hi {{user.name}},\n\nI see you're having trouble with the {{conversation.custom_attributes.api_endpoint|fallback:\"API\"}} integration. Your API key for app {{app.id}} is configured correctly.\n\nError code: {{conversation.custom_attributes.error_code|fallback:\"unknown\"}}\n\nLet me help you resolve this issue." - created_at: "2025-07-18T09:15:00.000Z" - updated_at: "2025-07-18T09:15:00.000Z" - visible_to: "everyone" - visible_to_team_ids: [] - available_on: ["inbox"] - simple_greeting: - summary: Simple macro without placeholders - value: - type: macro - id: "123" - name: "Thank You Response" - body: "

Thank you for reaching out! We appreciate your message and will get back to you as soon as possible.

" - body_text: "Thank you for reaching out! We appreciate your message and will get back to you as soon as possible." - created_at: "2025-07-17T11:18:08.000Z" - updated_at: "2025-07-17T15:30:24.000Z" - visible_to: "everyone" - visible_to_team_ids: [] - available_on: ["inbox", "messenger"] - schema: - "$ref": "#/components/schemas/macro" - '401': - description: Unauthorized + description: Successful response content: application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef - errors: - - code: unauthorized - message: Access Token Invalid schema: - "$ref": "#/components/schemas/error" - '403': - description: Forbidden - missing required OAuth scope - content: - application/json: + $ref: "#/components/schemas/brand_list" examples: - Missing required scope: - summary: OAuth token lacks read_conversations scope + Successful response: value: - type: error.list - request_id: f097e446-9ae6-44a8-8e13-2bf3008b87ef - errors: - - code: forbidden - message: You do not have the required scope (read_conversations) to access this resource - schema: - "$ref": "#/components/schemas/error" - '404': - description: Macro not found or not accessible + type: list + data: + - type: brand + id: "tlkp1d91" + name: "Default Brand" + is_default: true + created_at: 1673778600 + updated_at: 1711031100 + help_center_id: "11" + default_address_settings_id: "13" + - type: brand + id: "3" + name: "Premium Brand" + is_default: false + created_at: 1686387300 + updated_at: 1709229600 + help_center_id: "10" + default_address_settings_id: "15" + '401': + description: Unauthorized content: application/json: - examples: - Macro not found: - value: - type: error.list - request_id: bc300b1a-492a-405f-924e-a5881cb72e3a - errors: - - code: not_found - message: Macro not found schema: - "$ref": "#/components/schemas/error" - "/messages": - post: - summary: Create a message - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" + $ref: "#/components/schemas/error" + "/brands/{id}": + get: + summary: Retrieve a brand tags: - - Messages - operationId: createMessage - description: "You can create a message that has been initiated by an admin. - The conversation can be either an in-app message, an email, sms or whatsapp.\n\n> \U0001F6A7 - Sending for visitors\n>\n> There can be a short delay between when a contact - is created and when a contact becomes available to be messaged through the - API. A 404 Not Found error will be returned in this case.\n\nThis will return - the Message model that has been created.\n\n> \U0001F6A7 Retrieving Associated - Conversations\n>\n> As this is a message, there will be no conversation present - until the contact responds. Once they do, you will have to search for a contact's - conversations with the id of the message.\n" + - Brands + operationId: retrieveBrand + description: Fetches a specific brand by its unique identifier + parameters: + - name: Intercom-Version + in: header + schema: + $ref: "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier of the brand + schema: + type: string responses: '200': - description: admin message created + description: Successful response content: application/json: + schema: + $ref: "#/components/schemas/brand" examples: - user message created: - value: - type: user_message - id: '403918396' - created_at: 1734537780 - body: heyy - message_type: inapp - conversation_id: '613' - lead message created: - value: - type: user_message - id: '403918397' - created_at: 1734537783 - body: heyy - message_type: inapp - conversation_id: '614' - admin message created: + Successful response: value: - type: admin_message - id: '19' - created_at: 1734537786 - subject: heyy - body: heyy - message_type: inapp - owner: - type: admin - id: '991267816' - name: Ciaran299 Lee - email: admin299@email.com - away_mode_enabled: false - away_mode_reassign: false + type: brand + id: "15" + name: "Premium Brand" + is_default: false + created_at: 1686387300 + updated_at: 1709229600 + help_center_id: "20" + default_address_settings_id: "15" + '401': + description: Unauthorized + content: + application/json: schema: - "$ref": "#/components/schemas/message" - '400': - description: No body supplied for email message + $ref: "#/components/schemas/error" + '404': + description: Brand not found content: application/json: + schema: + $ref: "#/components/schemas/error" examples: - No body supplied for message: - value: - type: error.list - request_id: 3f3e74cc-65af-4408-9bf5-9e71b55c8166 - errors: - - code: parameter_invalid - message: Body is required - No body supplied for email message: - value: - type: error.list - request_id: 2d6abc61-1441-4860-9ef0-777852f8b24f - errors: - - code: parameter_invalid - message: Body is required - Invalid body supplied for sms message: + Brand not found: value: type: error.list - request_id: d7997515-65af-4860-9bf5-777852f8b24f + request_id: "req_12345" errors: - - code: parameter_invalid - message: Invalid SMS message body - schema: - "$ref": "#/components/schemas/error" - '422': - description: No subject supplied for email message + - code: not_found + message: Brand not found + "/emails": + get: + summary: List all email settings + tags: + - Emails + operationId: listEmails + description: Lists all sender email address settings for the workspace + parameters: + - name: Intercom-Version + in: header + schema: + $ref: "#/components/schemas/intercom_version" + responses: + '200': + description: Successful response content: application/json: + schema: + $ref: "#/components/schemas/email_list" examples: - No subject supplied for email message: + Successful response: value: - type: error.list - request_id: 97db463e-7070-4ac9-9846-9a5d31933772 - errors: - - code: parameter_not_found - message: No subject supplied for email message - schema: - "$ref": "#/components/schemas/error" + type: list + data: + - type: email_setting + id: "1" + email: "support@company.com" + verified: true + domain: "company.com" + brand_id: "9" + forwarding_enabled: true + forwarded_email_last_received_at: 1710498600 + created_at: 1692530400 + updated_at: 1710498600 + - type: email_setting + id: "2" + email: "hello@company.com" + verified: true + domain: "company.com" + brand_id: "10" + forwarding_enabled: false + forwarded_email_last_received_at: null + created_at: 1683729000 + updated_at: 1701424500 '401': description: Unauthorized content: application/json: + schema: + $ref: "#/components/schemas/error" + "/emails/{id}": + get: + summary: Retrieve an email setting + tags: + - Emails + operationId: retrieveEmail + description: Fetches a specific email setting by its unique identifier + parameters: + - name: Intercom-Version + in: header + schema: + $ref: "#/components/schemas/intercom_version" + - name: id + in: path + required: true + description: The unique identifier of the email setting + schema: + type: string + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: "#/components/schemas/email_setting" examples: - Unauthorized: + Successful response: value: - type: error.list - request_id: 2c8a20ee-ed09-42c0-a31d-a1b4f5d2742d - errors: - - code: unauthorized - message: Access Token Invalid + type: email_setting + id: "10" + email: "support@company.com" + verified: true + domain: "company.com" + brand_id: "15" + forwarding_enabled: true + forwarded_email_last_received_at: 1710498600 + created_at: 1692530400 + updated_at: 1710498600 + '401': + description: Unauthorized + content: + application/json: schema: - "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + $ref: "#/components/schemas/error" + '404': + description: Email setting not found content: application/json: + schema: + $ref: "#/components/schemas/error" examples: - API plan restricted: + Email setting not found: value: type: error.list - request_id: 72b6821e-54ff-4a25-adf9-abdfef5fe72b + request_id: "req_12345" errors: - - code: api_plan_restricted - message: Active subscription needed. - schema: - "$ref": "#/components/schemas/error" + - code: not_found + message: Email setting not found + "/fin_voice/register": + post: + summary: Register a Fin Voice call + description: | + Register a Fin Voice call with Intercom. This endpoint creates an external reference + that links an external call identifier to an Intercom call and conversation. + + The call can be from different sources: + - AWS Connect (default) + - Five9 + - Zoom Phone + operationId: registerFinVoiceCall + tags: + - Calls requestBody: content: application/json: schema: - "$ref": "#/components/schemas/create_message_request" - examples: - user_message_created: - summary: user message created - value: - from: - type: user - id: 6762f2341bb69f9f2193bc17 - body: heyy - referer: https://twitter.com/bob - lead_message_created: - summary: lead message created - value: - from: - type: lead - id: 6762f2371bb69f9f2193bc18 - body: heyy - referer: https://twitter.com/bob - admin_message_created: - summary: admin message created - value: - from: - type: admin - id: '991267816' - to: - - type: user - id: 6762f2391bb69f9f2193bc19 - - type: lead - id: 6762f23c1bb69f9f2193bc1b - - type: user - id: 6762f23d1bb69f9f2193bc1c - cc: - - type: user - id: 6762f23e1bb69f9f2193bc1d - - type: user - id: 6762f23f1bb69f9f2193bc1e - bcc: - - type: user - id: 6762f23e1bb69f9f2193bc2f - message_type: conversation - body: heyy - admin_sms_message_created: - summary: admin sms message created - value: - from: - type: admin - id: '991267817' - to: - type: user - id: 6762f23a1bb69f9f2193bc1a - message_type: sms - body: heyy - admin_whatsapp_message_created: - summary: admin whatsapp message created - value: - from: - type: admin - id: '991267817' - to: - phone: +5547999998888 - name: John Doe - message_type: whatsapp - components: - - type: BODY - parameters: - - type: text - text: Username 123 - template: keep_live - locale: en - no_body_supplied_for_message: - summary: No body supplied for message - value: - from: - type: admin - id: '991267818' - to: - type: user - id: 6762f23b1bb69f9f2193bc1a - message_type: inapp - body: - subject: heyy - no_subject_supplied_for_email_message: - summary: No subject supplied for email message - value: - from: - type: admin - id: '991267819' - to: - type: user - user_id: '70' - message_type: email - body: hey there - no_body_supplied_for_email_message: - summary: No body supplied for email message - value: - from: - type: admin - id: '991267820' - to: - type: user - id: 6762f23d1bb69f9f2193bc1c - message_type: email - body: - subject: heyy - invalid_body_supplied_for_sms_message: - summary: Invalid body supplied for sms message - value: - from: - type: admin - id: '991267821' - to: - type: user - id: 6762f23b1bb69f9f2193bc1d - message_type: sms - body: heyy https://picsum.photos/200/300 - "/messages/status": - get: - summary: Get statuses of all messages sent based on the specified ruleset_id - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: ruleset_id - in: query - required: true - description: The unique identifier for the set of messages to check status for - schema: - type: string - - name: per_page - in: query - required: false - description: Number of results per page (default 50, max 100) - schema: - type: integer - default: 50 - maximum: 100 - - name: starting_after - in: query - required: false - description: Cursor for pagination, used to fetch the next page of results - schema: - type: string - tags: - - Messages - - WhatsApp - operationId: getWhatsAppMessageStatus - description: | - Retrieves statuses of messages sent from the Outbound module. Currently, this API only supports WhatsApp messages. - - - This endpoint returns paginated status events for WhatsApp messages sent via the Outbound module, providing - information about delivery state and related message details. + $ref: "#/components/schemas/register_fin_voice_call_request" responses: '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: list - ruleset_id: 12345 - pages: - type: pages - per_page: 50 - total_pages: 3 - next: - starting_after: "abc123" - total_count: 125 - events: - - id: "event_1" - conversation_id: "conv_123" - user_id: "user_123" - status: "delivered" - type: "broadcast_outbound" - created_at: 1734537980 - updated_at: 1734538000 - whatsapp_message_id: "wamid_123" - template_name: "appointment_reminder" - - id: "event_2" - conversation_id: "conv_456" - user_id: "user_456" - status: "sent" - type: "broadcast_outbound" - created_at: 1734537970 - updated_at: 1734538010 - whatsapp_message_id: "wamid_456" - template_name: "order_update" - schema: - "$ref": "#/components/schemas/whatsapp_message_status_list" - '400': - description: Bad request - missing required parameters + description: successful content: application/json: - examples: - missing ruleset_id: - value: - type: error - request_id: "req_123" - message: "ruleset_id is required" schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + $ref: "#/components/schemas/ai_call_response" + '400': + description: bad request - missing phone_number or call_id content: application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: d7997515-cd92-4fe4-966c-cb1f4bdda1d4 - errors: - - code: unauthorized - message: Access Token Invalid schema: - "$ref": "#/components/schemas/error" - '403': - description: API plan restricted + $ref: "#/components/schemas/error" + '409': + description: conflict - duplicate call registration content: application/json: - examples: - API plan restricted: - value: - type: error.list - request_id: 591a0c2f-78b3-41bb-bfa7-f1fae15107b0 - errors: - - code: api_plan_restricted - message: Active subscription needed. schema: - "$ref": "#/components/schemas/error" - '500': - description: Internal server error + $ref: "#/components/schemas/error" + default: + description: Unexpected error content: application/json: - examples: - server error: - value: - type: error - request_id: 591a0c2f-78b3-41bb-bfa7-f1fae15107b2 - message: "Request failed due to an internal error. Please reach out to support" schema: - "$ref": "#/components/schemas/error" - "/messages/whatsapp/status": + $ref: "#/components/schemas/error" + "/fin_voice/collect/{id}": get: - summary: Retrieve WhatsApp message delivery status - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: message_id - in: query - required: true - description: The WhatsApp message ID to check status for - schema: - type: string + summary: Collect Fin Voice call by ID + description: Retrieve information about a Fin Voice call using the external reference ID. + operationId: collectFinVoiceCallById tags: - - Messages - - WhatsApp - operationId: RetrieveWhatsAppMessageStatus - description: | - Retrieves the delivery status of a specific WhatsApp message by its message ID. - - - Returns the current status, conversation details, and any error information if the message failed to deliver. + - Calls + parameters: + - name: id + in: path + required: true + description: The external reference ID + schema: + type: integer responses: '200': - description: Successful response + description: successful content: application/json: - examples: - Successful response: - value: - conversation_id: "123456789" - status: delivered - type: broadcast_outbound - created_at: 1734537980 - updated_at: 1734538000 - template_name: appointment_reminder - message_id: "wamid_abc123" - Failed message with error: - value: - conversation_id: "123456789" - status: failed - type: broadcast_outbound - created_at: 1734537980 - updated_at: 1734538000 - template_name: appointment_reminder - message_id: "wamid_abc123" - error: - message: "Message delivery failed" - details: "Recipient phone number not on WhatsApp" schema: - "$ref": "#/components/schemas/whatsapp_message_status" - '400': - description: Bad request - missing required parameters + $ref: "#/components/schemas/ai_call_response" + '404': + description: not found - external reference not found or not matched content: application/json: - examples: - missing message_id: - value: - type: error - request_id: "a1b2c3d4-e5f6-7890-abcd-ef1234567890" - message: "message_id is required" schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized + $ref: "#/components/schemas/error" + default: + description: Unexpected error content: application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 8b2e4c6f-1234-5678-9abc-def012345678 - errors: - - code: unauthorized - message: Access Token Invalid schema: - "$ref": "#/components/schemas/error" + $ref: "#/components/schemas/error" + "/fin_voice/external_id/{external_id}": + get: + summary: Collect Fin Voice call by external ID + description: Retrieve information about a Fin Voice call using the external call identifier. + operationId: collectFinVoiceCallByExternalId + tags: + - Calls + parameters: + - name: external_id + in: path + required: true + description: The external call identifier from the call provider + schema: + type: string + responses: + '200': + description: successful + content: + application/json: + schema: + $ref: "#/components/schemas/ai_call_response" '404': - description: WhatsApp message not found + description: not found - external reference not found or not matched content: application/json: - examples: - Message not found: - value: - type: error.list - request_id: c4d5e6f7-8901-2345-6789-abcdef012345 - errors: - - code: whatsapp_message_not_found - message: Whatsapp message not found schema: - "$ref": "#/components/schemas/error" - "/teams/{team_id}/metrics": + $ref: "#/components/schemas/error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "/fin_voice/phone_number/{phone_number}": + get: + summary: Collect Fin Voice call by phone number + description: | + Retrieve information about a Fin Voice call using the phone number. + + Returns the most recent matched call for the given phone number, ordered by creation date. + operationId: collectFinVoiceCallByPhoneNumber + tags: + - Calls + parameters: + - name: phone_number + in: path + required: true + description: Phone number in E.164 format + schema: + type: string + responses: + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/error" + '404': + description: not found - no call found for phone number or not matched + content: + application/json: + schema: + $ref: "#/components/schemas/error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "/fin_voice/conversation/{conversation_id}": get: - summary: Retrieve team metrics + summary: Collect Fin Voice calls by conversation ID + description: | + Retrieve information about Fin Voice calls associated with a conversation. + + Returns all matched calls for the given conversation ID. A conversation may have multiple associated calls. + operationId: collectFinVoiceCallsByConversationId + tags: + - Calls + parameters: + - name: conversation_id + in: path + required: true + description: The Intercom conversation identifier + schema: + type: string + responses: + '200': + description: successful + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/ai_call_response" + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/error" + "/fin/capabilities": + post: + summary: Discover Fin's capabilities parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: team_id - in: path - required: true - description: The unique identifier of the team to retrieve metrics for. Use `GET /teams` to list available team IDs. - example: "42" - schema: - type: string - - name: idle_threshold - in: query - required: false - description: The number of seconds after which an open conversation is considered idle. Clamped to the range 1–86400. Defaults to 1800 (30 minutes). - schema: - type: integer - default: 1800 - example: 1800 tags: - - Teams - operationId: getTeamMetrics + - Fin Agent + operationId: listFinCapabilities description: | - Returns real-time activity metrics for admins in the specified team. For each admin, the response includes counts of open, idle, and snoozed conversations. + Return a machine-readable, per-user list of what Fin can do for a given end user, so an + orchestrating agent can decide which endpoint to call. - This endpoint requires the `realtime_monitoring` feature to be enabled for your workspace. + The response is audience-matched to the supplied user: each live, API-triggerable + procedure is checked against that user before being included, alongside the static + `reply` and `ask` actions. responses: '200': - description: Successful response + description: Capabilities returned successfully content: application/json: - schema: - $ref: "#/components/schemas/team_metric_list" examples: - successful_response: + Successful response: value: - type: team_metric.list - data: - - type: team_metric - admin_id: "123" - open: 5 - idle: 2 - snoozed: 1 - - type: team_metric - admin_id: "456" - open: 3 - idle: 0 - snoozed: 2 - '401': - "$ref": "#/components/responses/Unauthorized" - '403': - description: Feature not enabled + version: Preview + capabilities: + - type: procedure + id: '12345' + name: Reset password + description: Walk the user through resetting their password. + endpoint: /fin/procedures/12345/run + method: POST + - type: reply + description: Reply to an in-progress Fin conversation. + endpoint: /fin/reply + method: POST + - type: ask + description: Ask Fin a single, self-contained question. + endpoint: /fin/ask + method: POST + schema: + type: object + properties: + version: + type: string + description: The API version the capabilities document was generated for. + example: Preview + capabilities: + type: array + description: The list of capabilities available to this user. + items: + type: object + properties: + type: + type: string + description: The kind of capability — `procedure` for a runnable procedure, or a static action such as `reply` or `ask`. + example: procedure + id: + type: string + description: The procedure ID. Present only when `type` is `procedure`. + example: '12345' + name: + type: string + description: The procedure name. Present only when `type` is `procedure`. + example: Reset password + description: + type: string + description: A human-readable description of the capability. + example: Walk the user through resetting their password. + endpoint: + type: string + description: The endpoint path to call to use this capability. + example: /fin/procedures/12345/run + method: + type: string + description: The HTTP method to use. + example: POST + '400': + description: Bad Request content: application/json: examples: - feature_disabled: + Too many attributes: value: type: error.list - request_id: "req-456" + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 errors: - - code: api_plan_restricted - message: "Real-time monitoring is not enabled for your workspace." + - code: parameter_invalid + message: Cannot update more than 10 attributes at once. schema: "$ref": "#/components/schemas/error" - '404': - description: Team not found + '401': + description: Unauthorized content: application/json: examples: - team_not_found: + Unauthorized: value: type: error.list - request_id: "req-789" + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 errors: - - code: team_not_found - message: "Team not found" + - code: unauthorized + message: Access Token Invalid schema: "$ref": "#/components/schemas/error" - "/news/news_items": - get: - summary: List all news items + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + user: + allOf: + - "$ref": "#/components/schemas/fin_agent_user" + - description: The user to list capabilities for. If no user exists for the id, one is created from the supplied details; if the user already exists, the supplied email and attributes update it. + required: + - user + examples: + Capabilities for a user: + value: + user: + id: '123456' + "/fin/ask": + post: + summary: Ask Fin parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" tags: - - News - operationId: listNewsItems - description: You can fetch a list of all news items + - Fin Agent + operationId: askFin + description: | + Ask Fin a single, self-contained question and receive one informational answer. + + Unlike a conversation, `/fin/ask` is non-conversational: Fin will not ask follow-up + questions, will not run procedures, and will not escalate to a human. + + Fin's answer is delivered asynchronously via the `fin_replied` event. The conversation + ends with a `complete` status — there is no `awaiting_user_reply` cycle. responses: '200': - description: successful + description: Question accepted successfully content: application/json: examples: - successful: + Successful response: value: - type: list - pages: - page: 1 - per_page: 10 - total_pages: 1 - type: pages - data: - - id: '29' - type: news-item - workspace_id: this_is_an_id530_that_should_be_at_least_ - title: We have news - body: "

Hello there,

" - sender_id: 991267825 - state: draft - labels: [] - cover_image_url: - reactions: - - - - - - - - - deliver_silently: false - created_at: 1734537793 - updated_at: 1734537793 - newsfeed_assignments: [] - - id: '30' - type: news-item - workspace_id: this_is_an_id530_that_should_be_at_least_ - title: We have news - body: "

Hello there,

" - sender_id: 991267827 - state: draft - labels: [] - cover_image_url: - reactions: - - - - - - - - - deliver_silently: false - created_at: 1734537793 - updated_at: 1734537793 - newsfeed_assignments: [] - total_count: 2 + conversation_id: ext-123 + user_id: user-456 + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + Response with attribute errors: + value: + conversation_id: ext-123 + user_id: user-456 + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + errors: + user: + attributes: + invalid_attr: User attribute 'invalid_attr' does not exist schema: - "$ref": "#/components/schemas/paginated_response" - '401': - description: Unauthorized + type: object + properties: + conversation_id: + type: string + description: The external ID of the conversation. + example: ext-123 + user_id: + type: string + description: The ID of the user. + example: user-456 + status: + type: string + enum: + - thinking + - replying + - resolved + - complete + description: | + Fin's current status in the conversation workflow. + example: thinking + created_at_ms: + type: string + format: date-time + description: The timestamp the response was created at, with millisecond precision. + example: '2025-01-24T10:00:00.123Z' + errors: + "$ref": "#/components/schemas/fin_agent_attribute_errors" + sse_subscription_url: + type: string + description: | + Optional. A URL to subscribe to Server-Sent Events (SSE) for this conversation, if SSE is enabled. The access token is a JWT with a 3-minute TTL. The token is revoked when Fin sets the conversation to complete status. + example: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + '400': + description: Bad Request content: application/json: examples: - Unauthorized: + Conversation ID missing: value: type: error.list - request_id: d7997515-cd92-4fe4-966c-cb1f4bdda1d4 + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - post: - summary: Create a news item - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - News - operationId: createNewsItem - description: You can create a news item - responses: - '200': - description: successful - content: - application/json: - examples: - successful: + - code: parameter_invalid + message: External Conversation ID is required + User ID missing: value: - id: '33' - type: news-item - workspace_id: this_is_an_id534_that_should_be_at_least_ - title: Halloween is here! - body: "

New costumes in store for this spooky season

" - sender_id: 991267834 - state: live - labels: - - New - - Product - - Update - cover_image_url: - reactions: - - "\U0001F606" - - "\U0001F605" - deliver_silently: true - created_at: 1734537797 - updated_at: 1734537797 - newsfeed_assignments: - - newsfeed_id: 53 - published_at: 1664638214 + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: parameter_invalid + message: User ID is required + Too many history items: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: parameter_invalid + message: Conversation history cannot contain more than 10 items schema: - "$ref": "#/components/schemas/news_item" + "$ref": "#/components/schemas/error" '401': description: Unauthorized content: @@ -18436,168 +16862,157 @@ paths: Unauthorized: value: type: error.list - request_id: 5142ad8e-883e-4b71-9adb-6494851e9b77 + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" requestBody: + required: true content: application/json: schema: - "$ref": "#/components/schemas/news_item_request" + type: object + properties: + conversation_id: + type: string + description: Your external conversation ID. Fin creates a conversation for this ID. If a conversation already exists for it, use `/fin/reply` instead. + example: ext-123 + message: + "$ref": "#/components/schemas/fin_agent_message" + user: + "$ref": "#/components/schemas/fin_agent_user" + conversation_metadata: + "$ref": "#/components/schemas/fin_agent_conversation_metadata" + attachments: + type: array + description: An array of attachments to include with the message. Maximum of 10 attachments. + maxItems: 10 + items: + "$ref": "#/components/schemas/fin_agent_attachment" + required: + - conversation_id + - message + - user examples: - successful: - summary: successful + Basic question: value: - title: Halloween is here! - body: "

New costumes in store for this spooky season

" - labels: - - Product - - Update - - New - sender_id: 991267834 - deliver_silently: true - reactions: - - "\U0001F606" - - "\U0001F605" - state: live - newsfeed_assignments: - - newsfeed_id: 53 - published_at: 1664638214 - "/news/news_items/{id}": - get: - summary: Retrieve a news item + conversation_id: ext-123 + message: + author: user + body: How do I reset my password? + timestamp: '2025-01-24T10:01:20.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + Question with history and attributes: + value: + conversation_id: ext-123 + message: + author: user + body: And how long does that take to apply? + timestamp: '2025-01-24T10:02:00.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + attributes: + plan_type: Pro + conversation_metadata: + history: + - author: user + body: How do I reset my password? + timestamp: '2025-01-24T10:01:20.000Z' + attributes: + order_id: '98765' + "/fin/reply": + post: + summary: Reply to Fin parameters: - name: Intercom-Version in: header schema: "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the news item which is given by Intercom. - example: 123 - schema: - type: integer tags: - - News - operationId: retrieveNewsItem - description: You can fetch the details of a single news item. + - Fin Agent + operationId: replyToFin + description: | + Send a follow-up message in an existing conversation. When Fin needs more information to + complete an action, it sets the conversation to `awaiting_user_reply` — send the user's + response so Fin can continue. responses: '200': - description: successful + description: Reply sent successfully content: application/json: examples: - successful: + Successful response: value: - id: '34' - type: news-item - workspace_id: this_is_an_id538_that_should_be_at_least_ - title: We have news - body: "

Hello there,

" - sender_id: 991267837 - state: live - labels: [] - cover_image_url: - reactions: - - - - - - - - - deliver_silently: false - created_at: 1734537800 - updated_at: 1734537800 - newsfeed_assignments: - - newsfeed_id: 55 - published_at: 1734537800 - schema: - "$ref": "#/components/schemas/news_item" - '404': - description: News Item Not Found - content: - application/json: - examples: - News Item Not Found: - value: - type: error.list - request_id: da84e250-8626-47e8-815c-62b33f0f2c36 - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: + conversation_id: ext-123 + user_id: user-456 + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...' + Response with attribute errors: value: - type: error.list - request_id: 33ff62c6-ceb7-4bde-93d6-301bed6f24b2 + conversation_id: ext-123 + user_id: user-456 + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...' errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - put: - summary: Update a news item - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the news item which is given by Intercom. - example: 123 - schema: - type: integer - tags: - - News - operationId: updateNewsItem - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - id: '37' - type: news-item - workspace_id: this_is_an_id544_that_should_be_at_least_ - title: Christmas is here! - body: "

New gifts in store for the jolly season

" - sender_id: 991267845 - state: live - labels: [] - cover_image_url: - reactions: - - "\U0001F61D" - - "\U0001F602" - deliver_silently: false - created_at: 1734537803 - updated_at: 1734537804 - newsfeed_assignments: [] + user: + attributes: + invalid_attr: User attribute 'invalid_attr' does not exist schema: - "$ref": "#/components/schemas/news_item" - '404': - description: News Item Not Found + type: object + properties: + conversation_id: + type: string + description: The ID of the conversation. + example: ext-123 + user_id: + type: string + description: The ID of the user. + example: user-456 + status: + type: string + enum: + - thinking + - replying + - awaiting_user_reply + - escalated + - resolved + - complete + description: | + Fin's current status in the conversation workflow. + example: thinking + created_at_ms: + type: string + format: date-time + description: The timestamp the response was created at, with millisecond precision. + example: '2025-01-24T10:00:00.123Z' + errors: + "$ref": "#/components/schemas/fin_agent_attribute_errors" + sse_subscription_url: + type: string + description: | + Optional. A URL to subscribe to Server-Sent Events (SSE) for this conversation, if SSE is enabled. The access token is a JWT with a 3-minute TTL. The token is revoked when Fin sets the conversation to awaiting_user_reply or complete status. + example: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...' + '400': + description: Bad Request content: application/json: examples: - News Item Not Found: + Invalid request: value: type: error.list - request_id: 2014d867-b634-495a-9b4f-ce56c4d657a9 + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 errors: - - code: not_found - message: Resource Not Found + - code: parameter_invalid + message: conversation_id is required schema: "$ref": "#/components/schemas/error" '401': @@ -18608,14450 +17023,5752 @@ paths: Unauthorized: value: type: error.list - request_id: 5838c54e-dd15-460b-82dd-794c4d0e12c5 + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 errors: - code: unauthorized message: Access Token Invalid schema: "$ref": "#/components/schemas/error" requestBody: + required: true content: application/json: schema: - "$ref": "#/components/schemas/news_item_request" + type: object + properties: + conversation_id: + type: string + description: The ID of the conversation. + example: '123456' + message: + "$ref": "#/components/schemas/fin_agent_message" + user: + "$ref": "#/components/schemas/fin_agent_user" + attachments: + type: array + description: An array of attachments to include with the message. Maximum of 10 attachments. + maxItems: 10 + items: + "$ref": "#/components/schemas/fin_agent_attachment" + settings: + "$ref": "#/components/schemas/fin_agent_settings" + required: + - conversation_id + - message + - user examples: - successful: - summary: successful + Basic reply: value: - title: Christmas is here! - body: "

New gifts in store for the jolly season

" - sender_id: 991267845 - reactions: - - "\U0001F61D" - - "\U0001F602" - news_item_not_found: - summary: News Item Not Found + conversation_id: ext-123 + message: + author: user + body: Here's the information you requested. + timestamp: '2025-01-24T09:01:00.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + Reply with settings: value: - title: Christmas is here! - body: "

New gifts in store for the jolly season

" - sender_id: 991267848 - reactions: - - "\U0001F61D" - - "\U0001F602" - delete: - summary: Delete a news item - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the news item which is given by Intercom. - example: 123 - schema: - type: integer - tags: - - News - operationId: deleteNewsItem - description: You can delete a single news item. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - id: '40' - object: news-item - deleted: true - schema: - "$ref": "#/components/schemas/deleted_object" - '404': - description: News Item Not Found - content: - application/json: - examples: - News Item Not Found: - value: - type: error.list - request_id: 23728e22-7b9f-44a9-9b8d-5028811b9cd0 - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: e5357876-89be-4a04-80c3-16735b7f53ff - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/news/newsfeeds/{id}/items": - get: - summary: List all live newsfeed items - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the news feed item which is given by - Intercom. - example: '123' - schema: - type: string - tags: - - News - operationId: listLiveNewsfeedItems - description: You can fetch a list of all news items that are live on a given - newsfeed - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: list - pages: - page: 1 - per_page: 20 - total_pages: 0 - type: pages - data: [] - total_count: 0 - schema: - "$ref": "#/components/schemas/paginated_response" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 022ff8b0-d16f-437c-8217-754c13e16dee - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/news/newsfeeds": - get: - summary: List all newsfeeds - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - News - operationId: listNewsfeeds - description: You can fetch a list of all newsfeeds - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: list - pages: - page: 1 - per_page: 10 - total_pages: 1 - type: pages - data: - - id: '68' - type: newsfeed - name: Visitor Feed - created_at: 1734537813 - updated_at: 1734537813 - - id: '69' - type: newsfeed - name: Visitor Feed - created_at: 1734537813 - updated_at: 1734537813 - total_count: 2 - schema: - "$ref": "#/components/schemas/paginated_response" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: caa26d8b-6512-445d-9418-9fc5849ca304 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/news/newsfeeds/{id}": - get: - summary: Retrieve a newsfeed - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the news feed item which is given by - Intercom. - example: '123' - schema: - type: string - tags: - - News - operationId: retrieveNewsfeed - description: You can fetch the details of a single newsfeed - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - id: '72' - type: newsfeed - name: Visitor Feed - created_at: 1734537815 - updated_at: 1734537815 - schema: - "$ref": "#/components/schemas/newsfeed" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 6d9a1bf5-aa08-4c93-a61a-5a21130b6553 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/notes/{id}": - get: - summary: Retrieve a note - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier of a given note - example: 1 - schema: - type: integer - tags: - - Notes - operationId: retrieveNote - description: You can fetch the details of a single note. - responses: - '200': - description: Note found - content: - application/json: - examples: - Note found: - value: - type: note - id: '34' - created_at: 1733846617 - contact: - type: contact - id: 6762f2591bb69f9f2193bc1f - author: - type: admin - id: '991267864' - name: Ciaran346 Lee - email: admin346@email.com - away_mode_enabled: false - away_mode_reassign: false - body: "

This is a note.

" - schema: - "$ref": "#/components/schemas/note" - '404': - description: Note not found - content: - application/json: - examples: - Note not found: - value: - type: error.list - request_id: bc300b1a-492a-405f-924e-a5881cb72e3a - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 81384687-5818-4df9-b421-fba77edd6c17 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/secure_mode_secrets": - get: - summary: List all identity verification secrets - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Identity Verification Secrets - operationId: listIdentityVerificationSecrets - description: | - Returns the identity verification secrets configured for your workspace. - - Each entry includes metadata only — the HMAC signing material itself is **never** returned by this endpoint. The raw secret is only available once, in the response to `POST /secure_mode_secrets`. Persist it at that moment. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: list - data: - - type: identity_verification_secret - id: '102' - name: Production Web - supports_android: false - supports_ios: false - supports_web: true - created_at: 1734537243 - schema: - "$ref": "#/components/schemas/identity_verification_secret_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 6f8e61d8-6a9a-4f1e-bfbb-6c7c0c0aef1c - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - post: - summary: Create an identity verification secret - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Identity Verification Secrets - operationId: createIdentityVerificationSecret - description: | - Creates a new identity verification secret for your workspace. Intercom generates a 256-bit, cryptographically random value server-side and returns it once in the response. - - **This is the only opportunity to capture the secret.** Store it in your secure configuration immediately. The `secret` field is omitted from all subsequent responses (including `GET /secure_mode_secrets`) — if you lose it, you must rotate a new secret in and delete this one. - - You must enable the secret for at least one platform (`supports_android`, `supports_ios`, or `supports_web`). Rotation flow: create the new secret, roll it out to every client signing `user_hash` values, then delete the old secret with `DELETE /secure_mode_secrets/{id}` once traffic has cut over. - responses: - '201': - description: Secret created - content: - application/json: - examples: - Secret created: - value: - type: identity_verification_secret - id: '103' - name: Production Web - secret: 9Zw0xNs3vKk0fPz9rwKqNbzH3mPVQmQxL9vhSm9Tk4A - supports_android: false - supports_ios: false - supports_web: true - created_at: 1734537500 - schema: - "$ref": "#/components/schemas/identity_verification_secret_with_material" - '422': - description: Invalid parameters - content: - application/json: - examples: - Invalid parameters: - value: - type: error.list - request_id: 2fda7f9b-4a31-4c59-8b3f-3e5c4f8a1d22 - errors: - - code: parameter_invalid - message: name is required - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_identity_verification_secret_request" - examples: - web_only: - summary: Create a web-only secret - value: - name: Production Web - supports_web: true - multi_platform: - summary: Create a secret for web and mobile - value: - name: Production all-platform - supports_web: true - supports_ios: true - supports_android: true - "/secure_mode_secrets/{id}": - delete: - summary: Delete an identity verification secret - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - description: The unique identifier of the identity verification secret - example: '102' - required: true - schema: - type: string - tags: - - Identity Verification Secrets - operationId: deleteIdentityVerificationSecret - description: | - Soft-deletes an identity verification secret. After deletion, any `user_hash` values signed with that secret will no longer verify — Messenger sessions depending on it will be rejected on their next request. Use this to complete a rotation: create a new secret, roll it out, then delete the old one. - responses: - '204': - description: Secret deleted - '404': - description: Secret not found - content: - application/json: - examples: - Secret not found: - value: - type: error.list - request_id: 77b9d3c0-09e1-4d5f-8e6c-7d4a2f1b9a12 - errors: - - code: identity_verification_secret_not_found - message: Identity verification secret not found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: c1c0477c-5b80-4874-be65-01ec8a9ffe14 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/segments": - get: - summary: List all segments - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: include_count - in: query - required: false - description: It includes the count of contacts that belong to each segment. - example: true - schema: - type: boolean - tags: - - Segments - operationId: listSegments - description: You can fetch a list of all segments. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: segment.list - segments: - - type: segment - id: 6762f25c1bb69f9f2193bc22 - name: John segment - created_at: 1734537820 - updated_at: 1734537820 - person_type: user - - type: segment - id: 6762f25c1bb69f9f2193bc23 - name: Jane segment - created_at: 1734537820 - updated_at: 1734537820 - person_type: user - schema: - "$ref": "#/components/schemas/segment_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: b1939528-98f0-4a63-a442-2cc9203fc8c7 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/segments/{id}": - get: - summary: Retrieve a segment - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identified of a given segment. - example: '123' - schema: - type: string - tags: - - Segments - operationId: retrieveSegment - description: You can fetch the details of a single segment. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: segment - id: 6762f25f1bb69f9f2193bc26 - name: John segment - created_at: 1734537823 - updated_at: 1734537823 - person_type: user - schema: - "$ref": "#/components/schemas/segment" - '404': - description: Segment not found - content: - application/json: - examples: - Segment not found: - value: - type: error.list - request_id: bd697cc6-7757-488c-a89f-16e6feaf7585 - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: be0d5309-d722-4d2a-aae9-77f4bc0a2cd0 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/subscription_types": - get: - summary: List subscription types - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Subscription Types - operationId: listSubscriptionTypes - description: You can list all subscription types. A list of subscription type - objects will be returned. - responses: - '200': - description: Successful - content: - application/json: - examples: - Successful: - value: - type: list - data: - - type: subscription - id: '135' - state: live - consent_type: opt_out - default_translation: - name: Newsletters - description: Lorem ipsum dolor sit amet - locale: en - translations: - - name: Newsletters - description: Lorem ipsum dolor sit amet - locale: en - content_types: - - email - schema: - "$ref": "#/components/schemas/subscription_type_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 06d15b1f-19b0-42cc-aff9-a9d9db39402b - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/phone_call_redirects": - post: - summary: Create a phone Switch - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Switch - operationId: createPhoneSwitch - description: | - You can use the API to deflect phone calls to the Intercom Messenger. - Calling this endpoint will send an SMS with a link to the Messenger to the phone number specified. - - If custom attributes are specified, they will be added to the user or lead's custom data attributes. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - url: http://via.intercom.io/msgr/1add3dd1-a75e-4a96-96fd-984d16aba059 - type: phone_call_redirect - schema: - "$ref": "#/components/schemas/phone_switch" - '400': - description: bad request - invalid number - content: - application/json: - examples: - bad request - exception sending sms: - value: - error_key: sms_failed - message: SMS was not sent due to an unknown error - bad request - invalid number: - value: - error_key: invalid_phone_number - message: Invalid phone number - '422': - description: unprocessable entity - content: - application/json: - examples: - unprocessable entity: - value: - error_key: some_error - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: e1ed4f34-9477-492a-8ddb-22f10af39734 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_phone_switch_request" - examples: - successful: - summary: successful - value: - phone: "+353832345678" - custom_attributes: - issue_type: Billing - priority: high - bad_request_-_exception_sending_sms: - summary: bad request - exception sending sms - value: - phone: "+353832345678" - custom_attributes: - issue_type: Billing - priority: high - bad_request_-_invalid_number: - summary: bad request - invalid number - value: - phone: "+353832345678" - custom_attributes: - issue_type: Billing - priority: high - unprocessable_entity: - summary: unprocessable entity - value: - phone: "+40241100100" - custom_attributes: - issue_type: Billing - priority: high - "/calls": - get: - summary: List all calls - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: page - in: query - required: false - description: The page of results to fetch. Defaults to first page - example: 1 - schema: - type: integer - - name: per_page - in: query - required: false - description: How many results to display per page. Defaults to 25. Max 25. - example: 25 - schema: - type: integer - tags: - - Calls - operationId: listCalls - description: | - Retrieve a paginated list of calls. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: list - data: [] - total_count: 0 - pages: - type: pages - page: 1 - per_page: 25 - total_pages: 0 - schema: - "$ref": "#/components/schemas/call_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/calls/{id}": - get: - summary: Get a call - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The id of the call to retrieve - schema: - type: string - tags: - - Calls - operationId: showCall - description: Retrieve a single call by id. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: call - id: "123" - conversation_id: "456" - admin_id: "789" - contact_id: "6762f0dd1bb69f9f2193bb83" - state: completed - initiated_at: 1734537437 - answered_at: 1734537440 - ended_at: 1734537530 - created_at: 1734537437 - updated_at: 1734537531 - recording_url: "https://api.intercom.io/calls/123/recording" - transcription_url: "https://api.intercom.io/calls/123/transcript" - call_type: phone - direction: outbound - ended_reason: answered - phone: "+15551234567" - fin_recording_url: "https://api.intercom.io/calls/124/recording" - fin_transcription_url: "https://api.intercom.io/calls/124/transcript" - duration: 90 - talk_time: 85 - queue_time: 3 - hold_time: null - schema: - "$ref": "#/components/schemas/call" - '404': - description: Not Found - content: - application/json: - examples: - Not Found: - value: - type: error.list - request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 - errors: - - code: not_found - message: Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/calls/{id}/recording": - get: - summary: Get call recording by call id - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The id of the call - schema: - type: string - tags: - - Calls - operationId: showCallRecording - description: Redirects to a signed URL for the call's recording if it exists. - responses: - '302': - description: Redirect to signed recording URL - headers: - Location: - description: The signed recording URL - schema: - type: string - format: uri - '404': - description: Recording not found - content: - application/json: - examples: - Not Found: - value: - type: error.list - request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 - errors: - - code: not_found - message: Recording Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: e097e446-9ae6-44a8-8e13-2bf3008b87ef - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/calls/{id}/transcript": - get: - summary: Get call transcript by call id - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The id of the call - schema: - type: string - tags: - - Calls - operationId: showCallTranscript - description: | - Returns the transcript for the specified call as a downloadable text file. - responses: - '200': - description: successful - headers: - Content-Disposition: - description: File attachment directive and suggested filename for the transcript - schema: - type: string - example: "attachment; filename=transcription_data-2025-07-17.txt" - content: - text/plain: - schema: - type: string - description: Transcript text - examples: - transcript_txt: - value: |- - [00:00:03] Teammate 1: "Hello, thanks for calling. How can I help today?" - [00:00:09] User: "I need help recovering access to my account." - [00:00:15] Teammate 1: "I can help with that. For security, I’ll ask a few generic verification questions." - [00:00:22] User: "Okay." - [00:00:28] Teammate 1: "Please confirm general details on the account (no sensitive data over this call)." - [00:00:35] User: "I can provide non-sensitive info." - [00:00:41] Teammate 1: "Thank you. I’ll initiate a standard account recovery process and send the next steps." - [00:00:48] User: "Great, thanks." - [00:00:53] Teammate 1: "You should receive a message shortly with instructions to complete recovery." - '404': - description: Not Found - content: - application/json: - examples: - Not Found: - value: - type: error.list - request_id: 9bc4fc62-7cdf-4f72-a56e-02af4836d499 - errors: - - code: not_found - message: Not Found - schema: - "$ref": "#/components/schemas/error" - "/calls/search": - post: - summary: List calls with transcripts - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Calls - operationId: listCallsWithTranscripts - description: | - Retrieve calls by a list of conversation ids and include transcripts when available. - A maximum of 20 `conversation_ids` can be provided. If none are provided or more than 20 are provided, a 400 error is returned. - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - conversation_ids - properties: - conversation_ids: - type: array - description: A list of conversation ids to fetch calls for. Maximum 20. - minItems: 1 - maxItems: 20 - items: - type: string - examples: - example: - value: - conversation_ids: - - "64619700005694" - - "64619700005695" - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: list - data: - - type: call - id: "123" - conversation_id: "64619700005694" - transcript: - - {} - transcript_status: completed - schema: - type: object - properties: - type: - type: string - example: list - data: - type: array - items: - allOf: - - "$ref": "#/components/schemas/call" - - type: object - properties: - transcript: - type: array - description: The call transcript if available, otherwise an empty array. - items: - type: object - additionalProperties: true - transcript_status: - type: string - nullable: true - description: The status of the transcript if available. - '400': - description: Bad Request - content: - application/json: - examples: - too_many_ids: - value: - type: error.list - errors: - - code: conversation_id_limit_exceeded - message: "A list of up to 20 conversation IDs is required" - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/tags": - get: - summary: List all tags - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Tags - operationId: listTags - description: "You can fetch a list of all tags for a given workspace.\n\n" - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: list - data: - - type: tag - id: '102' - name: Manual tag 1 - schema: - "$ref": "#/components/schemas/tag_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 2859da57-c83f-405c-8166-240a312442a3 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - post: - summary: Create or update a tag, Tag or untag companies, Tag contacts - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Tags - operationId: createTag - description: | - You can use this endpoint to perform the following operations: - - **1. Create a new tag:** You can create a new tag by passing in the tag name as specified in "Create or Update Tag Request Payload" described below. - - **2. Update an existing tag:** You can update an existing tag by passing the id of the tag as specified in "Create or Update Tag Request Payload" described below. - - **3. Tag Companies:** You can tag single company or a list of companies. You can tag a company by passing in the tag name and the company details as specified in "Tag Company Request Payload" described below. Also, if the tag doesn't exist then a new one will be created automatically. - - **4. Untag Companies:** You can untag a single company or a list of companies. You can untag a company by passing in the tag id and the company details as specified in "Untag Company Request Payload" described below. - - **5. Tag Multiple Users:** You can tag a list of users. You can tag the users by passing in the tag name and the user details as specified in "Tag Users Request Payload" described below. - - Each operation will return a tag object. - responses: - '200': - description: Action successful - content: - application/json: - examples: - Action successful: - value: - type: tag - id: '105' - name: test - users: [] - companies: [{ "id": "valid-123", "tagged": true }] - schema: - "$ref": "#/components/schemas/tag_create_response" - '400': - description: Invalid parameters - content: - application/json: - examples: - Invalid parameters: - value: - type: error.list - request_id: 33a05108-3bf7-411f-a270-72db40b5a31c - errors: - - code: parameter_invalid - message: invalid tag parameters - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: f230e3a7-00a9-456b-bf1c-2ad4b7dc49f6 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - oneOf: - - "$ref": "#/components/schemas/create_or_update_tag_request" - - "$ref": "#/components/schemas/tag_company_request" - - "$ref": "#/components/schemas/untag_company_request" - - "$ref": "#/components/schemas/tag_multiple_users_request" - examples: - action_successful: - summary: Action successful - value: - name: test - invalid_parameters: - summary: Invalid parameters - value: - test: invalid - "/tags/{id}": - get: - summary: Find a specific tag - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - description: The unique identifier of a given tag - example: '123' - required: true - schema: - type: string - tags: - - Tags - operationId: findTag - description: | - You can fetch the details of tags that are on the workspace by their id. - This will return a tag object. - responses: - '200': - description: Tag found - content: - application/json: - examples: - Tag found: - value: - type: tag - id: '113' - name: Manual tag - schema: - "$ref": "#/components/schemas/tag_basic" - '404': - description: Tag not found - content: - application/json: - examples: - Tag not found: - value: - type: error.list - request_id: e20c89d2-29c6-4abb-aa3d-c860e1cec1ca - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: c1c0477c-5b80-4874-be65-01ec8a9ffe14 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - delete: - summary: Delete tag - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - description: The unique identifier of a given tag - example: '123' - required: true - schema: - type: string - tags: - - Tags - operationId: deleteTag - description: You can delete the details of tags that are on the workspace by - passing in the id. - responses: - '200': - description: Successful - '404': - description: Resource not found - content: - application/json: - examples: - Resource not found: - value: - type: error.list - request_id: 49536975-bbc5-4a2f-ab8b-7928275cb4d3 - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '400': - description: Tag has dependent objects - content: - application/json: - examples: - Tag has dependent objects: - value: - type: error.list - request_id: 28960d1e-a056-46c0-bf18-a0d798eb889f - errors: - - code: tag_has_dependent_objects - message: 'Unable to delete Tag with dependent objects. Segments: - Seg 1.' - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 90a369be-14bb-48d1-8ed6-6287976f6a64 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/teams": - get: - summary: List all teams - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Teams - operationId: listTeams - description: This will return a list of team objects for the App. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: team.list - teams: [] - schema: - "$ref": "#/components/schemas/team_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: a77dadbc-1f1e-4875-bac3-f0d09bbc214a - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/teams/{id}": - get: - summary: Retrieve a team - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier of a given team. - example: '123' - schema: - type: string - tags: - - Teams - operationId: retrieveTeam - description: You can fetch the details of a single team, containing an array - of admins that belong to this team. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: team - id: '991267902' - name: team 1 - admin_ids: [] - schema: - "$ref": "#/components/schemas/team" - '404': - description: Team not found - content: - application/json: - examples: - Team not found: - value: - type: error.list - request_id: 3ff156ba-a66e-40d4-93ff-cb6e6afc3c9d - errors: - - code: team_not_found - message: Team not found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: fc4b741b-b9f1-4ef9-92c7-eb71e9811df3 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/ticket_states": - get: - summary: List all ticket states - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Ticket States - operationId: listTicketStates - description: You can get a list of all ticket states for a workspace. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: list - data: - - type: ticket_state - id: '8269' - category: submitted - internal_label: Submitted - external_label: Submitted - ticket_types: - type: list - data: - - type: ticket_type - id: '55' - name: my-ticket-type-3 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - - type: ticket_type - id: '56' - name: my-ticket-type-4 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - - type: ticket_type - id: '58' - name: my-ticket-type-6 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - archived: false - - type: ticket_state - id: '8270' - category: in_progress - internal_label: In progress - external_label: In progress - ticket_types: - type: list - data: - - type: ticket_type - id: '55' - name: my-ticket-type-3 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - - type: ticket_type - id: '56' - name: my-ticket-type-4 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - - type: ticket_type - id: '58' - name: my-ticket-type-6 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - archived: false - - type: ticket_state - id: '8271' - category: waiting_on_customer - internal_label: Waiting on customer - external_label: Waiting on you - ticket_types: - type: list - data: - - type: ticket_type - id: '55' - name: my-ticket-type-3 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - - type: ticket_type - id: '56' - name: my-ticket-type-4 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - - type: ticket_type - id: '58' - name: my-ticket-type-6 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - archived: false - - type: ticket_state - id: '8272' - category: resolved - internal_label: Resolved - external_label: Resolved - ticket_types: - type: list - data: - - type: ticket_type - id: '55' - name: my-ticket-type-3 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - - type: ticket_type - id: '56' - name: my-ticket-type-4 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - - type: ticket_type - id: '58' - name: my-ticket-type-6 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - archived: false - - type: ticket_state - id: '8273' - category: submitted - internal_label: Admin label 1 - external_label: User label - ticket_types: - type: list - data: - - type: ticket_type - id: '55' - name: my-ticket-type-3 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - - type: ticket_type - id: '56' - name: my-ticket-type-4 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - archived: false - - type: ticket_state - id: '8274' - category: submitted - internal_label: Admin label 2 - external_label: User label - ticket_types: - type: list - data: - - type: ticket_type - id: '58' - name: my-ticket-type-6 - description: my ticket type description is awesome. - icon: "\U0001F981" - archived: false - is_internal: false - category: Back-office - archived: false - schema: - "$ref": "#/components/schemas/ticket_state_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 5e0bd231-7307-42e6-a6ee-babf05bd163b - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/ticket_types/{ticket_type_id}/attributes": - post: - summary: Create a new attribute for a ticket type - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: ticket_type_id - in: path - required: true - description: The unique identifier for the ticket type which is given by Intercom. - schema: - type: string - tags: - - Ticket Type Attributes - description: You can create a new attribute for a ticket type. - operationId: createTicketTypeAttribute - responses: - '200': - description: Ticket Type Attribute created - content: - application/json: - examples: - Ticket Type Attribute created: - value: - type: ticket_type_attribute - id: '157' - workspace_id: this_is_an_id640_that_should_be_at_least_ - name: Attribute Title - description: Attribute Description - data_type: string - input_options: - multiline: false - order: 2 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: true - default: false - ticket_type_id: 63 - archived: false - created_at: 1734537862 - updated_at: 1734537862 - schema: - "$ref": "#/components/schemas/ticket_type_attribute" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 6c9836ed-8485-4f1d-929d-b9d7e153daed - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_ticket_type_attribute_request" - examples: - ticket_type_attribute_created: - summary: Ticket Type Attribute created - value: - name: Attribute Title - description: Attribute Description - data_type: string - required_to_create: false - "/ticket_types/{ticket_type_id}/attributes/{id}": - put: - summary: Update an existing attribute for a ticket type - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: ticket_type_id - in: path - required: true - description: The unique identifier for the ticket type which is given by Intercom. - schema: - type: string - - name: id - in: path - required: true - description: The unique identifier for the ticket type attribute which is - given by Intercom. - schema: - type: string - tags: - - Ticket Type Attributes - description: You can update an existing attribute for a ticket type. - operationId: updateTicketTypeAttribute - responses: - '200': - description: Ticket Type Attribute updated - content: - application/json: - examples: - Ticket Type Attribute updated: - value: - type: ticket_type_attribute - id: '162' - workspace_id: this_is_an_id644_that_should_be_at_least_ - name: name - description: New Attribute Description - data_type: string - order: 0 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: false - visible_to_contacts: false - default: false - ticket_type_id: 65 - archived: false - created_at: 1734537864 - updated_at: 1734537864 - schema: - "$ref": "#/components/schemas/ticket_type_attribute" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: cd303186-b33e-4409-8bfc-5814b176d6e1 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_ticket_type_attribute_request" - examples: - ticket_type_attribute_updated: - summary: Ticket Type Attribute updated - value: - description: New Attribute Description - "/ticket_types": - get: - summary: List all ticket types - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Ticket Types - operationId: listTicketTypes - description: You can get a list of all ticket types for a workspace. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: list - data: - - type: ticket_type - id: '67' - name: Bug Report - description: Bug Report Template - icon: "\U0001F39F️" - workspace_id: this_is_an_id648_that_should_be_at_least_ - archived: false - created_at: 1734537866 - updated_at: 1734537866 - is_internal: false - ticket_type_attributes: - type: list - data: - - type: ticket_type_attribute - id: '165' - workspace_id: this_is_an_id648_that_should_be_at_least_ - name: _default_title_ - description: '' - data_type: string - input_options: - multiline: false - order: 0 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: true - default: true - ticket_type_id: 67 - archived: false - created_at: 1734537866 - updated_at: 1734537866 - - type: ticket_type_attribute - id: '167' - workspace_id: this_is_an_id648_that_should_be_at_least_ - name: name - description: description - data_type: string - input_options: - order: 0 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: false - visible_to_contacts: false - default: false - ticket_type_id: 67 - archived: false - created_at: 1734537866 - updated_at: 1734537866 - - type: ticket_type_attribute - id: '166' - workspace_id: this_is_an_id648_that_should_be_at_least_ - name: _default_description_ - description: '' - data_type: string - input_options: - multiline: true - order: 1 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: true - default: true - ticket_type_id: 67 - archived: false - created_at: 1734537866 - updated_at: 1734537866 - category: Customer - ticket_states: - type: list - data: - - type: ticket_state - id: '8321' - category: submitted - internal_label: Submitted - external_label: Submitted - - type: ticket_state - id: '8322' - category: in_progress - internal_label: In progress - external_label: In progress - - type: ticket_state - id: '8323' - category: waiting_on_customer - internal_label: Waiting on customer - external_label: Waiting on you - - type: ticket_state - id: '8324' - category: resolved - internal_label: Resolved - external_label: Resolved - schema: - "$ref": "#/components/schemas/ticket_type_list" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: a63507c2-3b3b-4a1a-aafa-f08b87eb2c12 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - post: - summary: Create a ticket type - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Ticket Types - operationId: createTicketType - description: "You can create a new ticket type.\n> \U0001F4D8 Creating ticket - types.\n>\n> Every ticket type will be created with two default attributes: - _default_title_ and _default_description_.\n> For the `icon` propery, use - an emoji from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/)\n" - responses: - '200': - description: Ticket type created - content: - application/json: - examples: - Ticket type created: - value: - type: ticket_type - id: '70' - name: Customer Issue - description: Customer Report Template - icon: "\U0001F39F️" - workspace_id: this_is_an_id652_that_should_be_at_least_ - archived: false - created_at: 1734537869 - updated_at: 1734537869 - is_internal: false - ticket_type_attributes: - type: list - data: - - type: ticket_type_attribute - id: '174' - workspace_id: this_is_an_id652_that_should_be_at_least_ - name: _default_title_ - description: '' - data_type: string - input_options: - multiline: false - order: 0 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: true - default: true - ticket_type_id: 70 - archived: false - created_at: 1734537869 - updated_at: 1734537869 - - type: ticket_type_attribute - id: '175' - workspace_id: this_is_an_id652_that_should_be_at_least_ - name: _default_description_ - description: '' - data_type: string - input_options: - multiline: true - order: 1 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: true - default: true - ticket_type_id: 70 - archived: false - created_at: 1734537869 - updated_at: 1734537869 - category: Customer - ticket_states: - type: list - data: - - type: ticket_state - id: '8337' - category: submitted - internal_label: Submitted - external_label: Submitted - - type: ticket_state - id: '8338' - category: in_progress - internal_label: In progress - external_label: In progress - - type: ticket_state - id: '8339' - category: waiting_on_customer - internal_label: Waiting on customer - external_label: Waiting on you - - type: ticket_state - id: '8340' - category: resolved - internal_label: Resolved - external_label: Resolved - schema: - "$ref": "#/components/schemas/ticket_type" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 36b79d0c-b78f-4e1d-bd6d-bfc3dcc71f53 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/create_ticket_type_request" - examples: - ticket_type_created: - summary: Ticket type created - value: - name: Customer Issue - description: Customer Report Template - icon: "\U0001F39F️" - category: Customer - "/ticket_types/{id}": - get: - summary: Retrieve a ticket type - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the ticket type which is given by Intercom. - schema: - type: string - tags: - - Ticket Types - operationId: getTicketType - description: You can fetch the details of a single ticket type. - responses: - '200': - description: Ticket type found - content: - application/json: - examples: - Ticket type found: - value: - type: ticket_type - id: '72' - name: Bug Report - description: Bug Report Template - icon: "\U0001F39F️" - workspace_id: this_is_an_id656_that_should_be_at_least_ - archived: false - created_at: 1734537870 - updated_at: 1734537870 - is_internal: false - ticket_type_attributes: - type: list - data: - - type: ticket_type_attribute - id: '179' - workspace_id: this_is_an_id656_that_should_be_at_least_ - name: _default_title_ - description: '' - data_type: string - input_options: - multiline: false - order: 0 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: true - default: true - ticket_type_id: 72 - archived: false - created_at: 1734537871 - updated_at: 1734537871 - - type: ticket_type_attribute - id: '181' - workspace_id: this_is_an_id656_that_should_be_at_least_ - name: name - description: description - data_type: string - input_options: - order: 0 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: false - visible_to_contacts: false - default: false - ticket_type_id: 72 - archived: false - created_at: 1734537871 - updated_at: 1734537871 - - type: ticket_type_attribute - id: '180' - workspace_id: this_is_an_id656_that_should_be_at_least_ - name: _default_description_ - description: '' - data_type: string - input_options: - multiline: true - order: 1 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: true - default: true - ticket_type_id: 72 - archived: false - created_at: 1734537871 - updated_at: 1734537871 - category: Customer - ticket_states: - type: list - data: - - type: ticket_state - id: '8353' - category: submitted - internal_label: Submitted - external_label: Submitted - - type: ticket_state - id: '8354' - category: in_progress - internal_label: In progress - external_label: In progress - - type: ticket_state - id: '8355' - category: waiting_on_customer - internal_label: Waiting on customer - external_label: Waiting on you - - type: ticket_state - id: '8356' - category: resolved - internal_label: Resolved - external_label: Resolved - schema: - "$ref": "#/components/schemas/ticket_type" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: c9a2c3da-7536-4eba-bde7-c38c2d9e2942 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - put: - summary: Update a ticket type - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier for the ticket type which is given by Intercom. - schema: - type: string - tags: - - Ticket Types - operationId: updateTicketType - description: "\nYou can update a ticket type.\n\n> \U0001F4D8 Updating a ticket - type.\n>\n> For the `icon` propery, use an emoji from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/)\n" - responses: - '200': - description: Ticket type updated - content: - application/json: - examples: - Ticket type updated: - value: - type: ticket_type - id: '74' - name: Bug Report 2 - description: Bug Report Template - icon: "\U0001F39F️" - workspace_id: this_is_an_id660_that_should_be_at_least_ - archived: false - created_at: 1734537873 - updated_at: 1734537874 - is_internal: false - ticket_type_attributes: - type: list - data: - - type: ticket_type_attribute - id: '185' - workspace_id: this_is_an_id660_that_should_be_at_least_ - name: _default_title_ - description: '' - data_type: string - input_options: - multiline: false - order: 0 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: true - default: true - ticket_type_id: 74 - archived: false - created_at: 1734537873 - updated_at: 1734537873 - - type: ticket_type_attribute - id: '187' - workspace_id: this_is_an_id660_that_should_be_at_least_ - name: name - description: description - data_type: string - input_options: - order: 0 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: false - visible_to_contacts: false - default: false - ticket_type_id: 74 - archived: false - created_at: 1734537873 - updated_at: 1734537873 - - type: ticket_type_attribute - id: '186' - workspace_id: this_is_an_id660_that_should_be_at_least_ - name: _default_description_ - description: '' - data_type: string - input_options: - multiline: true - order: 1 - required_to_create: false - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: true - default: true - ticket_type_id: 74 - archived: false - created_at: 1734537873 - updated_at: 1734537873 - category: Customer - ticket_states: - type: list - data: - - type: ticket_state - id: '8369' - category: submitted - internal_label: Submitted - external_label: Submitted - - type: ticket_state - id: '8370' - category: in_progress - internal_label: In progress - external_label: In progress - - type: ticket_state - id: '8371' - category: waiting_on_customer - internal_label: Waiting on customer - external_label: Waiting on you - - type: ticket_state - id: '8372' - category: resolved - internal_label: Resolved - external_label: Resolved - schema: - "$ref": "#/components/schemas/ticket_type" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 2fc2ae95-64ec-4581-80f0-79ecfdc2e759 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_ticket_type_request" - examples: - ticket_type_updated: - summary: Ticket type updated - value: - name: Bug Report 2 - "/tickets/{id}/reply": - post: - summary: Reply to a ticket - operationId: replyTicket - description: You can reply to a ticket with a message from an admin or on behalf - of a contact, or with a note for admins. - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - schema: - title: Ticket ID - type: string - description: | - The id of the ticket to target. - {% admonition type="info" name="Not the Inbox ticket ID" %} - This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. - {% /admonition %} - example: '123' - tags: - - Tickets - responses: - '400': - description: User reply - content: - application/json: - examples: - User reply: - value: - type: error.list - request_id: 603ce1da-f2bf-4641-a1ee-d1f13ebf9172 - errors: - - code: parameter_mismatch - message: User replies are not allowed on Backoffice tickets - schema: - "$ref": "#/components/schemas/error" - '200': - description: Admin Reply to send Quick Reply Options - content: - application/json: - examples: - Admin note reply: - value: - type: ticket_part - id: '156' - part_type: note - body: |- -

An Unordered HTML List

-
    -
  • Coffee
  • -
  • Tea
  • -
  • Milk
  • -
-

An Ordered HTML List

-
    -
  1. Coffee
  2. -
  3. Tea
  4. -
  5. Milk
  6. -
- created_at: 1734537884 - updated_at: 1734537884 - author: - id: '991267943' - type: admin - name: Ciaran419 Lee - email: admin419@email.com - attachments: [] - redacted: false - app_package_code: test-integration - Admin quick_reply reply: - value: - type: ticket_part - id: '158' - part_type: quick_reply - created_at: 1734537890 - updated_at: 1734537890 - author: - id: '991267948' - type: admin - name: Ciaran423 Lee - email: admin423@email.com - attachments: [] - redacted: false - schema: - "$ref": "#/components/schemas/ticket_reply" - '404': - description: Not found - content: - application/json: - examples: - Not found: - value: - type: error.list - request_id: 24561472-06a4-41b2-aca2-97b3ccd9ca19 - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: ed4305b3-4364-4fab-9f8d-e07e9a8190ab - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - oneOf: - - "$ref": "#/components/schemas/contact_reply_ticket_request" - - "$ref": "#/components/schemas/admin_reply_ticket_request" - properties: - skip_notifications: - type: boolean - description: Option to disable notifications when replying to a - Ticket. - example: true - examples: - user_reply: - summary: User reply - value: - message_type: comment - type: user - intercom_user_id: 6762f2971bb69f9f2193bc49 - body: Thanks again :) - admin_note_reply: - summary: Admin note reply - value: - message_type: note - type: admin - admin_id: 991267943 - body: "

An Unordered HTML List

  • Coffee
  • - \
  • Tea
  • Milk

An Ordered HTML List

- \
  1. Coffee
  2. Tea
  3. Milk
- \ " - admin_note_cross_post_reply: - summary: Admin note reply with cross-post to linked conversations - value: - message_type: note - type: admin - admin_id: 991267943 - body: This note will be cross-posted to all linked conversations. - cross_post: true - admin_quick_reply_reply: - summary: Admin quick_reply reply - value: - message_type: quick_reply - type: admin - admin_id: 991267948 - reply_options: - - text: 'Yes' - uuid: 0df48b85-9a93-4c66-a167-753eff0baaec - - text: 'No' - uuid: 4f0b5145-4193-4b4f-8cad-ce19478a3938 - not_found: - summary: Not found - value: - message_type: comment - type: user - intercom_user_id: 6762f2a41bb69f9f2193bc4c - body: Thanks again :) - "/tickets/{ticket_id}/tags": - post: - summary: Add tag to a ticket - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: ticket_id - in: path - description: ticket_id - example: '64619700005694' - required: true - schema: - type: string - tags: - - Tags - - Tickets - operationId: attachTagToTicket - description: You can tag a specific ticket. This will return a tag object for - the tag that was added to the ticket. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: tag - id: '121' - name: Manual tag - applied_at: 1663597223 - applied_by: - type: admin - id: '456' - schema: - "$ref": "#/components/schemas/tag" - '404': - description: Ticket not found - content: - application/json: - examples: - Ticket not found: - value: - type: error.list - request_id: b44cff1d-c6f8-4d60-ab6f-33522cd739d8 - errors: - - code: ticket_not_found - message: Ticket not found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 2bed74fe-1b04-4c07-8813-02c700e8dcad - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - type: object - required: - - id - - admin_id - properties: - id: - type: string - description: The unique identifier for the tag which is given by - Intercom - example: '7522907' - admin_id: - type: string - description: The unique identifier for the admin which is given - by Intercom. - example: '780' - examples: - successful: - summary: successful - value: - id: 121 - admin_id: 991267958 - ticket_not_found: - summary: Ticket not found - value: - id: 122 - admin_id: 991267963 - "/tickets/{ticket_id}/tags/{id}": - delete: - summary: Remove tag from a ticket - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: ticket_id - in: path - description: ticket_id - example: '64619700005694' - required: true - schema: - type: string - - name: id - in: path - description: The unique identifier for the tag which is given by Intercom - example: '7522907' - required: true - schema: - type: string - tags: - - Tags - - Tickets - operationId: detachTagFromTicket - description: You can remove tag from a specific ticket. This will return a tag - object for the tag that was removed from the ticket. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: tag - id: '124' - name: Manual tag - applied_at: 1663597223 - applied_by: - type: admin - id: '456' - schema: - "$ref": "#/components/schemas/tag" - '404': - description: Tag not found - content: - application/json: - examples: - Ticket not found: - value: - type: error.list - request_id: 734019dc-1d61-4fad-a86e-e3fb06244c4d - errors: - - code: ticket_not_found - message: Ticket not found - Tag not found: - value: - type: error.list - request_id: a3658b9a-3562-48a7-8afe-362284632d67 - errors: - - code: tag_not_found - message: Tag not found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 2e87c98e-4ffc-407e-b7bc-065d4d456ea7 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - type: object - required: - - admin_id - properties: - admin_id: - type: string - description: The unique identifier for the admin which is given - by Intercom. - example: '123' - examples: - successful: - summary: successful - value: - admin_id: 991267973 - ticket_not_found: - summary: Ticket not found - value: - admin_id: 991267978 - tag_not_found: - summary: Tag not found - value: - admin_id: 991267983 - "/tickets/{ticket_id}/linked_conversations": - post: - summary: Link a conversation to a ticket - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: ticket_id - in: path - description: The unique identifier for the tracker ticket which is given - by Intercom. - example: '64619700005694' - required: true - schema: - type: string - tags: - - Tickets - operationId: linkConversationToTicket - description: | - Link a conversation to an existing tracker ticket. The conversation can be - a regular conversation or one that has been converted into a customer ticket. - - Use this when related conversations surface after a tracker ticket has - already been created. The ticket in the path must be a tracker ticket, and - `conversation_id` in the body is the conversation (or customer ticket) to - link to it. This returns the linked conversation. - - A tracker ticket can have up to 2,500 linked conversations; once that - limit is reached, further requests return `linked_conversation_limit_exceeded`. - - Requires the `write_tickets` OAuth scope. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: conversation - id: '204' - created_at: 1734537715 - updated_at: 1734537740 - source: - type: conversation - id: '403918350' - delivered_as: admin_initiated - subject: '' - body: "

Customer report

" - author: - type: admin - id: '991267645' - name: Ciaran176 Lee - email: admin176@email.com - attachments: [] - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1261bb69f9f2193bba7 - external_id: '70' - open: true - state: open - linked_objects: - type: list - total_count: 1 - has_more: false - data: - - type: ticket - id: '207' - category: Tracker - schema: - "$ref": "#/components/schemas/conversation" - '400': - description: Bad request - content: - application/json: - examples: - Not a tracker ticket: - value: - type: error.list - request_id: 4f2d9c1a-7b3e-4a6c-9d21-8e5f0c2b1a34 - errors: - - code: invalid_ticket_type - message: Only tracker tickets support linking conversations - Already linked to a tracker: - value: - type: error.list - request_id: 5a3e0d2b-8c4f-4b7d-ae32-9f6a1d3c2b45 - errors: - - code: already_linked_to_tracker - message: A conversation can only have one tracker ticket - Linked conversation limit exceeded: - value: - type: error.list - request_id: 6b4f1e3c-9d50-4c8e-bf43-0a7b2e4d3c56 - errors: - - code: linked_conversation_limit_exceeded - message: Ticket has reached the maximum number of conversations - that can be linked - Missing conversation_id: - value: - type: error.list - request_id: 7c5a2f4d-ae61-4d9f-c054-1b8c3f5e4d67 - errors: - - code: parameter_not_found - message: conversation_id not specified - schema: - "$ref": "#/components/schemas/error" - '404': - description: Not found - content: - application/json: - examples: - Ticket not found: - value: - type: error.list - request_id: 8d6b3a5e-bf72-4ea0-d165-2c9d4a6f5e78 - errors: - - code: ticket_not_found - message: Ticket not found - Conversation not found: - value: - type: error.list - request_id: 9e7c4b6f-c083-4fb1-e276-3d0e5b7a6f89 - errors: - - code: conversation_not_found - message: Conversation not found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: af8d5c70-d194-40c2-f387-4e1f6c8b7091 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - type: object - required: - - conversation_id - properties: - conversation_id: - type: string - description: The unique identifier (given by Intercom) for the - conversation or customer ticket to link to the tracker ticket. - example: '204' - examples: - successful: - summary: Link a conversation to a tracker ticket - value: - conversation_id: '204' - "/tickets/{ticket_id}/linked_conversations/{id}": - delete: - summary: Unlink a conversation from a ticket - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: ticket_id - in: path - description: The unique identifier for the tracker ticket which is given - by Intercom. - example: '64619700005694' - required: true - schema: - type: string - - name: id - in: path - description: The unique identifier (given by Intercom) for the linked conversation - or customer ticket to unlink. - example: '204' - required: true - schema: - type: string - tags: - - Tickets - operationId: unlinkConversationFromTicket - description: | - Unlink a conversation (or converted customer ticket) from a tracker ticket - it is currently linked to. The ticket in the path must be a tracker ticket. - This returns the conversation that was unlinked. - - Requires the `write_tickets` OAuth scope. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: conversation - id: '204' - created_at: 1734537715 - updated_at: 1734537752 - source: - type: conversation - id: '403918350' - delivered_as: admin_initiated - subject: '' - body: "

Customer report

" - author: - type: admin - id: '991267645' - name: Ciaran176 Lee - email: admin176@email.com - attachments: [] - redacted: false - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f1261bb69f9f2193bba7 - external_id: '70' - open: true - state: open - linked_objects: - type: list - total_count: 0 - has_more: false - data: [] - schema: - "$ref": "#/components/schemas/conversation" - '400': - description: Bad request - content: - application/json: - examples: - Not a tracker ticket: - value: - type: error.list - request_id: b09e6d81-e2a5-41d3-9498-5f2a7d9c8102 - errors: - - code: invalid_ticket_type - message: Only tracker tickets support unlinking conversations - schema: - "$ref": "#/components/schemas/error" - '404': - description: Not found - content: - application/json: - examples: - Ticket not found: - value: - type: error.list - request_id: c1af7e92-f3b6-42e4-8509-6a3b8e0d9213 - errors: - - code: ticket_not_found - message: Ticket not found - Conversation not linked: - value: - type: error.list - request_id: d2b08fa3-04c7-43f5-9610-7b4c9f1e0324 - errors: - - code: conversation_not_found - message: Conversation is not linked to this ticket - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: e3c19fb4-150d-44a6-a721-8c5daf2f1435 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/tickets": - post: - summary: Create a ticket - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Tickets - description: You can create a new ticket. - operationId: createTicket - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: ticket - id: '626' - ticket_id: '33' - ticket_attributes: - _default_title_: example - _default_description_: there is a problem - ticket_state: - type: ticket_state - id: '8481' - category: submitted - internal_label: Submitted - external_label: Submitted - ticket_type: - type: ticket_type - id: '88' - name: my-ticket-type-23 - description: my ticket type description is awesome. - icon: "\U0001F981" - workspace_id: this_is_an_id688_that_should_be_at_least_ - archived: false - created_at: 1734537943 - updated_at: 1734537943 - is_internal: false - ticket_type_attributes: - type: list - data: - - type: ticket_type_attribute - id: '196' - workspace_id: this_is_an_id688_that_should_be_at_least_ - name: _default_title_ - description: ola - data_type: string - input_options: - order: 0 - required_to_create: true - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: false - default: false - ticket_type_id: 88 - archived: false - created_at: 1734537943 - updated_at: 1734537943 - - type: ticket_type_attribute - id: '197' - workspace_id: this_is_an_id688_that_should_be_at_least_ - name: _default_description_ - description: ola - data_type: string - input_options: - order: 0 - required_to_create: true - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: false - default: false - ticket_type_id: 88 - archived: false - created_at: 1734537943 - updated_at: 1734537943 - category: Back-office - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f2d81bb69f9f2193bc54 - external_id: '70' - admin_assignee_id: 0 - team_assignee_id: 0 - created_at: 1734537944 - updated_at: 1734537946 - ticket_parts: - type: ticket_part.list - ticket_parts: - - type: ticket_part - id: '175' - part_type: ticket_state_updated_by_admin - ticket_state: submitted - previous_ticket_state: submitted - created_at: 1734537945 - updated_at: 1734537945 - author: - id: '991267999' - type: bot - name: Fin - email: operator+this_is_an_id688_that_should_be_at_least_@intercom.io - attachments: [] - redacted: false - total_count: 1 - open: true - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - category: Back-office - is_shared: false - schema: - "$ref": "#/components/schemas/ticket" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: c7bf358f-135e-48d7-8286-a4988a8a1d9b - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - allOf: - - "$ref": "#/components/schemas/create_ticket_request" - properties: - skip_notifications: - type: boolean - description: Option to disable notifications when a Ticket is created. - example: true - examples: - successful_response: - summary: Successful response - value: - ticket_type_id: 88 - contacts: - - id: 6762f2d81bb69f9f2193bc54 - ticket_attributes: - _default_title_: example - _default_description_: there is a problem - "/tickets/enqueue": - post: - summary: Enqueue create ticket - description: Enqueues ticket creation for asynchronous processing, returning if the job was enqueued successfully to be processed. We attempt to perform a best-effort validation on inputs before tasks are enqueued. If the given parameters are incorrect, we won't enqueue the job. - operationId: enqueueCreateTicket - tags: - - Tickets - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - requestBody: - content: - application/json: - schema: - allOf: - - "$ref": "#/components/schemas/create_ticket_request" - properties: - skip_notifications: - type: boolean - description: Option to disable notifications when a Ticket is created. - example: true - examples: - successful_response: - summary: Successful response - value: - ticket_type_id: 88 - contacts: - - id: 6762f2d81bb69f9f2193bc54 - ticket_attributes: - _default_title_: example - _default_description_: there is a problem - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: job - id: "20" - status: pending - url: https://api.intercom.io/jobs/status/20 - resource_type: ticket - resource_id: null - resource_url: null - schema: - "$ref": "#/components/schemas/jobs" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: c7bf358f-135e-48d7-8286-a4988a8a1d9b - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '400': - description: Bad Request - content: - application/json: - examples: - Bad Request: - value: - type: error.list - request_id: c7bf358f-135e-48d7-8286-a4988a8a1456 - errors: - - code: parameter_invalid - message: "Missing required ticket attributes" - schema: - "$ref": "#/components/schemas/error" - "/tickets/{id}": - put: - summary: Update a ticket - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: | - The unique identifier for the ticket which is given by Intercom. - {% admonition type="info" name="Not the Inbox ticket ID" %} - This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. - {% /admonition %} - schema: - type: string - tags: - - Tickets - operationId: updateTicket - description: You can update a ticket. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: ticket - id: '627' - ticket_id: '34' - ticket_attributes: - _default_title_: example - _default_description_: there is a problem - ticket_state: - type: ticket_state - id: '8498' - category: in_progress - internal_label: In progress - external_label: In progress - ticket_type: - type: ticket_type - id: '90' - name: my-ticket-type-25 - description: my ticket type description is awesome. - icon: "\U0001F981" - workspace_id: this_is_an_id692_that_should_be_at_least_ - archived: false - created_at: 1734537948 - updated_at: 1734537948 - is_internal: false - ticket_type_attributes: - type: list - data: - - type: ticket_type_attribute - id: '200' - workspace_id: this_is_an_id692_that_should_be_at_least_ - name: _default_title_ - description: ola - data_type: string - input_options: - order: 0 - required_to_create: true - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: false - default: false - ticket_type_id: 90 - archived: false - created_at: 1734537949 - updated_at: 1734537949 - - type: ticket_type_attribute - id: '201' - workspace_id: this_is_an_id692_that_should_be_at_least_ - name: _default_description_ - description: ola - data_type: string - input_options: - order: 0 - required_to_create: true - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: false - default: false - ticket_type_id: 90 - archived: false - created_at: 1734537949 - updated_at: 1734537949 - category: Back-office - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f2dd1bb69f9f2193bc55 - external_id: 8df1fa21-b41d-4621-9229-d6f7a3a590ce - admin_assignee_id: 991268013 - team_assignee_id: 0 - created_at: 1734537950 - updated_at: 1734537955 - ticket_parts: - type: ticket_part.list - ticket_parts: - - type: ticket_part - id: '176' - part_type: ticket_state_updated_by_admin - ticket_state: submitted - previous_ticket_state: submitted - created_at: 1734537951 - updated_at: 1734537951 - author: - id: '991268011' - type: admin - name: Ciaran477 Lee - email: admin477@email.com - attachments: [] - redacted: false - - type: ticket_part - id: '177' - part_type: ticket_attribute_updated_by_admin - created_at: 1734537953 - updated_at: 1734537953 - author: - id: '991268012' - type: bot - name: Fin - email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io - attachments: [] - redacted: false - updated_attribute_data: - attribute: - type: "attribute" - id: "10" - label: "Photo" - value: - type: "value" - id: [2] - label: ["photo.png"] - - type: ticket_part - id: '178' - part_type: ticket_attribute_updated_by_admin - created_at: 1734537953 - updated_at: 1734537953 - author: - id: '991268012' - type: bot - name: Fin - email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io - attachments: [] - redacted: false - updated_attribute_data: - attribute: - type: "attribute" - id: "7" - label: "Progress" - value: - type: "value" - id: "Fast" - label: "Fast" - - type: ticket_part - id: '179' - part_type: ticket_state_updated_by_admin - ticket_state: in_progress - previous_ticket_state: submitted - created_at: 1734537954 - updated_at: 1734537954 - author: - id: '991268012' - type: bot - name: Fin - email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io - attachments: [] - redacted: false - app_package_code: test-integration - - type: ticket_part - id: '180' - part_type: assignment - created_at: 1734537954 - updated_at: 1734537954 - assigned_to: - type: admin - id: '991268013' - author: - id: '991268011' - type: admin - name: Ciaran477 Lee - email: admin477@email.com - attachments: [] - redacted: false - - type: ticket_part - id: '181' - part_type: snoozed - created_at: 1734537955 - updated_at: 1734537955 - author: - id: '991268012' - type: bot - name: Fin - email: operator+this_is_an_id692_that_should_be_at_least_@intercom.io - attachments: [] - redacted: false - total_count: 6 - open: true - snoozed_until: 1734627600 - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - category: Back-office - is_shared: false - schema: - "$ref": "#/components/schemas/ticket" - '404': - description: Assignee not found - content: - application/json: - examples: - Admin not found: - value: - type: error.list - request_id: f9757add-b48a-4519-a6e0-04b2ef9c8c6c - errors: - - code: assignee_not_found - message: Assignee not found - Assignee not found: - value: - type: error.list - request_id: 39cf6495-768c-450c-a2c4-c9c3c4ea2e01 - errors: - - code: assignee_not_found - message: Assignee not found - '400': - description: Ticket state id is not valid or is not associated with the - ticket type. - content: - application/json: - examples: - Ticket state id is not valid or is not associated with the ticket type.: - value: - type: error.list - request_id: 28b71de1-b451-433a-a08c-845f2b1736b6 - errors: - - code: ticket_state_id_invalid - message: Ticket state id is not valid or is not associated with - the ticket type - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 17db783e-1e43-41c9-b4db-0c05da78a909 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - allOf: - - "$ref": "#/components/schemas/update_ticket_request" - properties: - skip_notifications: - type: boolean - description: Option to disable notifications when a Ticket is updated. - example: true - examples: - successful_response: - summary: Successful response - value: - ticket_attributes: - _default_title_: example - _default_description_: there is a problem - admin_id: 991268011 - assignee_id: 991268013 - open: true - snoozed_until: 1673609604 - ticket_state_id: 8498 - admin_not_found: - summary: Admin not found - value: - ticket_attributes: - _default_title_: example - _default_description_: there is a problem - admin_id: 991268011 - assignee_id: 991268013 - ticket_state_id: 8506 - assignee_not_found: - summary: Assignee not found - value: - ticket_attributes: - _default_title_: example - _default_description_: there is a problem - admin_id: 991268011 - assignee_id: 991268013 - ticket_state_id: 8514 - ticket_state_id_is_not_valid_or_is_not_associated_with_the_ticket_type: - summary: Ticket state id is not valid or is not associated with the - ticket type. - value: - ticket_state_id: 0 - get: - summary: Retrieve a ticket - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: | - The unique identifier for the ticket which is given by Intercom. - {% admonition type="info" name="Not the Inbox ticket ID" %} - This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. - {% /admonition %} - schema: - type: string - tags: - - Tickets - operationId: getTicket - description: You can fetch the details of a single ticket. - responses: - '200': - description: Ticket found - content: - application/json: - examples: - Ticket found: - value: - type: ticket - id: '631' - ticket_id: '38' - ticket_attributes: - _default_title_: attribute_value - _default_description_: - ticket_state: - type: ticket_state - id: '8537' - category: submitted - internal_label: Submitted - external_label: Submitted - ticket_type: - type: ticket_type - id: '95' - name: my-ticket-type-30 - description: my ticket type description is awesome. - icon: "\U0001F981" - workspace_id: this_is_an_id702_that_should_be_at_least_ - archived: false - created_at: 1734537973 - updated_at: 1734537973 - is_internal: false - ticket_type_attributes: - type: list - data: - - type: ticket_type_attribute - id: '210' - workspace_id: this_is_an_id702_that_should_be_at_least_ - name: _default_title_ - description: ola - data_type: string - input_options: - order: 0 - required_to_create: true - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: false - default: false - ticket_type_id: 95 - archived: false - created_at: 1734537973 - updated_at: 1734537973 - - type: ticket_type_attribute - id: '211' - workspace_id: this_is_an_id702_that_should_be_at_least_ - name: _default_description_ - description: ola - data_type: string - input_options: - order: 0 - required_to_create: true - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: false - default: false - ticket_type_id: 95 - archived: false - created_at: 1734537973 - updated_at: 1734537973 - category: Back-office - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f2f61bb69f9f2193bc59 - external_id: b16afa36-2637-4880-adee-a46d145bc27f - admin_assignee_id: 0 - team_assignee_id: 0 - created_at: 1734537974 - updated_at: 1734537976 - ticket_parts: - type: ticket_part.list - ticket_parts: - - type: ticket_part - id: '185' - part_type: ticket_state_updated_by_admin - ticket_state: submitted - previous_ticket_state: submitted - created_at: 1734537975 - updated_at: 1734537975 - author: - id: '991268047' - type: admin - name: Ciaran509 Lee - email: admin509@email.com - attachments: [] - redacted: false - app_package_code: test-integration - total_count: 1 - open: true - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - category: Back-office - is_shared: false - schema: - "$ref": "#/components/schemas/ticket" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: d719ad4f-5ae2-492f-88d6-98ba0a9ab6cc - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - delete: - summary: Delete a ticket - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: | - The unique identifier for the ticket which is given by Intercom. - {% admonition type="info" name="Not the Inbox ticket ID" %} - This is the internal `id` field from the API response, not the `ticket_id` displayed in the Intercom Inbox (e.g., #12345). Use the `id` value from the ticket object returned by the API. - {% /admonition %} - schema: - type: string - tags: - - Tickets - operationId: deleteTicket - description: | - {% admonition type="warning" name="Irreversible operation" %} - Deleting a ticket is permanent and cannot be reversed. - {% /admonition %} - - Deleting a ticket permanently removes it from the inbox. All sensitive data is deleted, including admin and user replies, ticket attributes, uploads, and related content. The ticket will still appear in reporting, though some data may be incomplete due to the deletion. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - id: '632' - object: ticket - deleted: true - schema: - "$ref": "#/components/schemas/ticket_deleted" - '404': - description: Ticket not found - content: - application/json: - examples: - Ticket not found: - value: - type: error.list - request_id: 34a070f1-122e-42dc-a94e-9b86768df26c - errors: - - code: ticket_not_found - message: Ticket not found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 50348131-55cd-4ca1-a65f-de093b232adb - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '403': - description: API plan restricted - content: - application/json: - examples: - API plan restricted: - value: - type: error.list - request_id: 7a80b950-b392-499f-85db-ea7c6c424d37 - errors: - - code: api_plan_restricted - message: Active subscription needed. - schema: - "$ref": "#/components/schemas/error" - "/tickets/{ticket_id}/change_type": - post: - summary: Change ticket type - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: ticket_id - in: path - required: true - description: The unique identifier for the ticket which is given by Intercom. - schema: - type: string - tags: - - Tickets - operationId: changeTicketType - description: You can change the type of a ticket. The new ticket type must - be in the same category as the current type. Attributes matching by name - and type are automatically transferred from the old type; values provided - in ticket_attributes override transferred values. - responses: - '200': - description: Successful response - content: - application/json: - examples: - Successful response: - value: - type: ticket - id: '494' - ticket_id: '53' - ticket_attributes: - _default_title_: example - _default_description_: having a problem - ticket_state: submitted - ticket_type: - type: ticket_type - id: '1234' - name: my-new-ticket-type - description: my ticket type description is awesome. - icon: "\U0001F981" - workspace_id: this_is_an_id664_that_should_be_at_least_ - archived: false - created_at: 1719493065 - updated_at: 1719493065 - is_internal: false - ticket_type_attributes: - type: list - data: [] - category: Back-office - contacts: - type: contact.list - contacts: - - type: contact - id: 667d61c88a68186f43bafe93 - external_id: '71' - admin_assignee_id: 0 - team_assignee_id: 0 - created_at: 1719493065 - updated_at: 1719493068 - ticket_parts: - type: ticket_part.list - ticket_parts: - - type: ticket_part - id: '136' - part_type: ticket_state_updated_by_admin - ticket_state: submitted - previous_ticket_state: submitted - created_at: 1719493065 - updated_at: 1719493065 - author: - id: '991267920' - type: bot - name: Operator - email: operator+this_is_an_id664_that_should_be_at_least_@intercom.io - attachments: [] - redacted: false - total_count: 1 - open: true - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - category: Back-office - is_shared: false - ticket_state_internal_label: Submitted - ticket_state_external_label: Submitted - schema: - "$ref": "#/components/schemas/ticket" - '400': - description: Bad request - content: - application/json: - examples: - Missing ticket_type_id: - value: - type: error.list - request_id: a35b00e4-97b2-4b5d-a6f9-e82c4d8f7e12 - errors: - - code: parameter_not_found - message: ticket_type_id is a required parameter - Missing ticket_state_id: - value: - type: error.list - request_id: b46c11f5-08c3-5c6e-b7a3-f93d5e8f9f23 - errors: - - code: parameter_not_found - message: ticket_state_id is a required parameter - Same ticket type: - value: - type: error.list - request_id: f90a55j9-42g7-9g0i-f1e7-jd7h9i2j3j67 - errors: - - code: parameter_invalid - message: Cannot change to the same ticket type - Ticket state not in new ticket type: - value: - type: error.list - request_id: g01b66k0-53h8-0h1j-g2f8-ke8i0j3k4k78 - errors: - - code: parameter_invalid - message: Ticket custom state doesn't belong to the new ticket type - Unknown ticket attribute: - value: - type: error.list - request_id: h12c77l1-64i9-1i2k-h3g9-lf9j1k4l5l89 - errors: - - code: parameter_invalid - message: 'Extra attributes provided that are not found on ticket type: - Priority' - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: c57d22g6-19d4-6d7f-c8b4-ga4e6f9g0g34 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - '404': - description: Ticket not found - content: - application/json: - examples: - Ticket not found: - value: - type: error.list - request_id: e79f44i8-31f6-8f9h-e0d6-ic6g8h1i2i56 - errors: - - code: not_found - message: Resource Not Found - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/change_ticket_type_request" - examples: - successful_response: - summary: Successful response - value: - ticket_type_id: '1234' - ticket_state_id: '5678' - "/tickets/search": - post: - summary: Search tickets - operationId: searchTickets - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Tickets - description: | - You can search for multiple tickets by the value of their attributes in order to fetch exactly which ones you want. - - To search for tickets, you send a `POST` request to `https://api.intercom.io/tickets/search`. - - This will accept a query object in the body which will define your filters. - {% admonition type="warning" name="Optimizing search queries" %} - 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. - See the [pagination section](https://developers.intercom.com/docs/build-an-integration/learn-more/rest-apis/pagination/#example-search-conversations-request) for more details on how to use the `starting_after` param. - {% /admonition %} - - ### Nesting & Limitations - - 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 multiples there can be: - - There's a limit of max 2 nested filters - - There's a limit of max 15 filters for each AND or OR group - - ### Accepted Fields - - Most keys listed as part of the Ticket model are 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 `"foobar"`). - The `source.body` field is unique as the search will not be performed against the entire value, but instead against every element of the value separately. For example, when searching for a conversation with a `"I need support"` body - the query should contain a `=` operator with the value `"support"` for such conversation to be returned. A query with a `=` operator and a `"need support"` value will not yield a result. - - | Field | Type | - | :---------------------------------------- | :--------------------------------------------------------------------------------------- | - | id | String | - | created_at | Date (UNIX timestamp) | - | updated_at | Date (UNIX timestamp) | - | title | String | - | description | String | - | category | String | - | ticket_type_id | String | - | contact_ids | String | - | teammate_ids | String | - | admin_assignee_id | Integer | - | team_assignee_id | Integer | - | open | Boolean | - | state | String | - | snoozed_until | Date (UNIX timestamp) | - | ticket_attribute.{id} | String or Boolean or Date (UNIX timestamp) or Float or Integer | - - {% admonition type="info" name="Searching by Category" %} - When searching for tickets by the **`category`** field, specific terms must be used instead of the category names: - * For **Customer** category tickets, use the term `request`. - * For **Back-office** category tickets, use the term `task`. - * For **Tracker** category tickets, use the term `tracker`. - {% /admonition %} - - ### Accepted Operators - - {% admonition type="info" name="Searching based on `created_at`" %} - You may use the `<=` or `>=` operators to search by `created_at`. - {% /admonition %} - - 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 | - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: ticket.list - pages: - type: pages - page: 1 - per_page: 5 - total_pages: 1 - total_count: 1 - tickets: - - type: ticket - id: '633' - ticket_id: '40' - ticket_attributes: - _default_title_: attribute_value - _default_description_: - ticket_state: - type: ticket_state - id: '8577' - category: submitted - internal_label: Submitted - external_label: Submitted - ticket_type: - type: ticket_type - id: '100' - name: my-ticket-type-35 - description: my ticket type description is awesome. - icon: "\U0001F981" - workspace_id: this_is_an_id712_that_should_be_at_least_ - archived: false - created_at: 1734537989 - updated_at: 1734537989 - is_internal: false - ticket_type_attributes: - type: list - data: - - type: ticket_type_attribute - id: '220' - workspace_id: this_is_an_id712_that_should_be_at_least_ - name: _default_title_ - description: ola - data_type: string - input_options: - order: 0 - required_to_create: true - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: false - default: false - ticket_type_id: 100 - archived: false - created_at: 1734537989 - updated_at: 1734537989 - - type: ticket_type_attribute - id: '221' - workspace_id: this_is_an_id712_that_should_be_at_least_ - name: _default_description_ - description: ola - data_type: string - input_options: - order: 0 - required_to_create: true - required_to_create_for_contacts: false - visible_on_create: true - visible_to_contacts: false - default: false - ticket_type_id: 100 - archived: false - created_at: 1734537989 - updated_at: 1734537989 - category: Back-office - contacts: - type: contact.list - contacts: - - type: contact - id: 6762f3061bb69f9f2193bc5b - external_id: 9b913927-c084-4391-b1db-098341b5ffe3 - admin_assignee_id: 0 - team_assignee_id: 0 - created_at: 1734537990 - updated_at: 1734537992 - ticket_parts: - type: ticket_part.list - ticket_parts: - - type: ticket_part - id: '188' - part_type: ticket_state_updated_by_admin - ticket_state: submitted - previous_ticket_state: submitted - created_at: 1734537991 - updated_at: 1734537991 - author: - id: '991268079' - type: admin - name: Ciaran539 Lee - email: admin539@email.com - attachments: [] - redacted: false - total_count: 1 - open: true - linked_objects: - type: list - data: [] - total_count: 0 - has_more: false - category: Back-office - is_shared: false - schema: - "$ref": "#/components/schemas/ticket_list" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/search_request" - examples: - successful: - summary: successful - value: - query: - operator: AND - value: - - field: created_at - operator: ">" - value: '1306054154' - pagination: - per_page: 5 - "/visitors": - put: - summary: Update a visitor - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Visitors - operationId: updateVisitor - description: | - Sending a PUT request to `/visitors` will result in an update of an existing Visitor. - - **Option 1.** You can update a visitor by passing in the `user_id` of the visitor in the Request body. - - **Option 2.** You can update a visitor by passing in the `id` of the visitor in the Request body. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: visitor - id: 6762f30c1bb69f9f2193bc5e - user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 - anonymous: true - email: '' - phone: - name: Gareth Bale - pseudonym: Violet Suitcase - avatar: - type: avatar - image_url: https://static.intercomassets.com/app/pseudonym_avatars_2019/violet-suitcase.png - app_id: this_is_an_id716_that_should_be_at_least_ - companies: - type: company.list - companies: [] - location_data: {} - last_request_at: - created_at: 1734537996 - remote_created_at: 1734537996 - signed_up_at: 1734537996 - updated_at: 1734537997 - session_count: 0 - social_profiles: - type: social_profile.list - social_profiles: [] - owner_id: - unsubscribed_from_emails: false - marked_email_as_spam: false - has_hard_bounced: false - tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] - custom_attributes: {} - referrer: - utm_campaign: - utm_content: - utm_medium: - utm_source: - utm_term: - do_not_track: - schema: - "$ref": "#/components/schemas/visitor" - '404': - description: visitor Not Found - content: - application/json: - examples: - visitor Not Found: - value: - type: error.list - request_id: 6a6d5522-54e2-437d-8fd0-1109686af965 - errors: - - code: not_found - message: Visitor Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 3f474ec4-4e61-42ee-9acc-eac64982e393 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/update_visitor_request" - examples: - successful: - summary: successful - value: - id: 6762f30c1bb69f9f2193bc5e - name: Gareth Bale - visitor_not_found: - summary: visitor Not Found - value: - user_id: fail - name: Christian Fail - get: - summary: Retrieve a visitor with User ID - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: user_id - in: query - description: The user_id of the Visitor you want to retrieve. - required: true - schema: - type: string - tags: - - Visitors - operationId: retrieveVisitorWithUserId - description: You can fetch the details of a single visitor. - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: visitor - id: 6762f3101bb69f9f2193bc64 - user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 - anonymous: true - email: '' - phone: - name: - pseudonym: - avatar: - type: avatar - image_url: - app_id: this_is_an_id722_that_should_be_at_least_ - companies: - type: company.list - companies: [] - location_data: {} - last_request_at: - created_at: 1734538000 - remote_created_at: 1734538000 - signed_up_at: 1734538000 - updated_at: 1734538000 - session_count: 0 - social_profiles: - type: social_profile.list - social_profiles: [] - owner_id: - unsubscribed_from_emails: false - marked_email_as_spam: false - has_hard_bounced: false - tags: - type: tag.list - tags: [] - segments: - type: segment.list - segments: [] - custom_attributes: {} - referrer: - utm_campaign: - utm_content: - utm_medium: - utm_source: - utm_term: - do_not_track: - schema: - "$ref": "#/components/schemas/visitor" - '404': - description: Visitor not found - content: - application/json: - examples: - Visitor not found: - value: - type: error.list - request_id: 3c1b017d-39fb-4d13-8cc9-540ad0d37106 - errors: - - code: not_found - message: Visitor Not Found - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: 1d7f49b3-10bc-4bf8-a28a-1ac95de3a6ff - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - "/visitors/convert": - post: - summary: Convert a visitor - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Visitors - operationId: convertVisitor - description: "You can merge a Visitor to a Contact of role type `lead` or `user`.\n\n> - \U0001F4D8 What happens upon a visitor being converted?\n>\n> If the User - exists, then the Visitor will be merged into it, the Visitor deleted and the - User returned. If the User does not exist, the Visitor will be converted to - a User, with the User identifiers replacing it's Visitor identifiers.\n" - responses: - '200': - description: successful - content: - application/json: - examples: - successful: - value: - type: contact - id: 6762f3141bb69f9f2193bc6b - workspace_id: this_is_an_id728_that_should_be_at_least_ - external_id: - role: user - email: foo@bar.com - phone: - formatted_phone: - name: - avatar: - owner_id: - social_profiles: - type: list - data: [] - has_hard_bounced: false - marked_email_as_spam: false - unsubscribed_from_emails: false - created_at: 1734538004 - updated_at: 1734538005 - signed_up_at: 1734538004 - last_seen_at: - last_replied_at: - last_contacted_at: - last_email_opened_at: - last_email_clicked_at: - language_override: - browser: - browser_version: - browser_language: - os: - location: - type: location - country: - region: - city: - country_code: - continent_code: - android_app_name: - android_app_version: - android_device: - android_os_version: - android_sdk_version: - android_last_seen_at: - ios_app_name: - ios_app_version: - ios_device: - ios_os_version: - ios_sdk_version: - ios_last_seen_at: - custom_attributes: {} - tags: - type: list - data: [] - url: "/contacts/6762f3141bb69f9f2193bc6b/tags" - total_count: 0 - has_more: false - notes: - type: list - data: [] - url: "/contacts/6762f3141bb69f9f2193bc6b/notes" - total_count: 0 - has_more: false - companies: - type: list - data: [] - url: "/contacts/6762f3141bb69f9f2193bc6b/companies" - total_count: 0 - has_more: false - opted_out_subscription_types: - type: list - data: [] - url: "/contacts/6762f3141bb69f9f2193bc6b/subscriptions" - total_count: 0 - has_more: false - opted_in_subscription_types: - type: list - data: [] - url: "/contacts/6762f3141bb69f9f2193bc6b/subscriptions" - total_count: 0 - has_more: false - utm_campaign: - utm_content: - utm_medium: - utm_source: - utm_term: - referrer: - enabled_push_messaging: - schema: - "$ref": "#/components/schemas/contact" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: b3e71306-0600-41e4-9f44-83b52906d2b7 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - content: - application/json: - schema: - "$ref": "#/components/schemas/convert_visitor_request" - examples: - successful: - summary: successful - value: - visitor: - user_id: 3ecf64d0-9ed1-4e9f-88e1-da7d6e6782f3 - user: - email: foo@bar.com - type: user - "/brands": - get: - summary: List all brands - tags: - - Brands - operationId: listBrands - description: | - Retrieves all brands for the workspace, including the default brand. - The default brand id always matches the workspace - parameters: - - name: Intercom-Version - in: header - schema: - $ref: "#/components/schemas/intercom_version" - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: "#/components/schemas/brand_list" - examples: - Successful response: - value: - type: list - data: - - type: brand - id: "tlkp1d91" - name: "Default Brand" - is_default: true - created_at: 1673778600 - updated_at: 1711031100 - help_center_id: "11" - default_address_settings_id: "13" - - type: brand - id: "3" - name: "Premium Brand" - is_default: false - created_at: 1686387300 - updated_at: 1709229600 - help_center_id: "10" - default_address_settings_id: "15" - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: "#/components/schemas/error" - "/brands/{id}": - get: - summary: Retrieve a brand - tags: - - Brands - operationId: retrieveBrand - description: Fetches a specific brand by its unique identifier - parameters: - - name: Intercom-Version - in: header - schema: - $ref: "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier of the brand - schema: - type: string - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: "#/components/schemas/brand" - examples: - Successful response: - value: - type: brand - id: "15" - name: "Premium Brand" - is_default: false - created_at: 1686387300 - updated_at: 1709229600 - help_center_id: "20" - default_address_settings_id: "15" - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: "#/components/schemas/error" - '404': - description: Brand not found - content: - application/json: - schema: - $ref: "#/components/schemas/error" - examples: - Brand not found: - value: - type: error.list - request_id: "req_12345" - errors: - - code: not_found - message: Brand not found - "/emails": - get: - summary: List all email settings - tags: - - Emails - operationId: listEmails - description: Lists all sender email address settings for the workspace - parameters: - - name: Intercom-Version - in: header - schema: - $ref: "#/components/schemas/intercom_version" - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: "#/components/schemas/email_list" - examples: - Successful response: - value: - type: list - data: - - type: email_setting - id: "1" - email: "support@company.com" - verified: true - domain: "company.com" - brand_id: "9" - forwarding_enabled: true - forwarded_email_last_received_at: 1710498600 - created_at: 1692530400 - updated_at: 1710498600 - - type: email_setting - id: "2" - email: "hello@company.com" - verified: true - domain: "company.com" - brand_id: "10" - forwarding_enabled: false - forwarded_email_last_received_at: null - created_at: 1683729000 - updated_at: 1701424500 - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: "#/components/schemas/error" - "/emails/{id}": - get: - summary: Retrieve an email setting - tags: - - Emails - operationId: retrieveEmail - description: Fetches a specific email setting by its unique identifier - parameters: - - name: Intercom-Version - in: header - schema: - $ref: "#/components/schemas/intercom_version" - - name: id - in: path - required: true - description: The unique identifier of the email setting - schema: - type: string - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: "#/components/schemas/email_setting" - examples: - Successful response: - value: - type: email_setting - id: "10" - email: "support@company.com" - verified: true - domain: "company.com" - brand_id: "15" - forwarding_enabled: true - forwarded_email_last_received_at: 1710498600 - created_at: 1692530400 - updated_at: 1710498600 - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: "#/components/schemas/error" - '404': - description: Email setting not found - content: - application/json: - schema: - $ref: "#/components/schemas/error" - examples: - Email setting not found: - value: - type: error.list - request_id: "req_12345" - errors: - - code: not_found - message: Email setting not found - "/fin_voice/register": - post: - summary: Register a Fin Voice call - description: | - Register a Fin Voice call with Intercom. This endpoint creates an external reference - that links an external call identifier to an Intercom call and conversation. - - The call can be from different sources: - - AWS Connect (default) - - Five9 - - Zoom Phone - operationId: registerFinVoiceCall - tags: - - Calls - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/register_fin_voice_call_request" - responses: - '200': - description: successful - content: - application/json: - schema: - $ref: "#/components/schemas/ai_call_response" - '400': - description: bad request - missing phone_number or call_id - content: - application/json: - schema: - $ref: "#/components/schemas/error" - '409': - description: conflict - duplicate call registration - content: - application/json: - schema: - $ref: "#/components/schemas/error" - default: - description: Unexpected error - content: - application/json: - schema: - $ref: "#/components/schemas/error" - "/fin_voice/collect/{id}": - get: - summary: Collect Fin Voice call by ID - description: Retrieve information about a Fin Voice call using the external reference ID. - operationId: collectFinVoiceCallById - tags: - - Calls - parameters: - - name: id - in: path - required: true - description: The external reference ID - schema: - type: integer - responses: - '200': - description: successful - content: - application/json: - schema: - $ref: "#/components/schemas/ai_call_response" - '404': - description: not found - external reference not found or not matched - content: - application/json: - schema: - $ref: "#/components/schemas/error" - default: - description: Unexpected error - content: - application/json: - schema: - $ref: "#/components/schemas/error" - "/fin_voice/external_id/{external_id}": - get: - summary: Collect Fin Voice call by external ID - description: Retrieve information about a Fin Voice call using the external call identifier. - operationId: collectFinVoiceCallByExternalId - tags: - - Calls - parameters: - - name: external_id - in: path - required: true - description: The external call identifier from the call provider - schema: - type: string - responses: - '200': - description: successful - content: - application/json: - schema: - $ref: "#/components/schemas/ai_call_response" - '404': - description: not found - external reference not found or not matched - content: - application/json: - schema: - $ref: "#/components/schemas/error" - default: - description: Unexpected error - content: - application/json: - schema: - $ref: "#/components/schemas/error" - "/fin_voice/phone_number/{phone_number}": - get: - summary: Collect Fin Voice call by phone number - description: | - Retrieve information about a Fin Voice call using the phone number. - - Returns the most recent matched call for the given phone number, ordered by creation date. - operationId: collectFinVoiceCallByPhoneNumber - tags: - - Calls - parameters: - - name: phone_number - in: path - required: true - description: Phone number in E.164 format - schema: - type: string - responses: - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: "#/components/schemas/error" - '404': - description: not found - no call found for phone number or not matched - content: - application/json: - schema: - $ref: "#/components/schemas/error" - default: - description: Unexpected error - content: - application/json: - schema: - $ref: "#/components/schemas/error" - "/fin_voice/conversation/{conversation_id}": - get: - summary: Collect Fin Voice calls by conversation ID - description: | - Retrieve information about Fin Voice calls associated with a conversation. - - Returns all matched calls for the given conversation ID. A conversation may have multiple associated calls. - operationId: collectFinVoiceCallsByConversationId - tags: - - Calls - parameters: - - name: conversation_id - in: path - required: true - description: The Intercom conversation identifier - schema: - type: string - responses: - '200': - description: successful - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/ai_call_response" - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: "#/components/schemas/error" - default: - description: Unexpected error - content: - application/json: - schema: - $ref: "#/components/schemas/error" - "/fin/capabilities": - post: - summary: Discover Fin's capabilities - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Fin Agent - operationId: listFinCapabilities - description: | - Return a machine-readable, per-user list of what Fin can do for a given end user, so an - orchestrating agent can decide which endpoint to call. - - The response is audience-matched to the supplied user: each live, API-triggerable - procedure is checked against that user before being included, alongside the static - `reply` and `ask` actions. - responses: - '200': - description: Capabilities returned successfully - content: - application/json: - examples: - Successful response: - value: - version: Preview - capabilities: - - type: procedure - id: '12345' - name: Reset password - description: Walk the user through resetting their password. - endpoint: /fin/procedures/12345/run - method: POST - - type: reply - description: Reply to an in-progress Fin conversation. - endpoint: /fin/reply - method: POST - - type: ask - description: Ask Fin a single, self-contained question. - endpoint: /fin/ask - method: POST - schema: - type: object - properties: - version: - type: string - description: The API version the capabilities document was generated for. - example: Preview - capabilities: - type: array - description: The list of capabilities available to this user. - items: - type: object - properties: - type: - type: string - description: The kind of capability — `procedure` for a runnable procedure, or a static action such as `reply` or `ask`. - example: procedure - id: - type: string - description: The procedure ID. Present only when `type` is `procedure`. - example: '12345' - name: - type: string - description: The procedure name. Present only when `type` is `procedure`. - example: Reset password - description: - type: string - description: A human-readable description of the capability. - example: Walk the user through resetting their password. - endpoint: - type: string - description: The endpoint path to call to use this capability. - example: /fin/procedures/12345/run - method: - type: string - description: The HTTP method to use. - example: POST - '400': - description: Bad Request - content: - application/json: - examples: - Too many attributes: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: Cannot update more than 10 attributes at once. - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - user: - allOf: - - "$ref": "#/components/schemas/fin_agent_user" - - description: The user to list capabilities for. If no user exists for the id, one is created from the supplied details; if the user already exists, the supplied email and attributes update it. - required: - - user - examples: - Capabilities for a user: - value: - user: - id: '123456' - "/fin/ask": - post: - summary: Ask Fin - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Fin Agent - operationId: askFin - description: | - Ask Fin a single, self-contained question and receive one informational answer. - - Unlike a conversation, `/fin/ask` is non-conversational: Fin will not ask follow-up - questions, will not run procedures, and will not escalate to a human. - - Fin's answer is delivered asynchronously via the `fin_replied` event. The conversation - ends with a `complete` status — there is no `awaiting_user_reply` cycle. - responses: - '200': - description: Question accepted successfully - content: - application/json: - examples: - Successful response: - value: - conversation_id: ext-123 - user_id: user-456 - status: thinking - created_at_ms: '2025-01-24T10:00:00.123Z' - sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' - Response with attribute errors: - value: - conversation_id: ext-123 - user_id: user-456 - status: thinking - created_at_ms: '2025-01-24T10:00:00.123Z' - sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' - errors: - user: - attributes: - invalid_attr: User attribute 'invalid_attr' does not exist - schema: - type: object - properties: - conversation_id: - type: string - description: The external ID of the conversation. - example: ext-123 - user_id: - type: string - description: The ID of the user. - example: user-456 - status: - type: string - enum: - - thinking - - replying - - resolved - - complete - description: | - Fin's current status in the conversation workflow. - example: thinking - created_at_ms: - type: string - format: date-time - description: The timestamp the response was created at, with millisecond precision. - example: '2025-01-24T10:00:00.123Z' - errors: - "$ref": "#/components/schemas/fin_agent_attribute_errors" - sse_subscription_url: - type: string - description: | - Optional. A URL to subscribe to Server-Sent Events (SSE) for this conversation, if SSE is enabled. The access token is a JWT with a 3-minute TTL. The token is revoked when Fin sets the conversation to complete status. - example: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' - '400': - description: Bad Request - content: - application/json: - examples: - Conversation ID missing: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: External Conversation ID is required - User ID missing: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: User ID is required - Too many history items: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: Conversation history cannot contain more than 10 items - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - conversation_id: - type: string - description: Your external conversation ID. Fin creates a conversation for this ID. If a conversation already exists for it, use `/fin/reply` instead. - example: ext-123 - message: - "$ref": "#/components/schemas/fin_agent_message" - user: - "$ref": "#/components/schemas/fin_agent_user" - conversation_metadata: - "$ref": "#/components/schemas/fin_agent_conversation_metadata" - attachments: - type: array - description: An array of attachments to include with the message. Maximum of 10 attachments. - maxItems: 10 - items: - "$ref": "#/components/schemas/fin_agent_attachment" - required: - - conversation_id - - message - - user - examples: - Basic question: - value: - conversation_id: ext-123 - message: - author: user - body: How do I reset my password? - timestamp: '2025-01-24T10:01:20.000Z' - user: - id: '123456' - name: John Doe - email: john.doe@example.com - Question with history and attributes: - value: - conversation_id: ext-123 - message: - author: user - body: And how long does that take to apply? - timestamp: '2025-01-24T10:02:00.000Z' - user: - id: '123456' - name: John Doe - email: john.doe@example.com - attributes: - plan_type: Pro - conversation_metadata: - history: - - author: user - body: How do I reset my password? - timestamp: '2025-01-24T10:01:20.000Z' - attributes: - order_id: '98765' - "/fin/reply": - post: - summary: Reply to Fin - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Fin Agent - operationId: replyToFin - description: | - Send a follow-up message in an existing conversation. When Fin needs more information to - complete an action, it sets the conversation to `awaiting_user_reply` — send the user's - response so Fin can continue. - responses: - '200': - description: Reply sent successfully - content: - application/json: - examples: - Successful response: - value: - conversation_id: ext-123 - user_id: user-456 - status: thinking - created_at_ms: '2025-01-24T10:00:00.123Z' - sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...' - Response with attribute errors: - value: - conversation_id: ext-123 - user_id: user-456 - status: thinking - created_at_ms: '2025-01-24T10:00:00.123Z' - sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...' - errors: - user: - attributes: - invalid_attr: User attribute 'invalid_attr' does not exist - schema: - type: object - properties: - conversation_id: - type: string - description: The ID of the conversation. - example: ext-123 - user_id: - type: string - description: The ID of the user. - example: user-456 - status: - type: string - enum: - - thinking - - replying - - awaiting_user_reply - - escalated - - resolved - - complete - description: | - Fin's current status in the conversation workflow. - example: thinking - created_at_ms: - type: string - format: date-time - description: The timestamp the response was created at, with millisecond precision. - example: '2025-01-24T10:00:00.123Z' - errors: - "$ref": "#/components/schemas/fin_agent_attribute_errors" - sse_subscription_url: - type: string - description: | - Optional. A URL to subscribe to Server-Sent Events (SSE) for this conversation, if SSE is enabled. The access token is a JWT with a 3-minute TTL. The token is revoked when Fin sets the conversation to awaiting_user_reply or complete status. - example: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...' - '400': - description: Bad Request - content: - application/json: - examples: - Invalid request: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: conversation_id is required - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - conversation_id: - type: string - description: The ID of the conversation. - example: '123456' - message: - "$ref": "#/components/schemas/fin_agent_message" - user: - "$ref": "#/components/schemas/fin_agent_user" - attachments: - type: array - description: An array of attachments to include with the message. Maximum of 10 attachments. - maxItems: 10 - items: - "$ref": "#/components/schemas/fin_agent_attachment" - settings: - "$ref": "#/components/schemas/fin_agent_settings" - required: - - conversation_id - - message - - user - examples: - Basic reply: - value: - conversation_id: ext-123 - message: - author: user - body: Here's the information you requested. - timestamp: '2025-01-24T09:01:00.000Z' - user: - id: '123456' - name: John Doe - email: john.doe@example.com - Reply with settings: - value: - conversation_id: ext-123 - message: - author: user - body: Thanks, here is my order number. - timestamp: '2025-01-24T09:01:00.000Z' - user: - id: '123456' - name: Jane Smith - email: jane.smith@example.com - settings: - follow_up_questions: false - email: true - Reply with attachments: - value: - conversation_id: ext-123 - message: - author: user - body: Here's the invoice you asked for. - timestamp: '2025-01-24T09:01:00.000Z' - user: - id: '123456' - name: John Doe - email: john.doe@example.com - attachments: - - type: url - url: https://example.com/invoice.pdf - "/fin/procedures/{procedure_id}/run": - post: - summary: Run a Fin procedure - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: procedure_id - in: path - required: true - description: The ID of the procedure to run. - schema: - type: string - example: '12345' - tags: - - Fin Agent - operationId: runFinProcedure - description: | - Deterministically run a specific procedure on a new conversation. Calling this endpoint - guarantees that the named procedure runs — there is no non-deterministic routing. - - Fin's progress is delivered asynchronously via events or Server-Sent Events. If the - procedure pauses for user input, the conversation status becomes `awaiting_user_reply` — - send the user's response with [`/fin/reply`](/docs/references/preview/rest-api/api.intercom.io/fin-agent/replytofin). - responses: - '200': - description: Procedure run started successfully - content: - application/json: - examples: - Successful response: - value: - conversation_id: ext-123 - user_id: user-456 - procedure_id: '12345' - status: thinking - created_at_ms: '2025-01-24T10:00:00.123Z' - sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' - Response with attribute errors: - value: - conversation_id: ext-123 - user_id: user-456 - procedure_id: '12345' - status: thinking - created_at_ms: '2025-01-24T10:00:00.123Z' - sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' - errors: - user: - attributes: - invalid_attr: User attribute 'invalid_attr' does not exist - schema: - type: object - properties: - conversation_id: - type: string - description: The ID of the conversation. - example: ext-123 - user_id: - type: string - description: The ID of the user. - example: user-456 - procedure_id: - type: string - description: The ID of the procedure that was run. - example: '12345' - status: - type: string - enum: - - thinking - - replying - - awaiting_user_reply - - escalated - - resolved - - complete - description: | - Fin's current status in the conversation workflow. - example: thinking - created_at_ms: - type: string - format: date-time - description: The timestamp the response was created at, with millisecond precision. - example: '2025-01-24T10:00:00.123Z' - errors: - "$ref": "#/components/schemas/fin_agent_attribute_errors" - sse_subscription_url: - type: string - description: | - Optional. A URL to subscribe to Server-Sent Events (SSE) for this conversation, if SSE is enabled. The access token is a JWT with a 3-minute TTL. The token is revoked when Fin sets the conversation to awaiting_user_reply or complete status. - example: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' - '400': - description: Bad Request - content: - application/json: - examples: - Procedure not found: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: Procedure not found - Procedure not live: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: Procedure is not live - Procedure has no API trigger: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: Procedure does not have an API trigger - No Fin profile: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: No Fin profile is configured to handle this conversation. Configure a Fin profile and retry. - Conversation already exists: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: Fin session already exists for this conversation. Please use /reply to continue the conversation. - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - conversation_id: - type: string - description: Your external conversation ID. Fin creates a conversation for this ID. If a conversation already exists for it, use `/fin/reply` instead. - example: ext-123 - user: - "$ref": "#/components/schemas/fin_agent_user" - message: - "$ref": "#/components/schemas/fin_agent_message" - conversation_metadata: - type: object - description: Metadata about the conversation. Only attributes are accepted (no history). - properties: - attributes: - type: object - description: | - A hash of conversation attributes. Limit to 10 attributes. - additionalProperties: true - example: - order_id: '98765' - settings: - type: object - description: Optional settings to control Fin's behaviour for this procedure run. - properties: - email: - type: boolean - default: false - description: | - When `true`, Fin formats its replies as email-style responses. Defaults to `false` (chat-style). - example: true - required: - - conversation_id - - user - examples: - Basic procedure run: - value: - conversation_id: ext-123 - user: - id: '123456' - name: John Doe - email: john.doe@example.com - Procedure run with trigger message and attributes: - value: - conversation_id: ext-123 - user: - id: '123456' - name: John Doe - email: john.doe@example.com - message: - author: agent - body: Starting your refund request. - conversation_metadata: - attributes: - order_id: '98765' - settings: - email: true - "/fin/start": - post: - summary: Start a conversation with Fin - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - tags: - - Fin Agent - operationId: startFinConversation - x-badges: - - name: Legacy - color: '#6B7280' - description: | - {% admonition type="info" name="Legacy — conversational mode" %} - `/fin/start` powers the conversational model, where your own UI drives a back-and-forth with Fin. This endpoint is no longer actively developed and is maintained only for existing integrations — new functionality lands on the orchestration endpoints. - {% /admonition %} - - Initialize Fin by passing it the user's message along with conversation history and user details. - - These additional pieces of context will be used by Fin to provide a better and more contextual answer to the user. - - Once Fin is initialized, it progresses through a series of statuses such as *thinking*, *replying*, *awaiting_user_reply*, or *resolved* before ending with a status of *complete*. - - During this workflow, the client should allow Fin to continue uninterrupted until a final *complete* status is returned, at which point control of the conversation passes back to the client. - - Events can be received via webhooks or Server-Sent Events (SSE) using the `sse_subscription_url` in the response. - responses: - '200': - description: Fin conversation started successfully - content: - application/json: - examples: - Successful response: - value: - conversation_id: ext-123 - user_id: user-456 - status: thinking - created_at_ms: '2025-01-24T10:00:00.123Z' - sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' - Response with attribute errors: - value: - conversation_id: ext-123 - user_id: user-456 - status: thinking - created_at_ms: '2025-01-24T10:00:00.123Z' - sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' - errors: - user: - attributes: - invalid_attr: User attribute 'invalid_attr' does not exist - conversation: - attributes: - bad_attr: Conversation attribute 'bad_attr' does not exist - schema: - type: object - properties: - conversation_id: - type: string - description: The ID of the conversation. - example: ext-123 - user_id: - type: string - description: The ID of the user. - example: user-456 - status: - type: string - enum: - - thinking - - replying - - awaiting_user_reply - - escalated - - resolved - - complete - description: | - Fin's current status in the conversation workflow. - example: thinking - created_at_ms: - type: string - format: date-time - description: The timestamp the response was created at, with millisecond precision. - example: '2025-01-24T10:00:00.123Z' - errors: - "$ref": "#/components/schemas/fin_agent_attribute_errors" - sse_subscription_url: - type: string - description: | - Optional. A URL to subscribe to Server-Sent Events (SSE) for this conversation, if SSE is enabled. The access token is a JWT with a 3-minute TTL. The token is revoked when Fin sets the conversation to awaiting_user_reply or complete status. - example: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' - '400': - description: Bad Request - content: - application/json: - examples: - Invalid request: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: parameter_invalid - message: conversation_id is required - schema: - "$ref": "#/components/schemas/error" - '401': - description: Unauthorized - content: - application/json: - examples: - Unauthorized: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: unauthorized - message: Access Token Invalid - schema: - "$ref": "#/components/schemas/error" - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - conversation_id: - type: string - description: The ID of the conversation that is calling Fin via this API. - example: ext-123 - message: - "$ref": "#/components/schemas/fin_agent_message" - user: - "$ref": "#/components/schemas/fin_agent_user" - attachments: - type: array - description: An array of attachments to include with the message. Maximum of 10 attachments. - maxItems: 10 - items: - "$ref": "#/components/schemas/fin_agent_attachment" - conversation_metadata: - "$ref": "#/components/schemas/fin_agent_conversation_metadata" - settings: - "$ref": "#/components/schemas/fin_agent_settings" - required: - - conversation_id - - message - - user - examples: - Basic request: - value: - conversation_id: ext-123 - message: - author: user - body: How can I see my account details? - timestamp: '2025-01-24T10:01:20.000Z' - user: - id: '123456' - name: John Doe - email: john.doe@example.com - Request with settings: - value: - conversation_id: ext-123 - message: - author: user - body: How can I resolve my outstanding invoice? - timestamp: '2025-01-24T10:01:20.000Z' - user: - id: '123456' - name: Jane Smith - email: jane.smith@example.com - settings: - follow_up_questions: false - email: true - Request with conversation history: - value: - conversation_id: ext-123 - message: - author: user - body: How can I see my account details? - timestamp: '2025-01-24T10:01:20.000Z' - user: - id: '123456' - name: John Doe - email: john.doe@example.com - attributes: - plan_type: Pro - subscription_status: active - conversation_metadata: - history: - - author: user - body: I need help - timestamp: '2025-01-24T10:00:01Z' - - author: agent - body: What do you need help with? - timestamp: '2025-01-24T10:01:00Z' - attributes: - priority_level: high - department: sales - Request with attachments: - value: - conversation_id: ext-123 - message: - author: user - body: Here is a screenshot of the issue - timestamp: '2025-01-24T10:01:20.000Z' - user: - id: '123456' - name: John Doe - email: john.doe@example.com - attachments: - - type: url - url: https://example.com/document.pdf - - type: file - name: screenshot.png - content_type: image/png - data: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk... - "/procedures/{conversation_id}/collect_agent_input": - post: - summary: Submit human input to a Fin Procedure HITL step - parameters: - - name: Intercom-Version - in: header - schema: - "$ref": "#/components/schemas/intercom_version" - - name: conversation_id - in: path - required: true - description: The ID of the conversation where the HITL step was triggered. - example: '215473853299345' - schema: - type: string - tags: - - Procedures - operationId: collectProcedureAgentInput - description: | - Submit human-collected input to a Fin Procedure that is paused at a Human in the Loop (HITL) step. - - When a procedure reaches a HITL step with the API channel enabled, Intercom sends a `procedure.hitl_notification.created` webhook. Use the `callback_url` from that webhook payload to call this endpoint with the collected attribute values. - - The `step_id` must match the one from the webhook payload, and `attribute_values` must include a value for every attribute listed in `attributes_to_collect`. - - {% admonition type="info" name="Authentication" %} - This endpoint requires an OAuth token with the `write_conversations` scope. The admin associated with the token must have access to the conversation. - {% /admonition %} - - {% admonition type="warning" name="Feature access" %} - This endpoint requires the Procedures HITL API feature to be enabled for your workspace. - {% /admonition %} - requestBody: - required: true - content: - application/json: - schema: - "$ref": "#/components/schemas/collect_agent_input_request" - examples: - Submit boolean and list values: - value: - step_id: d5b81f72-adb9-4317-b973-75b3c3624c09 - attribute_values: - - identifier: workflow_local_variables.72c5a6b3-3cce-41d8-8e30-14da40791958 - value: true - - identifier: workflow_local_variables.5adb55fb-f549-44a0-8ee9-7e652ad77c25 - value: 85f00ba7-558c-4b02-a397-6f5c3659941c - Submit string value: - value: - step_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - attribute_values: - - identifier: workflow_local_variables.11111111-2222-3333-4444-555555555555 - value: Approved by manager - responses: - '200': - description: Successful response — the procedure resumes with the provided - values. - content: - application/json: - examples: - Successful response: - value: {} - schema: - type: object - '401': - "$ref": "#/components/responses/Unauthorized" - '403': - description: Forbidden - content: - application/json: - examples: - Admin lacks conversation access: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: forbidden - message: Admin does not have access to this conversation - Feature not enabled: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: forbidden - message: Procedures HITL API is not enabled for your app. - schema: - "$ref": "#/components/schemas/error" - '404': - description: Not Found - content: - application/json: - examples: - Resource not found: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: not_found - message: Resource Not Found - HITL request expired: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: not_found - message: This HITL request has expired - schema: - "$ref": "#/components/schemas/error" - '409': - description: Conflict - content: - application/json: - examples: - Already fulfilled: - value: - type: error.list - request_id: b68959ea-6328-4f70-83cb-e7913dba1542 - errors: - - code: conflict - message: This HITL request has already been fulfilled - schema: - "$ref": "#/components/schemas/error" -components: - schemas: - office_hours_time_interval: - type: object - title: Office Hours Time Interval - x-tags: - - Office Hours - description: A single open interval. For schedules, `start_minute` and `end_minute` - are minute offsets from the start of the week (Monday 00:00 = 0), in the range - 0 to 10080. For exceptions, they are minute offsets from midnight on `exception_date`, - in the range 0 to 1440. - properties: - start_minute: - type: integer - description: Minute the interval starts. For schedules, offset from the start - of the week (Monday 00:00 = 0); for exceptions, offset from midnight on - `exception_date`. - example: 540 - end_minute: - type: integer - description: Minute the interval ends. For schedules, offset from the start - of the week (Monday 00:00 = 0); for exceptions, offset from midnight on - `exception_date`. - example: 1020 - day_of_week: - type: integer - readOnly: true - description: Derived day of the week the interval falls on (0 = Monday … 6 - = Sunday). For exceptions, this is derived from `exception_date`. - example: 0 - office_hours_schedule: - type: object - title: Office Hours Schedule - x-tags: - - Office Hours - description: An office hours schedule defines the recurring weekly hours during - which the workspace is open. - properties: - type: - type: string - description: The type of the object - always `office_hours_schedule`. - example: office_hours_schedule - id: - type: string - description: The unique identifier for the office hours schedule. - example: '123' - name: - type: string - description: The name of the office hours schedule. - example: Standard Support Hours - time_zone_name: - type: string - description: The IANA time zone the schedule's hours are evaluated in. - example: America/New_York - time_intervals: - type: array - description: The open intervals that make up the weekly schedule. - items: - "$ref": "#/components/schemas/office_hours_time_interval" - twenty_four_seven: - type: boolean - description: Whether the schedule is open 24/7. - example: false - created_at: - type: integer - description: The time the schedule was created as a Unix timestamp. - example: 1717200000 - updated_at: - type: integer - description: The time the schedule was last updated as a Unix timestamp. - example: 1717200000 - office_hours_schedule_list: - type: object - title: Office Hours Schedule List - description: A list of office hours schedules. - properties: - type: - type: string - description: The type of the object - always `office_hours_schedule.list`. - example: office_hours_schedule.list - data: - type: array - description: An array of office hours schedules. - items: - "$ref": "#/components/schemas/office_hours_schedule" - office_hours_exception: - type: object - title: Office Hours Exception - x-tags: - - Office Hours - description: An exception overrides a schedule's regular hours on a specific date, - such as a public holiday. - properties: - type: - type: string - description: The type of the object - always `office_hours_exception`. - example: office_hours_exception - id: - type: string - description: The unique identifier for the office hours exception. - example: '456' - office_hours_schedule_id: - type: string - description: The unique identifier for the schedule this exception belongs to. - example: '123' - exception_date: - type: string - format: date - description: The date the exception applies to, in `YYYY-MM-DD` format. - example: '2026-12-25' - exception_type: - type: string - description: '`closed` means the workspace is closed all day; `custom_hours` - replaces the regular hours with `time_intervals`.' - enum: - - closed - - custom_hours - example: closed - name: - type: string - nullable: true - description: An optional name for the exception. - example: Christmas Day - time_intervals: - type: array - nullable: true - description: The open intervals for the exception date. `null` when `exception_type` - is `closed`. - items: - "$ref": "#/components/schemas/office_hours_time_interval" - recurring_annually: - type: boolean - description: Whether the exception repeats every year on the same date. - example: true - created_at: - type: integer - description: The time the exception was created as a Unix timestamp. - example: 1717200000 - updated_at: - type: integer - description: The time the exception was last updated as a Unix timestamp. - example: 1717200000 - office_hours_exception_list: - type: object - title: Office Hours Exception List - description: A list of office hours exceptions. - properties: - type: - type: string - description: The type of the object - always `office_hours_exception.list`. - example: office_hours_exception.list - data: - type: array - description: An array of office hours exceptions. - items: - "$ref": "#/components/schemas/office_hours_exception" - create_office_hours_schedule_request: - type: object - title: Create Office Hours Schedule Request - description: The request payload for creating an office hours schedule. - required: - - name - - time_zone_name - - time_intervals - properties: - name: - type: string - description: The name of the office hours schedule. - example: Standard Support Hours - time_zone_name: - type: string - description: The IANA time zone the schedule's hours are evaluated in. - example: America/New_York - time_intervals: - type: array - description: The open intervals for the schedule. `start_minute` and `end_minute` - must be on a 15-minute boundary. - items: - "$ref": "#/components/schemas/office_hours_time_interval" - update_office_hours_schedule_request: - type: object - title: Update Office Hours Schedule Request - description: The request payload for updating an office hours schedule. Only the - provided fields are updated. - properties: - name: - type: string - description: The name of the office hours schedule. - example: Extended Support Hours - time_zone_name: - type: string - description: The IANA time zone the schedule's hours are evaluated in. - example: America/New_York - time_intervals: - type: array - description: The open intervals for the schedule. `start_minute` and `end_minute` - must be on a 15-minute boundary. - items: - "$ref": "#/components/schemas/office_hours_time_interval" - create_office_hours_exception_request: - type: object - title: Create Office Hours Exception Request - description: The request payload for creating an office hours exception. Omit - `time_intervals` when `exception_type` is `closed`. - required: - - exception_date - - exception_type - properties: - exception_date: - type: string - format: date - description: The date the exception applies to, in `YYYY-MM-DD` format. - example: '2026-12-25' - exception_type: - type: string - enum: - - closed - - custom_hours - description: The type of exception. - example: closed - name: - type: string - description: An optional name for the exception. - example: Christmas Day - time_intervals: - type: array - nullable: true - description: The open intervals for the exception date. Required for `custom_hours`; - omit for `closed`. - items: - "$ref": "#/components/schemas/office_hours_time_interval" - recurring_annually: - type: boolean - description: Whether the exception repeats every year on the same date. - example: true - update_office_hours_exception_request: - type: object - title: Update Office Hours Exception Request - description: The request payload for updating an office hours exception. Only - the provided fields are updated. - properties: - exception_date: - type: string - format: date - description: The date the exception applies to, in `YYYY-MM-DD` format. - example: '2026-12-25' - exception_type: - type: string - enum: - - closed - - custom_hours - description: The type of exception. - example: custom_hours - name: - type: string - description: An optional name for the exception. - example: Christmas Day (reduced hours) - time_intervals: - type: array - nullable: true - description: The open intervals for the exception date. Required for `custom_hours`; - omit for `closed`. - items: - "$ref": "#/components/schemas/office_hours_time_interval" - recurring_annually: - type: boolean - description: Whether the exception repeats every year on the same date. - example: true - datetime: - oneOf: - - title: string - type: string - format: date-time - description: A date and time following the ISO8601 notation. - - title: integer - type: integer - description: A date and time as UNIX timestamp notation. - activity_log: - title: Activity Log - type: object - description: Activities performed by Admins. - nullable: true - properties: - id: - type: string - description: The id representing the activity. - example: '6' - performed_by: - type: object - description: Details about the Admin involved in the activity. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `admin`. - example: admin - id: - type: string - description: The id representing the admin. - example: '1295' - email: - type: string - description: The email of the admin. - example: john@example.com - ip: - type: string - description: The IP address of the admin. - example: 198.51.100.255 - metadata: - "$ref": "#/components/schemas/activity_log_metadata" - created_at: - type: integer - format: date-time - description: The time the activity was created. - example: 1671028894 - activity_type: - type: string - enum: - - admin_conversation_assignment_limit_change - - admin_ticket_assignment_limit_change - - admin_avatar_change - - admin_away_mode_change - - admin_deletion - - admin_deprovisioned - - admin_impersonation_end - - admin_impersonation_start - - admin_invite_change - - admin_invite_creation - - admin_invite_deletion - - admin_login_failure - - admin_login_success - - admin_logout - - admin_password_reset_request - - admin_password_reset_success - - admin_permission_change - - admin_provisioned - - admin_two_factor_auth_change - - admin_unauthorized_sign_in_method - - app_admin_join - - app_authentication_method_change - - app_data_deletion - - app_data_export - - app_google_sso_domain_change - - app_identity_verification_change - - app_name_change - - app_outbound_address_change - - app_package_installation - - app_package_token_regeneration - - app_package_uninstallation - - app_team_creation - - app_team_deletion - - app_team_membership_modification - - app_timezone_change - - app_webhook_creation - - app_webhook_deletion - - articles_in_messenger_enabled_change - - bulk_delete - - bulk_export - - campaign_deletion - - campaign_state_change - - conversation_part_deletion - - conversation_pdf_export - - conversation_topic_change - - conversation_topic_creation - - conversation_topic_deletion - - customer_facing_name_change - - help_center_settings_change - - inbound_conversations_change - - inbox_access_change - - message_deletion - - message_state_change - - messenger_look_and_feel_change - - messenger_search_required_change - - messenger_spaces_change - - office_hours_change - - role_change - - role_creation - - role_deletion - - ruleset_activation_title_preview - - ruleset_creation - - ruleset_deletion - - search_browse_enabled_change - - search_browse_required_change - - seat_change - - seat_revoke - - security_settings_change - - temporary_expectation_change - - upfront_email_collection_change - - welcome_message_change - - hide_csat_from_agents_setting_change - example: app_name_change - activity_description: - type: string - description: A sentence or two describing the activity. - example: Admin updated the app's name to "My App". - activity_log_event_type_list: - title: Activity Log Event Types - type: object - x-tags: - - Admins - description: A list of all activity log event types. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `activity_log_event_type.list`. - example: activity_log_event_type.list - event_types: - type: array - description: An array of activity log event type strings. - items: - type: string - example: - - admin_login_success - - admin_logout - - app_name_change - activity_log_list: - title: Paginated Response - type: object - description: A paginated list of activity logs. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `activity_log.list`. - example: activity_log.list - pages: - "$ref": "#/components/schemas/cursor_pages" - activity_logs: - type: array - description: An array of activity logs - items: - "$ref": "#/components/schemas/activity_log" - activity_log_metadata: - title: Activity Log Metadata - type: object - description: Additional data provided about Admin activity. - nullable: true - properties: - sign_in_method: - type: string - nullable: true - description: The way the admin signed in. - example: email_password - external_id: - type: string - nullable: true - description: The unique identifier for the contact which is provided by - the Client. - example: f3b87a2e09d514c6c2e79b9a - away_mode: - type: boolean - nullable: true - description: The away mode status which is set to true when away and false - when returned. - example: true - away_status_reason: - type: string - nullable: true - description: The reason the Admin is away. - example: "\U0001F60C On a break" - reassign_conversations: - type: boolean - nullable: true - description: Indicates if conversations should be reassigned while an Admin - is away. - example: false - source: - type: string - nullable: true - description: The action that initiated the status change. - example: 'admin update from web - Admin id: 93' - auto_changed: - type: string - nullable: true - description: Indicates if the status was changed automatically or manually. - example: false - update_by: - type: integer - nullable: true - description: The ID of the Admin who initiated the activity. - example: 93 - update_by_name: - type: string - nullable: true - description: The name of the Admin who initiated the activity. - example: Joe Example - conversation_assignment_limit: - type: integer - nullable: true - description: The conversation assignment limit value for an admin. - example: 15 - ticket_assignment_limit: - type: integer - nullable: true - description: The ticket assignment limit value for an admin. - example: 20 - addressable_list: - title: Addressable List - type: object - nullable: false - description: A list used to access other resources from a parent model. - properties: - type: - type: string - format: uri - description: The addressable object type - example: note - id: - type: string - description: The id of the addressable object - example: '123' - url: - type: string - format: uri - description: Url to get more company resources for this contact - example: "/contacts/5ba682d23d7cf92bef87bfd4/notes" - admin: - title: Admin - type: object - x-tags: - - Admins - description: Admins are teammate accounts that have access to a workspace. - nullable: true - properties: - type: - type: string - description: String representing the object's type. Always has the value - `admin`. - example: admin - id: - type: string - description: The id representing the admin. - example: '1295' - name: - type: string - description: The name of the admin. - example: Joe Example - email: - type: string - description: The email of the admin. - example: jdoe@example.com - job_title: - type: string - description: The job title of the admin. - example: Associate - away_mode_enabled: - type: boolean - description: Identifies if this admin is currently set in away mode. - example: false - away_mode_reassign: - type: boolean - description: Identifies if this admin is set to automatically reassign new - conversations to the apps default inbox. - example: false - away_status_reason_id: - type: integer - nullable: true - description: The unique identifier of the away status reason - example: 12345 - has_inbox_seat: - type: boolean - description: Identifies if this admin has a paid inbox seat to restrict/allow - features that require them. - example: true - team_ids: - type: array - description: This object represents the avatar associated with the admin. - example: - - 814865 - items: - type: integer - avatar: - type: string - format: uri - nullable: true - description: Image for the associated team or teammate - example: https://picsum.photos/200/300 - team_priority_level: - "$ref": "#/components/schemas/team_priority_level" - role: - type: object - nullable: true - description: The role assigned to this admin. Only present if the admin has - a role assigned. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `role`. - example: role - id: - type: string - description: The id of the role. - example: '1' - name: - type: string - description: The name of the role. - example: Support Agent - admin_list: - title: Admins - type: object - description: A list of admins associated with a given workspace. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `admin.list`. - example: admin.list - admins: - type: array - description: A list of admins associated with a given workspace. - items: - "$ref": "#/components/schemas/admin" - admin_priority_level: - title: Admin Priority Level - type: object - nullable: true - description: Admin priority levels for the team - properties: - primary_admin_ids: - type: array - description: The primary admin ids for the team - nullable: true - example: - - 493881 - items: - type: integer - secondary_admin_ids: - type: array - description: The secondary admin ids for the team - nullable: true - example: - - 814865 - items: - type: integer - admin_reply_conversation_request: - title: Admin Reply - type: object - description: Payload of the request to reply on behalf of an admin - properties: - message_type: - type: string - enum: - - comment - - note - - quick_reply - example: comment - type: - type: string - enum: - - admin - example: admin - body: - type: string - description: The text body of the reply. Notes accept some HTML formatting. - Must be present for comment and note message types. - example: Hello there! - admin_id: - type: string - description: The id of the admin who is authoring the comment. - example: '3156780' - created_at: - type: integer - description: The time the reply was created. If not provided, the current - time will be used. - example: 1590000000 - reply_options: - title: Quick Reply Options - type: array - description: The quick reply options to display to the end user. Must be present for quick_reply - message types. - items: - "$ref": "#/components/schemas/quick_reply_option" - attachment_urls: - type: array - description: A list of image URLs that will be added as attachments. You - can include up to 10 URLs. - items: - type: string - format: uri - maxItems: 10 - attachment_files: - type: array - description: A list of files that will be added as attachments. You can - include up to 10 files - items: - "$ref": "#/components/schemas/conversation_attachment_files" - maxItems: 10 - skip_unsnooze: - type: boolean - description: When true, prevents the reply from waking a snoozed conversation. - Applies to 'comment' and 'note' message types. The part is still created - and visible in the conversation thread. - example: true - required: - - message_type - - type - - admin_id - admin_reply_ticket_request: - title: Admin Reply on ticket - type: object - description: Payload of the request to reply on behalf of an admin - properties: - message_type: - type: string - enum: - - comment - - note - - quick_reply - example: comment - type: - type: string - enum: - - admin - example: admin - body: - type: string - description: The text body of the reply. Notes accept some HTML formatting. - Must be present for comment and note message types. - example: Hello there! - admin_id: - type: string - description: The id of the admin who is authoring the comment. - example: '3156780' - created_at: - type: integer - description: The time the reply was created. If not provided, the current - time will be used. - example: 1590000000 - reply_options: - title: Quick Reply Options - type: array - description: The quick reply options to display. Must be present for quick_reply - message types. - items: - title: Quick Reply Option - type: object - properties: - text: - type: string - description: The text to display in this quick reply option. - uuid: - type: string - format: uuid - description: A unique identifier for this quick reply option. This - value will be available within the metadata of the comment ticket - part that is created when a user clicks on this reply option. - required: - - text - - uuid - attachment_urls: - type: array - description: A list of image URLs that will be added as attachments. You - can include up to 10 URLs. - items: - type: string - format: uri - maxItems: 10 - attachment_files: - type: array - description: A list of files that will be added as attachments. You can - include up to 10 files. If both attachment_files and attachment_urls are - provided, attachment_files takes precedence. - items: - "$ref": "#/components/schemas/conversation_attachment_files" - maxItems: 10 - cross_post: - type: boolean - description: If set to true, the note will be cross-posted to all linked - conversations. Only applicable to note message types on back-office tickets. - example: true - required: - - message_type - - type - - admin_id - admin_with_app: - title: Admin - type: object - description: Admins are the teammate accounts that have access to a workspace - nullable: true - properties: - type: - type: string - description: String representing the object's type. Always has the value - `admin`. - example: admin - id: - type: string - description: The id representing the admin. - example: '1295' - name: - type: string - description: The name of the admin. - example: Joe Example - email: - type: string - description: The email of the admin. - example: jdoe@example.com - job_title: - type: string - description: The job title of the admin. - example: Associate - away_mode_enabled: - type: boolean - description: Identifies if this admin is currently set in away mode. - example: false - away_mode_reassign: - type: boolean - description: Identifies if this admin is set to automatically reassign new - conversations to the apps default inbox. - example: false - has_inbox_seat: - type: boolean - description: Identifies if this admin has a paid inbox seat to restrict/allow - features that require them. - example: true - team_ids: - type: array - description: This is a list of ids of the teams that this admin is part - of. - example: - - 814865 - items: - type: integer - avatar: - type: object - description: This object represents the avatar associated with the admin. - properties: - type: - type: string - description: This is a string that identifies the type of the object. - It will always have the value `avatar`. - default: avatar - example: avatar - image_url: - type: string - format: uri - nullable: true - description: This object represents the avatar associated with the admin. - example: https://example.com/avatar.png - email_verified: - type: boolean - description: Identifies if this admin's email is verified. - nullable: true - example: true - role: - type: object - nullable: true - description: The role assigned to this admin. Only present if the admin has - a role assigned. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `role`. - example: role - id: - type: string - description: The id of the role. - example: '1' - name: - type: string - description: The name of the role. - example: Support Agent - app: - "$ref": "#/components/schemas/app" - nullable: true - description: App that the admin belongs to. - ai_agent: - title: AI Agent - type: object - x-tags: - - Ai Agent - description: Data related to AI Agent involvement in the conversation. - properties: - source_type: - type: string - nullable: true - description: The type of the source that triggered AI Agent involvement - in the conversation. - enum: - - essentials_plan_setup - - profile - - workflow - - workflow_preview - - fin_preview - example: workflow - source_title: - type: string - description: The title of the source that triggered AI Agent involvement - in the conversation. If this is `essentials_plan_setup` then it will return - `null`. - example: My AI Workflow - nullable: true - last_answer_type: - type: string - description: The type of the last answer delivered by AI Agent. If no answer - was delivered then this will return `null` - enum: - - - - ai_answer - - custom_answer - example: ai_answer - nullable: true - resolution_state: - type: string - description: The resolution state of AI Agent. If no AI or custom answer - has been delivered then this will return `null`. - enum: - - assumed_resolution - - confirmed_resolution - - escalated - - negative_feedback - - procedure_handoff - - - example: assumed_resolution - nullable: true - rating: - type: integer - description: The customer satisfaction rating given to AI Agent, from 1-5. - example: 4 - nullable: true - rating_remark: - type: string - description: The customer satisfaction rating remark given to AI Agent. - example: Very helpful! - nullable: true - created_at: - type: integer - format: date-time - description: The time when the AI agent rating was created. - example: 1663597260 - nullable: true - updated_at: - type: integer - format: date-time - description: The time when the AI agent rating was last updated. - example: 1663597260 - nullable: true - content_sources: - "$ref": "#/components/schemas/content_sources_list" - sales_agent: - title: Sales Agent - type: object - x-tags: - - Sales Agent - description: Data related to Sales Agent involvement in the conversation. - properties: - outcome: - type: string - nullable: true - description: The fixed outcome of the sales agent interaction, used for - billing and tracking. - enum: - - qualified - - disqualified - - product_discovery - - escalated_to_support - - spam - example: qualified - routing_outcome: - type: string - nullable: true - description: The identifier of the user-defined routing outcome selected - by the sales agent. - example: enterprise_sales - collected_data: - type: object - nullable: true - description: A flat key-value map of memory fields collected by the sales - agent during the conversation. - additionalProperties: - type: string - example: - email: user@example.com - company.name: Acme Inc - ai_subtopic: - title: AI Subtopic - type: object - description: An AI-generated subtopic under a topic. - properties: - type: - type: string - description: Always ai_subtopic. - example: ai_subtopic - name: - type: string - description: The name of the subtopic. - example: Payment Issues - id: - type: integer - description: The ID of the subtopic. - example: 42 - ai_topic: - title: AI Topic - type: object - description: An AI-generated topic assigned to the conversation. - properties: - type: - type: string - description: Always ai_topic. - example: ai_topic - topic_name: - type: string - description: The name of the AI-generated topic. - example: Billing - subtopics: - type: array - description: The subtopics under this topic. - items: - $ref: '#/components/schemas/ai_subtopic' - ai_topics: - title: AI Topics - type: object - x-tags: - - AI Topics - description: AI-generated topics and subtopics for the conversation. - properties: - type: - type: string - description: Always ai_topics. - example: ai_topics - topics: - type: array - description: The list of AI-generated topics for this conversation. - items: - $ref: '#/components/schemas/ai_topic' - app: - title: App - type: object - description: App is a workspace on Intercom - nullable: true - properties: - type: - type: string - description: '' - default: app - example: app - id_code: - type: string - description: The id of the app. - example: xyz789 - name: - type: string - description: The name of the app. - example: ACME - region: - type: string - description: The Intercom region the app is located in. - example: US - timezone: - type: string - description: The timezone of the region where the app is located. - example: America/Los_Angeles - created_at: - type: integer - description: When the app was created. - example: 1671465577 - identity_verification: - type: boolean - description: Whether or not the app uses identity verification. - example: false - audience: - title: Audience - type: object - x-tags: - - Audiences - description: An audience represents a group of contacts that can be targeted - by Fin. - properties: - type: - type: string - description: The type of object. - enum: - - audience - example: audience - readOnly: true - id: - type: string - description: The unique identifier representing the audience. - example: '123' - readOnly: true - name: - type: string - description: The name of the audience. - example: VIP Customers - predicates: - type: array - description: The predicates that define which contacts belong to the audience. - items: - "$ref": "#/components/schemas/predicate" - example: - - attribute: company.name - type: string - comparison: contains - value: Acme - role_predicates: - type: array - description: Role-based predicates that further filter audience membership by - contact role. - items: - "$ref": "#/components/schemas/predicate" - example: - - attribute: role - type: role - comparison: eq - value: user - created_at: - type: integer - description: The time the audience was created as a Unix timestamp. - example: 1717200000 - readOnly: true - updated_at: - type: integer - description: The time the audience was last updated as a Unix timestamp. - example: 1717200000 - readOnly: true - audience_list: - title: Audience List - type: object - description: A paginated list of audience objects. - properties: - type: - type: string - description: The type of the object. - enum: - - list - example: list - data: - type: array - description: A list of audience objects. - items: - "$ref": "#/components/schemas/audience" - total_count: - type: integer - description: The total number of audiences. - example: 2 - page: - type: integer - description: The current page number. - example: 1 - per_page: - type: integer - description: The number of results per page. - example: 50 - total_pages: - type: integer - description: The total number of pages. - example: 1 - predicate: - title: Predicate - type: object - description: A condition used to filter contacts in an audience. - properties: - attribute: - type: string - description: The attribute to filter on. - example: company.name - type: - type: string - description: The type of the attribute. - example: string - comparison: - type: string - description: The comparison operator. - example: contains - value: - type: string - description: The value to compare against. - example: Acme - article: - title: Article - type: object - x-tags: - - Articles - description: The Articles API is a central place to gather all information and - take actions on your articles. Articles can live within collections and sections, - or alternatively they can stand alone. - properties: - statistics: - nullable: true - "$ref": "#/components/schemas/article_statistics" - allOf: - - "$ref": "#/components/schemas/article_list_item" - internal_article: - title: Internal Article - type: object - x-tags: - - Articles - description: The Internal Articles API is a central place to gather all information and - take actions on your internal articles. - allOf: - - "$ref": "#/components/schemas/internal_article_list_item" - article_content: - title: Article Content - type: object - description: The Content of an Article. - nullable: true - properties: - type: - type: string - description: The type of object - `article_content` . - enum: - - - - article_content - example: article_content - nullable: true - title: - type: string - description: The title of the article. - example: How to create a new article - description: - type: string - description: The description of the article. - example: This article will show you how to create a new article. - body: - type: string - description: The body of the article in HTML. - example: This is the body of the article. - body_markdown: - type: string - nullable: true - description: The body of the article in markdown. - example: "# How to create a new article\n\nThis is the body of the article.\n" - author_id: - type: integer - description: The ID of the author of the article. - example: '5017691' - state: - type: string - description: Whether the article is `published` or is a `draft` . - enum: - - published - - draft - example: draft - created_at: - type: integer - format: date-time - description: The time when the article was created (seconds). - example: 1663597223 - updated_at: - type: integer - format: date-time - description: The time when the article was last updated (seconds). - example: 1663597260 - has_unpublished_changes: - type: boolean - description: Whether this locale's published content has unpublished - changes staged as a draft on top of its live content. - example: false - draft_updated_at: - type: integer - format: date-time - nullable: true - description: The time, in seconds, when this locale's staged draft was - last edited, or `null` when there is no staged draft. - example: 1663597260 - url: - type: string - description: The URL of the article. - example: http://intercom.test/help/en/articles/3-default-language - audience_ids: - type: array - nullable: true - description: >- - The list of audience IDs this article content is targeted to for Fin AI Agent. - On multilingual help centers this field appears per-locale inside `translated_content`. - On single-language help centers it appears at the article root level. - Empty array means no audience targeting is set. - items: - type: integer - example: - - 1 - - 2 - ai_chatbot_availability: - type: boolean - description: Whether the article is available for AI Chatbot. - example: true - ai_copilot_availability: - type: boolean - description: Whether the article is available for AI Copilot. - example: true - ai_sales_agent_availability: - type: boolean - description: Whether the article is available for AI Sales Agent. - example: true - created_by_id: - type: integer - nullable: true - readOnly: true - description: The ID of the teammate who created this content version. - example: 5017691 - updated_by_id: - type: integer - nullable: true - readOnly: true - description: The ID of the teammate who last updated this content version. - example: 5017691 - internal_article_list: - title: Internal Articles - type: object - description: This will return a list of internal articles for the App. - properties: - type: - type: string - description: The type of the object - `list`. - enum: - - list - example: list - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: A count of the total number of internal articles. - example: 1 - data: - type: array - description: An array of Internal Article objects - items: - "$ref": "#/components/schemas/internal_article_list_item" - folder: - title: Folder - type: object - x-tags: - - Folders - description: A folder for organizing content - properties: - id: - type: integer - description: The unique identifier for the folder - example: 6 - name: - type: string - description: The name of the folder - example: Product Documentation - description: - type: string - nullable: true - description: The description of the folder - example: Internal product documentation - emoji: - type: string - nullable: true - description: An emoji associated with the folder - example: "📚" - parent_folder_id: - type: integer - nullable: true - description: The ID of the parent folder, or null if this is a root folder - example: null - content_count: - type: integer - description: The number of content items in this folder - example: 5 - created_at: - type: integer - format: date-time - description: The time when the folder was created (seconds) - example: 1672928359 - updated_at: - type: integer - format: date-time - description: The time when the folder was last updated (seconds) - example: 1672928610 - deleted_folder_object: - title: Deleted Folder Object - type: object - description: Response returned when a folder is deleted - properties: - id: - type: integer - description: The unique identifier for the deleted folder - example: 6 - object: - type: string - description: The type of object - `folder`. - enum: - - folder - example: folder - deleted: - type: boolean - description: Whether the folder was successfully deleted. - example: true - article_list: - title: Articles - type: object - description: This will return a list of articles for the App. - properties: - type: - type: string - description: The type of the object - `list`. - enum: - - list - example: list - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: A count of the total number of articles. - example: 1 - data: - type: array - description: An array of Article objects - items: - "$ref": "#/components/schemas/article_list_item" - article_list_item: - title: Articles - type: object - x-tags: - - Articles - description: The data returned about your articles when you list them. - properties: - type: - type: string - description: The type of object - `article`. - enum: - - article - default: article - example: article - id: - type: string - description: The unique identifier for the article which is given by Intercom. - example: '6871119' - workspace_id: - type: string - description: The id of the workspace which the article belongs to. - example: hfi1bx4l - title: - type: string - description: The title of the article. For multilingual articles, this will - be the title of the default language's content. - example: Default language title - description: - type: string - nullable: true - description: The description of the article. For multilingual articles, - this will be the description of the default language's content. - example: Default language description - body: - type: string - nullable: true - description: The body of the article in HTML. For multilingual articles, - this will be the body of the default language's content. - example: Default language body in html - body_markdown: - type: string - nullable: true - description: The body of the article in markdown. For multilingual articles, - this will be the body of the default language's content. - example: "# Default language title\n\nDefault language body in markdown\n" - author_id: - type: integer - description: The id of the author of the article. For multilingual articles, - this will be the id of the author of the default language's content. Must - be a teammate on the help center's workspace. - example: '5017691' - state: - type: string - description: Whether the article is `published` or is a `draft`. For multilingual - articles, this will be the state of the default language's content. - enum: - - published - - draft - default: draft - example: published - created_at: - type: integer - format: date-time - description: The time when the article was created. For multilingual articles, - this will be the timestamp of creation of the default language's content - in seconds. - example: 1672928359 - updated_at: - type: integer - format: date-time - description: The time when the article was last updated. For multilingual - articles, this will be the timestamp of last update of the default language's - content in seconds. - example: 1672928610 - has_unpublished_changes: - type: boolean - description: Whether the published article has unpublished changes staged - as a draft on top of its live content. For multilingual articles this reflects the default - language's content; a pure draft (never published) reports `false`. - example: false - draft_updated_at: - type: integer - format: date-time - nullable: true - description: The time, in seconds, when the staged draft was last edited, - or `null` when there is no staged draft. - example: 1672928610 - url: - type: string - nullable: true - description: The URL of the article. For multilingual articles, this will - be the URL of the default language's content. - example: http://intercom.test/help/en/articles/3-default-language - parent_ids: - type: array - description: The ids of the article's parent collections or sections. An - article without this field stands alone. - items: - type: integer - example: - - 18 - - 19 - default_locale: - type: string - description: The default locale of the help center. This field is only returned - for multilingual help centers. - example: en - translated_content: - nullable: true - "$ref": "#/components/schemas/article_translated_content" - tags: - "$ref": "#/components/schemas/tags" - folder_id: - type: integer - nullable: true - description: The ID of the folder this article belongs to, or null if not in a folder. - example: 6 - ai_chatbot_availability: - type: boolean - description: Whether the article is available for AI Chatbot. For multilingual - articles, this will be the value of the default language's content. - example: true - ai_copilot_availability: - type: boolean - description: Whether the article is available for AI Copilot. For multilingual - articles, this will be the value of the default language's content. - example: true - ai_sales_agent_availability: - type: boolean - description: Whether the article is available for AI Sales Agent. For multilingual - articles, this will be the value of the default language's content. - example: true - created_by_id: - type: integer - nullable: true - readOnly: true - description: The ID of the teammate who created the article. For multilingual - articles, this will be the creator of the default language's content. - example: 5017691 - updated_by_id: - type: integer - nullable: true - readOnly: true - description: The ID of the teammate who last updated the article. For multilingual - articles, this will be the last editor of the default language's content. - example: 5017691 - exclude_from_article_suggestions: - type: boolean - readOnly: true - description: Whether the article is excluded from Fin AI Agent article suggestions. - example: false - help_center_audience: - type: string - nullable: true - readOnly: true - enum: - - everyone - - all_users - - all_visitors - - all_leads - - all_visitors_and_leads - - restricted - description: The audience that can view this article in the Help Center. `everyone` - means all users and visitors can view it; `restricted` indicates a custom audience - ruleset. For multilingual articles, this is the article-level audience. - example: everyone - scheduled_publish_at: - type: integer - format: date-time - nullable: true - readOnly: true - description: >- - The Unix timestamp (in seconds) at which the article is scheduled to be - published. `null` when no publish is scheduled. Mutually exclusive with - `scheduled_unpublish_at` — at most one pending schedule exists per article. - example: 1769443200 - scheduled_unpublish_at: - type: integer - format: date-time - nullable: true - readOnly: true - description: >- - The Unix timestamp (in seconds) at which the article is scheduled to be - unpublished. `null` when no unpublish is scheduled. Mutually exclusive - with `scheduled_publish_at` — at most one pending schedule exists per article. - example: 1769443200 - internal_article_list_item: - title: Internal Articles - type: object - x-tags: - - Internal Articles - description: The data returned about your internal articles when you list them. - properties: - type: - type: string - description: The type of object - `internal_article`. - enum: - - internal_article - default: internal_article - example: internal_article - id: - type: string - description: The unique identifier for the article which is given by Intercom. - example: '6871119' - title: - type: string - description: The title of the article. - body: - type: string - nullable: true - description: The body of the article in HTML. - example: Default language body in html - body_markdown: - type: string - nullable: true - description: The body of the article in markdown. - example: "# Internal Guide\n\nBody of the article in markdown\n" - owner_id: - type: integer - description: The id of the owner of the article. - example: '5017691' - author_id: - type: integer - description: The id of the author of the article. - example: '5017691' - created_at: - type: integer - format: date-time - description: The time when the article was created. - example: 1672928359 - updated_at: - type: integer - format: date-time - description: The time when the article was last updated. - example: 1672928610 - locale: - type: string - description: The default locale of the article. - example: en - folder_id: - type: integer - nullable: true - description: The ID of the folder this article belongs to, or null if not in a folder. - example: 6 - audience_ids: - type: array - nullable: true - description: >- - The list of audience IDs this internal article is targeted to for Fin AI Agent. - Empty array means no audience targeting is set. - items: - type: integer - example: - - 1 - - 2 - ai_chatbot_availability: - type: boolean - description: Whether the internal article is available for AI Chatbot (Fin). - example: true - ai_copilot_availability: - type: boolean - description: Whether the internal article is available for AI Copilot. - example: true - ai_sales_agent_availability: - type: boolean - description: Whether the internal article is available for AI Sales Agent. - example: true - tags: - "$ref": "#/components/schemas/tags" - article_search_highlights: - title: Article Search Highlights - type: object - x-tags: - - Articles - description: The highlighted results of an Article search. In the examples provided - my search query is always "my query". - properties: - article_id: - type: string - description: The ID of the corresponding article. - example: '123' - highlighted_title: - type: array - description: An Article title highlighted. - items: - type: object - description: A highlighted article title. - properties: - type: - type: string - description: The type of text - `highlight` or `plain`. - enum: - - highlight - - plain - example: 'The highlight is ' - text: - type: string - description: The text of the title. - example: my query - highlighted_summary: - type: array - description: An Article description and body text highlighted. - items: - type: array - description: An array containing the highlighted summary text split into - chunks of plain and highlighted text. - items: - type: object - description: An instance of highlighted summary text. - properties: - type: - type: string - description: The type of text - `highlight` or `plain`. - enum: - - highlight - - plain - example: 'How to highlight ' - text: - type: string - description: The text of the title. - example: my query - article_search_response: - title: Article Search Response - type: object - x-tags: - - Articles - description: The results of an Article search - properties: - type: - type: string - description: The type of the object - `list`. - enum: - - list - example: list - total_count: - type: integer - description: The total number of Articles matching the search query - example: 5 - data: - type: object - description: An object containing the results of the search. - properties: - articles: - type: array - description: An array of Article objects - items: - "$ref": "#/components/schemas/article" - highlights: - type: array - description: A corresponding array of highlighted Article content - items: - "$ref": "#/components/schemas/article_search_highlights" - pages: - "$ref": "#/components/schemas/cursor_pages" - internal_article_search_response: - title: Internal Article Search Response - type: object - x-tags: - - Internal Articles - description: The results of an Internal Article search - properties: - type: - type: string - description: The type of the object - `list`. - enum: - - list - example: list - total_count: - type: integer - description: The total number of Internal Articles matching the search query - example: 5 - data: - type: object - description: An object containing the results of the search. - properties: - internal_articles: - type: array - description: An array of Internal Article objects - items: - "$ref": "#/components/schemas/internal_article" - pages: - "$ref": "#/components/schemas/cursor_pages" - article_statistics: - title: Article Statistics - type: object - description: The statistics of an article. - nullable: true - properties: - type: - type: string - description: The type of object - `article_statistics`. - enum: - - article_statistics - default: article_statistics - example: article_statistics - views: - type: integer - description: The number of total views the article has received. - example: 10 - conversions: - type: integer - description: The number of conversations started from the article. - example: 0 - reactions: - type: integer - description: The number of total reactions the article has received. - example: 10 - happy_reaction_percentage: - type: number - format: float - description: The percentage of happy reactions the article has received - against other types of reaction. - example: 40.0 - neutral_reaction_percentage: - type: number - format: float - description: The percentage of neutral reactions the article has received - against other types of reaction. - example: 40.0 - sad_reaction_percentage: - type: number - format: float - description: The percentage of sad reactions the article has received against - other types of reaction. - example: 20.0 - fin_involvements: - type: integer - readOnly: true - description: The number of conversations in which Fin AI Agent used this article, - summed across all of the article's locales. - example: 10 - fin_resolutions: - type: integer - readOnly: true - description: The number of conversations Fin AI Agent resolved using this article, - summed across all of the article's locales. - example: 8 - fin_resolution_rate: - type: number - format: float - readOnly: true - description: The percentage of Fin AI Agent involvements that resulted in a resolution - (fin_resolutions / fin_involvements * 100). - example: 80.0 - article_translated_content: - title: Article Translated Content - type: object - description: The Translated Content of an Article. The keys are the locale codes - and the values are the translated content of the article. - nullable: true - properties: - type: - type: string - description: The type of object - article_translated_content. - enum: - - - - article_translated_content - example: article_translated_content - nullable: true - ar: - description: The content of the article in Arabic - "$ref": "#/components/schemas/article_content" - bg: - description: The content of the article in Bulgarian - "$ref": "#/components/schemas/article_content" - bs: - description: The content of the article in Bosnian - "$ref": "#/components/schemas/article_content" - ca: - description: The content of the article in Catalan - "$ref": "#/components/schemas/article_content" - cs: - description: The content of the article in Czech - "$ref": "#/components/schemas/article_content" - da: - description: The content of the article in Danish - "$ref": "#/components/schemas/article_content" - de: - description: The content of the article in German - "$ref": "#/components/schemas/article_content" - el: - description: The content of the article in Greek - "$ref": "#/components/schemas/article_content" - en: - description: The content of the article in English - "$ref": "#/components/schemas/article_content" - es: - description: The content of the article in Spanish - "$ref": "#/components/schemas/article_content" - et: - description: The content of the article in Estonian - "$ref": "#/components/schemas/article_content" - fi: - description: The content of the article in Finnish - "$ref": "#/components/schemas/article_content" - fr: - description: The content of the article in French - "$ref": "#/components/schemas/article_content" - he: - description: The content of the article in Hebrew - "$ref": "#/components/schemas/article_content" - hr: - description: The content of the article in Croatian - "$ref": "#/components/schemas/article_content" - hu: - description: The content of the article in Hungarian - "$ref": "#/components/schemas/article_content" - id: - description: The content of the article in Indonesian - "$ref": "#/components/schemas/article_content" - it: - description: The content of the article in Italian - "$ref": "#/components/schemas/article_content" - ja: - description: The content of the article in Japanese - "$ref": "#/components/schemas/article_content" - ko: - description: The content of the article in Korean - "$ref": "#/components/schemas/article_content" - lt: - description: The content of the article in Lithuanian - "$ref": "#/components/schemas/article_content" - lv: - description: The content of the article in Latvian - "$ref": "#/components/schemas/article_content" - mn: - description: The content of the article in Mongolian - "$ref": "#/components/schemas/article_content" - nb: - description: The content of the article in Norwegian - "$ref": "#/components/schemas/article_content" - nl: - description: The content of the article in Dutch - "$ref": "#/components/schemas/article_content" - pl: - description: The content of the article in Polish - "$ref": "#/components/schemas/article_content" - pt: - description: The content of the article in Portuguese (Portugal) - "$ref": "#/components/schemas/article_content" - ro: - description: The content of the article in Romanian - "$ref": "#/components/schemas/article_content" - ru: - description: The content of the article in Russian - "$ref": "#/components/schemas/article_content" - sl: - description: The content of the article in Slovenian - "$ref": "#/components/schemas/article_content" - sr: - description: The content of the article in Serbian - "$ref": "#/components/schemas/article_content" - sv: - description: The content of the article in Swedish - "$ref": "#/components/schemas/article_content" - tr: - description: The content of the article in Turkish - "$ref": "#/components/schemas/article_content" - vi: - description: The content of the article in Vietnamese - "$ref": "#/components/schemas/article_content" - pt-BR: - description: The content of the article in Portuguese (Brazil) - "$ref": "#/components/schemas/article_content" - zh-CN: - description: The content of the article in Chinese (China) - "$ref": "#/components/schemas/article_content" - zh-TW: - description: The content of the article in Chinese (Taiwan) - "$ref": "#/components/schemas/article_content" - article_version: - title: Article Version - type: object - x-tags: - - Articles - description: A historical version of an article, including its content. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `article_version`. - enum: - - article_version - example: article_version - id: - type: string - description: The unique identifier for the version. - example: '301' - article_id: - type: string - description: The unique identifier of the article this version belongs to. - example: '123' - title: - type: string - description: The title of the article at this version. - example: This is the article title - description: - type: string - nullable: true - description: The description of the article at this version. - example: '' - body: - type: string - nullable: true - description: The HTML body of the article at this version. - example:

Body of this version

- body_markdown: - type: string - nullable: true - description: The Markdown body of the article at this version. - example: | - Body of this version - author_id: - type: string - description: The id of the teammate listed as the article's author at this - version. - example: '991267502' - created_by_id: - type: string - nullable: true - description: The id of the teammate who created this version. - example: '5017691' - created_via: - type: string - description: How this version was created (for example `web`, `api`). - example: web - from_version_id: - type: string - nullable: true - description: The id of the version this version was created from, or `null` - if this is the first version. - example: '300' - state: - type: string - description: Whether this version is the currently published version of - the article (`published`) or an earlier non-live version (`draft`). - enum: - - published - - draft - example: published - created_at: - type: integer - format: date-time - description: The time the version was created, as a UTC Unix timestamp. - example: 1734537292 - updated_at: - type: integer - format: date-time - description: The time the version was last updated, as a UTC Unix timestamp. - example: 1734537292 - article_version_list: - title: Article Versions - type: object - description: A paginated list of versions of an article. - properties: - type: - type: string - description: The type of the object - `list`. - enum: - - list - example: list - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: A count of the total number of versions. - example: 2 - data: - type: array - description: An array of Article version summary objects. - items: - "$ref": "#/components/schemas/article_version_summary" - article_version_summary: - title: Article Version Summary - type: object - x-tags: - - Articles - description: A metadata summary of an article version, as returned by the version-history - list endpoint. Omits the version's body content - fetch a single version to - retrieve its `body` and `body_markdown`. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `article_version`. - enum: - - article_version - example: article_version - id: - type: string - description: The unique identifier for the version. - example: '301' - article_id: - type: string - description: The unique identifier of the article this version belongs to. - example: '123' - title: - type: string - description: The title of the article at this version. - example: This is the article title - description: - type: string - nullable: true - description: The description of the article at this version. - example: '' - author_id: - type: string - description: The id of the teammate listed as the article's author at this - version. - example: '991267502' - created_by_id: - type: string - nullable: true - description: The id of the teammate who created this version. - example: '5017691' - created_via: - type: string - description: How this version was created (for example `web`, `api`). - example: web - from_version_id: - type: string - nullable: true - description: The id of the version this version was created from, or `null` - if this is the first version. - example: '300' - state: - type: string - description: Whether this version is the currently published version of - the article (`published`) or an earlier non-live version (`draft`). - enum: - - published - - draft - example: published - created_at: - type: integer - format: date-time - description: The time the version was created, as a UTC Unix timestamp. - example: 1734537292 - assign_conversation_request: - title: Assign Conversation Request - type: object - description: Payload of the request to assign a conversation - properties: - message_type: - type: string - enum: - - assignment - example: assignment - type: - type: string - enum: - - admin - - team - example: admin - admin_id: - type: string - description: The id of the admin who is performing the action. - example: '12345' - assignee_id: - type: string - description: The `id` of the `admin` or `team` which will be assigned the - conversation. A conversation can be assigned both an admin and a team.\nSet - `0` if you want this assign to no admin or team (ie. Unassigned). - example: '4324241' - body: - type: string - description: Optionally you can send a response in the conversation when - it is assigned. - example: Let me pass you over to one of my colleagues. - required: - - message_type - - type - - admin_id - - assignee_id - attach_contact_to_conversation_request: - title: Assign Conversation Request - type: object - description: Payload of the request to assign a conversation - properties: - admin_id: - type: string - description: The `id` of the admin who is adding the new participant. - example: '12345' - customer: - type: object - oneOf: - - title: Intercom User ID - properties: - intercom_user_id: - type: string - description: The identifier for the contact as given by Intercom. - example: 6329bd9ffe4e2e91dac76188 - customer: - "$ref": "#/components/schemas/customer_request" - required: - - intercom_user_id - - title: User ID - properties: - user_id: - type: string - description: The external_id you have defined for the contact who - is being added as a participant. - example: 6329bd9ffe4e2e91dac76188 - customer: - "$ref": "#/components/schemas/customer_request" - required: - - user_id - - title: Email - properties: - email: - type: string - description: The email you have defined for the contact who is being - added as a participant. - example: winstonsmith@truth.org - customer: - "$ref": "#/components/schemas/customer_request" - required: - - email - team_metric: - type: object - description: Per-admin activity metrics within a team. - properties: - type: - type: string - example: "team_metric" - admin_id: - type: string - description: The unique identifier for the admin. - example: "123" - open: - type: integer - description: The number of open conversations assigned to the admin. - example: 5 - idle: - type: integer - description: The number of idle conversations assigned to the admin. A conversation is idle when it has been open and waiting for an admin reply longer than the idle_threshold. - example: 2 - snoozed: - type: integer - description: The number of snoozed conversations assigned to the admin. - example: 1 - team_metric_list: - type: object - description: A list of team metrics. - properties: - type: - type: string - example: "team_metric.list" - data: - type: array - items: - $ref: "#/components/schemas/team_metric" - away_status_reason: - type: object - properties: - type: - type: string - example: "away_status_reason" - id: - type: string - description: "The unique identifier for the away status reason" - label: - type: string - description: "The display text for the away status reason" - example: "On a break" - emoji: - type: string - description: "The emoji associated with the status reason" - example: "☕" - order: - type: integer - description: "The display order of the status reason" - example: 1 - deleted: - type: boolean - description: "Whether the status reason has been soft deleted" - example: false - created_at: - type: integer - description: "The Unix timestamp when the status reason was created" - example: 1734537243 - updated_at: - type: integer - description: "The Unix timestamp when the status reason was last updated" - example: 1734537243 - away_status_reason_list: - title: Away Status Reasons - type: object - description: A list of away status reasons. - properties: - type: - type: string - description: The type of the object - enum: - - list - example: list - data: - type: array - description: A list of away status reason objects. - items: - "$ref": "#/components/schemas/away_status_reason" - change_ticket_type_request: - title: Change Ticket Type Request - description: You can change the type of a Ticket - type: object - properties: - ticket_type_id: - type: string - description: The ID of the new ticket type. Must be in the same category - as the current type. - example: '1234' - ticket_state_id: - type: string - description: The ID of the ticket state for the new ticket type. - example: '5678' - ticket_attributes: - type: object - description: The attributes to set on the ticket for the new type. Attributes - matching by name and type are transferred automatically from the old type; - values provided here override the transferred values. - example: - _default_title_: example - _default_description_: having a problem - required: - - ticket_type_id - - ticket_state_id - close_conversation_request: - title: Close Conversation Request - type: object - description: Payload of the request to close a conversation - properties: - message_type: - type: string - enum: - - close - example: close - type: - type: string - enum: - - admin - example: admin - admin_id: - type: string - description: The id of the admin who is performing the action. - example: '12345' - body: - type: string - description: Optionally you can leave a message in the conversation to provide - additional context to the user and other teammates. - example: " This conversation is now closed!" - required: - - message_type - - type - - admin_id - collection: - title: Collection - type: object - x-tags: - - Help Center - description: Collections are top level containers for Articles within the Help - Center. - properties: - id: - type: string - description: The unique identifier for the collection which is given by - Intercom. - example: '6871119' - workspace_id: - type: string - description: The id of the workspace which the collection belongs to. - example: hfi1bx4l - name: - type: string - description: The name of the collection. For multilingual collections, this - will be the name of the default language's content. - example: Default language name - description: - type: string - nullable: true - description: The description of the collection. For multilingual help centers, - this will be the description of the collection for the default language. - example: Default language description - created_at: - type: integer - format: date-time - description: The time when the article was created (seconds). For multilingual - articles, this will be the timestamp of creation of the default language's - content. - example: 1672928359 - updated_at: - type: integer - format: date-time - description: The time when the article was last updated (seconds). For multilingual - articles, this will be the timestamp of last update of the default language's - content. - example: 1672928610 - url: - type: string - nullable: true - description: The URL of the collection. For multilingual help centers, this - will be the URL of the collection for the default language. - example: http://intercom.test/help/collection/name - icon: - type: string - nullable: true - description: The icon of the collection. - example: book-bookmark - order: - type: integer - description: The order of the section in relation to others sections within - a collection. Values go from `0` upwards. `0` is the default if there's - no order. - example: '1' - default_locale: - type: string - description: The default locale of the help center. This field is only returned - for multilingual help centers. - example: en - translated_content: - nullable: true - "$ref": "#/components/schemas/group_translated_content" - parent_id: - type: string - nullable: true - description: The id of the parent collection. If `null` then it is the first - level collection. - example: '6871118' - help_center_id: - type: integer - nullable: true - description: The id of the help center the collection is in. - example: '123' - help_center_redirect: - title: Help Center Redirect - type: object - x-tags: - - Help Center - description: | - A redirect maps a source URL (`from_url`) to an article or collection within a - help center, so that links to old or external URLs resolve to live content. - properties: - id: - type: string - description: The unique identifier for the redirect. - example: '26' - type: - type: string - description: The type of the object - `help_center_redirect`. - enum: - - help_center_redirect - example: help_center_redirect - from_url: - type: string - description: The source URL that is redirected. An absolute URL within the - help center's URL space. - example: http://help-center.test/lovelyhelpcenter/old-page - locale: - type: string - description: The locale of the redirect's target. For article targets this - is the bound translation's locale, which may differ from the requested - locale if no translation exists in that locale. - example: en - help_center_id: - type: string - description: The unique identifier for the help center the redirect belongs - to. - example: '7' - target_type: - type: string - description: The type of the redirect target. - enum: - - article - - collection - example: article - target_id: - type: string - description: The unique identifier of the target article or collection. For - article targets this is the Article ID. - example: '11' - created_at: - type: integer - description: The time the redirect was created as a UTC Unix timestamp. - example: 1781619405 - updated_at: - type: integer - description: The time the redirect was last updated as a UTC Unix timestamp. - example: 1781619405 - help_center_redirect_list: - title: Help Center Redirects - type: object - description: This will return a list of redirects for the help center. - properties: - type: - type: string - description: The type of the object - `list`. - enum: - - list - example: list - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: A count of the total number of redirects. - example: 1 - data: - type: array - description: An array of help center redirect objects. - items: - "$ref": "#/components/schemas/help_center_redirect" - create_help_center_redirect_request: - description: You can create a help center redirect. - type: object - title: Create Help Center Redirect Request Payload - properties: - from_url: - type: string - description: The source URL to redirect. Must be an absolute URL within the - help center's URL space. - example: http://help-center.test/lovelyhelpcenter/old-page - locale: - type: string - description: The locale of the target translation (e.g. `en`, `fr`). For - article targets this selects the ArticleContent variant. - example: en - target_type: - type: string - description: The type of the redirect target. - enum: - - article - - collection - example: article - target_id: - type: string - description: The unique identifier of the target article or collection. The - target must be a member of the help center. - example: '11' - required: - - from_url - - locale - - target_type - - target_id - deleted_help_center_redirect_object: - title: Deleted Help Center Redirect Object - type: object - description: Response returned when a redirect is deleted. - properties: - id: - type: string - description: The unique identifier for the redirect which you provided in - the URL. - example: '26' - object: - type: string - description: The type of object which was deleted. - `help_center_redirect` - enum: - - help_center_redirect - example: help_center_redirect - deleted: - type: boolean - description: Whether the redirect was deleted successfully or not. - example: true - collection_list: - title: Collections - type: object - description: This will return a list of Collections for the App. - properties: - type: - type: string - description: The type of the object - `list`. - enum: - - list - example: list - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: A count of the total number of collections. - example: 1 - data: - type: array - description: An array of collection objects - items: - "$ref": "#/components/schemas/collection" - brand: - type: object - title: Brand - description: Represents a branding configuration for the workspace - x-tags: - - Brands - properties: - type: - type: string - description: The type of object - example: brand - id: - type: string - description: Unique brand identifier. For default brand, matches the workspace ID - example: "10" - name: - type: string - description: Display name of the brand - example: "Default Brand" - is_default: - type: boolean - description: Whether this is the workspace's default brand - example: true - created_at: - type: integer - format: date-time - description: Unix timestamp of brand creation - example: 1673778600 - updated_at: - type: integer - format: date-time - description: Unix timestamp of last modification - example: 1711031100 - help_center_id: - type: string - description: Associated help center identifier - example: "10" - default_address_settings_id: - type: string - description: Default email settings ID for this brand - example: "15" - brand_list: - type: object - title: Brand List - description: A list of brands - x-tags: - - Brands - properties: - type: + conversation_id: ext-123 + message: + author: user + body: Thanks, here is my order number. + timestamp: '2025-01-24T09:01:00.000Z' + user: + id: '123456' + name: Jane Smith + email: jane.smith@example.com + settings: + follow_up_questions: false + email: true + Reply with attachments: + value: + conversation_id: ext-123 + message: + author: user + body: Here's the invoice you asked for. + timestamp: '2025-01-24T09:01:00.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + attachments: + - type: url + url: https://example.com/invoice.pdf + "/fin/procedures/{procedure_id}/run": + post: + summary: Run a Fin procedure + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: procedure_id + in: path + required: true + description: The ID of the procedure to run. + schema: type: string - description: The type of object - example: list - data: - type: array - items: - $ref: "#/components/schemas/brand" - bulk_update_contacts_request: - title: Bulk Update Contacts Request - type: object - description: Request body for bulk updating contacts. - required: - - contacts - properties: - contacts: - type: array - description: An array of contact objects to update. Each must include an `id` - and the fields to update. Maximum 100 contacts per request. - maxItems: 100 - items: - type: object - required: - - id - properties: - id: - type: string - description: The unique identifier for the contact. - example: abc123 - email: - type: string - description: The contact's email address. - example: joe@example.com - name: - type: string - description: The contact's name. - example: Joe Bloggs - language_override: - type: string - description: A preferred language setting for the contact, used by - the Intercom Messenger. - example: fr - user_id: - type: string - description: A unique identifier for the contact that you provide. Maps to the contact's external user ID. - example: '25' - phone: - type: string - description: The contact's phone number. - example: "+353871234567" - owner_id: - type: integer - description: The ID of the teammate who owns the contact. - example: 123 - unsubscribed_from_emails: - type: boolean - description: Whether the contact is unsubscribed from emails. - example: true - avatar: - type: string - description: An image URL for the contact's avatar. You can also pass an object with an `image_url` field. - example: https://www.example.com/avatar.png - custom_attributes: + example: '12345' + tags: + - Fin Agent + operationId: runFinProcedure + description: | + Deterministically run a specific procedure on a new conversation. Calling this endpoint + guarantees that the named procedure runs — there is no non-deterministic routing. + + Fin's progress is delivered asynchronously via events or Server-Sent Events. If the + procedure pauses for user input, the conversation status becomes `awaiting_user_reply` — + send the user's response with [`/fin/reply`](/docs/references/preview/rest-api/api.intercom.io/fin-agent/replytofin). + responses: + '200': + description: Procedure run started successfully + content: + application/json: + examples: + Successful response: + value: + conversation_id: ext-123 + user_id: user-456 + procedure_id: '12345' + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + Response with attribute errors: + value: + conversation_id: ext-123 + user_id: user-456 + procedure_id: '12345' + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + errors: + user: + attributes: + invalid_attr: User attribute 'invalid_attr' does not exist + schema: type: object - description: Custom attributes to update on the contact. - companies: - type: array - description: A list of companies to associate with the contact. Each company is identified by the `company_id` you have defined. Companies that do not exist are created. - items: + properties: + conversation_id: + type: string + description: The ID of the conversation. + example: ext-123 + user_id: + type: string + description: The ID of the user. + example: user-456 + procedure_id: + type: string + description: The ID of the procedure that was run. + example: '12345' + status: + type: string + enum: + - thinking + - replying + - awaiting_user_reply + - escalated + - resolved + - complete + description: | + Fin's current status in the conversation workflow. + example: thinking + created_at_ms: + type: string + format: date-time + description: The timestamp the response was created at, with millisecond precision. + example: '2025-01-24T10:00:00.123Z' + errors: + "$ref": "#/components/schemas/fin_agent_attribute_errors" + sse_subscription_url: + type: string + description: | + Optional. A URL to subscribe to Server-Sent Events (SSE) for this conversation, if SSE is enabled. The access token is a JWT with a 3-minute TTL. The token is revoked when Fin sets the conversation to awaiting_user_reply or complete status. + example: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + '400': + description: Bad Request + content: + application/json: + examples: + Procedure not found: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: parameter_invalid + message: Procedure not found + Procedure not live: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: parameter_invalid + message: Procedure is not live + Procedure has no API trigger: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: parameter_invalid + message: Procedure does not have an API trigger + No Fin profile: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: parameter_invalid + message: No Fin profile is configured to handle this conversation. Configure a Fin profile and retry. + Conversation already exists: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: parameter_invalid + message: Fin session already exists for this conversation. Please use /reply to continue the conversation. + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + conversation_id: + type: string + description: Your external conversation ID. Fin creates a conversation for this ID. If a conversation already exists for it, use `/fin/reply` instead. + example: ext-123 + user: + "$ref": "#/components/schemas/fin_agent_user" + message: + "$ref": "#/components/schemas/fin_agent_message" + conversation_metadata: type: object + description: Metadata about the conversation. Only attributes are accepted (no history). properties: - company_id: - type: string - description: The company ID you have defined for the company. - example: '6' - name: - type: string - description: The name of the company. - example: Blue Sun - company: + attributes: + type: object + description: | + A hash of conversation attributes. Limit to 10 attributes. + additionalProperties: true + example: + order_id: '98765' + settings: + type: object + description: Optional settings to control Fin's behaviour for this procedure run. + properties: + email: + type: boolean + default: false + description: | + When `true`, Fin formats its replies as email-style responses. Defaults to `false` (chat-style). + example: true + required: + - conversation_id + - user + examples: + Basic procedure run: + value: + conversation_id: ext-123 + user: + id: '123456' + name: John Doe + email: john.doe@example.com + Procedure run with trigger message and attributes: + value: + conversation_id: ext-123 + user: + id: '123456' + name: John Doe + email: john.doe@example.com + message: + author: agent + body: Starting your refund request. + conversation_metadata: + attributes: + order_id: '98765' + settings: + email: true + "/fin/start": + post: + summary: Start a conversation with Fin + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + tags: + - Fin Agent + operationId: startFinConversation + x-badges: + - name: Legacy + color: '#6B7280' + description: | + {% admonition type="info" name="Legacy — conversational mode" %} + `/fin/start` powers the conversational model, where your own UI drives a back-and-forth with Fin. This endpoint is no longer actively developed and is maintained only for existing integrations — new functionality lands on the orchestration endpoints. + {% /admonition %} + + Initialize Fin by passing it the user's message along with conversation history and user details. + + These additional pieces of context will be used by Fin to provide a better and more contextual answer to the user. + + Once Fin is initialized, it progresses through a series of statuses such as *thinking*, *replying*, *awaiting_user_reply*, or *resolved* before ending with a status of *complete*. + + During this workflow, the client should allow Fin to continue uninterrupted until a final *complete* status is returned, at which point control of the conversation passes back to the client. + + Events can be received via webhooks or Server-Sent Events (SSE) using the `sse_subscription_url` in the response. + responses: + '200': + description: Fin conversation started successfully + content: + application/json: + examples: + Successful response: + value: + conversation_id: ext-123 + user_id: user-456 + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + Response with attribute errors: + value: + conversation_id: ext-123 + user_id: user-456 + status: thinking + created_at_ms: '2025-01-24T10:00:00.123Z' + sse_subscription_url: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + errors: + user: + attributes: + invalid_attr: User attribute 'invalid_attr' does not exist + conversation: + attributes: + bad_attr: Conversation attribute 'bad_attr' does not exist + schema: type: object - description: A single company to associate with the contact, identified by the `company_id` you have defined. Created if it does not exist. properties: - company_id: + conversation_id: type: string - description: The company ID you have defined for the company. - example: '6' - name: + description: The ID of the conversation. + example: ext-123 + user_id: type: string - description: The name of the company. - example: Blue Sun - tags: - type: object - description: | - Tags to add to or remove from the contact. Each tag is identified by its `id`, which must be a positive integer for a tag that already exists in your workspace. Tag application is best-effort: unknown tag IDs are skipped while the rest of the contact update still applies. Per-tag results are not yet returned in the job status. - properties: - add: - type: array - description: Tags to add to the contact. - items: - type: object - required: - - id - properties: - id: - type: string - description: The ID of an existing tag to add to the contact. - example: '123' - remove: - type: array - description: Tags to remove from the contact. - items: - type: object - required: - - id - properties: - id: - type: string - description: The ID of an existing tag to remove from the contact. - example: '456' - job: - type: object - description: Optional. Include to append tasks to an existing job. - properties: - id: - type: string - description: The ID of an existing bulk job to append to. - example: job_v2_1 - collect_agent_input_request: - title: Collect Agent Input Request - type: object - x-tags: - - Procedures - description: Request body for submitting human-collected input to a HITL procedure - step. - properties: - step_id: - type: string - description: The step_id from the webhook payload, identifying which HITL - step this response is for. - example: d5b81f72-adb9-4317-b973-75b3c3624c09 - attribute_values: - type: array - description: Array of attribute values matching the attributes_to_collect - from the webhook payload. Must include a value for every attribute listed. - items: - type: object - properties: - identifier: - type: string - description: Must exactly match an identifier from the webhook's attributes_to_collect - array. - example: workflow_local_variables.72c5a6b3-3cce-41d8-8e30-14da40791958 - value: - description: The value for this attribute. Must be type-compatible - with the attribute's data_type from the webhook (e.g., boolean for - boolean attributes, option ID string for list attributes). - example: true - required: - - identifier - - value - required: - - step_id - - attribute_values - company: - title: Company - type: object - x-tags: - - Companies - description: Companies allow you to represent organizations using your product. - Each company will have its own description and be associated with contacts. - You can fetch, create, update and list companies. - properties: - type: - type: string - description: Value is `company` - enum: - - company - example: company - id: - type: string - description: The Intercom defined id representing the company. - example: 531ee472cce572a6ec000006 - name: - type: string - description: The name of the company. - example: Blue Sun - app_id: - type: string - description: The Intercom defined code of the workspace the company is associated - to. - example: ecahpwf5 - plan: - type: object - properties: - type: - type: string - description: Value is always "plan" - example: plan - id: - type: string - description: The id of the plan - example: '269315' - name: - type: string - description: The name of the plan - example: Pro - company_id: - type: string - description: The company id you have defined for the company. - example: '6' - remote_created_at: - type: integer - description: The time the company was created by you. - example: 1663597223 - created_at: - type: integer - description: The time the company was added in Intercom. - example: 1663597223 - updated_at: - type: integer - description: The last time the company was updated. - example: 1663597223 - last_request_at: - type: integer - description: The time the company last recorded making a request. - example: 1663597223 - size: - type: integer - description: The number of employees in the company. - example: 100 - website: + description: The ID of the user. + example: user-456 + status: + type: string + enum: + - thinking + - replying + - awaiting_user_reply + - escalated + - resolved + - complete + description: | + Fin's current status in the conversation workflow. + example: thinking + created_at_ms: + type: string + format: date-time + description: The timestamp the response was created at, with millisecond precision. + example: '2025-01-24T10:00:00.123Z' + errors: + "$ref": "#/components/schemas/fin_agent_attribute_errors" + sse_subscription_url: + type: string + description: | + Optional. A URL to subscribe to Server-Sent Events (SSE) for this conversation, if SSE is enabled. The access token is a JWT with a 3-minute TTL. The token is revoked when Fin sets the conversation to awaiting_user_reply or complete status. + example: 'https://primary-realtime.intercom-messenger.com/event-stream?channels=fin_agent_api:app123:ext-123&accessToken=eyJhbG...&rewind=2m' + '400': + description: Bad Request + content: + application/json: + examples: + Invalid request: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: parameter_invalid + message: conversation_id is required + schema: + "$ref": "#/components/schemas/error" + '401': + description: Unauthorized + content: + application/json: + examples: + Unauthorized: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: unauthorized + message: Access Token Invalid + schema: + "$ref": "#/components/schemas/error" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + conversation_id: + type: string + description: The ID of the conversation that is calling Fin via this API. + example: ext-123 + message: + "$ref": "#/components/schemas/fin_agent_message" + user: + "$ref": "#/components/schemas/fin_agent_user" + attachments: + type: array + description: An array of attachments to include with the message. Maximum of 10 attachments. + maxItems: 10 + items: + "$ref": "#/components/schemas/fin_agent_attachment" + conversation_metadata: + "$ref": "#/components/schemas/fin_agent_conversation_metadata" + settings: + "$ref": "#/components/schemas/fin_agent_settings" + required: + - conversation_id + - message + - user + examples: + Basic request: + value: + conversation_id: ext-123 + message: + author: user + body: How can I see my account details? + timestamp: '2025-01-24T10:01:20.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + Request with settings: + value: + conversation_id: ext-123 + message: + author: user + body: How can I resolve my outstanding invoice? + timestamp: '2025-01-24T10:01:20.000Z' + user: + id: '123456' + name: Jane Smith + email: jane.smith@example.com + settings: + follow_up_questions: false + email: true + Request with conversation history: + value: + conversation_id: ext-123 + message: + author: user + body: How can I see my account details? + timestamp: '2025-01-24T10:01:20.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + attributes: + plan_type: Pro + subscription_status: active + conversation_metadata: + history: + - author: user + body: I need help + timestamp: '2025-01-24T10:00:01Z' + - author: agent + body: What do you need help with? + timestamp: '2025-01-24T10:01:00Z' + attributes: + priority_level: high + department: sales + Request with attachments: + value: + conversation_id: ext-123 + message: + author: user + body: Here is a screenshot of the issue + timestamp: '2025-01-24T10:01:20.000Z' + user: + id: '123456' + name: John Doe + email: john.doe@example.com + attachments: + - type: url + url: https://example.com/document.pdf + - type: file + name: screenshot.png + content_type: image/png + data: iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk... + "/procedures/{conversation_id}/collect_agent_input": + post: + summary: Submit human input to a Fin Procedure HITL step + parameters: + - name: Intercom-Version + in: header + schema: + "$ref": "#/components/schemas/intercom_version" + - name: conversation_id + in: path + required: true + description: The ID of the conversation where the HITL step was triggered. + example: '215473853299345' + schema: type: string - description: The URL for the company website. - example: https://www.intercom.com - industry: + tags: + - Procedures + operationId: collectProcedureAgentInput + description: | + Submit human-collected input to a Fin Procedure that is paused at a Human in the Loop (HITL) step. + + When a procedure reaches a HITL step with the API channel enabled, Intercom sends a `procedure.hitl_notification.created` webhook. Use the `callback_url` from that webhook payload to call this endpoint with the collected attribute values. + + The `step_id` must match the one from the webhook payload, and `attribute_values` must include a value for every attribute listed in `attributes_to_collect`. + + {% admonition type="info" name="Authentication" %} + This endpoint requires an OAuth token with the `write_conversations` scope. The admin associated with the token must have access to the conversation. + {% /admonition %} + + {% admonition type="warning" name="Feature access" %} + This endpoint requires the Procedures HITL API feature to be enabled for your workspace. + {% /admonition %} + requestBody: + required: true + content: + application/json: + schema: + "$ref": "#/components/schemas/collect_agent_input_request" + examples: + Submit boolean and list values: + value: + step_id: d5b81f72-adb9-4317-b973-75b3c3624c09 + attribute_values: + - identifier: workflow_local_variables.72c5a6b3-3cce-41d8-8e30-14da40791958 + value: true + - identifier: workflow_local_variables.5adb55fb-f549-44a0-8ee9-7e652ad77c25 + value: 85f00ba7-558c-4b02-a397-6f5c3659941c + Submit string value: + value: + step_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + attribute_values: + - identifier: workflow_local_variables.11111111-2222-3333-4444-555555555555 + value: Approved by manager + responses: + '200': + description: Successful response — the procedure resumes with the provided + values. + content: + application/json: + examples: + Successful response: + value: {} + schema: + type: object + '401': + "$ref": "#/components/responses/Unauthorized" + '403': + description: Forbidden + content: + application/json: + examples: + Admin lacks conversation access: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: forbidden + message: Admin does not have access to this conversation + Feature not enabled: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: forbidden + message: Procedures HITL API is not enabled for your app. + schema: + "$ref": "#/components/schemas/error" + '404': + description: Not Found + content: + application/json: + examples: + Resource not found: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: not_found + message: Resource Not Found + HITL request expired: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: not_found + message: This HITL request has expired + schema: + "$ref": "#/components/schemas/error" + '409': + description: Conflict + content: + application/json: + examples: + Already fulfilled: + value: + type: error.list + request_id: b68959ea-6328-4f70-83cb-e7913dba1542 + errors: + - code: conflict + message: This HITL request has already been fulfilled + schema: + "$ref": "#/components/schemas/error" +components: + schemas: + datetime: + oneOf: + - title: string type: string - description: The industry that the company operates in. - example: Software - monthly_spend: - type: integer - description: How much revenue the company generates for your business. - example: 100 - session_count: - type: integer - description: How many sessions the company has recorded. - example: 100 - user_count: + format: date-time + description: A date and time following the ISO8601 notation. + - title: integer type: integer - description: The number of users in the company. - example: 100 - custom_attributes: - type: object - description: The custom attributes you have set on the company. - additionalProperties: - type: string - example: - paid_subscriber: true - monthly_spend: 155.5 - team_mates: 9 - tags: + description: A date and time as UNIX timestamp notation. + activity_log: + title: Activity Log + type: object + description: Activities performed by Admins. + nullable: true + properties: + id: + type: string + description: The id representing the activity. + example: '6' + performed_by: type: object - description: The list of tags associated with the company + description: Details about the Admin involved in the activity. properties: type: type: string - description: The type of the object - enum: - - tag.list - tags: - type: array - items: - "$ref": "#/components/schemas/tag_basic" - segments: - type: object - description: The list of segments associated with the company - properties: - type: + description: String representing the object's type. Always has the value + `admin`. + example: admin + id: type: string - description: The type of the object - enum: - - segment.list - segments: - type: array - items: - "$ref": "#/components/schemas/segment" - notes: - type: object - description: The list of notes associated with the company - properties: - type: + description: The id representing the admin. + example: '1295' + email: type: string - description: The type of the object - enum: - - note.list - notes: - type: array - items: - "$ref": "#/components/schemas/company_note" - company_attached_contacts: - title: Company Attached Contacts - type: object - description: A list of Contact Objects - properties: - type: - type: string - description: The type of object - `list` - enum: - - list - example: list - data: - type: array - description: An array containing Contact Objects - items: - "$ref": "#/components/schemas/contact" - total_count: + description: The email of the admin. + example: john@example.com + ip: + type: string + description: The IP address of the admin. + example: 198.51.100.255 + metadata: + "$ref": "#/components/schemas/activity_log_metadata" + created_at: type: integer - description: The total number of contacts - example: 100 - pages: - "$ref": "#/components/schemas/cursor_pages" - company_attached_segments: - title: Company Attached Segments - type: object - description: A list of Segment Objects - properties: - type: + format: date-time + description: The time the activity was created. + example: 1671028894 + activity_type: type: string - description: The type of object - `list` enum: - - list - example: list - data: - type: array - description: An array containing Segment Objects - items: - "$ref": "#/components/schemas/segment" - company_list: - title: Companies - type: object - description: This will return a list of companies for the App. - properties: - type: + - admin_conversation_assignment_limit_change + - admin_ticket_assignment_limit_change + - admin_avatar_change + - admin_away_mode_change + - admin_deletion + - admin_deprovisioned + - admin_impersonation_end + - admin_impersonation_start + - admin_invite_change + - admin_invite_creation + - admin_invite_deletion + - admin_login_failure + - admin_login_success + - admin_logout + - admin_password_reset_request + - admin_password_reset_success + - admin_permission_change + - admin_provisioned + - admin_two_factor_auth_change + - admin_unauthorized_sign_in_method + - app_admin_join + - app_authentication_method_change + - app_data_deletion + - app_data_export + - app_google_sso_domain_change + - app_identity_verification_change + - app_name_change + - app_outbound_address_change + - app_package_installation + - app_package_token_regeneration + - app_package_uninstallation + - app_team_creation + - app_team_deletion + - app_team_membership_modification + - app_timezone_change + - app_webhook_creation + - app_webhook_deletion + - articles_in_messenger_enabled_change + - bulk_delete + - bulk_export + - campaign_deletion + - campaign_state_change + - conversation_part_deletion + - conversation_pdf_export + - conversation_topic_change + - conversation_topic_creation + - conversation_topic_deletion + - customer_facing_name_change + - help_center_settings_change + - inbound_conversations_change + - inbox_access_change + - message_deletion + - message_state_change + - messenger_look_and_feel_change + - messenger_search_required_change + - messenger_spaces_change + - office_hours_change + - role_change + - role_creation + - role_deletion + - ruleset_activation_title_preview + - ruleset_creation + - ruleset_deletion + - search_browse_enabled_change + - search_browse_required_change + - seat_change + - seat_revoke + - security_settings_change + - temporary_expectation_change + - upfront_email_collection_change + - welcome_message_change + - hide_csat_from_agents_setting_change + example: app_name_change + activity_description: type: string - description: The type of object - `list`. - enum: - - list - example: list - pages: - "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: The total number of companies. - example: 100 - data: - type: array - description: An array containing Company Objects. - items: - "$ref": "#/components/schemas/company" - company_scroll: - title: Company Scroll + description: A sentence or two describing the activity. + example: Admin updated the app's name to "My App". + activity_log_list: + title: Paginated Response type: object - description: Companies allow you to represent organizations using your product. - Each company will have its own description and be associated with contacts. - You can fetch, create, update and list companies. - nullable: true + description: A paginated list of activity logs. properties: type: type: string - description: The type of object - `list` - enum: - - list - example: list - data: - type: array - items: - "$ref": "#/components/schemas/company" + description: String representing the object's type. Always has the value + `activity_log.list`. + example: activity_log.list pages: "$ref": "#/components/schemas/cursor_pages" - total_count: - type: integer - description: The total number of companies - nullable: true - example: 100 - scroll_param: - type: string - description: The scroll parameter to use in the next request to fetch the - next page of results. - example: 25b649f7-4d33-4ef6-88f5-60e5b8244309 - contact: - title: Contact + activity_logs: + type: array + description: An array of activity logs + items: + "$ref": "#/components/schemas/activity_log" + activity_log_metadata: + title: Activity Log Metadata type: object - x-tags: - - Contacts - x-fern-sdk-group-name: contacts - description: Contacts represent your leads and users in Intercom. + description: Additional data provided about Admin activity. + nullable: true properties: - type: - type: string - description: The type of object. - example: contact - id: + sign_in_method: type: string - description: The unique identifier for the contact which is given by Intercom. - example: 5ba682d23d7cf92bef87bfd4 + nullable: true + description: The way the admin signed in. + example: email_password external_id: type: string nullable: true description: The unique identifier for the contact which is provided by the Client. example: f3b87a2e09d514c6c2e79b9a - workspace_id: - type: string - description: The id of the workspace which the contact belongs to. - example: ecahpwf5 - role: - type: string - description: The role of the contact. - example: user - email: - type: string - description: The contact's email. - example: joe@example.com - email_domain: - type: string - description: The contact's email domain. - example: example.com - phone: - type: string + away_mode: + type: boolean nullable: true - description: The contacts phone. - example: "+1123456789" - formatted_phone: + description: The away mode status which is set to true when away and false + when returned. + example: true + away_status_reason: type: string nullable: true - description: The contacts phone number normalized to the E164 format - example: "+1123456789" - name: - type: string + description: The reason the Admin is away. + example: "\U0001F60C On a break" + reassign_conversations: + type: boolean nullable: true - description: The contacts name. - example: John Doe - owner_id: + description: Indicates if conversations should be reassigned while an Admin + is away. + example: false + source: type: string nullable: true - description: The id of an admin that has been assigned account ownership - of the contact. - example: "321" - has_hard_bounced: - type: boolean - description: Whether the contact has had an email sent to them hard bounce. - example: true - marked_email_as_spam: - type: boolean - description: Whether the contact has marked an email sent to them as spam. - example: true - unsubscribed_from_emails: - type: boolean - description: Whether the contact is unsubscribed from emails. - example: true - created_at: - type: integer - format: date-time - description: "(Unix timestamp in seconds) The time when the contact was created." - example: 1571672154 - updated_at: - type: integer - format: date-time - description: "(Unix timestamp in seconds) The time when the contact was last updated." - example: 1571672154 - signed_up_at: - type: integer - format: date-time - nullable: true - description: "(Unix timestamp in seconds) The time specified for when a contact signed - up." - example: 1571672154 - last_seen_at: - type: integer - format: date-time + description: The action that initiated the status change. + example: 'admin update from web - Admin id: 93' + auto_changed: + type: string nullable: true - description: "(Unix timestamp in seconds) The time when the contact was last seen (either - where the Intercom Messenger was installed or when specified manually)." - example: 1571672154 - last_replied_at: + description: Indicates if the status was changed automatically or manually. + example: false + update_by: type: integer - format: date-time nullable: true - description: "(Unix timestamp in seconds) The time when the contact last messaged in." - example: 1571672154 - last_contacted_at: - type: integer - format: date-time + description: The ID of the Admin who initiated the activity. + example: 93 + update_by_name: + type: string nullable: true - description: "(Unix timestamp in seconds) The time when the contact was last messaged." - example: 1571672154 - last_email_opened_at: + description: The name of the Admin who initiated the activity. + example: Joe Example + conversation_assignment_limit: type: integer - format: date-time nullable: true - description: "(Unix timestamp in seconds) The time when the contact last opened an - email." - example: 1571672154 - last_email_clicked_at: + description: The conversation assignment limit value for an admin. + example: 15 + ticket_assignment_limit: type: integer - format: date-time - nullable: true - description: "(Unix timestamp in seconds) The time when the contact last clicked a - link in an email." - example: 1571672154 - language_override: - type: string - nullable: true - description: A preferred language setting for the contact, used by Intercom - as the language of Fin and the Messenger even if their browser has a different - setting. Supports ISO 639-1 two-letter language codes. If an unsupported - code is supplied, the field will be set to null. - example: en - browser: - type: string nullable: true - description: The name of the browser which the contact is using. - example: Chrome - browser_version: + description: The ticket assignment limit value for an admin. + example: 20 + addressable_list: + title: Addressable List + type: object + nullable: false + description: A list used to access other resources from a parent model. + properties: + type: type: string - nullable: true - description: The version of the browser which the contact is using. - example: 80.0.3987.132 - browser_language: + format: uri + description: The addressable object type + example: note + id: type: string - nullable: true - description: The language set by the browser which the contact is using. - example: en-US - os: + description: The id of the addressable object + example: '123' + url: type: string - nullable: true - description: The operating system which the contact is using. - example: Mac OS X - android_app_name: + format: uri + description: Url to get more company resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/notes" + admin: + title: Admin + type: object + x-tags: + - Admins + description: Admins are teammate accounts that have access to a workspace. + nullable: true + properties: + type: type: string - nullable: true - description: The name of the Android app which the contact is using. - example: Intercom - android_app_version: + description: String representing the object's type. Always has the value + `admin`. + example: admin + id: type: string - nullable: true - description: The version of the Android app which the contact is using. - example: 5.0.0 - android_device: + description: The id representing the admin. + example: '1295' + name: type: string - nullable: true - description: The Android device which the contact is using. - example: Pixel 3 - android_os_version: + description: The name of the admin. + example: Joe Example + email: type: string - nullable: true - description: The version of the Android OS which the contact is using. - example: '10' - android_sdk_version: + description: The email of the admin. + example: jdoe@example.com + job_title: type: string - nullable: true - description: The version of the Android SDK which the contact is using. - example: '28' - android_last_seen_at: + description: The job title of the admin. + example: Associate + away_mode_enabled: + type: boolean + description: Identifies if this admin is currently set in away mode. + example: false + away_mode_reassign: + type: boolean + description: Identifies if this admin is set to automatically reassign new + conversations to the apps default inbox. + example: false + away_status_reason_id: type: integer nullable: true - format: date-time - description: "(Unix timestamp in seconds) The time when the contact was last seen on - an Android device." - example: 1571672154 - ios_app_name: - type: string - nullable: true - description: The name of the iOS app which the contact is using. - example: Intercom - ios_app_version: - type: string - nullable: true - description: The version of the iOS app which the contact is using. - example: 5.0.0 - ios_device: - type: string - nullable: true - description: The iOS device which the contact is using. - example: iPhone 11 - ios_os_version: + description: The unique identifier of the away status reason + example: 12345 + has_inbox_seat: + type: boolean + description: Identifies if this admin has a paid inbox seat to restrict/allow + features that require them. + example: true + team_ids: + type: array + description: This object represents the avatar associated with the admin. + example: + - 814865 + items: + type: integer + avatar: type: string + format: uri nullable: true - description: The version of iOS which the contact is using. - example: 13.3.1 - ios_sdk_version: + description: Image for the associated team or teammate + example: https://picsum.photos/200/300 + team_priority_level: + "$ref": "#/components/schemas/team_priority_level" + admin_list: + title: Admins + type: object + description: A list of admins associated with a given workspace. + properties: + type: type: string + description: String representing the object's type. Always has the value + `admin.list`. + example: admin.list + admins: + type: array + description: A list of admins associated with a given workspace. + items: + "$ref": "#/components/schemas/admin" + admin_priority_level: + title: Admin Priority Level + type: object + nullable: true + description: Admin priority levels for the team + properties: + primary_admin_ids: + type: array + description: The primary admin ids for the team nullable: true - description: The version of the iOS SDK which the contact is using. - example: 13.3.1 - ios_last_seen_at: - type: integer - nullable: true - format: date-time - description: "(Unix timestamp in seconds) The last time the contact used the iOS app." - example: 1571672154 - custom_attributes: - type: object - description: The custom attributes which are set for the contact. - avatar: - type: object - nullable: true - properties: - type: - type: string - description: The type of object - example: avatar - image_url: - type: string - format: uri - nullable: true - description: An image URL containing the avatar of a contact. - example: https://example.org/128Wash.jpg - tags: - "$ref": "#/components/schemas/contact_tags" - notes: - "$ref": "#/components/schemas/contact_notes" - companies: - "$ref": "#/components/schemas/contact_companies" - location: - "$ref": "#/components/schemas/contact_location" - social_profiles: - "$ref": "#/components/schemas/contact_social_profiles" - merge_history: + example: + - 493881 + items: + type: integer + secondary_admin_ids: type: array + description: The secondary admin ids for the team nullable: true - description: A list of contacts that were merged into this contact. Only - included in the response when `include_merge_history=true` is passed as - a query parameter. Only available for contacts with a `user` role. + example: + - 814865 items: - "$ref": "#/components/schemas/merge_history_item" - merge_history_item: - title: Merge History Item + type: integer + admin_reply_conversation_request: + title: Admin Reply type: object - description: A record of a contact that was merged into another contact. + description: Payload of the request to reply on behalf of an admin properties: - type: - type: string - description: The type of object. - example: merge_history - source_contact_id: - type: string - description: The Intercom ID of the contact that was merged into this contact. - example: 5ba682d23d7cf92bef87bfd3 - source_contact_role: + message_type: type: string - description: The role of the contact that was merged in. enum: - - lead - - user - example: lead - merged_at: - type: integer - nullable: true - format: date-time - description: "(Unix timestamp in seconds) The time when the merge occurred." - example: 1571672154 - merge_history_list: - title: Merge History List - type: object - description: A paginated list of merge history entries for a contact. - properties: + - comment + - note + - quick_reply + example: comment type: type: string - description: The type of object. enum: - - list - example: list - data: + - admin + example: admin + body: + type: string + description: The text body of the reply. Notes accept some HTML formatting. + Must be present for comment and note message types. + example: Hello there! + admin_id: + type: string + description: The id of the admin who is authoring the comment. + example: '3156780' + created_at: + type: integer + description: The time the reply was created. If not provided, the current + time will be used. + example: 1590000000 + reply_options: + title: Quick Reply Options type: array - description: An array of merge history entries. + description: The quick reply options to display to the end user. Must be present for quick_reply + message types. items: - "$ref": "#/components/schemas/merge_history_item" - next_cursor: - type: string - nullable: true - description: A cursor to pass as the `cursor` query parameter to fetch - the next page of results. Absent when there are no more pages. - example: WyIxNjM0NTY3ODkwIl0 - has_more: + "$ref": "#/components/schemas/quick_reply_option" + attachment_urls: + type: array + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. + items: + type: string + format: uri + maxItems: 10 + attachment_files: + type: array + description: A list of files that will be added as attachments. You can + include up to 10 files + items: + "$ref": "#/components/schemas/conversation_attachment_files" + maxItems: 10 + skip_unsnooze: type: boolean - description: Whether there are more results to fetch. - example: false - contact_attached_companies: - title: Contact Attached Companies + description: When true, prevents the reply from waking a snoozed conversation. + Applies to 'comment' and 'note' message types. The part is still created + and visible in the conversation thread. + example: true + required: + - message_type + - type + - admin_id + admin_reply_ticket_request: + title: Admin Reply on ticket type: object - description: A list of Company Objects + description: Payload of the request to reply on behalf of an admin properties: + message_type: + type: string + enum: + - comment + - note + - quick_reply + example: comment type: type: string - description: The type of object enum: - - list - example: list - companies: + - admin + example: admin + body: + type: string + description: The text body of the reply. Notes accept some HTML formatting. + Must be present for comment and note message types. + example: Hello there! + admin_id: + type: string + description: The id of the admin who is authoring the comment. + example: '3156780' + created_at: + type: integer + description: The time the reply was created. If not provided, the current + time will be used. + example: 1590000000 + reply_options: + title: Quick Reply Options type: array - description: An array containing Company Objects + description: The quick reply options to display. Must be present for quick_reply + message types. items: - "$ref": "#/components/schemas/company" - total_count: - type: integer - description: The total number of companies associated to this contact - example: 100 - pages: - "$ref": "#/components/schemas/pages_link" - contact_companies: - title: Contact companies - type: object - nullable: false - description: An object with metadata about companies attached to a contact . Up to 10 will be displayed here. Use the url to get more. - properties: - data: + title: Quick Reply Option + type: object + properties: + text: + type: string + description: The text to display in this quick reply option. + uuid: + type: string + format: uuid + description: A unique identifier for this quick reply option. This + value will be available within the metadata of the comment ticket + part that is created when a user clicks on this reply option. + required: + - text + - uuid + attachment_urls: type: array - description: An array of company data objects attached to the contact. + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. items: - "$ref": "#/components/schemas/company_data" - url: - type: string - format: uri - description: Url to get more company resources for this contact - example: "/contacts/5ba682d23d7cf92bef87bfd4/companies" - total_count: - type: integer - description: Integer representing the total number of companies attached to - this contact - example: 100 - has_more: + type: string + format: uri + maxItems: 10 + cross_post: type: boolean - description: Whether there's more Addressable Objects to be viewed. If true, - use the url to view all + description: If set to true, the note will be cross-posted to all linked + conversations. Only applicable to note message types on back-office tickets. example: true - company_data: - title: Company Data + required: + - message_type + - type + - admin_id + admin_with_app: + title: Admin type: object - description: An object containing data about the companies that a contact is associated with. + description: Admins are the teammate accounts that have access to a workspace + nullable: true properties: + type: + type: string + description: String representing the object's type. Always has the value + `admin`. + example: admin id: type: string - description: The unique identifier for the company which is given by Intercom. - example: 5ba682d23d7cf92bef87bfd4 - type: + description: The id representing the admin. + example: '1295' + name: type: string - description: The type of the object. Always company. - enum: - - company - example: company - url: + description: The name of the admin. + example: Joe Example + email: type: string - format: uri - description: The relative URL of the company. - example: "/companies/5ba682d23d7cf92bef87bfd4" - contact_deleted: - title: Contact Deleted - description: deleted contact object - allOf: - - "$ref": "#/components/schemas/contact_reference" - properties: - deleted: + description: The email of the admin. + example: jdoe@example.com + job_title: + type: string + description: The job title of the admin. + example: Associate + away_mode_enabled: type: boolean - description: Whether the contact is deleted or not. + description: Identifies if this admin is currently set in away mode. + example: false + away_mode_reassign: + type: boolean + description: Identifies if this admin is set to automatically reassign new + conversations to the apps default inbox. + example: false + has_inbox_seat: + type: boolean + description: Identifies if this admin has a paid inbox seat to restrict/allow + features that require them. example: true - contact_list: - title: Contact List - type: object - description: Contacts are your users in Intercom. - properties: - type: - type: string - description: Always list - enum: - - list - example: list - data: + team_ids: type: array - description: The list of contact objects + description: This is a list of ids of the teams that this admin is part + of. + example: + - 814865 items: - "$ref": "#/components/schemas/contact" - total_count: - type: integer - description: A count of the total number of objects. - example: 100 - pages: - "$ref": "#/components/schemas/cursor_pages" - contacts_bulk_job: - title: Contacts Bulk Job + type: integer + avatar: + type: object + description: This object represents the avatar associated with the admin. + properties: + type: + type: string + description: This is a string that identifies the type of the object. + It will always have the value `avatar`. + default: avatar + example: avatar + image_url: + type: string + format: uri + nullable: true + description: This object represents the avatar associated with the admin. + example: https://example.com/avatar.png + email_verified: + type: boolean + description: Identifies if this admin's email is verified. + nullable: true + example: true + role: + type: object + nullable: true + description: The role assigned to this admin. Only present if the admin has + a role assigned. + properties: + type: + type: string + description: String representing the object's type. Always has the value + `role`. + example: role + id: + type: string + description: The id of the role. + example: '1' + name: + type: string + description: The name of the role. + example: Support Agent + app: + "$ref": "#/components/schemas/app" + nullable: true + description: App that the admin belongs to. + ai_agent: + title: AI Agent type: object x-tags: - - Contacts - description: A bulk job for updating contacts asynchronously. Track the job - status using the `state` field. + - Ai Agent + description: Data related to AI Agent involvement in the conversation. properties: - id: + source_type: type: string - description: The unique identifier for the bulk job. - example: job_v2_1 - type: + nullable: true + description: The type of the source that triggered AI Agent involvement + in the conversation. + enum: + - essentials_plan_setup + - profile + - workflow + - workflow_preview + - fin_preview + example: workflow + source_title: type: string - description: The type of the object. + description: The title of the source that triggered AI Agent involvement + in the conversation. If this is `essentials_plan_setup` then it will return + `null`. + example: My AI Workflow + nullable: true + last_answer_type: + type: string + description: The type of the last answer delivered by AI Agent. If no answer + was delivered then this will return `null` enum: - - contacts.bulk.job - example: contacts.bulk.job - state: + - + - ai_answer + - custom_answer + example: ai_answer + nullable: true + resolution_state: type: string - description: The current state of the job. + description: The resolution state of AI Agent. If no AI or custom answer + has been delivered then this will return `null`. enum: - - pending - - running - - completed - - completed_with_errors - example: running - created_at: - type: integer - format: date-time - description: The time the job was created as a UNIX timestamp. - example: 1713360000 - updated_at: - type: integer - format: date-time - description: The time the job was last updated as a UNIX timestamp. - example: 1713360060 - completed_at: + - assumed_resolution + - confirmed_resolution + - escalated + - negative_feedback + - procedure_handoff + - + example: assumed_resolution + nullable: true + rating: type: integer - format: date-time + description: The customer satisfaction rating given to AI Agent, from 1-5. + example: 4 nullable: true - description: The time the job completed as a UNIX timestamp. Null if not - yet completed. - example: 1713360120 - tasks: - type: array - description: The tasks that make up this bulk job. - items: - type: object - properties: - id: - type: string - description: The unique identifier for the task. - example: task_v2_1 - item_count: - type: integer - description: The number of items in this task. - example: 3 - state: - type: string - description: The current state of the task. - enum: - - pending - - running - - completed - - completed_with_errors - example: pending - created_at: - type: integer - format: date-time - description: The time the task was created as a UNIX timestamp. - example: 1713360000 - started_at: - type: integer - format: date-time - nullable: true - description: The time the task started as a UNIX timestamp. Null if - not yet started. - example: 1713360060 - completed_at: - type: integer - format: date-time - nullable: true - description: The time the task completed as a UNIX timestamp. Null - if not yet completed. - example: 1713360120 - url: + rating_remark: type: string - description: The URL to check the job status. - example: https://api.intercom.io/contacts/bulk/job_v2_1 - contact_location: - title: Contact Location + description: The customer satisfaction rating remark given to AI Agent. + example: Very helpful! + nullable: true + created_at: + type: integer + format: date-time + description: The time when the AI agent rating was created. + example: 1663597260 + nullable: true + updated_at: + type: integer + format: date-time + description: The time when the AI agent rating was last updated. + example: 1663597260 + nullable: true + content_sources: + "$ref": "#/components/schemas/content_sources_list" + ai_subtopic: + title: AI Subtopic type: object - nullable: false - description: An object containing location meta data about a Intercom contact. + description: An AI-generated subtopic under a topic. properties: type: type: string - nullable: true - description: Always location - example: location - country: + description: Always ai_subtopic. + example: ai_subtopic + name: type: string - nullable: true - description: The country that the contact is located in - example: Ireland - region: + description: The name of the subtopic. + example: Payment Issues + id: + type: integer + description: The ID of the subtopic. + example: 42 + ai_topic: + title: AI Topic + type: object + description: An AI-generated topic assigned to the conversation. + properties: + type: type: string - nullable: true - description: The overal region that the contact is located in - example: Dublin - city: + description: Always ai_topic. + example: ai_topic + topic_name: type: string - nullable: true - description: The city that the contact is located in - example: Dublin - contact_notes: - title: Contact notes + description: The name of the AI-generated topic. + example: Billing + subtopics: + type: array + description: The subtopics under this topic. + items: + $ref: '#/components/schemas/ai_subtopic' + ai_topics: + title: AI Topics type: object - nullable: false - description: An object containing notes meta data about the notes that a contact - has. Up to 10 will be displayed here. Use the url to get more. + x-tags: + - AI Topics + description: AI-generated topics and subtopics for the conversation. properties: - data: + type: + type: string + description: Always ai_topics. + example: ai_topics + topics: type: array - description: This object represents the notes attached to a contact. + description: The list of AI-generated topics for this conversation. items: - "$ref": "#/components/schemas/addressable_list" - url: - type: string - format: uri - description: Url to get more company resources for this contact - example: "/contacts/5ba682d23d7cf92bef87bfd4/notes" - total_count: - type: integer - description: Int representing the total number of companyies attached to - this contact - example: 100 - has_more: - type: boolean - description: Whether there's more Addressable Objects to be viewed. If true, - use the url to view all - example: true - contact_reference: - title: Contact Reference + $ref: '#/components/schemas/ai_topic' + app: + title: App type: object - description: reference to contact object + description: App is a workspace on Intercom + nullable: true properties: type: type: string - description: always contact - enum: - - contact - example: contact - id: + description: '' + default: app + example: app + id_code: type: string - description: The unique identifier for the contact which is given by Intercom. - example: 5ba682d23d7cf92bef87bfd4 - external_id: + description: The id of the app. + example: xyz789 + name: + type: string + description: The name of the app. + example: ACME + region: + type: string + description: The Intercom region the app is located in. + example: US + timezone: type: string + description: The timezone of the region where the app is located. + example: America/Los_Angeles + created_at: + type: integer + description: When the app was created. + example: 1671465577 + identity_verification: + type: boolean + description: Whether or not the app uses identity verification. + example: false + article: + title: Article + type: object + x-tags: + - Articles + description: The Articles API is a central place to gather all information and + take actions on your articles. Articles can live within collections and sections, + or alternatively they can stand alone. + properties: + statistics: nullable: true - description: The unique identifier for the contact which is provided by - the Client. - example: "70" - contact_reply_base_request: - title: Contact Reply Base Object + "$ref": "#/components/schemas/article_statistics" + allOf: + - "$ref": "#/components/schemas/article_list_item" + internal_article: + title: Internal Article + type: object + x-tags: + - Articles + description: The Internal Articles API is a central place to gather all information and + take actions on your internal articles. + allOf: + - "$ref": "#/components/schemas/internal_article_list_item" + article_content: + title: Article Content type: object + description: The Content of an Article. + nullable: true properties: - message_type: - type: string - enum: - - comment type: type: string + description: The type of object - `article_content` . enum: - - user + - + - article_content + example: article_content + nullable: true + title: + type: string + description: The title of the article. + example: How to create a new article + description: + type: string + description: The description of the article. + example: This article will show you how to create a new article. body: type: string - description: The text body of the comment. + description: The body of the article in HTML. + example: This is the body of the article. + author_id: + type: integer + description: The ID of the author of the article. + example: '5017691' + state: + type: string + description: Whether the article is `published` or is a `draft` . + enum: + - published + - draft + example: draft created_at: type: integer - description: The time the reply was created. If not provided, the current - time will be used. - example: 1590000000 - attachment_urls: - title: Attachment URLs - type: array - description: A list of image URLs that will be added as attachments. You - can include up to 10 URLs. - items: - type: string - format: uri - maxItems: 10 - reply_options: - title: Contact Quick Reply - type: array - description: The quick reply selection the contact wishes to respond with. - These map to buttons displayed in the Messenger UI if sent by a bot, or the reply options sent by an Admin via the API. - items: - title: Quick Reply Option - type: object - properties: - text: - type: string - description: The text of the chosen reply option. - uuid: - type: string - format: uuid - description: The unique identifier for the quick reply option selected. - required: - - text - - uuid - required: - - message_type - - type - - body - contact_reply_conversation_request: - title: Contact Reply - oneOf: - - "$ref": "#/components/schemas/contact_reply_intercom_user_id_request" - - "$ref": "#/components/schemas/contact_reply_email_request" - - "$ref": "#/components/schemas/contact_reply_user_id_request" - contact_reply_email_request: - title: Email - type: object - description: Payload of the request to reply on behalf of a contact using their - `email` - properties: - email: + format: date-time + description: The time when the article was created (seconds). + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The time when the article was last updated (seconds). + example: 1663597260 + url: type: string - description: The email you have defined for the user. - attachment_files: - type: array - description: A list of files that will be added as attachments. - items: - "$ref": "#/components/schemas/conversation_attachment_files" - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" - required: - - email - contact_reply_intercom_user_id_request: - title: Intercom User ID + description: The URL of the article. + example: http://intercom.test/help/en/articles/3-default-language + internal_article_list: + title: Internal Articles type: object - description: Payload of the request to reply on behalf of a contact using their - `intercom_user_id` - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" + description: This will return a list of internal articles for the App. properties: - intercom_user_id: + type: type: string - description: The identifier for the contact as given by Intercom. - attachment_files: + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of internal articles. + example: 1 + data: type: array - description: A list of files that will be added as attachments. + description: An array of Internal Article objects items: - "$ref": "#/components/schemas/conversation_attachment_files" - required: - - intercom_user_id - contact_reply_ticket_email_request: - title: Email + "$ref": "#/components/schemas/internal_article_list_item" + folder: + title: Folder type: object - description: Payload of the request to reply on behalf of a contact using their - `email` + x-tags: + - Folders + description: A folder for organizing content properties: - email: + id: + type: integer + description: The unique identifier for the folder + example: 6 + name: type: string - description: The email you have defined for the user. - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" - required: - - email - contact_reply_ticket_intercom_user_id_request: - title: Intercom User ID - type: object - description: Payload of the request to reply on behalf of a contact using their - `intercom_user_id` - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" - properties: - intercom_user_id: + description: The name of the folder + example: Product Documentation + description: type: string - description: The identifier for the contact as given by Intercom. - required: - - intercom_user_id - contact_reply_ticket_request: - title: Contact Reply on ticket - oneOf: - - "$ref": "#/components/schemas/contact_reply_ticket_intercom_user_id_request" - - "$ref": "#/components/schemas/contact_reply_ticket_user_id_request" - - "$ref": "#/components/schemas/contact_reply_ticket_email_request" - contact_reply_ticket_user_id_request: - title: User ID + nullable: true + description: The description of the folder + example: Internal product documentation + emoji: + type: string + nullable: true + description: An emoji associated with the folder + example: "📚" + parent_folder_id: + type: integer + nullable: true + description: The ID of the parent folder, or null if this is a root folder + example: null + content_count: + type: integer + description: The number of content items in this folder + example: 5 + created_at: + type: integer + format: date-time + description: The time when the folder was created (seconds) + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the folder was last updated (seconds) + example: 1672928610 + deleted_folder_object: + title: Deleted Folder Object type: object - description: Payload of the request to reply on behalf of a contact using their - `user_id` - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" + description: Response returned when a folder is deleted properties: - user_id: + id: + type: integer + description: The unique identifier for the deleted folder + example: 6 + object: type: string - description: The external_id you have defined for the contact. - required: - - user_id - contact_reply_user_id_request: - title: User ID + description: The type of object - `folder`. + enum: + - folder + example: folder + deleted: + type: boolean + description: Whether the folder was successfully deleted. + example: true + article_list: + title: Articles type: object - description: Payload of the request to reply on behalf of a contact using their - `user_id` - allOf: - - "$ref": "#/components/schemas/contact_reply_base_request" + description: This will return a list of articles for the App. properties: - user_id: + type: type: string - description: The external_id you have defined for the contact. - attachment_files: + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of articles. + example: 1 + data: type: array - description: A list of files that will be added as attachments. You can - include up to 10 files. + description: An array of Article objects items: - "$ref": "#/components/schemas/conversation_attachment_files" - maxItems: 10 - required: - - user_id - contact_search_request: - description: Search for contacts using Intercom's Search API. - type: object - title: Contact search request - properties: - query: - oneOf: - - "$ref": "#/components/schemas/single_filter_search_request" - title: Single filter search request - - "$ref": "#/components/schemas/multiple_filter_search_request" - title: multiple filter search request - pagination: - "$ref": "#/components/schemas/starting_after_paging" - sort: - type: object - description: An optional object to sort the results by. - properties: - field: - type: string - description: The field to sort the results on. - example: created_at - order: - type: string - description: The order to sort the results in. Defaults to `descending` - when omitted. Values other than `ascending` or `descending` return a - `400` error with code `invalid_sort_order`. - enum: - - ascending - - descending - default: descending - example: descending - required: - - query - contact_segments: - title: Segments + "$ref": "#/components/schemas/article_list_item" + article_list_item: + title: Articles type: object - description: A list of segments objects attached to a specific contact. + x-tags: + - Articles + description: The data returned about your articles when you list them. properties: + parent_id: + type: integer + nullable: true + description: The id of the article's parent collection or section. An article + without this field stands alone. + example: '125685' + parent_type: + type: string + nullable: true + description: The type of parent, which can either be a `collection` or `section`. + example: collection type: type: string - description: The type of the object - enum: - - list - example: list - data: - type: array - description: Segment objects associated with the contact. - items: - "$ref": "#/components/schemas/segment" - contact_social_profiles: - title: Social Profile - type: object - nullable: false - description: An object containing social profiles that a contact has. - properties: - data: - type: array - description: A list of social profiles objects associated with the contact. - items: - "$ref": "#/components/schemas/social_profile" - contact_subscription_types: - title: Contact Subscription Types - type: object - nullable: false - description: An object containing Subscription Types meta data about the SubscriptionTypes - that a contact has. - properties: - data: + description: The type of object - `article`. + enum: + - article + default: article + example: article + id: + type: string + description: The unique identifier for the article which is given by Intercom. + example: '6871119' + workspace_id: + type: string + description: The id of the workspace which the article belongs to. + example: hfi1bx4l + title: + type: string + description: The title of the article. For multilingual articles, this will + be the title of the default language's content. + example: Default language title + description: + type: string + nullable: true + description: The description of the article. For multilingual articles, + this will be the description of the default language's content. + example: Default language description + body: + type: string + nullable: true + description: The body of the article in HTML. For multilingual articles, + this will be the body of the default language's content. + example: Default language body in html + author_id: + type: integer + description: The id of the author of the article. For multilingual articles, + this will be the id of the author of the default language's content. Must + be a teammate on the help center's workspace. + example: '5017691' + state: + type: string + description: Whether the article is `published` or is a `draft`. For multilingual + articles, this will be the state of the default language's content. + enum: + - published + - draft + default: draft + example: published + created_at: + type: integer + format: date-time + description: The time when the article was created. For multilingual articles, + this will be the timestamp of creation of the default language's content + in seconds. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the article was last updated. For multilingual + articles, this will be the timestamp of last update of the default language's + content in seconds. + example: 1672928610 + url: + type: string + nullable: true + description: The URL of the article. For multilingual articles, this will + be the URL of the default language's content. + example: http://intercom.test/help/en/articles/3-default-language + parent_ids: type: array - description: This object represents the subscriptions attached to a contact. + description: The ids of the article's parent collections or sections. An + article without this field stands alone. items: - "$ref": "#/components/schemas/addressable_list" - url: + type: integer + example: + - 18 + - 19 + default_locale: type: string - format: uri - description: Url to get more subscription type resources for this contact - example: "/contacts/5ba682d23d7cf92bef87bfd4/subscriptions" - total_count: + description: The default locale of the help center. This field is only returned + for multilingual help centers. + example: en + translated_content: + nullable: true + "$ref": "#/components/schemas/article_translated_content" + tags: + "$ref": "#/components/schemas/tags" + folder_id: type: integer - description: Int representing the total number of subscription types attached - to this contact - example: 100 - has_more: - type: boolean - description: Whether there's more Addressable Objects to be viewed. If true, - use the url to view all - example: true - contact_tags: - title: Contact Tags + nullable: true + description: The ID of the folder this article belongs to, or null if not in a folder. + example: 6 + internal_article_list_item: + title: Internal Articles type: object - nullable: true - description: An object containing tags meta data about the tags that a contact - has. Up to 10 will be displayed here. Use the url to get more. + x-tags: + - Internal Articles + description: The data returned about your internal articles when you list them. properties: - data: - type: array - description: This object represents the tags attached to a contact. - items: - "$ref": "#/components/schemas/addressable_list" - url: + type: type: string - format: uri - description: url to get more tag resources for this contact - example: "/contacts/5ba682d23d7cf92bef87bfd4/tags" - total_count: + description: The type of object - `internal_article`. + enum: + - internal_article + default: internal_article + example: internal_article + id: + type: string + description: The unique identifier for the article which is given by Intercom. + example: '6871119' + title: + type: string + description: The title of the article. + body: + type: string + nullable: true + description: The body of the article in HTML. + example: Default language body in html + owner_id: type: integer - description: Int representing the total number of tags attached to this - contact - example: 100 - has_more: - type: boolean - description: Whether there's more Addressable Objects to be viewed. If true, - use the url to view all - example: true - contact_archived: - title: Contact Archived - description: archived contact object - allOf: - - "$ref": "#/components/schemas/contact_reference" - properties: - archived: - type: boolean - description: Whether the contact is archived or not. - example: true - contact_unarchived: - title: Contact Unarchived - description: unarchived contact object - allOf: - - "$ref": "#/components/schemas/contact_reference" - properties: - archived: - type: boolean - description: Whether the contact is archived or not. - example: false - contact_blocked: - title: Contact Blocked - type: object - description: blocked contact object - allOf: - - "$ref": "#/components/schemas/contact_reference" - properties: - blocked: - type: boolean - description: Always true. - example: true - content_bulk_action_request: - title: Content Bulk Action Request Payload + description: The id of the owner of the article. + example: '5017691' + author_id: + type: integer + description: The id of the author of the article. + example: '5017691' + created_at: + type: integer + format: date-time + description: The time when the article was created. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the article was last updated. + example: 1672928610 + locale: + type: string + description: The default locale of the article. + example: en + folder_id: + type: integer + nullable: true + description: The ID of the folder this article belongs to, or null if not in a folder. + example: 6 + tags: + "$ref": "#/components/schemas/tags" + article_search_highlights: + title: Article Search Highlights type: object - required: - - action - - content_ids + x-tags: + - Articles + description: The highlighted results of an Article search. In the examples provided + my search query is always "my query". properties: - action: + article_id: type: string - description: | - The bulk action to perform. Allowed `content_ids[].type` values vary per action: - * `publish`, `unpublish`: `article_content` - * `delete`: `article_content`, `content_snippet`, `file_source_content`, `internal_article` - * `set_availability`, `set_audience`: `article_content`, `content_snippet`, `external_content`, `file_source_content`, `internal_article` - * `update_tags`: `article` (the parent Article id, not `article_content`), `content_snippet`, `external_content`, `file_source_content`, `internal_article` - enum: - - publish - - unpublish - - delete - - set_availability - - set_audience - - update_tags - example: publish - content_ids: + description: The ID of the corresponding article. + example: '123' + highlighted_title: type: array - maxItems: 1000 - description: Up to 1,000 content items to apply the action to. + description: An Article title highlighted. items: type: object - required: - - type - - id + description: A highlighted article title. properties: type: type: string + description: The type of text - `highlight` or `plain`. enum: - - article - - article_content - - content_snippet - - external_content - - file_source_content - - internal_article - example: article_content - id: + - highlight + - plain + example: 'The highlight is ' + text: type: string - example: '12345678' - availability: - type: object - description: | - Required when `action` is `set_availability`. Each field is optional — only the - properties present in the request are toggled. - properties: - ai_agent: - type: boolean - description: Toggle Fin AI Agent availability. - copilot: - type: boolean - description: Toggle Copilot availability. - sales_agent: - type: boolean - description: Toggle Sales Agent availability. - audience: - type: object - description: Required when `action` is `set_audience`. Manages segment membership. - properties: - add_segment_ids: - type: array - description: Segment IDs to assign to the selected content. - items: - type: integer - example: - - 100 - remove_segment_ids: - type: array - description: Segment IDs to remove from the selected content. - items: - type: integer - example: - - 200 - remove_all: - type: boolean - description: When `true`, removes all segments from the selected content. - example: false - tags: + description: The text of the title. + example: my query + highlighted_summary: + type: array + description: An Article description and body text highlighted. + items: + type: array + description: An array containing the highlighted summary text split into + chunks of plain and highlighted text. + items: + type: object + description: An instance of highlighted summary text. + properties: + type: + type: string + description: The type of text - `highlight` or `plain`. + enum: + - highlight + - plain + example: 'How to highlight ' + text: + type: string + description: The text of the title. + example: my query + article_search_response: + title: Article Search Response + type: object + x-tags: + - Articles + description: The results of an Article search + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + total_count: + type: integer + description: The total number of Articles matching the search query + example: 5 + data: type: object - description: | - Required when `action` is `update_tags`. Applies and/or removes existing tags. - Supply at least one of `add_tag_ids` / `remove_tag_ids`. At most 100 distinct tag IDs - may be supplied across `add_tag_ids` and `remove_tag_ids` combined. Tag IDs must - reference existing, non-archived tags; exceeding the limit or referencing unknown or - archived IDs is rejected with `parameter_invalid` (HTTP 422). + description: An object containing the results of the search. properties: - add_tag_ids: + articles: type: array - description: Tag IDs to apply to the selected content. + description: An array of Article objects items: - type: integer - example: - - 100 - remove_tag_ids: + "$ref": "#/components/schemas/article" + highlights: type: array - description: Tag IDs to remove from the selected content. + description: A corresponding array of highlighted Article content items: - type: integer - example: - - 200 - content_bulk_action_response: - title: Content Bulk Action Response Envelope + "$ref": "#/components/schemas/article_search_highlights" + pages: + "$ref": "#/components/schemas/cursor_pages" + internal_article_search_response: + title: Internal Article Search Response type: object - description: | - Phase 1 envelope returned immediately after the request is enqueued. A future - Preview release will replace this with a polling-friendly job resource that - surfaces progress and per-item results (updated, unchanged, skipped, failed). + x-tags: + - Internal Articles + description: The results of an Internal Article search properties: type: type: string - example: content_bulk_action - status: - type: string - example: queued - content_import_source: - title: Content Import Source + description: The type of the object - `list`. + enum: + - list + example: list + total_count: + type: integer + description: The total number of Internal Articles matching the search query + example: 5 + data: + type: object + description: An object containing the results of the search. + properties: + internal_articles: + type: array + description: An array of Internal Article objects + items: + "$ref": "#/components/schemas/internal_article" + pages: + "$ref": "#/components/schemas/cursor_pages" + article_statistics: + title: Article Statistics type: object - x-tags: - - AI Content - description: An external source for External Pages that you add to your Fin - Content Library. - nullable: false + description: The statistics of an article. + nullable: true properties: type: type: string - description: Always external_page + description: The type of object - `article_statistics`. enum: - - content_import_source - default: content_import_source - example: content_import_source - id: - type: integer - description: The unique identifier for the content import source which is - given by Intercom. - example: 1234 - last_synced_at: + - article_statistics + default: article_statistics + example: article_statistics + views: type: integer - format: date-time - description: The time when the content import source was last synced. - example: 1672928610 - sync_behavior: - type: string - description: If you intend to create or update External Pages via the API, - this should be set to `api`. - enum: - - api - - automatic - - manual - example: api - status: - type: string - description: The status of the content import source. - enum: - - active - - deactivated - default: active - example: active - url: - type: string - description: The URL of the root of the external source. - example: https://help.example.com/ - created_at: + description: The number of total views the article has received. + example: 10 + conversions: type: integer - format: date-time - description: The time when the content import source was created. - example: 1672928359 - updated_at: + description: The number of conversations started from the article. + example: 0 + reactions: type: integer - format: date-time - description: The time when the content import source was last updated. - example: 1672928610 - audience_ids: - type: array - items: - type: integer - description: The unique identifiers for the audiences associated with this content import source. - example: - - 5678 - required: - - id - - type - - url - - sync_behavior - - status - - created_at - - updated_at - - last_synced_at - content_import_sources_list: - title: Content Import Sources + description: The number of total reactions the article has received. + example: 10 + happy_reaction_percentage: + type: number + format: float + description: The percentage of happy reactions the article has received + against other types of reaction. + example: 40.0 + neutral_reaction_percentage: + type: number + format: float + description: The percentage of neutral reactions the article has received + against other types of reaction. + example: 40.0 + sad_reaction_percentage: + type: number + format: float + description: The percentage of sad reactions the article has received against + other types of reaction. + example: 20.0 + article_translated_content: + title: Article Translated Content type: object - x-tags: - - AI Content - description: This will return a list of the content import sources for the App. - nullable: false + description: The Translated Content of an Article. The keys are the locale codes + and the values are the translated content of the article. + nullable: true properties: type: type: string - description: The type of the object - `list`. + description: The type of object - article_translated_content. enum: - - list - example: list - pages: - "$ref": "#/components/schemas/pages_link" - total_count: - type: integer - description: A count of the total number of content import sources. - example: 1 - data: - type: array - description: An array of Content Import Source objects - items: - "$ref": "#/components/schemas/content_import_source" - content_source: - title: Content Source + - + - article_translated_content + example: article_translated_content + nullable: true + ar: + description: The content of the article in Arabic + "$ref": "#/components/schemas/article_content" + bg: + description: The content of the article in Bulgarian + "$ref": "#/components/schemas/article_content" + bs: + description: The content of the article in Bosnian + "$ref": "#/components/schemas/article_content" + ca: + description: The content of the article in Catalan + "$ref": "#/components/schemas/article_content" + cs: + description: The content of the article in Czech + "$ref": "#/components/schemas/article_content" + da: + description: The content of the article in Danish + "$ref": "#/components/schemas/article_content" + de: + description: The content of the article in German + "$ref": "#/components/schemas/article_content" + el: + description: The content of the article in Greek + "$ref": "#/components/schemas/article_content" + en: + description: The content of the article in English + "$ref": "#/components/schemas/article_content" + es: + description: The content of the article in Spanish + "$ref": "#/components/schemas/article_content" + et: + description: The content of the article in Estonian + "$ref": "#/components/schemas/article_content" + fi: + description: The content of the article in Finnish + "$ref": "#/components/schemas/article_content" + fr: + description: The content of the article in French + "$ref": "#/components/schemas/article_content" + he: + description: The content of the article in Hebrew + "$ref": "#/components/schemas/article_content" + hr: + description: The content of the article in Croatian + "$ref": "#/components/schemas/article_content" + hu: + description: The content of the article in Hungarian + "$ref": "#/components/schemas/article_content" + id: + description: The content of the article in Indonesian + "$ref": "#/components/schemas/article_content" + it: + description: The content of the article in Italian + "$ref": "#/components/schemas/article_content" + ja: + description: The content of the article in Japanese + "$ref": "#/components/schemas/article_content" + ko: + description: The content of the article in Korean + "$ref": "#/components/schemas/article_content" + lt: + description: The content of the article in Lithuanian + "$ref": "#/components/schemas/article_content" + lv: + description: The content of the article in Latvian + "$ref": "#/components/schemas/article_content" + mn: + description: The content of the article in Mongolian + "$ref": "#/components/schemas/article_content" + nb: + description: The content of the article in Norwegian + "$ref": "#/components/schemas/article_content" + nl: + description: The content of the article in Dutch + "$ref": "#/components/schemas/article_content" + pl: + description: The content of the article in Polish + "$ref": "#/components/schemas/article_content" + pt: + description: The content of the article in Portuguese (Portugal) + "$ref": "#/components/schemas/article_content" + ro: + description: The content of the article in Romanian + "$ref": "#/components/schemas/article_content" + ru: + description: The content of the article in Russian + "$ref": "#/components/schemas/article_content" + sl: + description: The content of the article in Slovenian + "$ref": "#/components/schemas/article_content" + sr: + description: The content of the article in Serbian + "$ref": "#/components/schemas/article_content" + sv: + description: The content of the article in Swedish + "$ref": "#/components/schemas/article_content" + tr: + description: The content of the article in Turkish + "$ref": "#/components/schemas/article_content" + vi: + description: The content of the article in Vietnamese + "$ref": "#/components/schemas/article_content" + pt-BR: + description: The content of the article in Portuguese (Brazil) + "$ref": "#/components/schemas/article_content" + zh-CN: + description: The content of the article in Chinese (China) + "$ref": "#/components/schemas/article_content" + zh-TW: + description: The content of the article in Chinese (Taiwan) + "$ref": "#/components/schemas/article_content" + assign_conversation_request: + title: Assign Conversation Request type: object - x-tags: - - AI Content Source - description: The content source used by AI Agent in the conversation. - properties: - content_type: - type: string - description: The type of the content source. - example: content_snippet - enum: - - file - - article - - external_content - - content_snippet - - workflow_connector_action - url: - type: string - description: The internal URL linking to the content source for teammates. - example: "/fin-ai-agent/content?content=content_snippet&id=3234924" - title: - type: string - description: The title of the content source. - example: My internal content snippet - locale: - type: string - description: The ISO 639 language code of the content source. - example: en - content_sources_list: - title: Content Source List - nullable: false + description: Payload of the request to assign a conversation properties: - type: + message_type: type: string enum: - - content_source.list - example: content_source.list - total_count: - type: integer - description: The total number of content sources used by AI Agent in the - conversation. - example: 1 - content_sources: - type: array - description: The content sources used by AI Agent in the conversation. - items: - "$ref": "#/components/schemas/content_source" - content_search_article_content_item: - title: Content Search Article Content Item - type: object - description: A single locale variant of a help center article returned from - Knowledge Hub search. - properties: + - assignment + example: assignment type: type: string - description: Always `article_content`. enum: - - article_content - example: article_content - id: - type: string - description: The unique identifier of the article content. - example: '678' - title: - type: string - description: The localized title of the article. - example: Billing FAQ - locale: - type: string - description: The locale of this article content. - example: en - content_search_article_item: - title: Content Search Article Item - type: object - description: A help center article result from Knowledge Hub search, with - one nested `article_content` entry per locale. - required: - - type - properties: - type: + - admin + - team + example: admin + admin_id: type: string - description: Always `article`. - enum: - - article - example: article - id: + description: The id of the admin who is performing the action. + example: '12345' + assignee_id: type: string - description: The unique identifier of the article. - example: '345' - title: + description: The `id` of the `admin` or `team` which will be assigned the + conversation. A conversation can be assigned both an admin and a team.\nSet + `0` if you want this assign to no admin or team (ie. Unassigned). + example: '4324241' + body: type: string - description: The article's canonical title. - example: Billing FAQ - contents: - type: array - description: One entry per locale of the article. - items: - "$ref": "#/components/schemas/content_search_article_content_item" - content_search_default_item: - title: Content Search Default Item - type: object - description: The flat result shape returned from Knowledge Hub search for - content snippets, external pages, uploaded files, and internal articles. + description: Optionally you can send a response in the conversation when + it is assigned. + example: Let me pass you over to one of my colleagues. required: + - message_type - type - properties: - type: - type: string - description: The kind of content item. - enum: - - content_snippet - - external_content - - file_source_content - - internal_article - example: content_snippet - id: - type: string - description: The unique identifier of the content item. - example: '123' - title: - type: string - description: The display title of the content item. - example: Billing FAQ - content_search_response: - title: Content Search Response + - admin_id + - assignee_id + attach_contact_to_conversation_request: + title: Assign Conversation Request type: object - description: A paginated list of Knowledge Hub content results matching a - search query. + description: Payload of the request to assign a conversation properties: - type: + admin_id: type: string - description: Always `list`. - enum: - - list - example: list - total_count: - type: integer - description: Total number of results matching the query. - example: 5 - pages: + description: The `id` of the admin who is adding the new participant. + example: '12345' + customer: type: object - description: Pagination metadata, including links to neighbouring pages. - properties: - type: - type: string - enum: - - pages - example: pages - page: - type: integer - description: The current page number. - example: 1 - per_page: - type: integer - description: Number of results per page. - example: 10 - total_pages: - type: integer - description: Total number of pages of results. - example: 1 - next: - type: string - format: uri - description: A link to the next page of results, or null when on - the last page. - nullable: true - example: https://api.intercom.io/content/search?query=billing&page=2 - prev: - type: string - format: uri - description: A link to the previous page of results, or null when - on the first page. - nullable: true - example: - data: - type: array - description: The list of matched content items. Each item's `type` - field determines its shape. - items: - "$ref": "#/components/schemas/content_search_result" - content_search_result: - title: Content Search Result - description: A single search result. The `type` field discriminates between - the flat shape used for snippets, external pages, files, and internal - articles, and the nested shape used for help center articles. - oneOf: - - "$ref": "#/components/schemas/content_search_default_item" - - "$ref": "#/components/schemas/content_search_article_item" - discriminator: - propertyName: type - mapping: - content_snippet: "#/components/schemas/content_search_default_item" - external_content: "#/components/schemas/content_search_default_item" - file_source_content: "#/components/schemas/content_search_default_item" - internal_article: "#/components/schemas/content_search_default_item" - article: "#/components/schemas/content_search_article_item" - content_snippet: - title: Content Snippet + oneOf: + - title: Intercom User ID + properties: + intercom_user_id: + type: string + description: The identifier for the contact as given by Intercom. + example: 6329bd9ffe4e2e91dac76188 + customer: + "$ref": "#/components/schemas/customer_request" + required: + - intercom_user_id + - title: User ID + properties: + user_id: + type: string + description: The external_id you have defined for the contact who + is being added as a participant. + example: 6329bd9ffe4e2e91dac76188 + customer: + "$ref": "#/components/schemas/customer_request" + required: + - user_id + - title: Email + properties: + email: + type: string + description: The email you have defined for the contact who is being + added as a participant. + example: winstonsmith@truth.org + customer: + "$ref": "#/components/schemas/customer_request" + required: + - email + away_status_reason: type: object - x-tags: - - Content Snippets - description: A content snippet is a reusable piece of content for your AI agent - and Copilot. - nullable: false properties: type: type: string - description: String representing the object's type. Always has the value - `content_snippet`. - example: content_snippet + example: "away_status_reason" id: type: string - description: The unique identifier for the content snippet. - example: '123' - title: - type: string - description: The title of the content snippet. - nullable: true - example: How to reset your password - locale: + description: "The unique identifier for the away status reason" + label: type: string - description: The locale of the content snippet. - example: en - json_blocks: - type: array - description: The content blocks that make up the body of the snippet. - items: - type: object - example: - - type: paragraph - text: Navigate to Settings > Security > Reset password. - body_markdown: + description: "The display text for the away status reason" + example: "On a break" + emoji: type: string - nullable: true - description: The body of the content snippet in markdown. - example: "# How to reset your password\n\nNavigate to Settings > Security > Reset password.\n" - chatbot_availability: - type: integer - deprecated: true - description: Deprecated. Use ai_chatbot_availability instead. Whether this - snippet is available for Fin (1 = on, 0 = off). - example: 1 - copilot_availability: + description: "The emoji associated with the status reason" + example: "☕" + order: type: integer - deprecated: true - description: Deprecated. Use ai_copilot_availability instead. Whether this - snippet is available for Copilot (1 = on, 0 = off). + description: "The display order of the status reason" example: 1 - ai_chatbot_availability: - type: boolean - description: Whether the content snippet is available for AI Chatbot (Fin). - example: true - ai_copilot_availability: - type: boolean - description: Whether the content snippet is available for AI Copilot. - example: true - ai_sales_agent_availability: + deleted: type: boolean - description: Whether the content snippet is available for AI Sales Agent. - example: true + description: "Whether the status reason has been soft deleted" + example: false created_at: type: integer - description: The time the snippet was created as a UNIX timestamp. - example: 1663597223 + description: "The Unix timestamp when the status reason was created" + example: 1734537243 updated_at: type: integer - description: The time the snippet was last updated as a UNIX timestamp. - example: 1663597223 - audience_ids: - type: array - nullable: true - description: >- - The list of audience IDs this content snippet is targeted to for Fin AI Agent. - Empty array means no audience targeting is set. - items: - type: integer - example: - - 1 - - 2 - content_snippet_list: - title: Content Snippet List + description: "The Unix timestamp when the status reason was last updated" + example: 1734537243 + away_status_reason_list: + title: Away Status Reasons type: object - description: A paginated list of content snippets. - nullable: false + description: A list of away status reasons. properties: type: type: string + description: The type of the object enum: - list example: list data: type: array - description: An array of content snippet objects. + description: A list of away status reason objects. items: - "$ref": "#/components/schemas/content_snippet" - total_count: - type: integer - description: The total number of content snippets. - example: 1 - page: - type: integer - description: The current page number. - example: 1 - per_page: - type: integer - description: The number of results per page. - example: 50 - total_pages: - type: integer - description: The total number of pages. - example: 1 - content_snippet_create_request: - title: Create Content Snippet Request + "$ref": "#/components/schemas/away_status_reason" + close_conversation_request: + title: Close Conversation Request type: object - description: The request payload for creating a content snippet. You must provide - either `json_blocks` or `body_markdown` for the snippet content — they are - mutually exclusive. - nullable: false - required: - - title + description: Payload of the request to close a conversation properties: - title: + message_type: type: string - description: The title of the content snippet. - maxLength: 255 - example: How to reset your password - json_blocks: - type: array - description: The content blocks that make up the body of the snippet. Mutually - exclusive with `body_markdown`. - items: - type: object - example: - - type: paragraph - text: Navigate to Settings > Security > Reset password. - body_markdown: - type: string - description: The content of the snippet in markdown. An alternative to `json_blocks` — you - can provide content as markdown instead of structured blocks. Mutually exclusive - with `json_blocks`. - example: "# Hello\n\nSome content.\n" - locale: + enum: + - close + example: close + type: type: string - description: The locale of the content snippet. Defaults to `en`. - default: en - example: en - audience_ids: - type: array - nullable: true - description: >- - The list of audience IDs to target this content snippet to for Fin AI Agent. - Pass an empty array or omit the field for no audience targeting. - Unknown audience IDs return a `404` error with no partial commit. - items: - type: integer - example: - - 1 - - 2 - ai_chatbot_availability: - type: boolean - description: Whether the content snippet should be available for AI Chatbot - (Fin). Defaults to false. - default: false - example: true - ai_copilot_availability: - type: boolean - description: Whether the content snippet should be available for AI Copilot. - Defaults to false. - default: false - example: true - ai_sales_agent_availability: - type: boolean - description: Whether the content snippet should be available for AI Sales - Agent. Defaults to false. - default: false - example: true - content_snippet_update_request: - title: Update Content Snippet Request - type: object - description: The request payload for updating a content snippet. All fields - are optional — only provided fields will be updated. `json_blocks` and - `body_markdown` are mutually exclusive. - nullable: false - properties: - title: + enum: + - admin + example: admin + admin_id: type: string - description: The title of the content snippet. - maxLength: 255 - example: How to reset your password - json_blocks: - type: array - description: The content blocks that make up the body of the snippet. Mutually - exclusive with `body_markdown`. - items: - type: object - example: - - type: paragraph - text: Navigate to Settings > Security > Reset password. - body_markdown: - type: string - description: The content of the snippet in markdown. An alternative to `json_blocks` — you - can provide content as markdown instead of structured blocks. Mutually exclusive - with `json_blocks`. - example: "## Updated heading\n\nNew content.\n" - locale: + description: The id of the admin who is performing the action. + example: '12345' + body: type: string - description: The locale of the content snippet. - example: en - audience_ids: - type: array - nullable: true - description: >- - The list of audience IDs to target this content snippet to for Fin AI Agent. - Omitting the field leaves existing audience memberships unchanged (PATCH semantics). - Pass `[]` to clear all audience memberships. - Unknown audience IDs return a `404` error with no partial commit. - items: - type: integer - example: - - 1 - - 2 - ai_chatbot_availability: - type: boolean - description: Whether the content snippet should be available for AI Chatbot - (Fin). - example: true - ai_copilot_availability: - type: boolean - description: Whether the content snippet should be available for AI Copilot. - example: true - ai_sales_agent_availability: - type: boolean - description: Whether the content snippet should be available for AI Sales - Agent. - example: true - conversation_list_item: - title: Conversation List Item + description: Optionally you can leave a message in the conversation to provide + additional context to the user and other teammates. + example: " This conversation is now closed!" + required: + - message_type + - type + - admin_id + collection: + title: Collection type: object x-tags: - - Conversations - description: The data returned about your conversations when you list or search - them. + - Help Center + description: Collections are top level containers for Articles within the Help + Center. properties: - type: - type: string - description: Always conversation. - example: conversation id: type: string - description: The id representing the conversation. - example: '1295' - title: + description: The unique identifier for the collection which is given by + Intercom. + example: '6871119' + workspace_id: + type: string + description: The id of the workspace which the collection belongs to. + example: hfi1bx4l + name: + type: string + description: The name of the collection. For multilingual collections, this + will be the name of the default language's content. + example: Default language name + description: type: string nullable: true - description: The title given to the conversation. - example: Conversation Title + description: The description of the collection. For multilingual help centers, + this will be the description of the collection for the default language. + example: Default language description created_at: type: integer format: date-time - description: The time the conversation was created. - example: 1663597223 + description: The time when the article was created (seconds). For multilingual + articles, this will be the timestamp of creation of the default language's + content. + example: 1672928359 updated_at: type: integer format: date-time - description: The last time the conversation was updated. - example: 1663597260 - waiting_since: - type: integer - format: date-time + description: The time when the article was last updated (seconds). For multilingual + articles, this will be the timestamp of last update of the default language's + content. + example: 1672928610 + url: + type: string nullable: true - description: 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. - example: 1663597260 - snoozed_until: - type: integer - format: date-time + description: The URL of the collection. For multilingual help centers, this + will be the URL of the collection for the default language. + example: http://intercom.test/help/collection/name + icon: + type: string nullable: true - description: 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. - example: 1663597260 - open: - type: boolean - description: Indicates whether a conversation is open (true) or closed (false). - example: true - state: + description: The icon of the collection. + example: book-bookmark + order: + type: integer + description: The order of the section in relation to others sections within + a collection. Values go from `0` upwards. `0` is the default if there's + no order. + example: '1' + default_locale: type: string - enum: - - open - - closed - - snoozed - description: Can be set to "open", "closed" or "snoozed". - example: open - read: - type: boolean - description: Indicates whether a conversation has been read. - example: true - priority: + description: The default locale of the help center. This field is only returned + for multilingual help centers. + example: en + translated_content: + nullable: true + "$ref": "#/components/schemas/group_translated_content" + parent_id: type: string - enum: - - none - - low - - medium - - high - - urgent - description: The priority level of the conversation. Returns one of none, - low, medium, high, or urgent. - example: high - admin_assignee_id: - type: integer - description: The id of the admin assigned to the conversation. If it's not - assigned to an admin it will return 0. - example: 0 - team_assignee_id: + nullable: true + description: The id of the parent collection. If `null` then it is the first + level collection. + example: '6871118' + help_center_id: type: integer - description: The id of the team assigned to the conversation. If it's not - assigned to a team it will return 0. - example: 5017691 - company: - "$ref": "#/components/schemas/company" nullable: true - description: The company associated with the conversation. - tags: - "$ref": "#/components/schemas/tags" - conversation_rating: - "$ref": "#/components/schemas/conversation_rating" - source: - "$ref": "#/components/schemas/conversation_source" - contacts: - "$ref": "#/components/schemas/conversation_contacts" - teammates: - "$ref": "#/components/schemas/conversation_teammates" - custom_attributes: - "$ref": "#/components/schemas/custom_attributes" - first_contact_reply: - "$ref": "#/components/schemas/conversation_first_contact_reply" - sla_applied: - "$ref": "#/components/schemas/sla_applied" - statistics: - "$ref": "#/components/schemas/conversation_statistics" - linked_objects: - "$ref": "#/components/schemas/linked_object_list" - ai_agent_participated: + description: The id of the help center the collection is in. + example: '123' + collection_list: + title: Collections + type: object + description: This will return a list of Collections for the App. + properties: + type: + type: string + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: A count of the total number of collections. + example: 1 + data: + type: array + description: An array of collection objects + items: + "$ref": "#/components/schemas/collection" + brand: + type: object + title: Brand + description: Represents a branding configuration for the workspace + x-tags: + - Brands + properties: + type: + type: string + description: The type of object + example: brand + id: + type: string + description: Unique brand identifier. For default brand, matches the workspace ID + example: "10" + name: + type: string + description: Display name of the brand + example: "Default Brand" + is_default: type: boolean - description: Indicates whether the AI Agent participated in the conversation. + description: Whether this is the workspace's default brand example: true - ai_agent: - "$ref": "#/components/schemas/ai_agent" - nullable: true - sales_agent_participated: - type: boolean - description: Indicates whether the Sales Agent participated in the conversation. - example: false - sales_agent: - "$ref": "#/components/schemas/sales_agent" - nullable: true - channel: - allOf: - - "$ref": "#/components/schemas/conversation_channel" - type: object - nullable: true - description: The channel through which the conversation was initiated and its current channel. - external_references: + created_at: + type: integer + format: date-time + description: Unix timestamp of brand creation + example: 1673778600 + updated_at: + type: integer + format: date-time + description: Unix timestamp of last modification + example: 1711031100 + help_center_id: + type: string + description: Associated help center identifier + example: "10" + default_address_settings_id: + type: string + description: Default email settings ID for this brand + example: "15" + brand_list: + type: object + title: Brand List + description: A list of brands + x-tags: + - Brands + properties: + type: + type: string + description: The type of object + example: list + data: type: array - description: References linking this conversation to records in an external helpdesk or CRM system. Populated for Fin Standalone workspaces synced from an external platform; an empty array otherwise. Sorted alphabetically by `type` and capped at 20 entries. items: - "$ref": "#/components/schemas/conversation_external_reference" - example: - - type: zendesk_ticket - id: '3633338' - - type: zendesk_sunshine_conversation - id: abc-def-uuid - monitor_evaluations: + $ref: "#/components/schemas/brand" + bulk_update_contacts_request: + title: Bulk Update Contacts Request + type: object + description: Request body for bulk updating contacts. + required: + - contacts + properties: + contacts: type: array - description: QA monitor evaluations that flagged this conversation. Only included when `include_monitors=true` is passed as a query parameter. + description: An array of contact objects to update. Each must include an `id` + and the fields to update. Maximum 100 contacts per request. + maxItems: 100 items: - "$ref": "#/components/schemas/conversation_monitor_evaluation" - scorecards: + type: object + required: + - id + properties: + id: + type: string + description: The unique identifier for the contact. + example: abc123 + email: + type: string + description: The contact's email address. + example: joe@example.com + name: + type: string + description: The contact's name. + example: Joe Bloggs + language_override: + type: string + description: A preferred language setting for the contact, used by + the Intercom Messenger. + example: fr + user_id: + type: string + description: A unique identifier for the contact that you provide. Maps to the contact's external user ID. + example: '25' + phone: + type: string + description: The contact's phone number. + example: "+353871234567" + owner_id: + type: integer + description: The ID of the teammate who owns the contact. + example: 123 + unsubscribed_from_emails: + type: boolean + description: Whether the contact is unsubscribed from emails. + example: true + avatar: + type: string + description: An image URL for the contact's avatar. You can also pass an object with an `image_url` field. + example: https://www.example.com/avatar.png + custom_attributes: + type: object + description: Custom attributes to update on the contact. + companies: + type: array + description: A list of companies to associate with the contact. Each company is identified by the `company_id` you have defined. Companies that do not exist are created. + items: + type: object + properties: + company_id: + type: string + description: The company ID you have defined for the company. + example: '6' + name: + type: string + description: The name of the company. + example: Blue Sun + company: + type: object + description: A single company to associate with the contact, identified by the `company_id` you have defined. Created if it does not exist. + properties: + company_id: + type: string + description: The company ID you have defined for the company. + example: '6' + name: + type: string + description: The name of the company. + example: Blue Sun + tags: + type: object + description: | + Tags to add to or remove from the contact. Each tag is identified by its `id`, which must be a positive integer for a tag that already exists in your workspace. Tag application is best-effort: unknown tag IDs are skipped while the rest of the contact update still applies. Per-tag results are not yet returned in the job status. + properties: + add: + type: array + description: Tags to add to the contact. + items: + type: object + required: + - id + properties: + id: + type: string + description: The ID of an existing tag to add to the contact. + example: '123' + remove: + type: array + description: Tags to remove from the contact. + items: + type: object + required: + - id + properties: + id: + type: string + description: The ID of an existing tag to remove from the contact. + example: '456' + job: + type: object + description: Optional. Include to append tasks to an existing job. + properties: + id: + type: string + description: The ID of an existing bulk job to append to. + example: job_v2_1 + collect_agent_input_request: + title: Collect Agent Input Request + type: object + x-tags: + - Procedures + description: Request body for submitting human-collected input to a HITL procedure + step. + properties: + step_id: + type: string + description: The step_id from the webhook payload, identifying which HITL + step this response is for. + example: d5b81f72-adb9-4317-b973-75b3c3624c09 + attribute_values: type: array - description: QA scorecard results for this conversation. Only included when `include_scorecards=true` is passed as a query parameter. + description: Array of attribute values matching the attributes_to_collect + from the webhook payload. Must include a value for every attribute listed. items: - "$ref": "#/components/schemas/conversation_scorecard" - conversation: - title: Conversation + type: object + properties: + identifier: + type: string + description: Must exactly match an identifier from the webhook's attributes_to_collect + array. + example: workflow_local_variables.72c5a6b3-3cce-41d8-8e30-14da40791958 + value: + description: The value for this attribute. Must be type-compatible + with the attribute's data_type from the webhook (e.g., boolean for + boolean attributes, option ID string for list attributes). + example: true + required: + - identifier + - value + required: + - step_id + - attribute_values + company: + title: Company type: object x-tags: - - Conversations - description: 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. + - Companies + description: Companies allow you to represent organizations using your product. + Each company will have its own description and be associated with contacts. + You can fetch, create, update and list companies. properties: type: type: string - description: Always conversation. - example: conversation + description: Value is `company` + enum: + - company + example: company id: type: string - description: The id representing the conversation. - example: '1295' - title: + description: The Intercom defined id representing the company. + example: 531ee472cce572a6ec000006 + name: + type: string + description: The name of the company. + example: Blue Sun + app_id: + type: string + description: The Intercom defined code of the workspace the company is associated + to. + example: ecahpwf5 + plan: + type: object + properties: + type: + type: string + description: Value is always "plan" + example: plan + id: + type: string + description: The id of the plan + example: '269315' + name: + type: string + description: The name of the plan + example: Pro + company_id: type: string - nullable: true - description: The title given to the conversation. - example: Conversation Title + description: The company id you have defined for the company. + example: '6' + remote_created_at: + type: integer + description: The time the company was created by you. + example: 1663597223 created_at: type: integer - format: date-time - description: The time the conversation was created. + description: The time the company was added in Intercom. example: 1663597223 updated_at: type: integer - format: date-time - description: The last time the conversation was updated. - example: 1663597260 - waiting_since: + description: The last time the company was updated. + example: 1663597223 + last_request_at: type: integer - format: date-time - nullable: true - description: 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. - example: 1663597260 - snoozed_until: + description: The time the company last recorded making a request. + example: 1663597223 + size: type: integer - format: date-time - nullable: true - description: 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. - example: 1663597260 - open: - type: boolean - description: Indicates whether a conversation is open (true) or closed (false). - example: true - state: + description: The number of employees in the company. + example: 100 + website: type: string - enum: - - open - - closed - - snoozed - description: Can be set to "open", "closed" or "snoozed". - example: open - read: - type: boolean - description: Indicates whether a conversation has been read. - example: true - priority: + description: The URL for the company website. + example: https://www.intercom.com + industry: type: string - enum: - - none - - low - - medium - - high - - urgent - description: The priority level of the conversation. Returns one of none, - low, medium, high, or urgent. - example: high - admin_assignee_id: + description: The industry that the company operates in. + example: Software + monthly_spend: type: integer - description: The id of the admin assigned to the conversation. If it's not - assigned to an admin it will return 0. - example: 0 - team_assignee_id: + description: How much revenue the company generates for your business. + example: 100 + session_count: type: integer - description: The id of the team assigned to the conversation. If it's not - assigned to a team it will return 0. - example: 5017691 - company: - "$ref": "#/components/schemas/company" - nullable: true - description: The company associated with the conversation. - tags: - "$ref": "#/components/schemas/tags" - conversation_rating: - "$ref": "#/components/schemas/conversation_rating" - source: - "$ref": "#/components/schemas/conversation_source" - contacts: - "$ref": "#/components/schemas/conversation_contacts" - teammates: - "$ref": "#/components/schemas/conversation_teammates" + description: How many sessions the company has recorded. + example: 100 + user_count: + type: integer + description: The number of users in the company. + example: 100 custom_attributes: - "$ref": "#/components/schemas/custom_attributes" - first_contact_reply: - "$ref": "#/components/schemas/conversation_first_contact_reply" - sla_applied: - "$ref": "#/components/schemas/sla_applied" - statistics: - "$ref": "#/components/schemas/conversation_statistics" - conversation_parts: - "$ref": "#/components/schemas/conversation_parts" - linked_objects: - "$ref": "#/components/schemas/linked_object_list" - ai_topics: - "$ref": "#/components/schemas/ai_topics" - ai_agent_participated: - type: boolean - description: Indicates whether the AI Agent participated in the conversation. - example: true - ai_agent: - "$ref": "#/components/schemas/ai_agent" - nullable: true - sales_agent_participated: - type: boolean - description: Indicates whether the Sales Agent participated in the conversation. - example: false - sales_agent: - "$ref": "#/components/schemas/sales_agent" - nullable: true - channel: - allOf: - - "$ref": "#/components/schemas/conversation_channel" type: object - nullable: true - description: The channel through which the conversation was initiated and its current channel. - external_references: + description: The custom attributes you have set on the company. + additionalProperties: + type: string + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + tags: + type: object + description: The list of tags associated with the company + properties: + type: + type: string + description: The type of the object + enum: + - tag.list + tags: + type: array + items: + "$ref": "#/components/schemas/tag_basic" + segments: + type: object + description: The list of segments associated with the company + properties: + type: + type: string + description: The type of the object + enum: + - segment.list + segments: + type: array + items: + "$ref": "#/components/schemas/segment" + company_attached_contacts: + title: Company Attached Contacts + type: object + description: A list of Contact Objects + properties: + type: + type: string + description: The type of object - `list` + enum: + - list + example: list + data: type: array - description: References linking this conversation to records in an external helpdesk or CRM system. Populated for Fin Standalone workspaces synced from an external platform; an empty array otherwise. Sorted alphabetically by `type` and capped at 20 entries. + description: An array containing Contact Objects items: - "$ref": "#/components/schemas/conversation_external_reference" - example: - - type: zendesk_ticket - id: '3633338' - - type: zendesk_sunshine_conversation - id: abc-def-uuid - monitor_evaluations: + "$ref": "#/components/schemas/contact" + total_count: + type: integer + description: The total number of contacts + example: 100 + pages: + "$ref": "#/components/schemas/cursor_pages" + company_attached_segments: + title: Company Attached Segments + type: object + description: A list of Segment Objects + properties: + type: + type: string + description: The type of object - `list` + enum: + - list + example: list + data: + type: array + description: An array containing Segment Objects + items: + "$ref": "#/components/schemas/segment" + company_list: + title: Companies + type: object + description: This will return a list of companies for the App. + properties: + type: + type: string + description: The type of object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: The total number of companies. + example: 100 + data: type: array - description: QA monitor evaluations that flagged this conversation. Only included when `include_monitors=true` is passed as a query parameter. + description: An array containing Company Objects. items: - "$ref": "#/components/schemas/conversation_monitor_evaluation" - scorecards: + "$ref": "#/components/schemas/company" + company_scroll: + title: Company Scroll + type: object + description: Companies allow you to represent organizations using your product. + Each company will have its own description and be associated with contacts. + You can fetch, create, update and list companies. + nullable: true + properties: + type: + type: string + description: The type of object - `list` + enum: + - list + example: list + data: type: array - description: QA scorecard results for this conversation. Only included when `include_scorecards=true` is passed as a query parameter. items: - "$ref": "#/components/schemas/conversation_scorecard" - conversation_monitor_evaluation: - title: Conversation Monitor Evaluation + "$ref": "#/components/schemas/company" + pages: + "$ref": "#/components/schemas/cursor_pages" + total_count: + type: integer + description: The total number of companies + nullable: true + example: 100 + scroll_param: + type: string + description: The scroll parameter to use in the next request to fetch the + next page of results. + example: 25b649f7-4d33-4ef6-88f5-60e5b8244309 + contact: + title: Contact type: object x-tags: - - Conversations - description: A QA monitor evaluation that flagged this conversation. Returned in the `monitor_evaluations` array on conversation responses when `include_monitors=true` is passed. + - Contacts + x-fern-sdk-group-name: contacts + description: Contacts represent your leads and users in Intercom. properties: - monitor_id: + type: type: string - description: The unique identifier of the monitor that produced this evaluation. - example: '12345' - monitor_name: + description: The type of object. + example: contact + id: type: string - nullable: true - description: The name of the monitor at the time of evaluation. Null if the monitor has since been deleted. - example: Customer complaint handling - monitor_type: + description: The unique identifier for the contact which is given by Intercom. + example: 5ba682d23d7cf92bef87bfd4 + external_id: type: string nullable: true - description: The type of the monitor. Null if the monitor has since been deleted. - example: prompt - result: + description: The unique identifier for the contact which is provided by + the Client. + example: f3b87a2e09d514c6c2e79b9a + workspace_id: type: string - description: The evaluation outcome reported by the monitor. - example: flagged - explanation: + description: The id of the workspace which the contact belongs to. + example: ecahpwf5 + role: type: string - nullable: true - description: The reasoning provided by the monitor for its result. May be null if no reasoning was generated. - example: The customer mentioned wanting a refund without resolution. - evaluated_at: - type: integer - format: date-time - nullable: true - description: The time the monitor evaluated this conversation. Null in the rare case the underlying record's timestamp is not yet set. - example: 1719493065 - conversation_scorecard: - title: Conversation Scorecard - type: object - x-tags: - - Conversations - description: A QA scorecard result for this conversation. Returned in the `scorecards` array on conversation responses when `include_scorecards=true` is passed. - properties: - scorecard_id: + description: The role of the contact. + example: user + email: + type: string + description: The contact's email. + example: joe@example.com + email_domain: type: string - description: The unique identifier of the scorecard definition. - example: '67890' - scorecard_version_id: + description: The contact's email domain. + example: example.com + phone: type: string - description: The unique identifier of the specific scorecard version that produced this result. - example: '67891' - name: + nullable: true + description: The contacts phone. + example: "+1123456789" + formatted_phone: type: string - description: The name of the scorecard. - example: Standard QA Review - scorecard_type: + nullable: true + description: The contacts phone number normalized to the E164 format + example: "+1123456789" + name: type: string - description: The type of scorecard. - example: human - passed: - type: boolean nullable: true - description: Whether the conversation passed the scorecard. Null when the scorecard has not been scored. + description: The contacts name. + example: John Doe + owner_id: + type: integer + nullable: true + description: The id of an admin that has been assigned account ownership + of the contact. + example: 123 + has_hard_bounced: + type: boolean + description: Whether the contact has had an email sent to them hard bounce. example: true - score: - type: number + marked_email_as_spam: + type: boolean + description: Whether the contact has marked an email sent to them as spam. + example: true + unsubscribed_from_emails: + type: boolean + description: Whether the contact is unsubscribed from emails. + example: true + created_at: + type: integer + format: date-time + description: "(Unix timestamp in seconds) The time when the contact was created." + example: 1571672154 + updated_at: + type: integer + format: date-time + description: "(Unix timestamp in seconds) The time when the contact was last updated." + example: 1571672154 + signed_up_at: + type: integer + format: date-time nullable: true - description: The numeric score for the scorecard. Null when the scorecard has not been scored. - example: 0.85 - ai_score: - type: number + description: "(Unix timestamp in seconds) The time specified for when a contact signed + up." + example: 1571672154 + last_seen_at: + type: integer + format: date-time nullable: true - description: The numeric score produced by AI evaluation, if applicable. Null when not AI-scored. - example: 0.9 - evaluated_at: + description: "(Unix timestamp in seconds) The time when the contact was last seen (either + where the Intercom Messenger was installed or when specified manually)." + example: 1571672154 + last_replied_at: type: integer format: date-time nullable: true - description: The time the scorecard was last evaluated. Null in the rare case the underlying record's timestamp is not yet set. - example: 1719493065 - reviewed_teammate: - "$ref": "#/components/schemas/conversation_scorecard_reviewed_teammate" - evaluators: - type: array - description: Per-evaluator results within this scorecard. - items: - "$ref": "#/components/schemas/conversation_scorecard_evaluator" - conversation_scorecard_reviewed_teammate: - title: Reviewed Teammate - type: object - x-tags: - - Conversations - description: The teammate (or AI agent) whose handling of the conversation was reviewed by this scorecard. - properties: - type: - type: string - enum: - - ai - - admin - description: The kind of reviewee. `ai` if the conversation was handled by Fin or scored without a specific teammate; `admin` if a specific teammate was reviewed. - example: admin - admin_id: - type: string + description: "(Unix timestamp in seconds) The time when the contact last messaged in." + example: 1571672154 + last_contacted_at: + type: integer + format: date-time nullable: true - description: The id of the admin who was reviewed. Present only when `type` is `admin`. - example: '991267715' - conversation_scorecard_evaluator: - title: Conversation Scorecard Evaluator - type: object - x-tags: - - Conversations - description: A single evaluator within a scorecard, including its result for this conversation. - properties: - evaluator_id: - type: string - description: The unique identifier of the evaluator (criterion) within the scorecard. - example: '54321' - result: - allOf: - - "$ref": "#/components/schemas/conversation_scorecard_evaluator_result" + description: "(Unix timestamp in seconds) The time when the contact was last messaged." + example: 1571672154 + last_email_opened_at: + type: integer + format: date-time nullable: true - description: The evaluator's result for this conversation. Null if the evaluator was not scored. - conversation_scorecard_evaluator_result: - title: Conversation Scorecard Evaluator Result - type: object - x-tags: - - Conversations - description: The outcome of a single evaluator within a scorecard. - properties: - value: - type: string + description: "(Unix timestamp in seconds) The time when the contact last opened an + email." + example: 1571672154 + last_email_clicked_at: + type: integer + format: date-time nullable: true - description: The evaluator's selected value (typically a label such as `pass`, `fail`, or a category identifier). - example: pass - source: + description: "(Unix timestamp in seconds) The time when the contact last clicked a + link in an email." + example: 1571672154 + language_override: type: string nullable: true - description: The origin of the result (for example, `ai` or `human`). - example: ai - reasoning: + description: A preferred language setting for the contact, used by Intercom + as the language of Fin and the Messenger even if their browser has a different + setting. Supports ISO 639-1 two-letter language codes. If an unsupported + code is supplied, the field will be set to null. + example: en + browser: type: string nullable: true - description: A free-text explanation of the result. - example: The agent acknowledged the issue and resolved it within the same response. - reason_ids: - type: array - nullable: true - description: Identifiers for structured reasons assigned to the result, if any. - items: - type: string - example: - - '101' - - '102' - other_text: + description: The name of the browser which the contact is using. + example: Chrome + browser_version: type: string nullable: true - description: Free-text entered by the reviewer to supplement or stand in for the structured `reason_ids` — typically captured when the reviewer selects an "Other" option or adds a custom note. Null when not provided. - example: Agent acknowledged the issue but missed the follow-up question about billing. - conversation_channel: - title: Conversation Channel - type: object - description: The channel through which a conversation was originally initiated and its current channel. - properties: - initial: + description: The version of the browser which the contact is using. + example: 80.0.3987.132 + browser_language: type: string nullable: true - description: The channel through which the conversation was originally initiated. Possible values include `messenger`, `zendesk_sunshine`, `zendesk_ticket`, `twitter`, `email`. Returns `null` if channel data is unavailable. - example: messenger - current: + description: The language set by the browser which the contact is using. + example: en-US + os: type: string nullable: true - description: The current channel of the conversation. May differ from `initial` if the conversation was migrated between channels. Returns `null` if channel data is unavailable. - example: messenger - conversation_external_reference: - title: Conversation External Reference - type: object - description: A reference linking a conversation to a record in an external helpdesk or CRM system, surfaced for Fin Standalone workspaces. - properties: - type: - type: string - description: The type of external system the reference points to. Possible values include `zendesk_ticket`, `zendesk_sunshine_conversation`, `salesforce_case`, `salesforce_in_app_message_conversation`, `freshdesk_ticket`, `freshchat_conversation`, `hubspot_conversation`, `custom_helpdesk_conversation`, `api_conversation`. - example: zendesk_ticket - id: - type: string - description: The identifier of the record in the external system. Always serialized as a string, since some external IDs exceed 32-bit integer range. - example: '3633338' - conversation_attachment_files: - title: Conversation attachment files - type: object - description: Properties of the attachment files in a conversation part - properties: - content_type: - type: string - description: The content type of the file - example: application/json - data: - type: string - description: The base64 encoded file data. - example: ewogICJ0ZXN0IjogMQp9 - name: - type: string - description: The name of the file. - example: test.json - conversation_contacts: - title: Contacts - type: object - description: 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. - properties: - type: - type: string - description: '' - enum: - - contact.list - example: contact.list - contacts: - type: array - description: 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. - items: - "$ref": "#/components/schemas/contact_reference" - conversation_deleted: - title: Conversation Deleted - type: object - description: deleted conversation object - properties: - id: + description: The operating system which the contact is using. + example: Mac OS X + android_app_name: type: string - description: The unique identifier for the conversation. - example: 5ba682d23d7cf92bef87bfd4 - object: + nullable: true + description: The name of the Android app which the contact is using. + example: Intercom + android_app_version: type: string - description: always conversation - enum: - - conversation - example: conversation - deleted: - type: boolean - description: Whether the conversation is deleted or not. - example: true - deleted_conversation_item: - title: Conversation - type: object - x-tags: - - Conversation - description: A deleted conversation record containing its ID, metrics retained status and deletion timestamp. - properties: - type: + nullable: true + description: The version of the Android app which the contact is using. + example: 5.0.0 + android_device: type: string - description: String representing the object's type. Always has the value `conversation`. - example: 'conversation' - id: + nullable: true + description: The Android device which the contact is using. + example: Pixel 3 + android_os_version: type: string - description: The ID of the deleted conversation. - example: '512' - metrics_retained: - type: boolean - description: Whether reporting metrics are retained for this conversation ID - example: true - deleted_at: - type: integer - format: date-time - description: The time when the conversation was deleted. - example: 1734537745 - deleted_conversation_list: - title: Conversations - type: object - description: A paginated list of deleted conversation IDs. - properties: - type: + nullable: true + description: The version of the Android OS which the contact is using. + example: '10' + android_sdk_version: type: string - description: String representing the object's type. Always has the value `conversations.list`. - example: conversations.list - conversations: - type: array - description: The list of deleted conversation IDs. - items: - "$ref": "#/components/schemas/deleted_conversation_item" - total_count: - type: integer - description: Total number of items available. - example: 10 - pages: - "$ref": "#/components/schemas/pages_link" - conversation_first_contact_reply: - title: First contact reply - type: object - nullable: true - description: An object containing information on the first users message. For - a contact initiated message this will represent the users original message. - properties: - created_at: + nullable: true + description: The version of the Android SDK which the contact is using. + example: '28' + android_last_seen_at: type: integer + nullable: true format: date-time - description: '' - example: 1663597223 - type: + description: "(Unix timestamp in seconds) The time when the contact was last seen on + an Android device." + example: 1571672154 + ios_app_name: type: string - description: '' - example: conversation - url: + nullable: true + description: The name of the iOS app which the contact is using. + example: Intercom + ios_app_version: type: string nullable: true - description: '' - example: https://developers.intercom.com/ - conversation_list: - title: Conversation List + description: The version of the iOS app which the contact is using. + example: 5.0.0 + ios_device: + type: string + nullable: true + description: The iOS device which the contact is using. + example: iPhone 11 + ios_os_version: + type: string + nullable: true + description: The version of iOS which the contact is using. + example: 13.3.1 + ios_sdk_version: + type: string + nullable: true + description: The version of the iOS SDK which the contact is using. + example: 13.3.1 + ios_last_seen_at: + type: integer + nullable: true + format: date-time + description: "(Unix timestamp in seconds) The last time the contact used the iOS app." + example: 1571672154 + custom_attributes: + type: object + description: The custom attributes which are set for the contact. + avatar: + type: object + nullable: true + properties: + type: + type: string + description: The type of object + example: avatar + image_url: + type: string + format: uri + nullable: true + description: An image URL containing the avatar of a contact. + example: https://example.org/128Wash.jpg + tags: + "$ref": "#/components/schemas/contact_tags" + notes: + "$ref": "#/components/schemas/contact_notes" + companies: + "$ref": "#/components/schemas/contact_companies" + location: + "$ref": "#/components/schemas/contact_location" + social_profiles: + "$ref": "#/components/schemas/contact_social_profiles" + contact_attached_companies: + title: Contact Attached Companies type: object - description: 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. + description: A list of Company Objects properties: type: type: string - description: Always conversation.list + description: The type of object enum: - - conversation.list - example: conversation.list - conversations: + - list + example: list + companies: type: array - description: The list of conversation objects + description: An array containing Company Objects items: - "$ref": "#/components/schemas/conversation_list_item" + "$ref": "#/components/schemas/company" total_count: type: integer - description: A count of the total number of objects. - example: 12345 + description: The total number of companies associated to this contact + example: 100 pages: - "$ref": "#/components/schemas/cursor_pages" - conversation_part: - title: Conversation Part + "$ref": "#/components/schemas/pages_link" + contact_companies: + title: Contact companies type: object - description: A Conversation Part represents a message in the conversation. + nullable: false + description: An object with metadata about companies attached to a contact . Up to 10 will be displayed here. Use the url to get more. properties: - type: - type: string - description: Always conversation_part - example: conversation_part - id: - type: string - description: The id representing the conversation part. - example: '3' - part_type: - type: string - description: The type of conversation part. - example: comment - body: - type: string - nullable: true - description: The message body, which may contain HTML. For Twitter, this - will show a generic message regarding why the body is obscured. - example: "

Okay!

" - created_at: - type: integer - format: date-time - description: The time the conversation part was created. - example: 1663597223 - updated_at: - type: integer - format: date-time - description: The last time the conversation part was updated. - example: 1663597260 - notified_at: - type: integer - format: date-time - description: The time the user was notified with the conversation part. - example: 1663597260 - assigned_to: - "$ref": "#/components/schemas/reference" - nullable: true - description: The id of the admin that was assigned the conversation by this - conversation_part (null if there has been no change in assignment.) - author: - "$ref": "#/components/schemas/conversation_part_author" - attachments: - title: Conversation part attachments + data: type: array - description: A list of attachments for the part. + description: An array of company data objects attached to the contact. items: - "$ref": "#/components/schemas/part_attachment" - external_id: + "$ref": "#/components/schemas/company_data" + url: type: string - nullable: true - description: The external id of the conversation part - example: abcd1234 - redacted: + format: uri + description: Url to get more company resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/companies" + total_count: + type: integer + description: Integer representing the total number of companies attached to + this contact + example: 100 + has_more: type: boolean - description: Whether or not the conversation part has been redacted. - example: false - email_message_metadata: - "$ref": "#/components/schemas/email_message_metadata" - nullable: true - metadata: - "$ref": "#/components/schemas/conversation_part_metadata" - nullable: true - state: - type: string - enum: - - open - - closed - - snoozed - description: Indicates the current state of conversation when the conversation part was created. - example: open - tags: - type: array - description: A list of tags objects associated with the conversation part. - items: - "$ref": "#/components/schemas/tag_basic" - nullable: true - event_details: - "$ref": "#/components/schemas/event_details" - nullable: true - app_package_code: - type: string - nullable: true - example: "test-integration" - description: The app package code if this part was created via API. null if the part was not created via API. - conversation_part_author: - title: Conversation part author + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + company_data: + title: Company Data type: object - description: The author of this conversation part. Can be a Contact, Admin, - or Bot. + description: An object containing data about the companies that a contact is associated with. properties: - type: - type: string - description: The type of the author - example: admin id: type: string - description: The id of the author - example: '274' - name: + description: The unique identifier for the company which is given by Intercom. + example: 5ba682d23d7cf92bef87bfd4 + type: type: string - nullable: true - description: The name of the author - example: Operator - email: + description: The type of the object. Always company. + enum: + - company + example: company + url: type: string - format: email - description: The email of the author - example: operator+abcd1234@intercom.io - from_ai_agent: + format: uri + description: The relative URL of the company. + example: "/companies/5ba682d23d7cf92bef87bfd4" + contact_deleted: + title: Contact Deleted + description: deleted contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + deleted: type: boolean - description: If this conversation part was sent by the AI Agent + description: Whether the contact is deleted or not. example: true - is_ai_answer: - type: boolean - description: If this conversation part body was generated by the AI Agent - example: false - conversation_parts: - title: Conversation Parts + contact_list: + title: Contact List type: object - description: 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. + description: Contacts are your users in Intercom. properties: type: type: string - description: '' + description: Always list enum: - - conversation_part.list - example: conversation_part.list - conversation_parts: - title: Conversation Parts + - list + example: list + data: type: array - description: 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. + description: The list of contact objects items: - "$ref": "#/components/schemas/conversation_part" + "$ref": "#/components/schemas/contact" total_count: type: integer - description: '' - example: 1 - conversation_part_metadata: - title: Conversation Part Metadata - description: Metadata for a conversation part + description: A count of the total number of objects. + example: 100 + pages: + "$ref": "#/components/schemas/cursor_pages" + contacts_bulk_job: + title: Contacts Bulk Job type: object + x-tags: + - Contacts + description: A bulk job for updating contacts asynchronously. Track the job + status using the `state` field. properties: - quick_reply_options: - type: array - description: The quick reply options sent by the Admin or bot, presented in this conversation part. - items: - allOf: - - "$ref": "#/components/schemas/quick_reply_option" - properties: - translations: - type: object - nullable: true - description: The translations for the quick reply option. - example: { "en": "Hello", "fr": "Bonjour" } - quick_reply_uuid: + id: type: string - format: uuid - description: The unique identifier for the quick reply option that was clicked by the end user. - example: '123e4567-e89b-12d3-a456-426614174000' - conversation_rating: - title: Conversation Rating - type: object - nullable: true - description: The Conversation Rating object which contains information on the - rating and/or remark added by a Contact and the Admin assigned to the conversation. - properties: - rating: - type: integer - description: The rating, between 1 and 5, for the conversation. - example: 5 - remark: + description: The unique identifier for the bulk job. + example: job_v2_1 + type: type: string - description: An optional field to add a remark to correspond to the number - rating - example: '' + description: The type of the object. + enum: + - contacts.bulk.job + example: contacts.bulk.job + state: + type: string + description: The current state of the job. + enum: + - pending + - running + - completed + - completed_with_errors + example: running created_at: type: integer format: date-time - description: The time the rating was requested in the conversation being - rated. - example: 1671028894 + description: The time the job was created as a UNIX timestamp. + example: 1713360000 updated_at: type: integer format: date-time - description: The time the rating was last updated. - example: 1671028894 - contact: - "$ref": "#/components/schemas/contact_reference" - teammate: - "$ref": "#/components/schemas/reference" - conversation_response_time: - title: Conversation response time + description: The time the job was last updated as a UNIX timestamp. + example: 1713360060 + completed_at: + type: integer + format: date-time + nullable: true + description: The time the job completed as a UNIX timestamp. Null if not + yet completed. + example: 1713360120 + tasks: + type: array + description: The tasks that make up this bulk job. + items: + type: object + properties: + id: + type: string + description: The unique identifier for the task. + example: task_v2_1 + item_count: + type: integer + description: The number of items in this task. + example: 3 + state: + type: string + description: The current state of the task. + enum: + - pending + - running + - completed + - completed_with_errors + example: pending + created_at: + type: integer + format: date-time + description: The time the task was created as a UNIX timestamp. + example: 1713360000 + started_at: + type: integer + format: date-time + nullable: true + description: The time the task started as a UNIX timestamp. Null if + not yet started. + example: 1713360060 + completed_at: + type: integer + format: date-time + nullable: true + description: The time the task completed as a UNIX timestamp. Null + if not yet completed. + example: 1713360120 + url: + type: string + description: The URL to check the job status. + example: https://api.intercom.io/contacts/bulk/job_v2_1 + contact_location: + title: Contact Location type: object - description: Details of first response time of assigned team in seconds. + nullable: false + description: An object containing location meta data about a Intercom contact. properties: - team_id: - type: integer - description: Id of the assigned team. - example: 100 - team_name: + type: type: string - description: Name of the assigned Team, null if team does not exist, Unassigned - if no team is assigned. - example: Team One - response_time: + nullable: true + description: Always location + example: location + country: + type: string + nullable: true + description: The country that the contact is located in + example: Ireland + region: + type: string + nullable: true + description: The overal region that the contact is located in + example: Dublin + city: + type: string + nullable: true + description: The city that the contact is located in + example: Dublin + contact_notes: + title: Contact notes + type: object + nullable: false + description: An object containing notes meta data about the notes that a contact + has. Up to 10 will be displayed here. Use the url to get more. + properties: + data: + type: array + description: This object represents the notes attached to a contact. + items: + "$ref": "#/components/schemas/addressable_list" + url: + type: string + format: uri + description: Url to get more company resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/notes" + total_count: type: integer - description: First response time of assigned team in seconds. - example: 2310 - conversation_source: - title: Conversation source + description: Int representing the total number of companyies attached to + this contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + contact_reference: + title: Contact Reference type: object - description: The first message or event that started this conversation. Describes - the origin and who initiated it. + description: reference to contact object properties: type: type: string - description: The origin of this conversation. - example: email + description: always contact + enum: + - contact + example: contact id: + type: string + description: The unique identifier for the contact which is given by Intercom. + example: 5ba682d23d7cf92bef87bfd4 + external_id: type: string nullable: true - description: The id of the source message. - example: '3' - delivered_as: + description: The unique identifier for the contact which is provided by + the Client. + example: "70" + contact_reply_base_request: + title: Contact Reply Base Object + type: object + properties: + message_type: + type: string + enum: + - comment + type: type: string - description: How the conversation was initiated. - example: operator_initiated - recipients: + enum: + - user + body: + type: string + description: The text body of the comment. + created_at: + type: integer + description: The time the reply was created. If not provided, the current + time will be used. + example: 1590000000 + attachment_urls: + title: Attachment URLs type: array - nullable: true - description: The recipients of the source message. Only present for email - conversations. + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. items: - type: object - properties: - type: - type: string - description: The recipient type. One of `to`, `cc`, or `bcc`. - example: to - email: - type: string - format: email - description: The recipient email address. - example: user@example.com - drop_reason: - type: string - nullable: true - description: The reason this recipient was dropped, if applicable. - example: - reply_to: + type: string + format: uri + maxItems: 10 + reply_options: + title: Contact Quick Reply type: array - nullable: true - description: The Reply-To header addresses of the source message, where - a reply will be routed. Can differ from the sender's From address. Only - present for email conversations. + description: The quick reply selection the contact wishes to respond with. + These map to buttons displayed in the Messenger UI if sent by a bot, or the reply options sent by an Admin via the API. items: + title: Quick Reply Option type: object properties: - email: + text: type: string - format: email - description: The Reply-To email address. - example: replies@example.com - name: + description: The text of the chosen reply option. + uuid: type: string - nullable: true - description: The display name associated with the Reply-To address. - example: Support Team - subject: - type: string - nullable: true - description: The message subject. Only present for email conversations. - example: '' - body: + format: uuid + description: The unique identifier for the quick reply option selected. + required: + - text + - uuid + required: + - message_type + - type + - body + contact_reply_conversation_request: + title: Contact Reply + oneOf: + - "$ref": "#/components/schemas/contact_reply_intercom_user_id_request" + - "$ref": "#/components/schemas/contact_reply_email_request" + - "$ref": "#/components/schemas/contact_reply_user_id_request" + contact_reply_email_request: + title: Email + type: object + description: Payload of the request to reply on behalf of a contact using their + `email` + properties: + email: type: string - nullable: true - description: The message body, which may contain HTML. - example: "

Hey there!

" - author: - "$ref": "#/components/schemas/conversation_source_author" - attachments: + description: The email you have defined for the user. + attachment_files: type: array - description: A list of attachments on the source message. + description: A list of files that will be added as attachments. items: - "$ref": "#/components/schemas/part_attachment" - url: - type: string - nullable: true - description: The URL where the conversation was started. - example: https://intercom.help/company/article/123 - redacted: - type: boolean - description: Whether or not the source content has been redacted. - example: false - email_message_metadata: - "$ref": "#/components/schemas/source_email_message_metadata" - conversation_source_author: - title: Conversation source author + "$ref": "#/components/schemas/conversation_attachment_files" + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + required: + - email + contact_reply_intercom_user_id_request: + title: Intercom User ID type: object - description: The author who started the conversation. Can be a Contact, Admin, - or Bot. + description: Payload of the request to reply on behalf of a contact using their + `intercom_user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" properties: - type: + intercom_user_id: type: string - description: The type of the author. - example: admin - id: + description: The identifier for the contact as given by Intercom. + attachment_files: + type: array + description: A list of files that will be added as attachments. + items: + "$ref": "#/components/schemas/conversation_attachment_files" + required: + - intercom_user_id + contact_reply_ticket_email_request: + title: Email + type: object + description: Payload of the request to reply on behalf of a contact using their + `email` + properties: + email: type: string - nullable: true - description: The id of the author. - example: '274' - name: + description: The email you have defined for the user. + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + required: + - email + contact_reply_ticket_intercom_user_id_request: + title: Intercom User ID + type: object + description: Payload of the request to reply on behalf of a contact using their + `intercom_user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + properties: + intercom_user_id: type: string - nullable: true - description: The name of the author. - example: Jane Doe - email: + description: The identifier for the contact as given by Intercom. + required: + - intercom_user_id + contact_reply_ticket_request: + title: Contact Reply on ticket + oneOf: + - "$ref": "#/components/schemas/contact_reply_ticket_intercom_user_id_request" + - "$ref": "#/components/schemas/contact_reply_ticket_user_id_request" + - "$ref": "#/components/schemas/contact_reply_ticket_email_request" + contact_reply_ticket_user_id_request: + title: User ID + type: object + description: Payload of the request to reply on behalf of a contact using their + `user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" + properties: + user_id: type: string - format: email - nullable: true - description: The email of the author. - example: jane.doe@example.com - conversation_statistics: - title: Conversation statistics + description: The external_id you have defined for the contact. + required: + - user_id + contact_reply_user_id_request: + title: User ID type: object - nullable: true - description: A Statistics object containing all information required for reporting, - with timestamps and calculated metrics. + description: Payload of the request to reply on behalf of a contact using their + `user_id` + allOf: + - "$ref": "#/components/schemas/contact_reply_base_request" properties: - type: + user_id: type: string - description: '' - example: conversation_statistics - time_to_assignment: - type: integer - description: Duration until last assignment before first admin reply. In - seconds. - example: 2310 - time_to_admin_reply: - type: integer - description: Duration until first admin reply. Subtracts out of business - hours. In seconds. - example: 2310 - time_to_first_close: - type: integer - description: Duration until conversation was closed first time. Subtracts - out of business hours. In seconds. - example: 2310 - time_to_last_close: - type: integer - description: Duration until conversation was closed last time. Subtracts - out of business hours. In seconds. - example: 2310 - median_time_to_reply: - type: integer - description: Median based on all admin replies after a contact reply. Subtracts - out of business hours. In seconds. - example: 2310 - first_contact_reply_at: - type: integer - format: date-time - description: Time of first text conversation part from a contact. - example: 1663597233 - first_assignment_at: - type: integer - format: date-time - description: Time of first assignment after first_contact_reply_at. - example: 1663597233 - first_admin_reply_at: - type: integer - format: date-time - description: Time of first admin reply after first_contact_reply_at. - example: 1663597233 - first_close_at: - type: integer - format: date-time - description: Time of first close after first_contact_reply_at. - example: 1663597233 - last_assignment_at: - type: integer - format: date-time - description: Time of last assignment after first_contact_reply_at. - example: 1663597233 - last_assignment_admin_reply_at: - type: integer - format: date-time - description: Time of first admin reply since most recent assignment. - example: 1663597233 - last_contact_reply_at: - type: integer - format: date-time - description: Time of the last conversation part from a contact. - example: 1663597233 - last_admin_reply_at: - type: integer - format: date-time - description: Time of the last conversation part from an admin. - example: 1663597233 - last_close_at: - type: integer - format: date-time - description: Time of the last conversation close. - example: 1663597233 - last_closed_by_id: + description: The external_id you have defined for the contact. + attachment_files: + type: array + description: A list of files that will be added as attachments. You can + include up to 10 files. + items: + "$ref": "#/components/schemas/conversation_attachment_files" + maxItems: 10 + required: + - user_id + contact_segments: + title: Segments + type: object + description: A list of segments objects attached to a specific contact. + properties: + type: type: string - description: The last admin who closed the conversation. Returns a reference - to an Admin object. - example: c3po - count_reopens: - type: integer - description: Number of reopens after first_contact_reply_at. - example: 1 - count_assignments: - type: integer - description: Number of assignments after first_contact_reply_at. - example: 1 - count_conversation_parts: - type: integer - description: Total number of conversation parts. - example: 1 - assigned_team_first_response_time: + description: The type of the object + enum: + - list + example: list + data: type: array - description: An array of conversation response time objects + description: Segment objects associated with the contact. items: - "$ref": "#/components/schemas/conversation_response_time" - assigned_team_first_response_time_in_office_hours: + "$ref": "#/components/schemas/segment" + contact_social_profiles: + title: Social Profile + type: object + nullable: false + description: An object containing social profiles that a contact has. + properties: + data: type: array - description: An array of conversation response time objects within office - hours + description: A list of social profiles objects associated with the contact. items: - "$ref": "#/components/schemas/conversation_response_time" - handling_time: - type: integer - description: Time from conversation assignment to conversation close in - seconds. - example: 2310 - adjusted_handling_time: + "$ref": "#/components/schemas/social_profile" + contact_subscription_types: + title: Contact Subscription Types + type: object + nullable: false + description: An object containing Subscription Types meta data about the SubscriptionTypes + that a contact has. + properties: + data: + type: array + description: This object represents the subscriptions attached to a contact. + items: + "$ref": "#/components/schemas/addressable_list" + url: + type: string + format: uri + description: Url to get more subscription type resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/subscriptions" + total_count: type: integer - nullable: true - description: Adjusted handling time for conversation in seconds. This is the active handling time excluding idle periods when teammates are not actively working on the conversation. - example: 1800 - conversation_teammates: - title: Conversation teammates + description: Int representing the total number of subscription types attached + to this contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + contact_tags: + title: Contact Tags type: object nullable: true - description: The list of teammates who participated in the conversation (wrote - at least one conversation part). + description: An object containing tags meta data about the tags that a contact + has. Up to 10 will be displayed here. Use the url to get more. properties: - type: - type: string - description: The type of the object - `admin.list`. - example: admin.list - teammates: + data: type: array - description: The list of teammates who participated in the conversation - (wrote at least one conversation part). + description: This object represents the tags attached to a contact. items: - "$ref": "#/components/schemas/reference" - convert_conversation_to_ticket_request: - description: You can convert a Conversation to a Ticket + "$ref": "#/components/schemas/addressable_list" + url: + type: string + format: uri + description: url to get more tag resources for this contact + example: "/contacts/5ba682d23d7cf92bef87bfd4/tags" + total_count: + type: integer + description: Int representing the total number of tags attached to this + contact + example: 100 + has_more: + type: boolean + description: Whether there's more Addressable Objects to be viewed. If true, + use the url to view all + example: true + contact_archived: + title: Contact Archived + description: archived contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + archived: + type: boolean + description: Whether the contact is archived or not. + example: true + contact_unarchived: + title: Contact Unarchived + description: unarchived contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" + properties: + archived: + type: boolean + description: Whether the contact is archived or not. + example: false + contact_blocked: + title: Contact Blocked type: object - title: Convert Ticket Request Payload + description: blocked contact object + allOf: + - "$ref": "#/components/schemas/contact_reference" properties: - ticket_type_id: - type: string - description: The ID of the type of ticket you want to convert the conversation - to - example: '1234' - ticket_state_id: - type: string - description: The ID of the ticket state associated with the ticket type. - example: '123' - attributes: - "$ref": "#/components/schemas/ticket_request_custom_attributes" - required: - - ticket_type_id - convert_visitor_request: - description: You can merge a Visitor to a Contact of role type lead or user. + blocked: + type: boolean + description: Always true. + example: true + content_import_source: + title: Content Import Source type: object - title: Convert Visitor Request Payload + x-tags: + - AI Content + description: An external source for External Pages that you add to your Fin + Content Library. + nullable: false properties: type: type: string - description: Represents the role of the Contact model. Accepts `lead` or - `user`. - example: user - user: - type: object - description: The unique identifiers retained after converting or merging. - properties: - id: - type: string - description: The unique identifier for the contact which is given by - Intercom. - example: 8a88a590-e1c3-41e2-a502-e0649dbf721c - user_id: - type: string - description: A unique identifier for the contact which is given to Intercom, - which will be represented as external_id. - example: 8a88a590-e1c3-41e2-a502-e0649dbf721c - email: - type: string - description: The contact's email, retained by default if one is present. - example: winstonsmith@truth.org - anyOf: - - required: - - id - - required: - - user_id - visitor: - type: object - description: The unique identifiers to convert a single Visitor. - properties: - id: - type: string - description: The unique identifier for the contact which is given by - Intercom. - example: 8a88a590-e1c3-41e2-a502-e0649dbf721c - user_id: - type: string - description: A unique identifier for the contact which is given to Intercom. - example: 8a88a590-e1c3-41e2-a502-e0649dbf721c - email: - type: string - description: The visitor's email. - example: winstonsmith@truth.org - anyOf: - - required: - - id - - required: - - user_id - - required: - - email + description: Always external_page + enum: + - content_import_source + default: content_import_source + example: content_import_source + id: + type: integer + description: The unique identifier for the content import source which is + given by Intercom. + example: 1234 + last_synced_at: + type: integer + format: date-time + description: The time when the content import source was last synced. + example: 1672928610 + sync_behavior: + type: string + description: If you intend to create or update External Pages via the API, + this should be set to `api`. + enum: + - api + - automatic + - manual + example: api + status: + type: string + description: The status of the content import source. + enum: + - active + - deactivated + default: active + example: active + url: + type: string + description: The URL of the root of the external source. + example: https://help.example.com/ + created_at: + type: integer + format: date-time + description: The time when the content import source was created. + example: 1672928359 + updated_at: + type: integer + format: date-time + description: The time when the content import source was last updated. + example: 1672928610 + audience_ids: + type: array + items: + type: integer + description: The unique identifiers for the audiences associated with this content import source. + example: + - 5678 required: + - id - type - - user - - visitor - create_audience_request: - title: Create Audience Request + - url + - sync_behavior + - status + - created_at + - updated_at + - last_synced_at + content_import_sources_list: + title: Content Import Sources type: object - description: The request payload for creating an audience. - required: - - name + x-tags: + - AI Content + description: This will return a list of the content import sources for the App. + nullable: false properties: - name: + type: type: string - description: The name of the audience. - example: VIP Customers - predicates: - type: array - description: The predicates that define which contacts belong to the audience. - items: - "$ref": "#/components/schemas/predicate" - example: - - attribute: company.name - type: string - comparison: contains - value: Acme - role_predicates: + description: The type of the object - `list`. + enum: + - list + example: list + pages: + "$ref": "#/components/schemas/pages_link" + total_count: + type: integer + description: A count of the total number of content import sources. + example: 1 + data: type: array - description: Role-based predicates that further filter audience membership by - contact role. + description: An array of Content Import Source objects items: - "$ref": "#/components/schemas/predicate" - example: - - attribute: role - type: role - comparison: eq - value: user - create_article_request: - description: You can create an Article + "$ref": "#/components/schemas/content_import_source" + content_source: + title: Content Source type: object - title: Create Article Request Payload - nullable: true + x-tags: + - AI Content Source + description: The content source used by AI Agent in the conversation. properties: - title: + content_type: type: string - description: The title of the article.For multilingual articles, this will - be the title of the default language's content. - example: Thanks for everything - description: + description: The type of the content source. + example: content_snippet + enum: + - file + - article + - external_content + - content_snippet + - workflow_connector_action + url: type: string - description: The description of the article. For multilingual articles, - this will be the description of the default language's content. - example: Description of the Article - body: + description: The internal URL linking to the content source for teammates. + example: "/fin-ai-agent/content?content=content_snippet&id=3234924" + title: type: string - description: The content of the article in HTML. For multilingual articles, this - will be the body of the default language's content. Mutually exclusive with `body_markdown`. - example: "

This is the body in html

" - body_markdown: + description: The title of the content source. + example: My internal content snippet + locale: type: string - description: The content of the article in markdown. For multilingual articles, this - will be the body of the default language's content. An alternative to `body` — you - can provide content as markdown instead of HTML. Mutually exclusive with `body`. - example: "# Hello\n\nA paragraph with **bold** text.\n" - author_id: - type: integer - description: The id of the author of the article. For multilingual articles, - this will be the id of the author of the default language's content. Must - be a teammate on the help center's workspace. - example: 1295 - state: + description: The ISO 639 language code of the content source. + example: en + content_sources_list: + title: Content Source List + nullable: false + properties: + type: type: string - description: Whether the article will be `published` or will be a `draft`. - Defaults to draft. For multilingual articles, this will be the state of - the default language's content. enum: - - published - - draft - example: draft - parent_id: + - content_source.list + example: content_source.list + total_count: type: integer - description: The id of the article's parent collection or section. An article - without this field stands alone. - example: 18 - parent_type: - type: string - description: The type of parent, which can either be a `collection` or `section`. - example: collection - parent_ids: + description: The total number of content sources used by AI Agent in the + conversation. + example: 1 + content_sources: type: array - description: The ids of the parent collections to place this article in. - Send an empty array to leave the article without a collection. When - provided, this takes precedence over `parent_id` and `parent_type`. + description: The content sources used by AI Agent in the conversation. items: - type: integer - example: - - 18 - - 19 - translated_content: - "$ref": "#/components/schemas/article_translated_content" - folder_id: + "$ref": "#/components/schemas/content_source" + conversation_list_item: + title: Conversation List Item + type: object + x-tags: + - Conversations + description: The data returned about your conversations when you list or search + them. + properties: + type: + type: string + description: Always conversation. + example: conversation + id: + type: string + description: The id representing the conversation. + example: '1295' + title: + type: string + nullable: true + description: The title given to the conversation. + example: Conversation Title + created_at: + type: integer + format: date-time + description: The time the conversation was created. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the conversation was updated. + example: 1663597260 + waiting_since: type: integer + format: date-time nullable: true - description: The ID of the folder to place this article in, or null to leave it without a folder. - example: 6 - audience_ids: - type: array + description: 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. + example: 1663597260 + snoozed_until: + type: integer + format: date-time nullable: true - description: >- - The list of audience IDs to assign to this article for Fin AI Agent targeting. - Sending a top-level `audience_ids` broadcasts the same set to every locale. - For per-locale targeting, use `translated_content..audience_ids` instead. - Sending both top-level and per-locale in the same request causes top-level to win. - Unknown audience IDs return a 404 error. No partial commit occurs. - items: - type: integer - example: - - 1 - - 2 - ai_chatbot_availability: - type: boolean - description: Whether the article should be available for AI Chatbot (Fin). - For multilingual articles, this sets the default language's availability. - example: true - ai_copilot_availability: + description: 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. + example: 1663597260 + open: type: boolean - description: Whether the article should be available for AI Copilot. For - multilingual articles, this sets the default language's availability. + description: Indicates whether a conversation is open (true) or closed (false). example: true - ai_sales_agent_availability: + state: + type: string + enum: + - open + - closed + - snoozed + description: Can be set to "open", "closed" or "snoozed". + example: open + read: type: boolean - description: Whether the article should be available for AI Sales Agent. - For multilingual articles, this sets the default language's availability. + description: Indicates whether a conversation has been read. example: true - scheduled_publish_at: + priority: type: string - format: date-time + enum: + - none + - low + - medium + - high + - urgent + description: The priority level of the conversation. Returns one of none, + low, medium, high, or urgent. + example: high + admin_assignee_id: + type: integer + description: The id of the admin assigned to the conversation. If it's not + assigned to an admin it will return 0. + example: 0 + team_assignee_id: + type: integer + description: The id of the team assigned to the conversation. If it's not + assigned to a team it will return 0. + example: 5017691 + company: + "$ref": "#/components/schemas/company" nullable: true - description: >- - ISO 8601 timestamp at which to schedule a future publish of the article. - When set together with `state: "published"`, the article is scheduled - instead of published immediately. Setting `null` cancels a pending - publish schedule. Timestamps in the past or equal to the current time - are rejected with 400 `parameter_invalid` — the value must be strictly - in the future. Combining with `state: "draft"` returns 400 - `parameter_invalid`. Sending in the same request as - `scheduled_unpublish_at` returns 400 — only one pending schedule per - article. Empty string returns 400 `parameter_invalid`. - example: '2026-12-31T09:00:00Z' - scheduled_unpublish_at: - type: string - format: date-time + description: The company associated with the conversation. + tags: + "$ref": "#/components/schemas/tags" + conversation_rating: + "$ref": "#/components/schemas/conversation_rating" + source: + "$ref": "#/components/schemas/conversation_source" + contacts: + "$ref": "#/components/schemas/conversation_contacts" + teammates: + "$ref": "#/components/schemas/conversation_teammates" + custom_attributes: + "$ref": "#/components/schemas/custom_attributes" + first_contact_reply: + "$ref": "#/components/schemas/conversation_first_contact_reply" + sla_applied: + "$ref": "#/components/schemas/sla_applied" + statistics: + "$ref": "#/components/schemas/conversation_statistics" + linked_objects: + "$ref": "#/components/schemas/linked_object_list" + ai_agent_participated: + type: boolean + description: Indicates whether the AI Agent participated in the conversation. + example: true + ai_agent: + "$ref": "#/components/schemas/ai_agent" nullable: true - description: >- - ISO 8601 timestamp at which to schedule a future unpublish of the article. - Setting `null` cancels a pending unpublish schedule. Timestamps in the - past or equal to the current time are rejected with 400 - `parameter_invalid` — the value must be strictly in the future. Rejected - with 400 `parameter_invalid` if the article has never been published. - Sending in the same request as `scheduled_publish_at` returns 400 — only - one pending schedule per article. Empty string returns 400 - `parameter_invalid`. - example: '2026-12-31T17:00:00Z' - required: - - title - - author_id - create_internal_article_request: - description: You can create an Internal Article + conversation: + title: Conversation type: object - title: Create Internal Article Request Payload - nullable: true + x-tags: + - Conversations + description: 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. properties: - title: + type: type: string - description: The title of the article. - example: Thanks for everything - body: + description: Always conversation. + example: conversation + id: type: string - description: The content of the article in HTML. Mutually exclusive with `body_markdown`. - example: "

This is the body in html

" - body_markdown: + description: The id representing the conversation. + example: '1295' + title: type: string - description: The content of the article in markdown. An alternative to `body` — you - can provide content as markdown instead of HTML. Mutually exclusive with `body`. - example: "# Internal Guide\n\nSome instructions.\n" - author_id: + nullable: true + description: The title given to the conversation. + example: Conversation Title + created_at: type: integer - description: The id of the author of the article. - example: 1295 - owner_id: + format: date-time + description: The time the conversation was created. + example: 1663597223 + updated_at: type: integer - description: The id of the owner of the article. - example: 1295 - folder_id: + format: date-time + description: The last time the conversation was updated. + example: 1663597260 + waiting_since: type: integer + format: date-time nullable: true - description: The ID of the folder to place this article in, or null to leave it without a folder. - example: 6 - audience_ids: - type: array + description: 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. + example: 1663597260 + snoozed_until: + type: integer + format: date-time nullable: true - description: >- - The list of audience IDs to target this internal article to for Fin AI Agent. - Pass an empty array or omit the field for no audience targeting. - Unknown audience IDs return a `404` error with no partial commit. - items: - type: integer - example: - - 1 - - 2 - ai_chatbot_availability: - type: boolean - description: Whether the internal article should be available for AI Chatbot - (Fin). Defaults to false. - default: false - example: true - ai_copilot_availability: - type: boolean - description: Whether the internal article should be available for AI Copilot. - Defaults to false. - default: false - example: true - ai_sales_agent_availability: + description: 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. + example: 1663597260 + open: type: boolean - description: Whether the internal article should be available for AI Sales - Agent. Defaults to false. - default: false + description: Indicates whether a conversation is open (true) or closed (false). example: true - required: - - title - - owner_id - - author_id - create_collection_request: - description: You can create a collection - type: object - title: Create Collection Request Payload - properties: - name: - type: string - description: The name of the collection. For multilingual collections, this - will be the name of the default language's content. - example: collection 51 - description: - type: string - description: The description of the collection. For multilingual collections, - this will be the description of the default language's content. - example: English description - translated_content: - nullable: true - "$ref": "#/components/schemas/group_translated_content" - parent_id: - type: string - nullable: true - description: The id of the parent collection. If `null` then it will be - created as the first level collection. - example: '6871118' - help_center_id: - type: integer - nullable: true - description: The id of the help center where the collection will be created. - If `null` then it will be created in the default help center. - example: '123' - required: - - name - create_contact_request: - description: Payload to create a contact - type: object - title: Create Contact Request Payload - properties: - role: - type: string - description: The role of the contact. - example: user - external_id: - type: string - description: A unique identifier for the contact which is given to Intercom - example: "625e90fc55ab113b6d92175f" - email: + state: type: string - description: The contacts email - example: jdoe@example.com - email_verified: + enum: + - open + - closed + - snoozed + description: Can be set to "open", "closed" or "snoozed". + example: open + read: type: boolean - nullable: true - description: Whether the contact's email address has been verified. Set to true to indicate you have verified the contact owns this email address, or false to mark it as unverified. Must be supplied together with an email in the same request; sending it without an email returns a 400. + description: Indicates whether a conversation has been read. example: true - phone: - type: string - nullable: true - description: The contacts phone - example: "+353871234567" - name: - type: string - nullable: true - description: The contacts name - example: John Doe - avatar: + priority: type: string - nullable: true - description: An image URL containing the avatar of a contact - example: https://www.example.com/avatar_image.jpg - signed_up_at: + enum: + - priority + - not_priority + description: If marked as priority, it will return priority or else not_priority. + example: priority + admin_assignee_id: type: integer - format: date-time nullable: true - description: (Unix timestamp in seconds) The time specified for when a contact signed up. - example: 1571672154 - last_seen_at: + description: The id of the admin assigned to the conversation. If it's not + assigned to an admin it will return null. + example: 0 + team_assignee_id: type: integer - format: date-time nullable: true - description: (Unix timestamp in seconds) The time when the contact was last seen - (either where the Intercom Messenger was installed or when specified manually). - example: 1571672154 - owner_id: - type: string + description: The id of the team assigned to the conversation. If it's not + assigned to a team it will return null. + example: 5017691 + company: + "$ref": "#/components/schemas/company" nullable: true - description: The id of an admin that has been assigned account ownership - of the contact - example: "321" - unsubscribed_from_emails: + description: The company associated with the conversation. + tags: + "$ref": "#/components/schemas/tags" + conversation_rating: + "$ref": "#/components/schemas/conversation_rating" + source: + "$ref": "#/components/schemas/conversation_source" + contacts: + "$ref": "#/components/schemas/conversation_contacts" + teammates: + "$ref": "#/components/schemas/conversation_teammates" + custom_attributes: + "$ref": "#/components/schemas/custom_attributes" + first_contact_reply: + "$ref": "#/components/schemas/conversation_first_contact_reply" + sla_applied: + "$ref": "#/components/schemas/sla_applied" + statistics: + "$ref": "#/components/schemas/conversation_statistics" + conversation_parts: + "$ref": "#/components/schemas/conversation_parts" + linked_objects: + "$ref": "#/components/schemas/linked_object_list" + ai_topics: + "$ref": "#/components/schemas/ai_topics" + ai_agent_participated: type: boolean - nullable: true - description: Whether the contact is unsubscribed from emails + description: Indicates whether the AI Agent participated in the conversation. example: true - language_override: - type: string - nullable: true - description: A preferred language setting for the contact, used by Intercom - as the language of Fin and the Messenger even if their browser has a different - setting. Supports ISO 639-1 two-letter language codes. If an unsupported - code is supplied, the field will be set to null. - example: en - custom_attributes: - type: object + ai_agent: + "$ref": "#/components/schemas/ai_agent" nullable: true - description: The custom attributes which are set for the contact - example: - paid_subscriber: true - monthly_spend: 155.5 - team_mates: 1 - anyOf: - - required: - - email - title: Create contact with email - - required: - - external_id - title: Create contact with external_id - - required: - - role - title: Create contact with role - create_content_import_source_request: - title: Create Content Import Source Payload + conversation_attachment_files: + title: Conversation attachment files + type: object + description: Properties of the attachment files in a conversation part + properties: + content_type: + type: string + description: The content type of the file + example: application/json + data: + type: string + description: The base64 encoded file data. + example: ewogICJ0ZXN0IjogMQp9 + name: + type: string + description: The name of the file. + example: test.json + conversation_contacts: + title: Contacts type: object - description: You can add an Content Import Source to your Fin Content Library. - nullable: false + description: 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. properties: - sync_behavior: + type: type: string - description: If you intend to create or update External Pages via the API, - this should be set to `api`. + description: '' enum: - - api - example: api - status: + - contact.list + example: contact.list + contacts: + type: array + description: 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. + items: + "$ref": "#/components/schemas/contact_reference" + conversation_deleted: + title: Conversation Deleted + type: object + description: deleted conversation object + properties: + id: type: string - description: The status of the content import source. + description: The unique identifier for the conversation. + example: 5ba682d23d7cf92bef87bfd4 + object: + type: string + description: always conversation enum: - - active - - deactivated - default: active - example: active + - conversation + example: conversation + deleted: + type: boolean + description: Whether the conversation is deleted or not. + example: true + conversation_first_contact_reply: + title: First contact reply + type: object + nullable: true + description: An object containing information on the first users message. For + a contact initiated message this will represent the users original message. + properties: + created_at: + type: integer + format: date-time + description: '' + example: 1663597223 + type: + type: string + description: '' + example: conversation url: type: string - description: The URL of the content import source. - example: https://help.example.com - audience_ids: nullable: true - description: The unique identifiers for the audiences to associate with this content import source. Can be a single integer or an array of integers. - example: - - 5678 - oneOf: - - type: integer - - type: array - items: - type: integer - required: - - sync_behavior - - url - create_conversation_request: + description: '' + example: https://developers.intercom.com/ + conversation_list: + title: Conversation List + type: object description: 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. - type: object - title: Create Conversation Request Payload properties: - from: - type: object - properties: - type: - type: string - enum: - - lead - - user - - contact - description: The role associated to the contact - user or lead. - example: user - id: - type: string - description: The identifier for the contact which is given by Intercom. - format: uuid - minLength: 24 - maxLength: 24 - example: 536e564f316c83104c000020 - required: - - type - - id - body: - type: string - description: The content of the message. HTML is not supported. - example: Hello - subject: + type: type: string - description: The title of the email. Only applicable if the message type is email. - example: Thanks for everything - attachment_urls: + description: Always conversation.list + enum: + - conversation.list + example: conversation.list + conversations: type: array - description: A list of image URLs that will be added as attachments. You - can include up to 10 URLs. + description: The list of conversation objects items: - type: string - format: uri - maxItems: 10 - created_at: + "$ref": "#/components/schemas/conversation_list_item" + total_count: type: integer - format: date-time - description: The time the conversation was created as a UTC Unix timestamp. If not provided, the current time will be used. This field is only recommneded for migrating past conversations from another source into Intercom. - example: 1671028894 - brand_id: - type: string - description: The unique identifier of the brand to associate with this conversation. - example: "123" - required: - - from - - body - create_data_attribute_request: - description: '' + description: A count of the total number of objects. + example: 12345 + pages: + "$ref": "#/components/schemas/cursor_pages" + conversation_part: + title: Conversation Part type: object - title: Create Data Attribute Request + description: A Conversation Part represents a message in the conversation. properties: - name: + type: type: string - description: The name of the data attribute. - example: My Data Attribute - model: + description: Always conversation_part + example: conversation_part + id: type: string - description: The model that the data attribute belongs to. - enum: - - contact - - company - example: contact - description: + description: The id representing the conversation part. + example: '3' + part_type: type: string - description: The readable description you see in the UI for the attribute. - example: My Data Attribute Description - messenger_writable: + description: The type of conversation part. + example: comment + body: + type: string + nullable: true + description: The message body, which may contain HTML. For Twitter, this + will show a generic message regarding why the body is obscured. + example: "

Okay!

" + created_at: + type: integer + format: date-time + description: The time the conversation part was created. + example: 1663597223 + updated_at: + type: integer + format: date-time + description: The last time the conversation part was updated. + example: 1663597260 + notified_at: + type: integer + format: date-time + description: The time the user was notified with the conversation part. + example: 1663597260 + assigned_to: + "$ref": "#/components/schemas/reference" + nullable: true + description: The id of the admin that was assigned the conversation by this + conversation_part (null if there has been no change in assignment.) + author: + "$ref": "#/components/schemas/conversation_part_author" + attachments: + title: Conversation part attachments + type: array + description: A list of attachments for the part. + items: + "$ref": "#/components/schemas/part_attachment" + external_id: + type: string + nullable: true + description: The external id of the conversation part + example: abcd1234 + redacted: type: boolean - description: Can this attribute be updated by the Messenger + description: Whether or not the conversation part has been redacted. example: false - required: - - name - - model - - data_type - oneOf: - - properties: - data_type: - enum: - - options - options: - type: array - description: Array of objects representing the options of the list, with `value` as the key and the option as the value. At least - two options are required. - items: - type: object - properties: - value: - type: string - example: - - value: 1-10 - - value: 11-50 - required: - - options - title: 'list attribute' - - properties: - data_type: - enum: - - string - - integer - - float - - boolean - - datetime - - date - title: 'other type' - create_data_event_request: - description: '' + email_message_metadata: + "$ref": "#/components/schemas/email_message_metadata" + nullable: true + metadata: + "$ref": "#/components/schemas/conversation_part_metadata" + nullable: true + state: + type: string + enum: + - open + - closed + - snoozed + description: Indicates the current state of conversation when the conversation part was created. + example: open + tags: + type: array + description: A list of tags objects associated with the conversation part. + items: + "$ref": "#/components/schemas/tag_basic" + nullable: true + event_details: + "$ref": "#/components/schemas/event_details" + nullable: true + app_package_code: + type: string + nullable: true + example: "test-integration" + description: The app package code if this part was created via API. null if the part was not created via API. + conversation_part_author: + title: Conversation part author type: object - title: Create Data Event Request + description: The author of this conversation part. Can be a Contact, Admin, + or Bot. properties: - event_name: - type: string - description: The name of the event that occurred. This is presented to your - App's admins when filtering and creating segments - a good event name - is typically a past tense 'verb-noun' combination, to improve readability, - for example `updated-plan`. - example: invited-friend - created_at: - type: integer - format: date-time - description: The time the event occurred as a UTC Unix timestamp - example: 1671028894 - user_id: + type: type: string - description: Your identifier for the user. - example: '314159' + description: The type of the author + example: admin id: type: string - description: The unique identifier for the contact (lead or user) which - is given by Intercom. - example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + description: The id of the author + example: '274' + name: + type: string + nullable: true + description: The name of the author + example: Operator email: type: string - description: An email address for your user. An email should only be used - where your application uses email to uniquely identify users. - example: frodo.baggins@example.com - metadata: - type: object - description: Optional metadata about the event. - additionalProperties: true - example: - invite_code: ADDAFRIEND - anyOf: - - title: id required - required: - - event_name - - created_at - - id - - title: user_id required - required: - - event_name - - created_at - - user_id - - title: email required - required: - - event_name - - created_at - - email - create_data_event_summaries_request: - description: You can send a list of event summaries for a user. Each event summary - should contain the event name, the time the event occurred, and the number - of times the event occurred. The event name should be a past tense "verb-noun" - combination, to improve readability, for example `updated-plan`. + format: email + description: The email of the author + example: operator+abcd1234@intercom.io + from_ai_agent: + type: boolean + description: If this conversation part was sent by the AI Agent + example: true + is_ai_answer: + type: boolean + description: If this conversation part body was generated by the AI Agent + example: false + conversation_parts: + title: Conversation Parts type: object - title: Create Data Event Summaries Request + description: 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. properties: - user_id: + type: type: string - description: Your identifier for the user. - example: '314159' - event_summaries: - type: object - description: A list of event summaries for the user. Each event summary - should contain the event name, the time the event occurred, and the number - of times the event occurred. The event name should be a past tense 'verb-noun' - combination, to improve readability, for example `updated-plan`. - properties: - event_name: - type: string - description: The name of the event that occurred. A good event name - is typically a past tense 'verb-noun' combination, to improve readability, - for example `updated-plan`. - example: invited-friend - count: - type: integer - description: The number of times the event occurred. - example: 1 - first: - type: integer - format: date-time - description: The first time the event was sent - example: 1671028894 - last: - type: integer - format: date-time - description: The last time the event was sent - example: 1671028894 - create_data_exports_request: - description: Request for creating a data export - type: object - title: Create Data Export Request - properties: - created_at_after: - type: integer - description: The start date that you request data for. It must be formatted - as a unix timestamp. - example: 1527811200 - created_at_before: + description: '' + enum: + - conversation_part.list + example: conversation_part.list + conversation_parts: + title: Conversation Parts + type: array + description: 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. + items: + "$ref": "#/components/schemas/conversation_part" + total_count: type: integer - description: The end date that you request data for. It must be formatted - as a unix timestamp. - example: 1527811200 - required: - - created_at_after - - created_at_before - create_external_page_request: - title: Create External Page Payload + description: '' + example: 1 + conversation_part_metadata: + title: Conversation Part Metadata + description: Metadata for a conversation part type: object - description: You can add an External Page to your Fin Content Library. - nullable: false properties: - title: - type: string - description: The title of the external page. - example: Getting started with... - html: - type: string - description: The body of the external page in HTML. - example: "

Hello world!

" - url: + quick_reply_options: + type: array + description: The quick reply options sent by the Admin or bot, presented in this conversation part. + items: + allOf: + - "$ref": "#/components/schemas/quick_reply_option" + properties: + translations: + type: object + nullable: true + description: The translations for the quick reply option. + example: { "en": "Hello", "fr": "Bonjour" } + quick_reply_uuid: type: string - description: The URL of the external page. This will be used by Fin to link - end users to the page it based its answer on. When a URL is not present, - Fin will not reference the source. - example: https://help.example.com/en/articles/1234-getting-started - ai_agent_availability: - type: boolean - description: Whether the external page should be used to answer questions - by AI Agent. Will not default when updating an existing external page. - default: false - example: true - ai_copilot_availability: - type: boolean - description: Whether the external page should be used to answer questions - by AI Copilot. Will not default when updating an existing external page. - default: false - example: true - ai_sales_agent_availability: - type: boolean - description: Whether the external page should be used to answer questions - by AI Sales Agent. Will not default when updating an existing external page. - default: false - example: true - locale: + format: uuid + description: The unique identifier for the quick reply option that was clicked by the end user. + example: '123e4567-e89b-12d3-a456-426614174000' + conversation_rating: + title: Conversation Rating + type: object + nullable: true + description: The Conversation Rating object which contains information on the + rating and/or remark added by a Contact and the Admin assigned to the conversation. + properties: + rating: + type: integer + description: The rating, between 1 and 5, for the conversation. + example: 5 + remark: type: string - description: Always en - enum: - - en - default: en - example: en - source_id: + description: An optional field to add a remark to correspond to the number + rating + example: '' + created_at: + type: integer + format: date-time + description: The time the rating was requested in the conversation being + rated. + example: 1671028894 + updated_at: + type: integer + format: date-time + description: The time the rating was last updated. + example: 1671028894 + contact: + "$ref": "#/components/schemas/contact_reference" + teammate: + "$ref": "#/components/schemas/reference" + conversation_response_time: + title: Conversation response time + type: object + description: Details of first response time of assigned team in seconds. + properties: + team_id: type: integer - description: The unique identifier for the source of the external page which - was given by Intercom. Every external page must be associated with a Content - Import Source which represents the place it comes from and from which - it inherits a default audience (configured in the UI). For a new source, - make a POST request to the Content Import Source endpoint and an ID for - the source will be returned in the response. - example: 1234 - external_id: + description: Id of the assigned team. + example: 100 + team_name: type: string - description: The identifier for the external page which was given by the - source. Must be unique for the source. - example: '5678' - required: - - title - - html - - locale - - source_id - - external_id - create_message_request: - description: You can create a message + description: Name of the assigned Team, null if team does not exist, Unassigned + if no team is assigned. + example: Team One + response_time: + type: integer + description: First response time of assigned team in seconds. + example: 2310 + conversation_source: + title: Conversation source type: object - title: Create Message Request Payload - nullable: true + description: The first message or event that started this conversation. Describes + the origin and who initiated it. properties: - message_type: + type: type: string - description: 'The kind of message being created. Values: `in_app`, `email`, `sms` or `whatsapp`.' - enum: - - in_app - - email - - sms - - whatsapp - example: in_app + description: The origin of this conversation. + example: email + id: + type: string + nullable: true + description: The id of the source message. + example: '3' + delivered_as: + type: string + description: How the conversation was initiated. + example: operator_initiated subject: type: string - description: The title of the email. - example: Thanks for everything + nullable: true + description: The message subject. Only present for email conversations. + example: '' body: type: string - description: The content of the message. HTML and plaintext are supported. - example: Hello there - template: + nullable: true + description: The message body, which may contain HTML. + example: "

Hey there!

" + author: + "$ref": "#/components/schemas/conversation_part_author" + attachments: + type: array + description: A list of attachments on the source message. + items: + "$ref": "#/components/schemas/part_attachment" + url: type: string - description: The style of the outgoing message. Possible values `plain` - or `personal`. - example: plain - from: - type: object - description: The sender of the message. If not provided, the default sender - will be used. - properties: - type: - type: string - description: Always `admin`. - enum: - - admin - example: admin - id: - type: integer - description: The identifier for the admin which is given by Intercom. - example: 394051 - required: - - type - - id - to: - oneOf: - - $ref: '#/components/schemas/recipient' - - type: array - description: The recipients of the message. - items: - $ref: '#/components/schemas/recipient' - example: - - type: user - id: 536e564f316c83104c000020 - - type: lead - id: 536e564f316c83104c000021 - cc: - oneOf: - - $ref: '#/components/schemas/recipient' - - type: array - description: The CC recipients of the message. - items: - $ref: '#/components/schemas/recipient' - example: - - type: user - id: 536e564f316c83104c000023 - bcc: - oneOf: - - $ref: '#/components/schemas/recipient' - - type: array - description: The BCC recipients of the message. - items: - $ref: '#/components/schemas/recipient' - example: - - type: user - id: 536e564f316c83104c000022 - created_at: - type: integer - description: The time the message was created. If not provided, the current - time will be used. - example: 1590000000 - create_conversation_without_contact_reply: + nullable: true + description: The URL where the conversation was started. + example: https://intercom.help/company/article/123 + redacted: type: boolean - description: Whether a conversation should be opened in the inbox for the - message without the contact replying. Defaults to false if not provided. - default: false - example: true - anyOf: - - title: 'message_type: `email`.' - required: - - message_type - - subject - - body - - template - - from - - to - - title: 'message_type: `inapp`.' - required: - - message_type - - body - - from - - to - - title: 'message_type: `sms`.' - required: - - message_type - - body - - from - - to - - title: 'message_type: `whatsapp`.' - required: - - message_type - - template - - components - - from - - to - recipient: - type: object - title: Recipient - description: A recipient of a message - properties: - type: - type: string - description: The role associated to the contact - `user` or `lead`. - enum: - - user - - lead - example: user - id: - type: string - description: The identifier for the contact which is given by Intercom. - example: 536e564f316c83104c000020 - required: - - type - - id - create_or_update_company_request: + description: Whether or not the source content has been redacted. + example: false + conversation_statistics: + title: Conversation statistics type: object - title: Create Or Update Company Request Payload - description: You can create or update a Company nullable: true + description: A Statistics object containing all information required for reporting, + with timestamps and calculated metrics. properties: - name: - type: string - description: The name of the Company - example: Intercom - company_id: - type: string - description: The company id you have defined for the company. Can't be updated - example: 625e90fc55ab113b6d92175f - plan: + type: type: string - description: The name of the plan you have associated with the company. - example: Enterprise - size: + description: '' + example: conversation_statistics + time_to_assignment: + type: integer + description: Duration until last assignment before first admin reply. In + seconds. + example: 2310 + time_to_admin_reply: + type: integer + description: Duration until first admin reply. Subtracts out of business + hours. In seconds. + example: 2310 + time_to_first_close: + type: integer + description: Duration until conversation was closed first time. Subtracts + out of business hours. In seconds. + example: 2310 + time_to_last_close: + type: integer + description: Duration until conversation was closed last time. Subtracts + out of business hours. In seconds. + example: 2310 + median_time_to_reply: + type: integer + description: Median based on all admin replies after a contact reply. Subtracts + out of business hours. In seconds. + example: 2310 + first_contact_reply_at: + type: integer + format: date-time + description: Time of first text conversation part from a contact. + example: 1663597233 + first_assignment_at: + type: integer + format: date-time + description: Time of first assignment after first_contact_reply_at. + example: 1663597233 + first_admin_reply_at: + type: integer + format: date-time + description: Time of first admin reply after first_contact_reply_at. + example: 1663597233 + first_close_at: type: integer - description: The number of employees in this company. - example: '100' - website: - type: string - description: The URL for this company's website. Please note that the value - specified here is not validated. Accepts any string. - example: https://www.example.com - industry: - type: string - description: The industry that this company operates in. - example: Manufacturing - custom_attributes: - type: object - description: A hash of key/value pairs containing any other data about the - company you want Intercom to store. - additionalProperties: - type: string - example: - paid_subscriber: true - monthly_spend: 155.5 - team_mates: 9 - remote_created_at: + format: date-time + description: Time of first close after first_contact_reply_at. + example: 1663597233 + last_assignment_at: type: integer - description: The time the company was created by you. - example: 1394531169 - monthly_spend: + format: date-time + description: Time of last assignment after first_contact_reply_at. + example: 1663597233 + last_assignment_admin_reply_at: type: integer - description: How much revenue the company generates for your business. Note - that this will truncate floats. i.e. it only allow for whole integers, - 155.98 will be truncated to 155. Note that this has an upper limit of - 2**31-1 or 2147483647.. - example: 1000 - update_last_request_at: - type: boolean - description: Set to true to update the company's last seen time to now. - example: true - create_or_update_custom_object_instance_request: - description: Payload to create or update a Custom Object instance - type: object - title: Create Or Update Custom Object Instance Request Payload - properties: - external_id: - type: string - description: A unique identifier for the Custom Object instance in the external - system it originated from. - external_created_at: + format: date-time + description: Time of first admin reply since most recent assignment. + example: 1663597233 + last_contact_reply_at: type: integer format: date-time - nullable: true - description: The time when the Custom Object instance was created in the - external system it originated from. - example: 1571672154 - external_updated_at: + description: Time of the last conversation part from a contact. + example: 1663597233 + last_admin_reply_at: type: integer format: date-time - nullable: true - description: The time when the Custom Object instance was last updated in - the external system it originated from. - example: 1571672154 - custom_attributes: - type: object - nullable: true - description: The custom attributes which are set for the Custom Object instance. - additionalProperties: - type: string - create_or_update_tag_request: - description: You can create or update an existing tag. - type: object - title: Create or Update Tag Request Payload - properties: - name: - type: string - description: The name of the tag, which will be created if not found, or - the new name for the tag if this is an update request. Names are case - insensitive. - example: Independent - id: + description: Time of the last conversation part from an admin. + example: 1663597233 + last_close_at: + type: integer + format: date-time + description: Time of the last conversation close. + example: 1663597233 + last_closed_by_id: type: string - description: The id of tag to updates. - example: '656452352' - required: - - name - create_phone_switch_request: - description: You can create an phone switch + description: The last admin who closed the conversation. Returns a reference + to an Admin object. + example: c3po + count_reopens: + type: integer + description: Number of reopens after first_contact_reply_at. + example: 1 + count_assignments: + type: integer + description: Number of assignments after first_contact_reply_at. + example: 1 + count_conversation_parts: + type: integer + description: Total number of conversation parts. + example: 1 + assigned_team_first_response_time: + type: array + description: An array of conversation response time objects + items: + "$ref": "#/components/schemas/conversation_response_time" + assigned_team_first_response_time_in_office_hours: + type: array + description: An array of conversation response time objects within office + hours + items: + "$ref": "#/components/schemas/conversation_response_time" + handling_time: + type: integer + description: Time from conversation assignment to conversation close in + seconds. + example: 2310 + adjusted_handling_time: + type: integer + nullable: true + description: Adjusted handling time for conversation in seconds. This is the active handling time excluding idle periods when teammates are not actively working on the conversation. + example: 1800 + conversation_teammates: + title: Conversation teammates type: object - title: Create Phone Switch Request Payload nullable: true + description: The list of teammates who participated in the conversation (wrote + at least one conversation part). properties: - phone: + type: type: string - description: Phone number in E.164 format, that will receive the SMS to - continue the conversation in the Messenger. - example: "+1 1234567890" - custom_attributes: - "$ref": "#/components/schemas/custom_attributes" - required: - - phone - create_ticket_reply_with_comment_request: - title: Create Ticket Reply Request Payload - oneOf: - - "$ref": "#/components/schemas/contact_reply_ticket_request" - - "$ref": "#/components/schemas/admin_reply_ticket_request" - create_ticket_request: - description: You can create a Ticket + description: The type of the object - `admin.list`. + example: admin.list + teammates: + type: array + description: The list of teammates who participated in the conversation + (wrote at least one conversation part). + items: + "$ref": "#/components/schemas/reference" + convert_conversation_to_ticket_request: + description: You can convert a Conversation to a Ticket type: object - title: Create Ticket Request Payload + title: Convert Ticket Request Payload properties: ticket_type_id: type: string - description: The ID of the type of ticket you want to create - example: '1234' - contacts: - type: array - description: The list of contacts (users or leads) affected by this ticket. - Currently only one is allowed - items: - type: object - oneOf: - - title: ID - properties: - id: - type: string - description: The identifier for the contact as given by Intercom. - required: - - id - - title: External ID - properties: - external_id: - type: string - description: The external_id you have defined for the contact who - is being added as a participant. - required: - - external_id - - title: Email - properties: - email: - type: string - description: The email you have defined for the contact who is being - added as a participant. If a contact with this email does not - exist, one will be created. - required: - - email - example: - - id: '1234' - conversation_to_link_id: - type: string - description: "The ID of the conversation you want to link to the ticket. - Here are the valid ways of linking two tickets:\n - - conversation | back-office ticket\n - - customer tickets | non-shared back-office ticket\n - - conversation | tracker ticket\n - - customer ticket | tracker ticket" + description: The ID of the type of ticket you want to convert the conversation + to example: '1234' - company_id: - type: string - description: The ID of the company that the ticket is associated with. The - unique identifier for the company which is given by Intercom - example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 - created_at: - type: integer - description: The time the ticket was created. If not provided, the current - time will be used. - example: 1590000000 - ticket_attributes: + attributes: "$ref": "#/components/schemas/ticket_request_custom_attributes" - assignment: + required: + - ticket_type_id + convert_visitor_request: + description: You can merge a Visitor to a Contact of role type lead or user. + type: object + title: Convert Visitor Request Payload + properties: + type: + type: string + description: Represents the role of the Contact model. Accepts `lead` or + `user`. + example: user + user: + type: object + description: The unique identifiers retained after converting or merging. + properties: + id: + type: string + description: The unique identifier for the contact which is given by + Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + user_id: + type: string + description: A unique identifier for the contact which is given to Intercom, + which will be represented as external_id. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + email: + type: string + description: The contact's email, retained by default if one is present. + example: winstonsmith@truth.org + anyOf: + - required: + - id + - required: + - user_id + visitor: type: object + description: The unique identifiers to convert a single Visitor. properties: - admin_assignee_id: + id: type: string - description: The ID of the admin to which the ticket is assigned. - If not provided, the ticket will be unassigned. - example: '123' - team_assignee_id: + description: The unique identifier for the contact which is given by + Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + user_id: type: string - description: The ID of the team to which the ticket is assigned. - If not provided, the ticket will be unassigned. - example: '8' - required: - - ticket_type_id - - contacts - create_ticket_type_attribute_request: - description: You can create a Ticket Type Attribute - type: object - title: Create Ticket Type Attribute Request Payload - properties: - name: - type: string - description: The name of the ticket type attribute - example: Bug Priority - description: - type: string - description: The description of the attribute presented to the teammate - or contact - example: Priority level of the bug - data_type: - type: string - description: The data type of the attribute - enum: - - string - - list - - integer - - decimal - - boolean - - datetime - - files - example: string - required_to_create: - type: boolean - description: Whether the attribute is required to be filled in when teammates - are creating the ticket in Inbox. - default: false - example: false - required_to_create_for_contacts: - type: boolean - description: Whether the attribute is required to be filled in when contacts - are creating the ticket in Messenger. - default: false - example: false - visible_on_create: - type: boolean - description: Whether the attribute is visible to teammates when creating - a ticket in Inbox. - default: true - example: true - visible_to_contacts: - type: boolean - description: Whether the attribute is visible to contacts when creating - a ticket in Messenger. - default: true - example: true - multiline: - type: boolean - description: Whether the attribute allows multiple lines of text (only applicable - to string attributes) - example: false - list_items: - type: string - description: A comma delimited list of items for the attribute value (only - applicable to list attributes) - example: Low Priority,Medium Priority,High Priority - allow_multiple_values: - type: boolean - description: Whether the attribute allows multiple files to be attached - to it (only applicable to file attributes) - example: false + description: A unique identifier for the contact which is given to Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + email: + type: string + description: The visitor's email. + example: winstonsmith@truth.org + anyOf: + - required: + - id + - required: + - user_id + - required: + - email required: - - name - - description - - data_type - create_ticket_type_request: - description: | - The request payload for creating a ticket type. - You can copy the `icon` property for your ticket type from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/) + - type + - user + - visitor + create_article_request: + description: You can create an Article type: object - title: Create Ticket Type Request Payload + title: Create Article Request Payload nullable: true properties: - name: + title: type: string - description: The name of the ticket type. - example: Bug + description: The title of the article.For multilingual articles, this will + be the title of the default language's content. + example: Thanks for everything description: type: string - description: The description of the ticket type. - example: Used for tracking bugs - category: + description: The description of the article. For multilingual articles, + this will be the description of the default language's content. + example: Description of the Article + body: type: string - description: Category of the Ticket Type. + description: The content of the article in HTML. For multilingual articles, this + will be the body of the default language's content. Mutually exclusive with `body_markdown`. + example: "

This is the body in html

" + author_id: + type: integer + description: The id of the author of the article. For multilingual articles, + this will be the id of the author of the default language's content. Must + be a teammate on the help center's workspace. + example: 1295 + state: + type: string + description: Whether the article will be `published` or will be a `draft`. + Defaults to draft. For multilingual articles, this will be the state of + the default language's content. enum: - - Customer - - Back-office - - Tracker - example: Customer - icon: + - published + - draft + example: draft + parent_id: + type: integer + description: The id of the article's parent collection or section. An article + without this field stands alone. + example: 18 + parent_type: type: string - description: The icon of the ticket type. - example: "\U0001F41E" - default: "\U0001F39F️" - is_internal: - type: boolean - description: Whether the tickets associated with this ticket type are intended - for internal use only or will be shared with customers. This is currently - a limited attribute. - example: false - default: false + description: The type of parent, which can either be a `collection` or `section`. + example: collection + parent_ids: + type: array + description: The ids of the parent collections to place this article in. + Send an empty array to leave the article without a collection. When + provided, this takes precedence over `parent_id` and `parent_type`. + items: + type: integer + example: + - 18 + - 19 + translated_content: + "$ref": "#/components/schemas/article_translated_content" + folder_id: + type: integer + nullable: true + description: The ID of the folder to place this article in, or null to leave it without a folder. + example: 6 required: - - name - cursor_pages: - title: Cursor based pages + - title + - author_id + create_internal_article_request: + description: You can create an Internal Article type: object - description: | - Cursor-based pagination is a technique used in the Intercom API to navigate through large amounts of data. - A "cursor" or pointer is used to keep track of the current position in the result set, allowing the API to return the data in small chunks or "pages" as needed. + title: Create Internal Article Request Payload nullable: true properties: - type: + title: type: string - description: the type of object `pages`. - example: pages - enum: - - pages - page: + description: The title of the article. + example: Thanks for everything + body: + type: string + description: The content of the article in HTML. Mutually exclusive with `body_markdown`. + example: "

This is the body in html

" + author_id: type: integer - description: The current page - example: 1 - next: - "$ref": "#/components/schemas/starting_after_paging" - per_page: + description: The id of the author of the article. + example: 1295 + owner_id: type: integer - description: Number of results per page - example: 2 - total_pages: + description: The id of the owner of the article. + example: 1295 + folder_id: type: integer - description: Total number of pages - example: 13 - call: - title: Call - type: object - x-tags: - - Calls - description: Represents a phone call in Intercom - properties: - type: - type: string - description: String representing the object's type. Always has the value `call`. - example: call - id: - type: string - description: The id of the call. - example: "123" - conversation_id: - type: string nullable: true - description: The id of the conversation associated with the call, if any. - example: "456" - admin_id: + description: The ID of the folder to place this article in, or null to leave it without a folder. + example: 6 + required: + - title + - owner_id + - author_id + create_collection_request: + description: You can create a collection + type: object + title: Create Collection Request Payload + properties: + name: type: string - nullable: true - description: The id of the admin associated with the call, if any. - example: "789" - contact_id: + description: The name of the collection. For multilingual collections, this + will be the name of the default language's content. + example: collection 51 + description: type: string + description: The description of the collection. For multilingual collections, + this will be the description of the default language's content. + example: English description + translated_content: nullable: true - description: The id of the contact associated with the call, if any. - example: "6762f0dd1bb69f9f2193bb83" - state: - type: string - description: The current state of the call. - example: completed - initiated_at: - "$ref": "#/components/schemas/datetime" - answered_at: - "$ref": "#/components/schemas/datetime" - ended_at: - "$ref": "#/components/schemas/datetime" - created_at: - "$ref": "#/components/schemas/datetime" - updated_at: - "$ref": "#/components/schemas/datetime" - recording_url: + "$ref": "#/components/schemas/group_translated_content" + parent_id: type: string - format: uri nullable: true - description: API URL to download or redirect to the call recording if available. - example: "https://api.intercom.io/calls/123/recording" - transcription_url: - type: string - format: uri + description: The id of the parent collection. If `null` then it will be + created as the first level collection. + example: '6871118' + help_center_id: + type: integer nullable: true - description: API URL to the call transcript if available. - example: "https://api.intercom.io/calls/123/transcript" - call_type: + description: The id of the help center where the collection will be created. + If `null` then it will be created in the default help center. + example: '123' + required: + - name + create_contact_request: + description: Payload to create a contact + type: object + title: Create Contact Request Payload + properties: + role: type: string - description: The type of call. - example: phone - direction: + description: The role of the contact. + example: user + external_id: type: string - description: The direction of the call. - example: outbound - ended_reason: + description: A unique identifier for the contact which is given to Intercom + example: "625e90fc55ab113b6d92175f" + email: type: string - nullable: true - description: The reason for the call end, if applicable. - example: completed + description: The contacts email + example: jdoe@example.com phone: type: string nullable: true - description: The phone number involved in the call, in E.164 format. - example: "+15551234567" - fin_recording_url: + description: The contacts phone + example: "+353871234567" + name: type: string - format: uri nullable: true - description: API URL to the AI Agent (Fin) call recording if available. - fin_transcription_url: + description: The contacts name + example: John Doe + avatar: type: string - format: uri nullable: true - description: API URL to the AI Agent (Fin) call transcript if available. - duration: + description: An image URL containing the avatar of a contact + example: https://www.example.com/avatar_image.jpg + signed_up_at: type: integer + format: date-time nullable: true - description: Total call duration in seconds from the caller's perspective. For inbound calls, measured from initiated to ended. For outbound calls, measured from answered to ended. - example: 900 - talk_time: + description: (Unix timestamp in seconds) The time specified for when a contact signed up. + example: 1571672154 + last_seen_at: type: integer + format: date-time nullable: true - description: Total time in seconds the agent and customer were connected. - example: 300 - queue_time: - type: integer + description: (Unix timestamp in seconds) The time when the contact was last seen + (either where the Intercom Messenger was installed or when specified manually). + example: 1571672154 + owner_id: + type: string nullable: true - description: Total time in seconds the caller waited in queue before connecting, when assigned to a team. - example: 45 - hold_time: - type: integer + description: The id of an admin that has been assigned account ownership + of the contact + example: "321" + unsubscribed_from_emails: + type: boolean nullable: true - description: Total time in seconds the caller was placed on hold during the call. - example: 60 - call_list: - title: Calls + description: Whether the contact is unsubscribed from emails + example: true + language_override: + type: string + nullable: true + description: A preferred language setting for the contact, used by Intercom + as the language of Fin and the Messenger even if their browser has a different + setting. Supports ISO 639-1 two-letter language codes. If an unsupported + code is supplied, the field will be set to null. + example: en + custom_attributes: + type: object + nullable: true + description: The custom attributes which are set for the contact + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 1 + anyOf: + - required: + - email + title: Create contact with email + - required: + - external_id + title: Create contact with external_id + - required: + - role + title: Create contact with role + create_content_import_source_request: + title: Create Content Import Source Payload type: object - description: A paginated list of calls. + description: You can add an Content Import Source to your Fin Content Library. + nullable: false properties: - type: + sync_behavior: type: string - description: String representing the object's type. Always has the value `list`. - example: list - data: - type: array - description: A list of calls. - items: - "$ref": "#/components/schemas/call" - total_count: - type: integer - description: Total number of items available. - example: 0 - pages: - "$ref": "#/components/schemas/cursor_pages" - custom_attributes: - title: Custom Attributes - type: object - description: 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. System-defined attributes - such as "CX Score rating" and "CX Score explanation" may also be included. - additionalProperties: - anyOf: - - type: string - - type: integer - - $ref: "#/components/schemas/datetime" - - "$ref": "#/components/schemas/custom_object_instance_list" - example: - paid_subscriber: true - monthly_spend: 155.5 - team_mates: 9 - start_date_iso8601: "2023-03-04T09:46:14Z" - end_date_timestamp: 1677923174 - CX Score rating: 4 - CX Score explanation: The conversation was resolved quickly and the customer - expressed satisfaction with the outcome. - custom_object_instance: - title: Custom Object Instance + description: If you intend to create or update External Pages via the API, + this should be set to `api`. + enum: + - api + example: api + status: + type: string + description: The status of the content import source. + enum: + - active + - deactivated + default: active + example: active + url: + type: string + description: The URL of the content import source. + example: https://help.example.com + audience_ids: + nullable: true + description: The unique identifiers for the audiences to associate with this content import source. Can be a single integer or an array of integers. + example: + - 5678 + oneOf: + - type: integer + - type: array + items: + type: integer + required: + - sync_behavior + - url + create_conversation_request: + description: 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. type: object - x-tags: - - Custom Object Instances - nullable: true - description: A Custom Object Instance represents an instance of a custom object - type. This allows you to create and set custom attributes to store data about - your customers that is not already captured by Intercom. The parent object - includes recommended default attributes and you can add your own custom attributes. + title: Create Conversation Request Payload properties: - id: + from: + type: object + properties: + type: + type: string + enum: + - lead + - user + - contact + description: The role associated to the contact - user or lead. + example: user + id: + type: string + description: The identifier for the contact which is given by Intercom. + format: uuid + minLength: 24 + maxLength: 24 + example: 536e564f316c83104c000020 + required: + - type + - id + body: type: string - description: The Intercom defined id representing the custom object instance. - example: 16032025 - external_id: + description: The content of the message. HTML is not supported. + example: Hello + subject: type: string - description: The id you have defined for the custom object instance. - example: 0001d1c1e65a7a19e9f59ae2 - external_created_at: - type: integer - format: date-time - nullable: true - description: The time when the Custom Object instance was created in the - external system it originated from. - example: 1571672154 - external_updated_at: - type: integer - format: date-time - nullable: true - description: The time when the Custom Object instance was last updated in - the external system it originated from. - example: 1571672154 + description: The title of the email. Only applicable if the message type is email. + example: Thanks for everything + attachment_urls: + type: array + description: A list of image URLs that will be added as attachments. You + can include up to 10 URLs. + items: + type: string + format: uri + maxItems: 10 created_at: type: integer format: date-time - description: The time the attribute was created as a UTC Unix timestamp + description: The time the conversation was created as a UTC Unix timestamp. If not provided, the current time will be used. This field is only recommneded for migrating past conversations from another source into Intercom. example: 1671028894 - updated_at: + required: + - from + - body + create_data_attribute_request: + description: '' + type: object + title: Create Data Attribute Request + properties: + name: + type: string + description: The name of the data attribute. + example: My Data Attribute + model: + type: string + description: The model that the data attribute belongs to. + enum: + - contact + - company + example: contact + description: + type: string + description: The readable description you see in the UI for the attribute. + example: My Data Attribute Description + messenger_writable: + type: boolean + description: Can this attribute be updated by the Messenger + example: false + required: + - name + - model + - data_type + oneOf: + - properties: + data_type: + enum: + - options + options: + type: array + description: Array of objects representing the options of the list, with `value` as the key and the option as the value. At least + two options are required. + items: + type: object + properties: + value: + type: string + example: + - value: 1-10 + - value: 11-50 + required: + - options + title: 'list attribute' + - properties: + data_type: + enum: + - string + - integer + - float + - boolean + - datetime + - date + title: 'other type' + create_data_event_request: + description: '' + type: object + title: Create Data Event Request + properties: + event_name: + type: string + description: The name of the event that occurred. This is presented to your + App's admins when filtering and creating segments - a good event name + is typically a past tense 'verb-noun' combination, to improve readability, + for example `updated-plan`. + example: invited-friend + created_at: type: integer format: date-time - description: The time the attribute was last updated as a UTC Unix timestamp + description: The time the event occurred as a UTC Unix timestamp example: 1671028894 - type: + user_id: type: string - description: The identifier of the custom object type that defines the structure - of the custom object instance. - example: Order - custom_attributes: + description: Your identifier for the user. + example: '314159' + id: + type: string + description: The unique identifier for the contact (lead or user) which + is given by Intercom. + example: 8a88a590-e1c3-41e2-a502-e0649dbf721c + email: + type: string + description: An email address for your user. An email should only be used + where your application uses email to uniquely identify users. + example: frodo.baggins@example.com + metadata: type: object - description: The custom attributes you have set on the custom object instance. - additionalProperties: - type: string - custom_object_instance_deleted: - title: Custom Object Instance Deleted + description: Optional metadata about the event. + additionalProperties: true + example: + invite_code: ADDAFRIEND + anyOf: + - title: id required + required: + - event_name + - created_at + - id + - title: user_id required + required: + - event_name + - created_at + - user_id + - title: email required + required: + - event_name + - created_at + - email + create_data_event_summaries_request: + description: You can send a list of event summaries for a user. Each event summary + should contain the event name, the time the event occurred, and the number + of times the event occurred. The event name should be a past tense "verb-noun" + combination, to improve readability, for example `updated-plan`. type: object - description: deleted custom object instance object + title: Create Data Event Summaries Request properties: - object: + user_id: type: string - description: The unique identifier of the Custom Object type that defines - the structure of the Custom Object instance. - example: Order - id: + description: Your identifier for the user. + example: '314159' + event_summaries: + type: object + description: A list of event summaries for the user. Each event summary + should contain the event name, the time the event occurred, and the number + of times the event occurred. The event name should be a past tense 'verb-noun' + combination, to improve readability, for example `updated-plan`. + properties: + event_name: + type: string + description: The name of the event that occurred. A good event name + is typically a past tense 'verb-noun' combination, to improve readability, + for example `updated-plan`. + example: invited-friend + count: + type: integer + description: The number of times the event occurred. + example: 1 + first: + type: integer + format: date-time + description: The first time the event was sent + example: 1671028894 + last: + type: integer + format: date-time + description: The last time the event was sent + example: 1671028894 + create_data_exports_request: + description: Request for creating a data export + type: object + title: Create Data Export Request + properties: + created_at_after: + type: integer + description: The start date that you request data for. It must be formatted + as a unix timestamp. + example: 1527811200 + created_at_before: + type: integer + description: The end date that you request data for. It must be formatted + as a unix timestamp. + example: 1527811200 + required: + - created_at_after + - created_at_before + create_external_page_request: + title: Create External Page Payload + type: object + description: You can add an External Page to your Fin Content Library. + nullable: false + properties: + title: type: string - description: The Intercom defined id representing the Custom Object instance. - example: '123' - deleted: + description: The title of the external page. + example: Getting started with... + html: + type: string + description: The body of the external page in HTML. + example: "

Hello world!

" + url: + type: string + description: The URL of the external page. This will be used by Fin to link + end users to the page it based its answer on. When a URL is not present, + Fin will not reference the source. + example: https://help.example.com/en/articles/1234-getting-started + ai_agent_availability: + type: boolean + description: Whether the external page should be used to answer questions + by AI Agent. Will not default when updating an existing external page. + default: false + example: true + ai_copilot_availability: + type: boolean + description: Whether the external page should be used to answer questions + by AI Copilot. Will not default when updating an existing external page. + default: false + example: true + ai_sales_agent_availability: type: boolean - description: Whether the Custom Object instance is deleted or not. + description: Whether the external page should be used to answer questions + by AI Sales Agent. Will not default when updating an existing external page. + default: false example: true - custom_object_instance_list: - title: Custom Object Instances - type: object - description: The list of associated custom object instances for a given reference - attribute on the parent object. - properties: - type: - type: string - example: order.list - instances: - type: array - description: The list of associated custom object instances for a given - reference attribute on the parent object. - items: - "$ref": "#/components/schemas/custom_object_instance" - custom_object_instances_paginated_list: - title: Custom Object Instances - type: object - x-tags: - - Custom Object Instances - description: A paginated list of custom object instances. - nullable: false - properties: - type: + locale: type: string - description: The type of the object - `list`. + description: Always en enum: - - list - example: list - pages: - "$ref": "#/components/schemas/pages_link" - total_count: + - en + default: en + example: en + source_id: type: integer - description: A count of the total number of custom object instances. - example: 2 - data: - type: array - description: An array of Custom Object Instance objects. - items: - "$ref": "#/components/schemas/custom_object_instance" - customer_request: + description: The unique identifier for the source of the external page which + was given by Intercom. Every external page must be associated with a Content + Import Source which represents the place it comes from and from which + it inherits a default audience (configured in the UI). For a new source, + make a POST request to the Content Import Source endpoint and an ID for + the source will be returned in the response. + example: 1234 + external_id: + type: string + description: The identifier for the external page which was given by the + source. Must be unique for the source. + example: '5678' + required: + - title + - html + - locale + - source_id + - external_id + create_message_request: + description: You can create a message type: object + title: Create Message Request Payload nullable: true - oneOf: - - title: Intercom User ID - properties: - intercom_user_id: - type: string - description: The identifier for the contact as given by Intercom. - example: 6329bd9ffe4e2e91dac76188 - required: - - intercom_user_id - - title: User ID - properties: - user_id: - type: string - description: The external_id you have defined for the contact who is being - added as a participant. - example: 2e91dac761886329bd9ffe4e - required: - - user_id - - title: Email - properties: - email: - type: string - description: The email you have defined for the contact who is being added - as a participant. - example: sam.sung@example.com - required: - - email - data_attribute: - title: Data Attribute - type: object - x-tags: - - Data Attributes - description: Data Attributes are metadata used to describe your contact and - company models. These include standard and custom attributes. By using the - data attributes endpoint, you can get the global list of attributes for your - workspace, as well as create and archive custom attributes. properties: - type: - type: string - description: Value is `data_attribute`. - enum: - - data_attribute - example: data_attribute - id: - type: integer - description: The unique identifier for the data attribute which is given - by Intercom. Only available for custom attributes. - example: 12878 - model: + message_type: type: string - description: Value is `contact` for user/lead attributes and `company` for - company attributes. + description: 'The kind of message being created. Values: `in_app`, `email`, `sms` or `whatsapp`.' enum: - - contact - - company - example: contact - name: - type: string - description: Name of the attribute. - example: paid_subscriber - full_name: - type: string - description: Full name of the attribute. Should match the name unless it's - a nested attribute. We can split full_name on `.` to access nested user - object values. - example: custom_attributes.paid_subscriber - label: + - in_app + - email + - sms + - whatsapp + example: in_app + subject: type: string - description: Readable name of the attribute (i.e. name you see in the UI) - example: Paid Subscriber - description: + description: The title of the email. + example: Thanks for everything + body: type: string - description: Readable description of the attribute. - example: Whether the user is a paid subscriber. - data_type: + description: The content of the message. HTML and plaintext are supported. + example: Hello there + template: type: string - description: The data type of the attribute. - enum: - - string - - integer - - float - - boolean - - date - example: boolean - options: - type: array - description: List of predefined options for attribute value. - items: - type: string - example: - - 'true' - - 'false' - api_writable: - type: boolean - description: Can this attribute be updated through API - example: true - messenger_writable: - type: boolean - description: Can this attribute be updated by the Messenger - example: false - ui_writable: - type: boolean - description: Can this attribute be updated in the UI - example: true - custom: - type: boolean - description: Set to true if this is a CDA - example: true - archived: - type: boolean - description: Is this attribute archived. (Only applicable to CDAs) - example: false + description: The style of the outgoing message. Possible values `plain` + or `personal`. + example: plain + from: + type: object + description: The sender of the message. If not provided, the default sender + will be used. + properties: + type: + type: string + description: Always `admin`. + enum: + - admin + example: admin + id: + type: integer + description: The identifier for the admin which is given by Intercom. + example: 394051 + required: + - type + - id + to: + oneOf: + - $ref: '#/components/schemas/recipient' + - type: array + description: The recipients of the message. + items: + $ref: '#/components/schemas/recipient' + example: + - type: user + id: 536e564f316c83104c000020 + - type: lead + id: 536e564f316c83104c000021 + cc: + oneOf: + - $ref: '#/components/schemas/recipient' + - type: array + description: The CC recipients of the message. + items: + $ref: '#/components/schemas/recipient' + example: + - type: user + id: 536e564f316c83104c000023 + bcc: + oneOf: + - $ref: '#/components/schemas/recipient' + - type: array + description: The BCC recipients of the message. + items: + $ref: '#/components/schemas/recipient' + example: + - type: user + id: 536e564f316c83104c000022 created_at: type: integer - format: date-time - description: The time the attribute was created as a UTC Unix timestamp - example: 1671028894 - updated_at: - type: integer - format: date-time - description: The time the attribute was last updated as a UTC Unix timestamp - example: 1671028894 - admin_id: - type: string - description: Teammate who created the attribute. Only applicable to CDAs - example: '5712945' - data_attribute_list: - title: Data Attribute List + description: The time the message was created. If not provided, the current + time will be used. + example: 1590000000 + create_conversation_without_contact_reply: + type: boolean + description: Whether a conversation should be opened in the inbox for the + message without the contact replying. Defaults to false if not provided. + default: false + example: true + anyOf: + - title: 'message_type: `email`.' + required: + - message_type + - subject + - body + - template + - from + - to + - title: 'message_type: `inapp`.' + required: + - message_type + - body + - from + - to + - title: 'message_type: `sms`.' + required: + - message_type + - body + - from + - to + - title: 'message_type: `whatsapp`.' + required: + - message_type + - template + - components + - from + - to + recipient: type: object - description: A list of all data attributes belonging to a workspace for contacts - or companies. + title: Recipient + description: A recipient of a message properties: type: type: string - description: The type of the object + description: The role associated to the contact - `user` or `lead`. enum: - - list - example: list - data: - type: array - description: A list of data attributes - items: - "$ref": "#/components/schemas/data_attribute" - conversation_attribute_base: - title: Conversation Attribute Base + - user + - lead + example: user + id: + type: string + description: The identifier for the contact which is given by Intercom. + example: 536e564f316c83104c000020 + required: + - type + - id + create_or_update_company_request: type: object + title: Create Or Update Company Request Payload + description: You can create or update a Company + nullable: true properties: - type: - type: string - description: "Value is `conversation_attribute`." - enum: - - conversation_attribute - example: conversation_attribute - id: - type: integer - description: The unique identifier for the conversation attribute. - example: 8 name: type: string - description: Name of the attribute. - example: api_test_attr - description: + description: The name of the Company + example: Intercom + company_id: type: string - description: Readable description of the attribute. - example: Created via API test - data_type: + description: The company id you have defined for the company. Can't be updated + example: 625e90fc55ab113b6d92175f + plan: type: string - description: "The data type of the attribute. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files." - enum: - - string - - integer - - list - - decimal - - boolean - - datetime - - relationship - - files - example: string - required: - type: boolean - description: Whether this attribute is required. - example: false - visible_to_team_ids: - type: array - description: Team IDs that can see this attribute. Empty array means all teams. - items: + description: The name of the plan you have associated with the company. + example: Enterprise + size: + type: integer + description: The number of employees in this company. + example: '100' + website: + type: string + description: The URL for this company's website. Please note that the value + specified here is not validated. Accepts any string. + example: https://www.example.com + industry: + type: string + description: The industry that this company operates in. + example: Manufacturing + custom_attributes: + type: object + description: A hash of key/value pairs containing any other data about the + company you want Intercom to store. + additionalProperties: type: string - example: [] - archived: - type: boolean - description: Whether this attribute is archived. - example: false - created_at: + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + remote_created_at: + type: integer + description: The time the company was created by you. + example: 1394531169 + monthly_spend: + type: integer + description: How much revenue the company generates for your business. Note + that this will truncate floats. i.e. it only allow for whole integers, + 155.98 will be truncated to 155. Note that this has an upper limit of + 2**31-1 or 2147483647.. + example: 1000 + create_or_update_custom_object_instance_request: + description: Payload to create or update a Custom Object instance + type: object + title: Create Or Update Custom Object Instance Request Payload + properties: + external_id: + type: string + description: A unique identifier for the Custom Object instance in the external + system it originated from. + external_created_at: type: integer format: date-time - description: The time the attribute was created as a UTC Unix timestamp. - example: 1778239701 - updated_at: + nullable: true + description: The time when the Custom Object instance was created in the + external system it originated from. + example: 1571672154 + external_updated_at: type: integer format: date-time - description: The time the attribute was last updated as a UTC Unix timestamp. - example: 1778239701 - admin_id: - type: string - description: ID of the admin who created the attribute. - example: '16' - conversation_attribute_string_type: - title: Conversation Attribute (String) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - string - multiline: - type: boolean - description: Whether this string attribute is multiline. - example: false - conversation_attribute_integer_type: - title: Conversation Attribute (Integer) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - integer - conversation_attribute_list_type: - title: Conversation Attribute (List) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - list - options: - type: array - description: Predefined options for this attribute. Each option has a unique UUID used to identify it in the options management endpoints. - items: - "$ref": "#/components/schemas/conversation_attribute_option" - conversation_attribute_decimal_type: - title: Conversation Attribute (Decimal) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - decimal - conversation_attribute_boolean_type: - title: Conversation Attribute (Boolean) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - boolean - conversation_attribute_datetime_type: - title: Conversation Attribute (Datetime) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - datetime - conversation_attribute_relationship_type: - title: Conversation Attribute (Relationship) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: - type: string - enum: - - relationship - reference: - type: object - description: Reference configuration for related objects. - properties: - type: - type: string - description: "The cardinality of the relationship: `one` or `many`." - enum: - - one - - many - example: many - object_type_id: - type: string - description: The ID of the related custom object type. - example: Test_Object - conversation_attribute_files_type: - title: Conversation Attribute (Files) - allOf: - - "$ref": "#/components/schemas/conversation_attribute_base" - - type: object - properties: - data_type: + nullable: true + description: The time when the Custom Object instance was last updated in + the external system it originated from. + example: 1571672154 + custom_attributes: + type: object + nullable: true + description: The custom attributes which are set for the Custom Object instance. + additionalProperties: type: string - enum: - - files - conversation_attribute: - title: Conversation Attribute - x-tags: - - Conversations Attributes - description: "Conversation Attributes represent custom metadata fields for conversations. They support type-specific properties: strings (multiline), lists (options), and relationships (reference)." - discriminator: - propertyName: data_type - mapping: - string: "#/components/schemas/conversation_attribute_string_type" - integer: "#/components/schemas/conversation_attribute_integer_type" - list: "#/components/schemas/conversation_attribute_list_type" - decimal: "#/components/schemas/conversation_attribute_decimal_type" - boolean: "#/components/schemas/conversation_attribute_boolean_type" - datetime: "#/components/schemas/conversation_attribute_datetime_type" - relationship: "#/components/schemas/conversation_attribute_relationship_type" - files: "#/components/schemas/conversation_attribute_files_type" - oneOf: - - "$ref": "#/components/schemas/conversation_attribute_string_type" - - "$ref": "#/components/schemas/conversation_attribute_integer_type" - - "$ref": "#/components/schemas/conversation_attribute_list_type" - - "$ref": "#/components/schemas/conversation_attribute_decimal_type" - - "$ref": "#/components/schemas/conversation_attribute_boolean_type" - - "$ref": "#/components/schemas/conversation_attribute_datetime_type" - - "$ref": "#/components/schemas/conversation_attribute_relationship_type" - - "$ref": "#/components/schemas/conversation_attribute_files_type" - conversation_attribute_list: - title: Conversation Attribute List - type: object - description: A list of all conversation attributes belonging to a workspace. - properties: - type: - type: string - description: The type of the object. - enum: - - list - example: list - data: - type: array - description: A list of conversation attributes. - items: - "$ref": "#/components/schemas/conversation_attribute" - conversation_attribute_option: - title: Conversation Attribute Option + create_or_update_tag_request: + description: You can create or update an existing tag. type: object - description: A single option on a list-type conversation attribute. + title: Create or Update Tag Request Payload properties: - id: + name: type: string - description: The unique UUID identifier for this option. Use this value as `option_id` in the options management endpoints. - example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 - label: + description: The name of the tag, which will be created if not found, or + the new name for the tag if this is an update request. Names are case + insensitive. + example: Independent + id: type: string - description: The display label for the option. - example: High - archived: - type: boolean - description: Whether this option is archived (soft-deleted). - example: false - create_conversation_attribute_option_request: - title: Create Conversation Attribute Option Request - type: object - description: Payload for adding a new option to a list-type conversation attribute. + description: The id of tag to updates. + example: '656452352' required: - - label + - name + create_phone_switch_request: + description: You can create an phone switch + type: object + title: Create Phone Switch Request Payload + nullable: true properties: - label: + phone: type: string - description: The label for the new option. - example: High - update_conversation_attribute_option_request: - title: Update Conversation Attribute Option Request + description: Phone number in E.164 format, that will receive the SMS to + continue the conversation in the Messenger. + example: "+1 1234567890" + custom_attributes: + "$ref": "#/components/schemas/custom_attributes" + required: + - phone + create_ticket_reply_with_comment_request: + title: Create Ticket Reply Request Payload + oneOf: + - "$ref": "#/components/schemas/contact_reply_ticket_request" + - "$ref": "#/components/schemas/admin_reply_ticket_request" + create_ticket_request: + description: You can create a Ticket type: object - description: Payload for renaming a list option on a conversation attribute. - required: - - label + title: Create Ticket Request Payload properties: - label: + ticket_type_id: type: string - description: The updated label for the option. - example: Renamed - create_conversation_attribute_request_base: - title: Create Conversation Attribute Request Base - type: object + description: The ID of the type of ticket you want to create + example: '1234' + contacts: + type: array + description: The list of contacts (users or leads) affected by this ticket. + Currently only one is allowed + items: + type: object + oneOf: + - title: ID + properties: + id: + type: string + description: The identifier for the contact as given by Intercom. + required: + - id + - title: External ID + properties: + external_id: + type: string + description: The external_id you have defined for the contact who + is being added as a participant. + required: + - external_id + - title: Email + properties: + email: + type: string + description: The email you have defined for the contact who is being + added as a participant. If a contact with this email does not + exist, one will be created. + required: + - email + example: + - id: '1234' + conversation_to_link_id: + type: string + description: "The ID of the conversation you want to link to the ticket. + Here are the valid ways of linking two tickets:\n + - conversation | back-office ticket\n + - customer tickets | non-shared back-office ticket\n + - conversation | tracker ticket\n + - customer ticket | tracker ticket" + example: '1234' + company_id: + type: string + description: The ID of the company that the ticket is associated with. The + unique identifier for the company which is given by Intercom + example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 + created_at: + type: integer + description: The time the ticket was created. If not provided, the current + time will be used. + example: 1590000000 + ticket_attributes: + "$ref": "#/components/schemas/ticket_request_custom_attributes" + assignment: + type: object + properties: + admin_assignee_id: + type: string + description: The ID of the admin to which the ticket is assigned. + If not provided, the ticket will be unassigned. + example: '123' + team_assignee_id: + type: string + description: The ID of the team to which the ticket is assigned. + If not provided, the ticket will be unassigned. + example: '8' required: - - name - - data_type + - ticket_type_id + - contacts + create_ticket_type_attribute_request: + description: You can create a Ticket Type Attribute + type: object + title: Create Ticket Type Attribute Request Payload properties: name: type: string - description: Name of the attribute. - example: api_test_attr + description: The name of the ticket type attribute + example: Bug Priority description: type: string - description: Readable description of the attribute. - example: Created via API test + description: The description of the attribute presented to the teammate + or contact + example: Priority level of the bug data_type: type: string - description: "The data type of the attribute. Allowed types: string, integer, list, decimal, boolean, datetime, relationship, files." + description: The data type of the attribute enum: - string - - integer - list + - integer - decimal - boolean - datetime - - relationship - files example: string - required: + required_to_create: type: boolean - description: Whether this attribute is required. + description: Whether the attribute is required to be filled in when teammates + are creating the ticket in Inbox. + default: false example: false - visible_to_team_ids: - type: array - description: Team IDs that can see this attribute. Empty array means all teams. - items: - type: string - example: [] - create_conversation_attribute_string_request: - title: Create Conversation Attribute Request (String) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - string - multiline: - type: boolean - description: Whether this string attribute is multiline. - example: false - create_conversation_attribute_integer_request: - title: Create Conversation Attribute Request (Integer) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - integer - create_conversation_attribute_list_request: - title: Create Conversation Attribute Request (List) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - list - options: - type: array - description: Initial options for this list attribute. Each option must have a `label`. - items: - "$ref": "#/components/schemas/create_conversation_attribute_option_request" - create_conversation_attribute_decimal_request: - title: Create Conversation Attribute Request (Decimal) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - decimal - create_conversation_attribute_boolean_request: - title: Create Conversation Attribute Request (Boolean) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - boolean - create_conversation_attribute_datetime_request: - title: Create Conversation Attribute Request (Datetime) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - datetime - create_conversation_attribute_relationship_request: - title: Create Conversation Attribute Request (Relationship) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - relationship - reference: - type: object - description: Reference configuration for related objects. - required: - - type - properties: - type: - type: string - description: "The cardinality of the relationship: `one` or `many`." - enum: - - one - - many - object_type_id: - type: string - description: The ID of the related custom object type. - create_conversation_attribute_files_request: - title: Create Conversation Attribute Request (Files) - allOf: - - "$ref": "#/components/schemas/create_conversation_attribute_request_base" - - type: object - properties: - data_type: - type: string - enum: - - files - create_conversation_attribute_request: - title: Create Conversation Attribute Request - description: Payload for creating a new conversation attribute. - discriminator: - propertyName: data_type - mapping: - string: "#/components/schemas/create_conversation_attribute_string_request" - integer: "#/components/schemas/create_conversation_attribute_integer_request" - list: "#/components/schemas/create_conversation_attribute_list_request" - decimal: "#/components/schemas/create_conversation_attribute_decimal_request" - boolean: "#/components/schemas/create_conversation_attribute_boolean_request" - datetime: "#/components/schemas/create_conversation_attribute_datetime_request" - relationship: "#/components/schemas/create_conversation_attribute_relationship_request" - files: "#/components/schemas/create_conversation_attribute_files_request" - oneOf: - - "$ref": "#/components/schemas/create_conversation_attribute_string_request" - - "$ref": "#/components/schemas/create_conversation_attribute_integer_request" - - "$ref": "#/components/schemas/create_conversation_attribute_list_request" - - "$ref": "#/components/schemas/create_conversation_attribute_decimal_request" - - "$ref": "#/components/schemas/create_conversation_attribute_boolean_request" - - "$ref": "#/components/schemas/create_conversation_attribute_datetime_request" - - "$ref": "#/components/schemas/create_conversation_attribute_relationship_request" - - "$ref": "#/components/schemas/create_conversation_attribute_files_request" - update_conversation_attribute_request: - title: Update Conversation Attribute Request - type: object - description: Payload for updating a conversation attribute. - properties: - name: - type: string - description: Name of the attribute. - example: api_test_renamed - description: - type: string - description: Readable description of the attribute. - example: Updated via API + required_to_create_for_contacts: + type: boolean + description: Whether the attribute is required to be filled in when contacts + are creating the ticket in Messenger. + default: false + example: false + visible_on_create: + type: boolean + description: Whether the attribute is visible to teammates when creating + a ticket in Inbox. + default: true + example: true + visible_to_contacts: + type: boolean + description: Whether the attribute is visible to contacts when creating + a ticket in Messenger. + default: true + example: true multiline: type: boolean - description: "(String data type only) Whether this string attribute is multiline." + description: Whether the attribute allows multiple lines of text (only applicable + to string attributes) example: false - required: + list_items: + type: string + description: A comma delimited list of items for the attribute value (only + applicable to list attributes) + example: Low Priority,Medium Priority,High Priority + allow_multiple_values: type: boolean - description: Whether this attribute is required. + description: Whether the attribute allows multiple files to be attached + to it (only applicable to file attributes) example: false - visible_to_team_ids: - type: array - description: Team IDs that can see this attribute. Empty array means all teams. - items: - type: string - example: [] - reference: - type: object - description: "(Relationship data type only) Reference configuration for related objects." - required: - - type - properties: - type: - type: string - description: "The cardinality of the relationship: `one` or `many`." - enum: - - one - - many - object_type_id: - type: string - description: The ID of the related custom object type. - create_data_connector_request: - title: Create Data Connector Request + required: + - name + - description + - data_type + create_ticket_type_request: + description: | + The request payload for creating a ticket type. + You can copy the `icon` property for your ticket type from [Twemoji Cheatsheet](https://twemoji-cheatsheet.vercel.app/) type: object - description: You can create a data connector by providing the required parameters. + title: Create Ticket Type Request Payload + nullable: true properties: name: type: string - description: The name of the data connector. - example: Get Order Status + description: The name of the ticket type. + example: Bug description: type: string - description: A description of what this data connector does. - example: Looks up order status from an external service - http_method: - type: string - description: The HTTP method used when calling the external API. - enum: - - get - - post - - put - - delete - - patch - example: get - url: - type: string - description: The URL of the external API endpoint. Supports template variables like `{{order_id}}`. - example: "https://api.example.com/orders/{{order_id}}/status" - body: - type: string - description: The request body template. Supports template variables. - direct_fin_usage: - type: boolean - description: Whether the connector is used directly by Fin (true) or only in workflows (false). Defaults to false. - example: false - audiences: - type: array - description: The user types this connector is available for. - items: - type: string - enum: - - leads - - users - - visitors - example: - - leads - - visitors - headers: - type: array - description: HTTP headers to include in the request. - items: - type: object - properties: - name: - type: string - description: The header name. - example: Content-Type - value: - type: string - description: The header value. Supports template variables. - example: application/json - data_inputs: - type: array - description: Input parameters accepted by the connector. - items: - type: object - properties: - name: - type: string - description: The parameter name. - example: order_id - type: - type: string - description: The parameter type. - enum: - - string - - integer - - decimal - - boolean - example: string - description: - type: string - description: A description of the parameter. - example: The order ID to look up - required: - type: boolean - description: Whether the parameter is required. - example: true - default_value: - type: string - description: The default value for the parameter. Defaults to an empty string if omitted. - customer_authentication: - type: boolean - description: Whether the connector requires customer authentication before executing. Defaults to false. - example: false - bypass_authentication: - type: boolean - description: Whether authentication is bypassed entirely (public endpoint). Defaults to false. - example: false - validate_missing_attributes: + description: The description of the ticket type. + example: Used for tracking bugs + category: + type: string + description: Category of the Ticket Type. + enum: + - Customer + - Back-office + - Tracker + example: Customer + icon: + type: string + description: The icon of the ticket type. + example: "\U0001F41E" + default: "\U0001F39F️" + is_internal: type: boolean - description: Whether to validate that all required data inputs have values before executing. + description: Whether the tickets associated with this ticket type are intended + for internal use only or will be shared with customers. This is currently + a limited attribute. example: false - mock_response: - type: object - description: A sample JSON response from the external API. Auto-generates `response_fields` and sets `configuration_response_type` to `mock_response_type`. - example: - order: - id: 12345 - status: shipped - token_ids: - type: array - description: IDs of authentication tokens to attach to this data connector. - items: - type: string - example: - - '1234' - - '5678' + default: false required: - name - update_data_connector_request: - title: Update Data Connector Request + cursor_pages: + title: Cursor based pages type: object description: | - Update an existing data connector. All fields are optional — only provided fields will be updated. Set `state` to `live` or `draft` to change the connector's state. + Cursor-based pagination is a technique used in the Intercom API to navigate through large amounts of data. + A "cursor" or pointer is used to keep track of the current position in the result set, allowing the API to return the data in small chunks or "pages" as needed. + nullable: true properties: - name: + type: type: string - description: The name of the data connector. - example: Updated Connector Name - description: + description: the type of object `pages`. + example: pages + enum: + - pages + page: + type: integer + description: The current page + example: 1 + next: + "$ref": "#/components/schemas/starting_after_paging" + per_page: + type: integer + description: Number of results per page + example: 2 + total_pages: + type: integer + description: Total number of pages + example: 13 + call: + title: Call + type: object + x-tags: + - Calls + description: Represents a phone call in Intercom + properties: + type: + type: string + description: String representing the object's type. Always has the value `call`. + example: call + id: + type: string + description: The id of the call. + example: "123" + conversation_id: + type: string + nullable: true + description: The id of the conversation associated with the call, if any. + example: "456" + admin_id: + type: string + nullable: true + description: The id of the admin associated with the call, if any. + example: "789" + contact_id: type: string - description: A description of what this data connector does. - example: Updated description + nullable: true + description: The id of the contact associated with the call, if any. + example: "6762f0dd1bb69f9f2193bb83" state: type: string - description: The desired state of the connector. - enum: - - draft - - live - http_method: + description: The current state of the call. + example: completed + initiated_at: + "$ref": "#/components/schemas/datetime" + answered_at: + "$ref": "#/components/schemas/datetime" + ended_at: + "$ref": "#/components/schemas/datetime" + created_at: + "$ref": "#/components/schemas/datetime" + updated_at: + "$ref": "#/components/schemas/datetime" + recording_url: type: string - description: The HTTP method used by the data connector. - enum: - - get - - post - - put - - delete - - patch - example: post - url: + format: uri + nullable: true + description: API URL to download or redirect to the call recording if available. + example: "https://api.intercom.io/calls/123/recording" + transcription_url: type: string - description: The URL of the external API endpoint. Supports template variables like `{{order_id}}`. - example: "https://api.example.com/orders/{{order_id}}/status" - body: + format: uri + nullable: true + description: API URL to the call transcript if available. + example: "https://api.intercom.io/calls/123/transcript" + call_type: type: string - description: The request body template. Supports template variables. - direct_fin_usage: - type: boolean - description: Whether this connector is used directly by Fin. - example: false - audiences: - type: array - description: The audience types this connector targets. - items: - type: string - enum: - - leads - - users - - visitors - example: - - leads - - users - headers: - type: array - description: HTTP headers to include in the request. - items: - type: object - properties: - name: - type: string - description: The header name. - example: Content-Type - value: - type: string - description: The header value. Supports template variables. - example: application/json - data_inputs: + description: The type of call. + example: phone + direction: + type: string + description: The direction of the call. + example: outbound + ended_reason: + type: string + nullable: true + description: The reason for the call end, if applicable. + example: completed + phone: + type: string + nullable: true + description: The phone number involved in the call, in E.164 format. + example: "+15551234567" + fin_recording_url: + type: string + format: uri + nullable: true + description: API URL to the AI Agent (Fin) call recording if available. + fin_transcription_url: + type: string + format: uri + nullable: true + description: API URL to the AI Agent (Fin) call transcript if available. + duration: + type: integer + nullable: true + description: Total call duration in seconds from the caller's perspective. For inbound calls, measured from initiated to ended. For outbound calls, measured from answered to ended. + example: 900 + talk_time: + type: integer + nullable: true + description: Total time in seconds the agent and customer were connected. + example: 300 + queue_time: + type: integer + nullable: true + description: Total time in seconds the caller waited in queue before connecting, when assigned to a team. + example: 45 + hold_time: + type: integer + nullable: true + description: Total time in seconds the caller was placed on hold during the call. + example: 60 + call_list: + title: Calls + type: object + description: A paginated list of calls. + properties: + type: + type: string + description: String representing the object's type. Always has the value `list`. + example: list + data: type: array - description: The input parameters accepted by this data connector. Replaces all existing inputs. + description: A list of calls. items: - type: object - properties: - name: - type: string - description: The name of the input parameter. - example: order_id - type: - type: string - description: The data type of the input. - enum: - - string - - integer - - decimal - - boolean - example: string - description: - type: string - description: A description of the input parameter. Required for each input. - example: The order ID to look up - required: - type: boolean - description: Whether this input is required. - example: true - default_value: - type: string - description: The default value for this input, if any. - customer_authentication: - type: boolean - description: Whether OTP authentication is enabled for this connector. - example: false - bypass_authentication: - type: boolean - description: Whether authentication is bypassed for this connector. - example: false - validate_missing_attributes: - type: boolean - description: Whether to validate missing attributes before execution. - example: true - mock_response: + "$ref": "#/components/schemas/call" + total_count: + type: integer + description: Total number of items available. + example: 0 + pages: + "$ref": "#/components/schemas/cursor_pages" + custom_attributes: + title: Custom Attributes + type: object + description: 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. System-defined attributes + such as "CX Score rating" and "CX Score explanation" may also be included. + additionalProperties: + anyOf: + - type: string + - type: integer + - $ref: "#/components/schemas/datetime" + - "$ref": "#/components/schemas/custom_object_instance_list" + example: + paid_subscriber: true + monthly_spend: 155.5 + team_mates: 9 + start_date_iso8601: "2023-03-04T09:46:14Z" + end_date_timestamp: 1677923174 + CX Score rating: 4 + CX Score explanation: The conversation was resolved quickly and the customer + expressed satisfaction with the outcome. + custom_object_instance: + title: Custom Object Instance + type: object + x-tags: + - Custom Object Instances + nullable: true + description: A Custom Object Instance represents an instance of a custom object + type. This allows you to create and set custom attributes to store data about + your customers that is not already captured by Intercom. The parent object + includes recommended default attributes and you can add your own custom attributes. + properties: + id: + type: string + description: The Intercom defined id representing the custom object instance. + example: 16032025 + external_id: + type: string + description: The id you have defined for the custom object instance. + example: 0001d1c1e65a7a19e9f59ae2 + external_created_at: + type: integer + format: date-time + nullable: true + description: The time when the Custom Object instance was created in the + external system it originated from. + example: 1571672154 + external_updated_at: + type: integer + format: date-time + nullable: true + description: The time when the Custom Object instance was last updated in + the external system it originated from. + example: 1571672154 + created_at: + type: integer + format: date-time + description: The time the attribute was created as a UTC Unix timestamp + example: 1671028894 + updated_at: + type: integer + format: date-time + description: The time the attribute was last updated as a UTC Unix timestamp + example: 1671028894 + type: + type: string + description: The identifier of the custom object type that defines the structure + of the custom object instance. + example: Order + custom_attributes: type: object - description: A sample JSON response from the external API. Auto-generates `response_fields` and sets `configuration_response_type` to `mock_response_type`. - example: - order: - id: 12345 - status: shipped - token_ids: - type: array - description: IDs of authentication tokens to attach to this data connector. An empty array removes all tokens. - items: + description: The custom attributes you have set on the custom object instance. + additionalProperties: type: string - example: - - '1234' - - '5678' - data_connector: - title: Data Connector + custom_object_instance_deleted: + title: Custom Object Instance Deleted type: object - x-tags: - - Data Connectors - description: | - A data connector allows you to make HTTP requests to external APIs from Intercom workflows and AI agents. + description: deleted custom object instance object properties: - type: + object: type: string - description: The type of object - `data_connector`. - enum: - - data_connector - example: data_connector + description: The unique identifier of the Custom Object type that defines + the structure of the Custom Object instance. + example: Order id: type: string - description: The unique identifier for the data connector. - example: '12345' - name: - type: string - description: The name of the data connector. - example: Order Status Service - description: - type: string - nullable: true - description: A description of what this data connector does. - example: Fetches order status from external fulfillment API - state: - type: string - description: The current state of the data connector. - enum: - - draft - - live - example: live - http_method: - type: string - description: The HTTP method used by the data connector. - enum: - - get - - post - - put - - delete - - patch - example: post - direct_fin_usage: + description: The Intercom defined id representing the Custom Object instance. + example: '123' + deleted: type: boolean - description: Whether this data connector is assigned to Fin for direct usage. - example: false - created_by_admin_id: - type: string - description: The ID of the admin who created this data connector. - example: '12345' - updated_by_admin_id: - type: string - description: The ID of the admin who last updated this data connector. - example: '12345' - created_at: - type: string - format: date-time - description: The time the data connector was created. - example: '2025-11-15T09:30:00Z' - updated_at: - type: string - format: date-time - description: The time the data connector was last updated. - example: '2026-01-20T14:22:15Z' - execution_results_url: + description: Whether the Custom Object instance is deleted or not. + example: true + custom_object_instance_list: + title: Custom Object Instances + type: object + description: The list of associated custom object instances for a given reference + attribute on the parent object. + properties: + type: type: string - description: The URL path to fetch execution results for this connector. - example: "/data_connectors/12345/execution_results" - data_connector_detail: - title: Data Connector (Detail) + example: order.list + instances: + type: array + description: The list of associated custom object instances for a given + reference attribute on the parent object. + items: + "$ref": "#/components/schemas/custom_object_instance" + customer_request: + type: object + nullable: true + oneOf: + - title: Intercom User ID + properties: + intercom_user_id: + type: string + description: The identifier for the contact as given by Intercom. + example: 6329bd9ffe4e2e91dac76188 + required: + - intercom_user_id + - title: User ID + properties: + user_id: + type: string + description: The external_id you have defined for the contact who is being + added as a participant. + example: 2e91dac761886329bd9ffe4e + required: + - user_id + - title: Email + properties: + email: + type: string + description: The email you have defined for the contact who is being added + as a participant. + example: sam.sung@example.com + required: + - email + data_attribute: + title: Data Attribute type: object x-tags: - - Data Connectors - description: | - Full detail view of a data connector, returned by `GET /data_connectors/{id}`. - Includes configuration, data inputs, response fields, and object mappings. + - Data Attributes + description: Data Attributes are metadata used to describe your contact and + company models. These include standard and custom attributes. By using the + data attributes endpoint, you can get the global list of attributes for your + workspace, as well as create and archive custom attributes. properties: type: type: string - description: The type of object - `data_connector`. + description: Value is `data_attribute`. enum: - - data_connector - example: data_connector + - data_attribute + example: data_attribute id: + type: integer + description: The unique identifier for the data attribute which is given + by Intercom. Only available for custom attributes. + example: 12878 + model: type: string - description: The unique identifier for the data connector. - example: '12345' + description: Value is `contact` for user/lead attributes and `company` for + company attributes. + enum: + - contact + - company + example: contact name: type: string - description: The name of the data connector. - example: Order Status Service - description: - type: string - nullable: true - description: A description of what this data connector does. - example: Fetches order status from external fulfillment API - state: + description: Name of the attribute. + example: paid_subscriber + full_name: type: string - description: The current state of the data connector. - enum: - - draft - - live - example: live - url: + description: Full name of the attribute. Should match the name unless it's + a nested attribute. We can split full_name on `.` to access nested user + object values. + example: custom_attributes.paid_subscriber + label: type: string - nullable: true - description: The URL of the external API endpoint. Supports template variables like `{{order_id}}`. - example: "https://api.example.com/orders/{{order_id}}/status" - body: + description: Readable name of the attribute (i.e. name you see in the UI) + example: Paid Subscriber + description: type: string - description: The request body template. Supports template variables. - example: '{"text": "{{message}}"}' - headers: - type: array - description: HTTP headers for the request. Header values are always redacted as `"****"` in responses. - items: - type: object - properties: - name: - type: string - description: The header name. - example: Authorization - value: - type: string - description: Always `"****"` in responses. - example: "****" - example: - - name: Authorization - value: "****" - http_method: + description: Readable description of the attribute. + example: Whether the user is a paid subscriber. + data_type: type: string - description: The HTTP method used by the data connector. + description: The data type of the attribute. enum: - - get - - post - - put - - delete - - patch - example: post - direct_fin_usage: - type: boolean - description: Whether this connector is used directly by Fin. - example: false - audiences: + - string + - integer + - float + - boolean + - date + example: boolean + options: type: array - description: The audience types this connector targets. + description: List of predefined options for attribute value. items: type: string - enum: - - users - - leads - - visitors example: - - users - - leads - execution_type: - type: string - nullable: true - description: How the connector executes. - enum: - - server_side - - client_side - example: server_side - configuration_response_type: - type: string - nullable: true - description: The expected response format from the connector. - enum: - - test_response_type - - mock_response_type - example: test_response_type - data_transformation_type: - type: string - nullable: true - description: The type of data transformation applied to the response. - enum: - - full_access - - redacted_access - - code_block_transformation - client_function_name: - type: string - nullable: true - description: The name of the client-side function, if applicable. - client_function_timeout_ms: - type: integer - nullable: true - description: Timeout in milliseconds for the client function, if applicable. - data_inputs: - type: array - description: The input parameters accepted by this data connector. - items: - type: object - properties: - name: - type: string - description: The name of the input parameter. - example: conversation_id - type: - type: string - description: The data type of the input. - enum: - - string - - integer - - decimal - - boolean - example: string - description: - type: string - nullable: true - description: A description of the input parameter. - required: - type: boolean - description: Whether this input is required. - example: true - default_value: - type: string - description: The default value for this input, if any. - response_fields: - type: array - description: The fields returned in the connector response. - items: - type: object - properties: - path: - type: string - description: The JSON path of the response field. - example: status - type: - type: string - description: The data type of the response field. - enum: - - unknown - - string - - integer - - decimal - - datetime - - boolean - example: string - example_value: - nullable: true - description: An example value for this field. - example: ok - redacted: - type: boolean - description: Whether this field is redacted in logs. - example: false - object_mappings: - type: array - description: Mappings from connector response objects to Intercom objects. - items: - type: object - properties: - response_object_path: - type: string - intercom_object_type: - type: string - enum: - - conversation - - user - attribute_mappings: - type: array - items: - type: object - properties: - response_attribute_path: - type: string - intercom_attribute_identifier: - type: string - mapping_type: - type: string - enum: - - primitive_mapping - - context_mapping - reference_mappings: - type: array - items: - type: object - properties: - intercom_object_type: - type: string - enum: - - conversation - - user - intercom_attribute_identifier: - type: string - token_ids: - type: array - description: IDs of authentication tokens associated with this connector. - items: - type: string - example: [] - customer_authentication: + - 'true' + - 'false' + api_writable: + type: boolean + description: Can this attribute be updated through API + example: true + messenger_writable: type: boolean - description: Whether OTP authentication is enabled for this connector. + description: Can this attribute be updated by the Messenger example: false - bypass_authentication: + ui_writable: type: boolean - description: Whether authentication is bypassed for this connector. - example: false - validate_missing_attributes: + description: Can this attribute be updated in the UI + example: true + custom: type: boolean - nullable: true - description: Whether to validate missing attributes before execution. - created_by_admin_id: - type: string - nullable: true - description: The ID of the admin who created this connector. - example: '456' - updated_by_admin_id: - type: string - nullable: true - description: The ID of the admin who last updated this connector. - example: '456' + description: Set to true if this is a CDA + example: true + archived: + type: boolean + description: Is this attribute archived. (Only applicable to CDAs) + example: false created_at: - type: string + type: integer format: date-time - description: The time the data connector was created. - example: '2025-11-15T09:30:00Z' + description: The time the attribute was created as a UTC Unix timestamp + example: 1671028894 updated_at: - type: string - format: date-time - description: The time the data connector was last updated. - example: '2026-01-20T14:22:15Z' - execution_results_url: - type: string - description: The URL path to fetch execution results for this connector. - example: "/data_connectors/12345/execution_results" - data_connector_execution_result: - title: Data Connector Execution Result - type: object - x-tags: - - Data Connectors - description: An execution result from a data connector HTTP request. - properties: - type: - type: string - description: The type of object - `data_connector.execution`. - enum: - - data_connector.execution - example: data_connector.execution - id: - type: string - description: The unique identifier for the execution result. - example: '99001' - data_connector_id: - type: string - description: The unique identifier of the data connector that produced this result. - example: '12345' - success: - type: boolean - description: Whether the execution was successful. - example: true - http_status: - type: integer - nullable: true - description: The HTTP status code returned by the external API. - example: 200 - http_method: - type: string - description: The HTTP method used for the request. - enum: - - get - - post - - put - - delete - - patch - example: post - error_type: - type: string - nullable: true - description: The type of error that occurred, if any. - enum: - - request_configuration_error - - faraday_error - - 3rd_party_error - - response_mapping_error - - token_refresh_error - - fin_action_response_formatting_error - - fin_action_identity_verification_error - - email_verification_error - - non_fin_standalone_action_identity_verification_error - - request_validation_error - - client_side_action_error - example: 3rd_party_error - error_message: - type: string - nullable: true - description: A human-readable error message. Query parameters, userinfo, and fragments in URLs are redacted. - example: Connection refused - execution_time_ms: type: integer - nullable: true - description: The execution time in milliseconds. - example: 245 - source_type: - type: string - nullable: true - description: The type of source that triggered this execution. - enum: - - custom_bot - - inbound_custom_bot - - button_custom_bot - - answer - - workflow - - saved_reply - - triggerable_custom_bot - - inbox - - fin - example: workflow - source_id: - type: string - nullable: true - description: The identifier of the source that triggered this execution. - example: '5001' - conversation_id: - type: string - nullable: true - description: The conversation associated with this execution, if any. - example: '8001' - created_at: - type: string format: date-time - description: The time the execution occurred. - example: '2026-02-10T18:15:32Z' - request_url: - type: string - nullable: true - description: The request URL. Query parameters, userinfo, and fragments are redacted. - example: https://api.example.com/webhook - request_body: - type: string - nullable: true - description: The request body sent to the external API. - example: '{"message": "hello"}' - response_body: - type: string - nullable: true - description: The response body from the external API. - example: '{"status": "ok"}' - raw_response_body: - type: string - nullable: true - description: The raw (unmapped) response body. - example: '{"status": "ok"}' - data_connector_execution_result_list: - title: Data Connector Execution Result List - type: object - description: A paginated list of data connector execution results. - properties: - type: + description: The time the attribute was last updated as a UTC Unix timestamp + example: 1671028894 + admin_id: type: string - description: The type of object - `list`. - enum: - - list - example: list - data: - type: array - description: An array of execution result objects. - items: - "$ref": "#/components/schemas/data_connector_execution_result" - pages: - type: object - description: Pagination information. - properties: - type: - type: string - example: pages - enum: - - pages - per_page: - type: integer - description: The number of results per page. - example: 10 - next: - type: object - nullable: true - description: Cursor for the next page of results. - properties: - starting_after: - type: string - description: The cursor value to use for the next page. - example: WzE3MDc1OTQ3MTUuMCw5OTAwMF0= - data_connector_list: - title: Data Connector List + description: Teammate who created the attribute. Only applicable to CDAs + example: '5712945' + data_attribute_list: + title: Data Attribute List type: object - description: A paginated list of data connectors. + description: A list of all data attributes belonging to a workspace for contacts + or companies. properties: type: type: string - description: The type of object - `list`. + description: The type of the object enum: - list example: list data: type: array - description: An array of data connector objects. + description: A list of data attributes items: - "$ref": "#/components/schemas/data_connector" - pages: - type: object - description: Pagination information. - properties: - type: - type: string - example: pages - enum: - - pages - per_page: - type: integer - description: The number of results per page. - example: 20 - next: - type: object - nullable: true - description: Cursor for the next page of results. - properties: - starting_after: - type: string - description: The cursor value to use for the next page. - example: WzE3MDc1OTQ3MTUuMCwxMjM0NV0= - deleted_data_connector_object: - title: Deleted Data Connector Object - type: object - description: Response returned when a data connector is deleted. - properties: - id: - type: string - description: The unique identifier for the data connector. - example: '125' - object: - type: string - description: The type of object which was deleted. - enum: - - data_connector - example: data_connector - deleted: - type: boolean - description: Whether the data connector was deleted successfully. - example: true + "$ref": "#/components/schemas/data_attribute" data_event: title: Data Event type: object @@ -33687,30 +23404,6 @@ components: nullable: true description: The unique identifier for the email message as specified in the Message-ID header example: "" - source_email_message_metadata: - title: Email Message Metadata - type: object - description: Contains metadata if the message was sent as an email - properties: - message_id: - type: string - nullable: true - description: The unique identifier for the email message as specified in the Message-ID header - example: "" - subject: - type: string - description: The subject of the email - example: Question about my order - email_address_headers: - title: Email Address Headers - type: array - description: A list of an email address headers. - items: - "$ref": "#/components/schemas/email_address_header" - history: - type: string - description: The HTML content of any quoted or forwarded email history from the initial inbound message - example: '
On Jan 28, wrote:
Previous thread
' metadata: "$ref": "#/components/schemas/conversation_part_metadata" conversation_attribute_updated_by_workflow: @@ -34910,65 +24603,6 @@ components: description: Array of handling events items: "$ref": "#/components/schemas/handling_event" - side_conversation_summary: - title: Side Conversation Summary - type: object - description: A side conversation with its conversation parts. - properties: - side_conversation_id: - type: string - description: The unique identifier for the side conversation. - example: '456' - conversation_parts: - type: array - description: The conversation parts (messages) in this side conversation. - items: - "$ref": "#/components/schemas/conversation_part" - total_count: - type: integer - description: The total number of conversation parts in this side conversation. - example: 1 - side_conversation_list: - title: Side Conversation List - type: object - description: A paginated list of side conversations for a conversation. - properties: - type: - type: string - description: The type of the response object. - enum: - - side_conversation.list - example: side_conversation.list - side_conversations: - type: array - description: An array of side conversation objects. - items: - "$ref": "#/components/schemas/side_conversation_summary" - total_count: - type: integer - description: The total number of side conversations. - example: 1 - pages: - type: object - description: Pagination metadata. - properties: - type: - type: string - enum: - - pages - example: pages - page: - type: integer - description: The current page number. - example: 1 - per_page: - type: integer - description: The number of results per page. - example: 25 - total_pages: - type: integer - description: The total number of pages. - example: 1 help_center: title: Help Center type: object @@ -35018,18 +24652,6 @@ components: nullable: true description: Custom domain configured for the help center example: "help.mycompany.com" - default: - type: boolean - description: Whether this help center is the default for the workspace. - example: false - locales: - type: array - description: The locales in which the help center is available. - items: - type: string - example: - - en - - fr help_center_list: title: Help Centers type: object @@ -35228,147 +24850,44 @@ components: type: string description: Category of the Linked Ticket Object. enum: - - Customer - - Back-office - - Tracker - - - example: Customer - nullable: true - intercom_version_preview: - description: Preview Intercom API version. Used for closed beta endpoints or other features under managed availability. - type: string - example: preview - default: preview - enum: - - preview - linked_object_list: - title: Linked Objects - type: object - description: An object containing metadata about linked conversations and linked - tickets. Up to 1000 can be returned. - properties: - type: - type: string - description: Always list. - enum: - - list - example: list - total_count: - type: integer - description: The total number of linked objects. - example: 100 - has_more: - type: boolean - description: Whether or not there are more linked objects than returned. - example: false - data: - type: array - description: An array containing the linked conversations and linked tickets. - items: - "$ref": "#/components/schemas/linked_object" - macro: - title: Macro - type: object - x-tags: - - Macros - description: A macro is a pre-defined response template (saved reply) that can be used to quickly reply to conversations. - nullable: true - properties: - type: - type: string - description: String representing the object's type. Always has the value `macro`. - enum: - - macro - example: macro - id: - type: string - description: The unique identifier for the macro. - example: "123" - name: - type: string - description: The name of the macro. - example: "Order Status Update" - body: - type: string - description: The body of the macro in HTML format with placeholders transformed to XML-like format. - example: "

Hi , your order is ready!

" - body_text: - type: string - description: The plain text version of the macro body with original Intercom placeholder format. - example: "Hi {{user.name|fallback:\"there\"}}, your order is ready!" - created_at: - type: string - format: date-time - description: The time the macro was created in ISO 8601 format. - example: "2025-07-17T11:18:08.000Z" - updated_at: - type: string - format: date-time - description: The time the macro was last updated in ISO 8601 format. - example: "2025-07-17T15:30:24.000Z" - visible_to: - type: string - description: Who can view this macro. - enum: - - everyone - - specific_teams - example: everyone - visible_to_team_ids: - type: array - description: The team IDs that can view this macro when visible_to is set to specific_teams. - items: - type: string - example: ["456", "789"] - available_on: - type: array - description: Where the macro is available for use. - items: - type: string - enum: - - inbox - - messenger - example: ["inbox", "messenger"] - macro_list: - title: Macro List + - Customer + - Back-office + - Tracker + - + example: Customer + nullable: true + intercom_version_preview: + description: Preview Intercom API version. Used for closed beta endpoints or other features under managed availability. + type: string + example: preview + default: preview + enum: + - preview + linked_object_list: + title: Linked Objects type: object - x-tags: - - Macros - description: A paginated list of macros (saved replies) in the workspace. + description: An object containing metadata about linked conversations and linked + tickets. Up to 1000 can be returned. properties: type: type: string - description: Always list + description: Always list. enum: - - list + - list example: list + total_count: + type: integer + description: The total number of linked objects. + example: 100 + has_more: + type: boolean + description: Whether or not there are more linked objects than returned. + example: false data: type: array - description: The list of macro objects + description: An array containing the linked conversations and linked tickets. items: - "$ref": "#/components/schemas/macro" - pages: - type: object - description: Pagination information - properties: - type: - type: string - description: The type of pagination - enum: - - pages - example: pages - per_page: - type: integer - description: Number of results per page - example: 50 - next: - type: object - nullable: true - description: Cursor for the next page - properties: - starting_after: - type: string - description: Base64-encoded cursor containing [updated_at, id] for pagination - example: "WzE3MTk0OTM3NTcuMCwgIjEyMyJd" + "$ref": "#/components/schemas/linked_object" merge_contacts_request: description: Merge contact data. type: object @@ -35387,11 +24906,6 @@ components: description: The unique identifier for the contact to merge into. Must be a user. example: 5ba682d23d7cf92bef87bfd4 - skip_duplicate_validation: - type: boolean - description: Set to `true` to merge two contacts that are not duplicates - (they share no matching email or phone). - example: true merge_preview_request: description: Preview a contact merge. type: object @@ -35527,19 +25041,6 @@ components: type: integer description: The number of notes that would be reassigned. example: 2 - merge_conversations_request: - title: Merge Conversations Request - type: object - description: Payload to merge a secondary conversation into a primary conversation. - x-tags: - - Conversations - properties: - merge_into_conversation_id: - type: integer - description: The ID of the primary (target) conversation to merge into. - example: 456 - required: - - merge_into_conversation_id message: type: object title: Message @@ -35673,50 +25174,6 @@ components: template_name: type: string description: Name of the WhatsApp template used - whatsapp_message_status: - type: object - description: The delivery status of a specific WhatsApp message. - properties: - conversation_id: - type: string - description: ID of the conversation - example: "123456789" - status: - type: string - description: Current delivery status of the message - enum: ["sent", "delivered", "read", "failed"] - example: delivered - type: - type: string - description: Event type - example: broadcast_outbound - created_at: - type: integer - description: Creation timestamp - example: 1734537980 - updated_at: - type: integer - description: Last update timestamp - example: 1734538000 - template_name: - type: string - description: Name of the WhatsApp template used - example: appointment_reminder - message_id: - type: string - description: The WhatsApp message ID - example: "wamid_abc123" - error: - type: object - nullable: true - description: Error details, present only when status is "failed" - properties: - message: - type: string - description: Error message - details: - type: string - description: Detailed error information multiple_filter_search_request: title: Multiple Filter Search Request description: Search using Intercoms Search APIs with more than one filter. @@ -35979,19 +25436,6 @@ components: type: string description: The id of the contact. example: 214656d0c743eafcfde7f248 - company: - type: object - description: Represents the company that the note was created about. - nullable: true - properties: - type: - type: string - description: String representing the object's type. Always has the value - `company`. - id: - type: string - description: The id of the company. - example: 5f4d3c1c-7b1b-4d7d-a97e-6095715c6632 author: "$ref": "#/components/schemas/admin" description: Optional. Represents the Admin that created the note. @@ -35999,147 +25443,6 @@ components: type: string description: The body text of the note. example: "

Text for the note.

" - banner_list: - title: Banner List - type: object - description: A list of banners a contact currently matches. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `list`. - example: list - data: - type: array - description: An array of banners. - items: - "$ref": "#/components/schemas/banner" - banner: - title: Banner - type: object - x-tags: - - Banners - description: A banner the contact currently matches, with the content and view - identifier needed to display and dismiss it. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `banner`. - example: banner - id: - type: string - description: The id of the banner. - example: '486517' - view_id: - type: string - description: The id of the contact's view of this banner. Pass this to the - dismiss endpoint to record a dismissal. - example: '645719311' - title: - type: string - nullable: true - description: The banner's title. `null` when the banner has no title. - example: Hi there - body: - type: string - nullable: true - description: The banner's body content as HTML. - example: "

Hi there!

" - style: - type: string - description: How the banner is displayed. - example: inline - position: - type: string - description: Where the banner is positioned. - example: top - show_dismiss_button: - type: boolean - description: Whether the banner should display a dismiss control. - example: true - action: - type: object - nullable: true - description: | - The action a contact can take on the banner, or `null` when the banner has - no action. The fields present depend on `type`: - `url` (`label`, `target`), `reaction` (`reaction_set`), - `email_collector`, or `product_tour` (`tour_id`, `tour_url`). - properties: - type: - type: string - description: The kind of action. One of `url`, `reaction`, `email_collector`, - or `product_tour`. - example: url - label: - type: string - nullable: true - description: For `url` actions, the label shown on the action link or button. - example: Learn more - target: - type: string - nullable: true - description: For `url` actions, the URL the contact is sent to. - example: https://www.intercom.com/pricing - reaction_set: - type: array - description: For `reaction` actions, the reactions a contact can choose from. - items: - type: object - properties: - index: - type: integer - description: The reaction's position in the set. - example: 0 - unicode_emoticon: - type: string - description: The reaction's unicode emoji. - example: "\U0001F44D" - tour_id: - type: string - nullable: true - description: For `product_tour` actions, the id of the product tour to launch. - example: '12345' - tour_url: - type: string - nullable: true - description: For `product_tour` actions, the URL that launches the product tour. - example: https://app.intercom.com/tours/12345 - client_targeting: - type: array - nullable: true - description: | - Reserved for future use. Always `null` in the current version — banners - that depend on client-side targeting rules (such as page URL or time on - page) are not returned by this endpoint. - items: - type: object - created_at: - type: integer - format: timestamp - description: The time the contact's view of this banner was created. - example: 1780580493 - banner_dismiss: - title: Banner Dismiss - type: object - x-tags: - - Banners - description: The result of dismissing a banner for a contact. - properties: - type: - type: string - description: String representing the object's type. Always has the value - `banner_dismiss`. - example: banner_dismiss - view_id: - type: string - description: The id of the dismissed banner view. - example: '645719311' - dismissed: - type: boolean - description: Whether the banner view is dismissed. - example: true note_list: title: Paginated Response type: object @@ -36762,46 +26065,6 @@ components: type: string description: The name of the tag example: Test tag - tag_create_response: - title: Create or Update Tag Response - description: The response for creating or updating a tag, including the entities - that were tagged or untagged. - allOf: - - "$ref": "#/components/schemas/tag_basic" - - type: object - properties: - users: - type: array - nullable: true - description: The users that were tagged or untagged. - items: - type: object - properties: - id: - type: string - description: The Intercom ID of the user. - example: '6329e838deab40166d1a53f7' - tagged: - type: boolean - description: Whether the user was tagged (true) or untagged (false). - example: true - example: [] - companies: - type: array - nullable: true - description: The companies that were tagged or untagged. - items: - type: object - properties: - id: - type: string - description: The Intercom ID of the company. - example: '6329e838deab40166d1a5400' - tagged: - type: boolean - description: Whether the company was tagged (true) or untagged (false). - example: true - example: [] tag_company_request: description: You can tag a single company or a list of companies. type: object @@ -37015,13 +26278,13 @@ components: contacts: "$ref": "#/components/schemas/ticket_contacts" admin_assignee_id: - type: integer - description: The id representing the admin assigned to the ticket. If it's not assigned to an admin it will return 0. - example: 1295 + type: string + description: The id representing the admin assigned to the ticket. + example: '1295' team_assignee_id: - type: integer - description: The id representing the team assigned to the ticket. If it's not assigned to a team it will return 0. - example: 1295 + type: string + description: The id representing the team assigned to the ticket. + example: '1295' created_at: type: integer format: date-time @@ -37051,13 +26314,6 @@ components: type: boolean description: Whether or not the ticket is shared with the customer. example: true - previous_ticket_state_id: - type: string - nullable: true - description: The ID of the previous ticket state from the most recent state - change. Returns null if no state change history exists. Useful for tracking - state transitions for reporting and compliance. - example: '7493' ticket_deleted: title: Ticket Deleted type: object @@ -37742,56 +26998,6 @@ components: required: - name - companies - update_audience_request: - title: Update Audience Request - type: object - description: The request payload for updating an audience. All fields are optional - — only provided fields will be updated. - properties: - name: - type: string - description: The name of the audience. - example: Enterprise Accounts - predicates: - type: array - description: The predicates that define which contacts belong to the audience. - items: - "$ref": "#/components/schemas/predicate" - example: - - attribute: custom_attributes.plan - type: string - comparison: eq - value: enterprise - role_predicates: - type: array - description: Role-based predicates that further filter audience membership by - contact role. - items: - "$ref": "#/components/schemas/predicate" - example: - - attribute: role - type: role - comparison: eq - value: user - publish_article_draft_request: - description: | - Optional body for publishing a staged article draft. On a single-language - workspace the body can be omitted. On a multilingual workspace, `locales` - is required and lists which locales' drafts to publish. - type: object - title: Publish Article Draft Request Payload - nullable: true - properties: - locales: - type: array - description: | - The locales whose staged drafts should be published. Required on - multilingual workspaces; each locale must have a pending draft. - items: - type: string - example: - - en - - fr update_article_request: description: You can Update an Article type: object @@ -37813,12 +27019,6 @@ components: description: The content of the article in HTML. For multilingual articles, this will be the body of the default language's content. Mutually exclusive with `body_markdown`. example: "

This is the body in html

" - body_markdown: - type: string - description: The content of the article in markdown. For multilingual articles, this - will be the body of the default language's content. An alternative to `body` — you - can provide content as markdown instead of HTML. Mutually exclusive with `body`. - example: "## Updated heading\n\nNew content.\n" author_id: type: integer description: The id of the author of the article. For multilingual articles, @@ -37860,65 +27060,6 @@ components: nullable: true description: The ID of the folder to place this article in, or null to remove it from its folder. example: 6 - audience_ids: - type: array - nullable: true - description: >- - The list of audience IDs to assign to this article for Fin AI Agent targeting. - Sending a top-level `audience_ids` broadcasts the same set to every locale. - Sending `audience_ids: []` clears all audience memberships from every locale. - For per-locale targeting, use `translated_content..audience_ids` instead. - Sending both top-level and per-locale in the same request causes top-level to win. - Unknown audience IDs return a 404 error. No partial commit occurs. - items: - type: integer - example: - - 1 - - 2 - ai_chatbot_availability: - type: boolean - description: Whether the article should be available for AI Chatbot (Fin). - For multilingual articles, this sets the default language's availability. - example: true - ai_copilot_availability: - type: boolean - description: Whether the article should be available for AI Copilot. For - multilingual articles, this sets the default language's availability. - example: true - ai_sales_agent_availability: - type: boolean - description: Whether the article should be available for AI Sales Agent. - For multilingual articles, this sets the default language's availability. - example: true - scheduled_publish_at: - type: string - format: date-time - nullable: true - description: >- - ISO 8601 timestamp at which to schedule a future publish of the article. - When set together with `state: "published"`, the article is scheduled - instead of published immediately. Setting `null` cancels a pending - publish schedule. Timestamps in the past or equal to the current time - are rejected with 400 `parameter_invalid` — the value must be strictly - in the future. Combining with `state: "draft"` returns 400 - `parameter_invalid`. Sending in the same request as - `scheduled_unpublish_at` returns 400 — only one pending schedule per - article. Empty string returns 400 `parameter_invalid`. - example: '2026-12-31T09:00:00Z' - scheduled_unpublish_at: - type: string - format: date-time - nullable: true - description: >- - ISO 8601 timestamp at which to schedule a future unpublish of the article. - Setting `null` cancels a pending unpublish schedule. Timestamps in the - past or equal to the current time are rejected with 400 - `parameter_invalid` — the value must be strictly in the future. Rejected - with 400 `parameter_invalid` if the article has never been published. - Sending in the same request as `scheduled_publish_at` returns 400 — only - one pending schedule per article. Empty string returns 400 - `parameter_invalid`. - example: '2026-12-31T17:00:00Z' update_internal_article_request: description: You can Update an Internal Article type: object @@ -37932,11 +27073,6 @@ components: body: type: string description: The content of the article in HTML. Mutually exclusive with `body_markdown`. - body_markdown: - type: string - description: The content of the article in markdown. An alternative to `body` — you - can provide content as markdown instead of HTML. Mutually exclusive with `body`. - example: "## Updated\n\nNew content.\n" author_id: type: integer description: The id of the author of the article. @@ -37950,33 +27086,6 @@ components: nullable: true description: The ID of the folder to place this article in, or null to remove it from its folder. example: 6 - audience_ids: - type: array - nullable: true - description: >- - The list of audience IDs to target this internal article to for Fin AI Agent. - Omitting the field leaves existing audience memberships unchanged (PATCH semantics). - Pass `[]` to clear all audience memberships. - Unknown audience IDs return a `404` error with no partial commit. - items: - type: integer - example: - - 1 - - 2 - ai_chatbot_availability: - type: boolean - description: Whether the internal article should be available for AI Chatbot - (Fin). - example: true - ai_copilot_availability: - type: boolean - description: Whether the internal article should be available for AI Copilot. - example: true - ai_sales_agent_availability: - type: boolean - description: Whether the internal article should be available for AI Sales - Agent. - example: true update_collection_request: description: You can update a collection type: object @@ -38016,11 +27125,6 @@ components: type: string description: The contacts email example: jdoe@example.com - email_verified: - type: boolean - nullable: true - description: Whether the contact's email address has been verified. Set to true to indicate you have verified the contact owns this email address, or false to mark it as unverified. Must be supplied together with an email in the same request; sending it without an email returns a 400. - example: true phone: type: string nullable: true @@ -38968,15 +28072,6 @@ tags: description: Everything about your Articles - name: Away Status Reasons description: Everything about your Away Status Reasons -- name: Audiences - description: Everything about your Audiences -- name: Banners - description: | - Retrieve the banners a contact matches and record dismissals, so you can display - banners on surfaces outside the Messenger (native mobile apps, kiosks, embedded - tools). These endpoints require an OAuth - token with the `read_write_users` scope. Requesting a contact's banners records an - impression for each banner returned, and dismissals are shared with the web Messenger. - name: Brands description: Everything about your Brands - name: Calls @@ -38985,11 +28080,6 @@ tags: description: Everything about your Companies - name: Contacts description: Everything about your contacts -- name: Content - description: Search and operations over Knowledge Hub content — articles, - snippets, external pages, uploaded files, and internal articles. -- name: Content Snippets - description: Everything about your Content Snippets - name: Conversations description: Everything about your Conversations externalDocs: @@ -38999,8 +28089,6 @@ tags: description: Update and redact individual conversation parts - name: Conversation Participants description: Manage contacts participating in conversations -- name: Conversations Attributes - description: Manage custom attributes for conversations - name: Custom Object Instances description: | Everything about your Custom Object instances. @@ -39009,8 +28097,6 @@ tags: {% /admonition %} - name: Data Attributes description: Everything about your Data Attributes -- name: Data Connectors - description: Everything about your Data Connectors - name: Data Events description: Everything about your Data Events - name: Data Export @@ -39058,9 +28144,6 @@ tags: description: Everything about your Internal Articles - name: Jobs description: Everything about jobs -- name: Macros - description: Operations related to saved replies (macros) in conversations - x-displayName: Macros - name: Messages description: Everything about your messages - name: News @@ -39070,10 +28153,6 @@ tags: url: https://www.intercom.com/help/en/articles/6362251-news-explained - name: Notes description: Everything about your Notes -- name: Office Hours - description: | - Manage office hours schedules and their exceptions. These endpoints require an - OAuth token with the `read_write_office_hours` scope. - name: Procedures description: | Submit human-collected input to Fin Procedures via the HITL (Human in the Loop) API. diff --git a/fern/preview-openapi-overrides.yml b/fern/preview-openapi-overrides.yml index 1fa627e8..9d0be76f 100644 --- a/fern/preview-openapi-overrides.yml +++ b/fern/preview-openapi-overrides.yml @@ -22,21 +22,6 @@ paths: $ref: '#/components/schemas/CreateArticleRequestBody' '/articles/{id}': put: null - '/articles/{article_id}/versions': - get: - x-fern-pagination: - offset: $request.page - results: $response.data - x-fern-sdk-group-name: - - articles - x-fern-sdk-method-name: listVersions - x-fern-request-name: ListArticleVersionsRequest - '/articles/{article_id}/versions/{id}': - get: - x-fern-sdk-group-name: - - articles - x-fern-sdk-method-name: findVersion - x-fern-request-name: FindArticleVersionRequest '/tickets': post: null '/ticket_types/{id}': @@ -93,14 +78,6 @@ paths: summary: Company Not Found value: company_id: '123' - '/messages/status': - get: - responses: - '500': - content: - application/json: - examples: null - components: schemas: intercom_version: @@ -131,8 +108,6 @@ components: update_internal_article_request: x-fern-type-name: UpdateInternalArticleRequestBody nullable: false - merge_conversations_request: - x-fern-type-name: MergeConversationsRequestBody reply_conversation_request: x-fern-type-name: ReplyConversationRequestBody update_article_request: From 57249d88c1973c970fad47bd2c91d23c9e051375 Mon Sep 17 00:00:00 2001 From: Geetika Bagga Date: Thu, 23 Jul 2026 21:55:15 +0100 Subject: [PATCH 22/22] Stamp intercom_version enum to 2.16 in descriptions/2.16 The graduated 2.16 spec left the intercom_version schema's example, default, and enum list topping out at 2.15. Set example and default to 2.16 and add 2.16 to the enum so the spec self-identifies as 2.16, matching the convention of prior numbered version directories. Co-Authored-By: Claude Opus 4.8 (1M context) --- descriptions/2.16/api.intercom.io.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/descriptions/2.16/api.intercom.io.yaml b/descriptions/2.16/api.intercom.io.yaml index b3349406..1feabcfd 100644 --- a/descriptions/2.16/api.intercom.io.yaml +++ b/descriptions/2.16/api.intercom.io.yaml @@ -31903,8 +31903,8 @@ components: description: Intercom API version.
By default, it's equal to the version set in the app package. type: string - example: '2.15' - default: '2.15' + example: '2.16' + default: '2.16' enum: - '1.0' - '1.1' @@ -31927,6 +31927,7 @@ components: - '2.13' - '2.14' - '2.15' + - '2.16' linked_object: title: Linked Object type: object