# List side conversations

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.

Endpoint: GET /conversations/{id}/side_conversations
Version: Preview
Security: bearerAuth

## Path parameters:

  - `id` (string, required)
    The identifier for the conversation as given by Intercom.

## Query parameters:

  - `page` (integer)
    The page number of results to return (starting from 1).

  - `per_page` (integer)
    The number of side conversations to return per page (max 50).

## Header parameters:

  - `Intercom-Version` (string)

## Response 200 fields (application/json):

  - `type` (string)
    The type of the response object.
    Enum: "side_conversation.list"

  - `side_conversations` (array)
    An array of side conversation objects.

  - `side_conversations.side_conversation_id` (string)
    The unique identifier for the side conversation.
    Example: 456

  - `side_conversations.conversation_parts` (array)
    The conversation parts (messages) in this side conversation.

  - `side_conversations.conversation_parts.type` (string)
    Always conversation_part
    Example: conversation_part

  - `side_conversations.conversation_parts.id` (string)
    The id representing the conversation part.
    Example: 3

  - `side_conversations.conversation_parts.part_type` (string)
    The type of conversation part. On the Preview version a part type the API does not recognise is returned as `unknown`; on earlier versions those parts are returned as `comment`. Every value other than `unknown` is also accepted by the `include_part_types` and `exclude_part_types` query parameters when retrieving a conversation.
    Example: comment

  - `side_conversations.conversation_parts.body` (string)
    The message body, which may contain HTML. For Twitter, this will show a generic message regarding why the body is obscured.
    Example: <p>Okay!</p>

  - `side_conversations.conversation_parts.created_at` (integer)
    The time the conversation part was created.
    Example: 1663597223

  - `side_conversations.conversation_parts.updated_at` (integer)
    The last time the conversation part was updated.
    Example: 1663597260

  - `side_conversations.conversation_parts.notified_at` (integer)
    The time the user was notified with the conversation part.
    Example: 1663597260

  - `side_conversations.conversation_parts.assigned_to` (object)
    reference to another object

  - `side_conversations.conversation_parts.assigned_to.type` (string)
    Example: contact

  - `side_conversations.conversation_parts.assigned_to.id` (string)
    Example: 1a2b3c

  - `side_conversations.conversation_parts.admin_assignee_id` (integer)
    The id of the teammate that this conversation_part assigned the conversation to, or 0 if the part removed the teammate. Null or absent when the part did not change the teammate, including an unassignment that did not name which assignee it cleared. A bot is reported here, because assignment treats anything that is not a team as a teammate.
    Example: 991267715

  - `side_conversations.conversation_parts.team_assignee_id` (integer)
    The id of the team that this conversation_part assigned the conversation to, or 0 if the part removed the team. Null or absent when the part did not change the team, including an unassignment that did not name which assignee it cleared. A part can assign a team and a teammate at the same time, for example when the team uses Round Robin distribution and the teammate is resolved inline. In that case assigned_to reports only the teammate, and these two fields report each assignee separately.
    Example: 5017691

  - `side_conversations.conversation_parts.author` (object)
    The author of this conversation part. Can be a Contact, Admin, or Bot.

  - `side_conversations.conversation_parts.author.type` (string)
    The type of the author
    Example: admin

  - `side_conversations.conversation_parts.author.id` (string)
    The id of the author
    Example: 274

  - `side_conversations.conversation_parts.author.name` (string)
    The name of the author
    Example: Operator

  - `side_conversations.conversation_parts.author.email` (string)
    The email of the author
    Example: operator+abcd1234@intercom.io

  - `side_conversations.conversation_parts.author.from_ai_agent` (boolean)
    If this conversation part was sent by the AI Agent
    Example: true

  - `side_conversations.conversation_parts.author.is_ai_answer` (boolean)
    If this conversation part body was generated by the AI Agent
    Example: false

  - `side_conversations.conversation_parts.attachments` (array)
    A list of attachments for the part.

  - `side_conversations.conversation_parts.attachments.type` (string)
    The type of attachment
    Example: upload

  - `side_conversations.conversation_parts.attachments.name` (string)
    The name of the attachment
    Example: example.png

  - `side_conversations.conversation_parts.attachments.url` (string)
    The URL of the attachment
    Example: https://picsum.photos/200/300

  - `side_conversations.conversation_parts.attachments.content_type` (string)
    The content type of the attachment
    Example: image/png

  - `side_conversations.conversation_parts.attachments.filesize` (integer)
    The size of the attachment
    Example: 100

  - `side_conversations.conversation_parts.attachments.width` (integer)
    The width of the attachment
    Example: 100

  - `side_conversations.conversation_parts.attachments.height` (integer)
    The height of the attachment
    Example: 100

  - `side_conversations.conversation_parts.external_id` (string)
    The external id of the conversation part
    Example: abcd1234

  - `side_conversations.conversation_parts.redacted` (boolean)
    Whether or not the conversation part has been redacted.
    Example: false

  - `side_conversations.conversation_parts.email_message_metadata` (object)
    Contains metadata if the message was sent as an email

  - `side_conversations.conversation_parts.email_message_metadata.subject` (string)
    The subject of the email
    Example: Question about my order

  - `side_conversations.conversation_parts.email_message_metadata.email_address_headers` (array)
    A list of an email address headers.

  - `side_conversations.conversation_parts.email_message_metadata.email_address_headers.type` (string)
    The type of email address header
    Example: from

  - `side_conversations.conversation_parts.email_message_metadata.email_address_headers.email_address` (string)
    The email address
    Example: jdoe@example.com

  - `side_conversations.conversation_parts.email_message_metadata.email_address_headers.name` (string)
    The name associated with the email address
    Example: Joe Example

  - `side_conversations.conversation_parts.email_message_metadata.message_id` (string)
    The unique identifier for the email message as specified in the Message-ID header
    Example: <CADKw7xrXzqSn8v3mP8K8Q8yZ6K8Q8yZ6@mail.gmail.com>

  - `side_conversations.conversation_parts.metadata` (object)
    Metadata for a conversation part

  - `side_conversations.conversation_parts.metadata.quick_reply_options` (array)
    The quick reply options sent by the Admin or bot, presented in this conversation part.

  - `side_conversations.conversation_parts.metadata.quick_reply_options.text` (string, required)
    The text to display in this quick reply option.

  - `side_conversations.conversation_parts.metadata.quick_reply_options.uuid` (string, required)
    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.

  - `side_conversations.conversation_parts.metadata.quick_reply_uuid` (string)
    The unique identifier for the quick reply option that was clicked by the end user.
    Example: 123e4567-e89b-12d3-a456-426614174000

  - `side_conversations.conversation_parts.state` (string)
    Indicates the current state of conversation when the conversation part was created.
    Enum: "open", "closed", "snoozed"

  - `side_conversations.conversation_parts.tags` (array)
    A list of tags objects associated with the conversation part.

  - `side_conversations.conversation_parts.tags.type` (string)
    value is "tag"
    Example: tag

  - `side_conversations.conversation_parts.tags.id` (string)
    The id of the tag
    Example: 123456

  - `side_conversations.conversation_parts.tags.name` (string)
    The name of the tag
    Example: Test tag

  - `side_conversations.conversation_parts.event_details` (object)

  - `side_conversations.conversation_parts.event_details.workflow` (object)

  - `side_conversations.conversation_parts.event_details.workflow.name` (string)
    Name of the workflow
    Example: Workflow 1

  - `side_conversations.conversation_parts.event_details.attribute` (object)

  - `side_conversations.conversation_parts.event_details.attribute.name` (string)
    Name of the CDA updated
    Example: flight_category

  - `side_conversations.conversation_parts.event_details.value` (object)

  - `side_conversations.conversation_parts.event_details.value.name` (string)
    Value of the CDA updated
    Example: vip_status

  - `side_conversations.conversation_parts.event_details.action` (object)

  - `side_conversations.conversation_parts.event_details.action.name` (string)
    Name of the action
    Example: Jira Create Issue

  - `side_conversations.conversation_parts.event_details.event` (object)

  - `side_conversations.conversation_parts.event_details.event.type` (string)
    Type of the workflow event initiated
    Example: wait_finished

  - `side_conversations.conversation_parts.event_details.event.result` (string)
    Result of the workflow event
    Example: Finsihed waiting

  - `side_conversations.conversation_parts.event_details.tags_added` (array)
    Array of tag names that were added
    Example: ["feature-shopify-multi-store","second-tag"]

  - `side_conversations.conversation_parts.event_details.tags_removed` (array)
    Array of tag names that were removed
    Example: ["feature-embercom-app-serializer-limit-external-plans"]

  - `side_conversations.conversation_parts.event_details.until` (string)
    Human-readable description of snooze duration
    Example: until tomorrow

  - `side_conversations.conversation_parts.event_details.custom_until_time` (string)
    ISO timestamp for custom snooze times (null for general snoozes)
    Example: 2025-09-03T18:44:20.146Z

  - `side_conversations.conversation_parts.event_details.current_priority` (string)
    Current priority level
    Enum: "none", "low", "medium", "high", "urgent"

  - `side_conversations.conversation_parts.event_details.previous_priority` (string)
    Previous priority level
    Enum: "none", "low", "medium", "high", "urgent"

  - `side_conversations.conversation_parts.event_details.sla_name` (string)
    Name of the SLA that was applied
    Example: Premium SLA

  - `side_conversations.conversation_parts.event_details.sla_definition` (object)
    Target times configured for the SLA (in seconds)

  - `side_conversations.conversation_parts.event_details.sla_definition.first_reply_time` (integer)
    First response time target in seconds
    Example: 300

  - `side_conversations.conversation_parts.event_details.sla_definition.next_reply_time` (integer)
    Next reply time target in seconds
    Example: 600

  - `side_conversations.conversation_parts.event_details.sla_definition.resolution_time` (integer)
    Resolution time target in seconds
    Example: 3600

  - `side_conversations.conversation_parts.event_details.sla_definition.time_to_close` (integer)
    Time to close target in seconds
    Example: 7200

  - `side_conversations.conversation_parts.event_details.sla_name` (string)
    Name of the SLA
    Example: HandleConversation

  - `side_conversations.conversation_parts.event_details.sla_target_type` (string)
    Which specific target was missed
    Enum: "first_reply_time", "next_reply_time", "resolution_time", "time_to_close"

  - `side_conversations.conversation_parts.event_details.current_sla_status` (string)
    Overall SLA status
    Enum: "hit", "missed", "active", "paused", "canceled"

  - `side_conversations.conversation_parts.event_details.sla_name` (string)
    Name of the SLA being paused
    Example: Premium SLA

  - `side_conversations.conversation_parts.event_details.current_sla_status` (string)
    Overall SLA status at pause time
    Enum: "active", "hit", "missed", "canceled"

  - `side_conversations.conversation_parts.event_details.sla_name` (string)
    Name of the SLA being unpaused
    Example: Premium SLA

  - `side_conversations.conversation_parts.event_details.sla_name` (string)
    Name of the SLA that was removed
    Example: Standard SLA

  - `side_conversations.conversation_parts.event_details.call_id` (string)
    The id of the call the summary describes
    Example: 3822007689

  - `side_conversations.conversation_parts.event_details.event` (object)
    The event the part records
    Example: {"type":"otp_email_verification_failed","value":"OTP email verification failed","data":{"otp_email_verification_failed":{"reason":"no_email"}}}

  - `side_conversations.conversation_parts.event_details.event.type` (string)
    The event type
    Example: otp_email_verification_failed

  - `side_conversations.conversation_parts.event_details.event.value` (string)
    A readable label for the event
    Example: OTP email verification failed

  - `side_conversations.conversation_parts.event_details.event.data` (object)
    Data recorded with the event. Empty when the failure was recorded without a reason.
    Example: {"otp_email_verification_failed":{"reason":"no_email"}}

  - `side_conversations.conversation_parts.event_details.event.data.otp_email_verification_failed` (object)
    Details of the failed verification
    Example: {"reason":"no_email"}

  - `side_conversations.conversation_parts.event_details.event.data.otp_email_verification_failed.reason` (string)
    Why the one-time passcode email could not verify the contact. Treat this as a free-form string and fall back to value for a reason you do not recognise. no_email means the contact has no email address on record.
    Example: no_email

  - `side_conversations.conversation_parts.app_package_code` (string)
    The app package code if this part was created via API. null if the part was not created via API.
    Example: test-integration

  - `side_conversations.conversation_parts.translations` (object)
    A map of the reply text keyed by locale code, with values in the same HTML format as `body`. Only present on the Preview API version and backs the `conversation.admin.replied.translated` webhook topic. The special `original` key holds the source locale code of the reply; every other key is a locale code whose value is the reply text translated into that locale. The `translations` field does not modify `body`; `body` carries the reply as authored. Available in the Preview API version only (set `Intercom-Version: Preview`). This webhook topic is not sent for every translated reply: it is suppressed when the reply's `body` contains any text outside an HTML block element, which includes plain-text replies created through the REST API. Wrap the body in `<p>`, `<div>`, or another supported block element to avoid this.
    Example: {"original":"en","en":"<p>Hello</p>","fr":"<p>Bonjour</p>"}

  - `side_conversations.conversation_parts.translations.original` (string, required)
    The locale code identifying the language the reply was originally written in.
    Example: en

  - `side_conversations.total_count` (integer)
    The total number of conversation parts in this side conversation.
    Example: 1

  - `total_count` (integer)
    The total number of side conversations.
    Example: 1

  - `pages` (object)
    Pagination metadata.

  - `pages.type` (string)
    Enum: "pages"

  - `pages.page` (integer)
    The current page number.
    Example: 1

  - `pages.per_page` (integer)
    The number of results per page.
    Example: 25

  - `pages.total_pages` (integer)
    The total number of pages.
    Example: 1

## Response 401 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

## Response 404 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

