---
title: "Detach a contact from a group conversation"
method: DELETE
path: "/conversations/{conversation_id}/customers/{contact_id}"
tags: ["Conversations"]
---

# Detach a contact from a group conversation

`DELETE /conversations/{conversation_id}/customers/{contact_id}`

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 %}

## Path parameters

- `conversation_id` string, required
- `contact_id` string, required

## Headers

- `Intercom-Version` '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' — Intercom API version.</br>By default, it's equal to the version set in the app package.

## Request body

- DetachContactFromConversationRequest
  - `admin_id` string, required — The `id` of the admin who is performing the action.

## Response `200`

Detach a contact from a group conversation

- Conversation — 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` string — Always conversation.
  - `id` string — The id representing the conversation.
  - `title` string, nullable — The title given to the conversation.
  - `created_at` integer — The time the conversation was created.
  - `updated_at` integer — The last time the conversation was updated.
  - `waiting_since` integer, nullable — 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.
  - `snoozed_until` integer, nullable — 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.
  - `open` boolean — Indicates whether a conversation is open (true) or closed (false).
  - `state` 'open' | 'closed' | 'snoozed' — Can be set to "open", "closed" or "snoozed".
  - `read` boolean — Indicates whether a conversation has been read.
  - `priority` 'priority' | 'not_priority' — If marked as priority, it will return priority or else not_priority.
  - `admin_assignee_id` integer, nullable — The id of the admin assigned to the conversation. If it's not assigned to an admin it will return null.
  - `team_assignee_id` integer, nullable — The id of the team assigned to the conversation. If it's not assigned to a team it will return null.
  - `tags` Tags — A list of tags objects associated with a conversation
    - `type` 'tag.list' — The type of the object
    - `tags` Tag[] — A list of tags objects associated with the conversation.
      - `type` string — value is "tag"
      - `id` string — The id of the tag
      - `name` string — The name of the tag
      - `applied_at` integer, nullable — 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.
      - `applied_by` Reference — reference to another object
        - `type` string
        - `id` string, nullable
  - `conversation_rating` ConversationRating, nullable — The Conversation Rating object which contains information on the rating and/or remark added by a Contact and the Admin assigned to the conversation.
    - `rating` integer — The rating, between 1 and 5, for the conversation.
    - `remark` string — An optional field to add a remark to correspond to the number rating
    - `created_at` integer — The time the rating was requested in the conversation being rated.
    - `updated_at` integer — The time the rating was last updated.
    - `contact` ContactReference — reference to contact object
      - `type` 'contact' — always contact
      - `id` string — The unique identifier for the contact which is given by Intercom.
      - `external_id` string, nullable — The unique identifier for the contact which is provided by the Client.
    - `teammate` Reference — reference to another object
      - `type` string
      - `id` string, nullable
  - `source` ConversationSource — The type of the conversation part that started this conversation. Can be Contact, Admin, Campaign, Automated or Operator initiated.
    - `type` 'conversation' | 'email' | 'facebook' | 'instagram' | 'phone_call' | 'phone_switch' | 'push' | 'sms' | 'twitter' | 'whatsapp' — This includes conversation, email, facebook, instagram, phone_call, phone_switch, push, sms, twitter and whatsapp.
    - `id` string — The id representing the message.
    - `delivered_as` string — 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).
    - `subject` string — Optional. The message subject. For Twitter, this will show a generic message regarding why the subject is obscured.
    - `body` string — The message body, which may contain HTML. For Twitter, this will show a generic message regarding why the body is obscured.
    - `author` ConversationPartAuthor — 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.
      - `type` string — The type of the author
      - `id` string — The id of the author
      - `name` string, nullable — The name of the author
      - `email` string, email — The email of the author
      - `from_ai_agent` boolean — If this conversation part was sent by the AI Agent
      - `is_ai_answer` boolean — If this conversation part body was generated by the AI Agent
    - `attachments` PartAttachment[] — A list of attachments for the part.
      - `type` string — The type of attachment
      - `name` string — The name of the attachment
      - `url` string — The URL of the attachment
      - `content_type` string — The content type of the attachment
      - `filesize` integer — The size of the attachment
      - `width` integer — The width of the attachment
      - `height` integer — The height of the attachment
    - `url` string, nullable — The URL where the conversation was started. For Twitter, Email, and Bots, this will be blank.
    - `redacted` boolean — Whether or not the source message has been redacted. Only applicable for contact initiated messages.
  - `contacts` ConversationContacts — 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.
    - `type` 'contact.list'
    - `contacts` ContactReference[] — 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.
      - `type` 'contact' — always contact
      - `id` string — The unique identifier for the contact which is given by Intercom.
      - `external_id` string, nullable — The unique identifier for the contact which is provided by the Client.
  - `teammates` ConversationTeammates, nullable — The list of teammates who participated in the conversation (wrote at least one conversation part).
    - `type` string — The type of the object - `admin.list`.
    - `teammates` Reference[] — The list of teammates who participated in the conversation (wrote at least one conversation part).
      - `type` string
      - `id` string, nullable
  - `custom_attributes` CustomAttributes — 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.
  - `first_contact_reply` ConversationFirstContactReply, nullable — An object containing information on the first users message. For a contact initiated message this will represent the users original message.
    - `created_at` integer
    - `type` string
    - `url` string, nullable
  - `sla_applied` SlaApplied, nullable — 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.
    - `type` string — object type
    - `sla_name` string — The name of the SLA as given by the teammate when it was created.
    - `sla_status` 'hit' | 'missed' | 'cancelled' | 'active' — 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.
  - `statistics` ConversationStatistics, nullable — A Statistics object containing all information required for reporting, with timestamps and calculated metrics.
    - `type` string
    - `time_to_assignment` integer — Duration until last assignment before first admin reply. In seconds.
    - `time_to_admin_reply` integer — Duration until first admin reply. Subtracts out of business hours. In seconds.
    - `time_to_first_close` integer — Duration until conversation was closed first time. Subtracts out of business hours. In seconds.
    - `time_to_last_close` integer — Duration until conversation was closed last time. Subtracts out of business hours. In seconds.
    - `median_time_to_reply` integer — Median based on all admin replies after a contact reply. Subtracts out of business hours. In seconds.
    - `first_contact_reply_at` integer — Time of first text conversation part from a contact.
    - `first_assignment_at` integer — Time of first assignment after first_contact_reply_at.
    - `first_admin_reply_at` integer — Time of first admin reply after first_contact_reply_at.
    - `first_close_at` integer — Time of first close after first_contact_reply_at.
    - `last_assignment_at` integer — Time of last assignment after first_contact_reply_at.
    - `last_assignment_admin_reply_at` integer — Time of first admin reply since most recent assignment.
    - `last_contact_reply_at` integer — Time of the last conversation part from a contact.
    - `last_admin_reply_at` integer — Time of the last conversation part from an admin.
    - `last_close_at` integer — Time of the last conversation close.
    - `last_closed_by_id` string — The last admin who closed the conversation. Returns a reference to an Admin object.
    - `count_reopens` integer — Number of reopens after first_contact_reply_at.
    - `count_assignments` integer — Number of assignments after first_contact_reply_at.
    - `count_conversation_parts` integer — Total number of conversation parts.
    - `assigned_team_first_response_time` ConversationResponseTime[] — An array of conversation response time objects
      - `team_id` integer — Id of the assigned team.
      - `team_name` string — Name of the assigned Team, null if team does not exist, Unassigned if no team is assigned.
      - `response_time` integer — First response time of assigned team in seconds.
    - `assigned_team_first_response_time_in_office_hours` ConversationResponseTime[] — An array of conversation response time objects within office hours
      - `team_id` integer — Id of the assigned team.
      - `team_name` string — Name of the assigned Team, null if team does not exist, Unassigned if no team is assigned.
      - `response_time` integer — First response time of assigned team in seconds.
    - `handling_time` integer — Time from conversation assignment to conversation close in seconds.
    - `adjusted_handling_time` integer, nullable — 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.
  - `conversation_parts` ConversationParts — 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.
    - `type` 'conversation_part.list'
    - `conversation_parts` ConversationPart[] — 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.
      - `type` string — Always conversation_part
      - `id` string — The id representing the conversation part.
      - `part_type` string — The type of conversation part.
      - `body` string, nullable — The message body, which may contain HTML. For Twitter, this will show a generic message regarding why the body is obscured.
      - `created_at` integer — The time the conversation part was created.
      - `updated_at` integer — The last time the conversation part was updated.
      - `notified_at` integer — The time the user was notified with the conversation part.
      - `assigned_to` Reference — reference to another object
        - `type` string
        - `id` string, nullable
      - `author` ConversationPartAuthor — 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.
        - `type` string — The type of the author
        - `id` string — The id of the author
        - `name` string, nullable — The name of the author
        - `email` string, email — The email of the author
        - `from_ai_agent` boolean — If this conversation part was sent by the AI Agent
        - `is_ai_answer` boolean — If this conversation part body was generated by the AI Agent
      - `attachments` PartAttachment[] — A list of attachments for the part.
        - `type` string — The type of attachment
        - `name` string — The name of the attachment
        - `url` string — The URL of the attachment
        - `content_type` string — The content type of the attachment
        - `filesize` integer — The size of the attachment
        - `width` integer — The width of the attachment
        - `height` integer — The height of the attachment
      - `external_id` string, nullable — The external id of the conversation part
      - `redacted` boolean — Whether or not the conversation part has been redacted.
      - `email_message_metadata` EmailMessageMetadata — Contains metadata if the message was sent as an email
        - `subject` string — The subject of the email
        - `email_address_headers` EmailAddressHeader[] — A list of an email address headers.
          - `type` string — The type of email address header
          - `email_address` string — The email address
          - `name` string, nullable — The name associated with the email address
      - `metadata` ConversationPartMetadata — Metadata for a conversation part
        - `quick_reply_options` QuickReplyOption[] — The quick reply options sent by the Admin or bot, presented in this conversation part.
          - `text` string, required — The text to display in this quick reply option.
          - `uuid` string, uuid, 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.
        - `quick_reply_uuid` string, uuid — The unique identifier for the quick reply option that was clicked by the end user.
      - `state` 'open' | 'closed' | 'snoozed' — Indicates the current state of conversation when the conversation part was created.
      - `tags` TagBasic[], nullable — A list of tags objects associated with the conversation part.
        - `type` string — value is "tag"
        - `id` string — The id of the tag
        - `name` string — The name of the tag
      - `event_details` union
        - object — 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 <code>conversation_attribute_updated_by_workflow</code>.
          - `workflow` object
            - `name` string — Name of the workflow
          - `attribute` object
            - `name` string — Name of the CDA updated
          - `value` object
            - `name` string — Value of the CDA updated
        - object — Contains details about Custom Data Attributes (CDAs) that were modified by an admin (operator) for conversation part type <code>conversation_attribute_updated_by_admin</code>.
          - `attribute` object
            - `name` string — Name of the CDA updated
          - `value` object
            - `name` string — Value of the CDA updated
        - object — Contains details about name of the action that was initiated for conversation part type <code>custom_action_started</code>.
          - `action` object
            - `name` string — Name of the action
        - object — Contains details about final status of the completed action for conversation part type <code>custom_action_finished</code>.
          - `action` object
            - `name` string — Name of the action
            - `result` 'success' | 'failed' — Status of the action
        - object — Contains details about name of the workflow for conversation part type <code>operator_workflow_event</code>.
          - `workflow` object
            - `name` string — The name of the workflow
          - `event` object
            - `type` string — Type of the workflow event initiated
            - `result` string — Result of the workflow event
      - `app_package_code` string, nullable — The app package code if this part was created via API. null if the part was not created via API.
    - `total_count` integer
  - `linked_objects` LinkedObjectList — An object containing metadata about linked conversations and linked tickets. Up to 1000 can be returned.
    - `type` 'list' — Always list.
    - `total_count` integer — The total number of linked objects.
    - `has_more` boolean — Whether or not there are more linked objects than returned.
    - `data` LinkedObject[] — An array containing the linked conversations and linked tickets.
      - `type` 'ticket' | 'conversation' — ticket or conversation
      - `id` string — The ID of the linked object
      - `category` 'Customer' | 'Back-office' | 'Tracker' | 'null', nullable — Category of the Linked Ticket Object.
  - `ai_agent_participated` boolean — Indicates whether the AI Agent participated in the conversation.
  - `ai_agent` AiAgent — Data related to AI Agent involvement in the conversation.
    - `source_type` 'essentials_plan_setup' | 'profile' | 'workflow' | 'workflow_preview' | 'fin_preview', nullable — The type of the source that triggered AI Agent involvement in the conversation.
    - `source_title` string, nullable — The title of the source that triggered AI Agent involvement in the conversation. If this is `essentials_plan_setup` then it will return `null`.
    - `last_answer_type` 'null' | 'ai_answer' | 'custom_answer', nullable — The type of the last answer delivered by AI Agent. If no answer was delivered then this will return `null`
    - `resolution_state` 'assumed_resolution' | 'confirmed_resolution' | 'routed_to_team' | 'abandoned' | 'null', nullable — The resolution state of AI Agent. If no AI or custom answer has been delivered then this will return `null`.
    - `rating` integer, nullable — The customer satisfaction rating given to AI Agent, from 1-5.
    - `rating_remark` string, nullable — The customer satisfaction rating remark given to AI Agent.
    - `created_at` integer, nullable — The time when the AI agent rating was created.
    - `updated_at` integer, nullable — The time when the AI agent rating was last updated.
    - `content_sources` ContentSourcesList
      - `type` 'content_source.list'
      - `total_count` integer — The total number of content sources used by AI Agent in the conversation.
      - `content_sources` ContentSource[] — The content sources used by AI Agent in the conversation.
        - `content_type` 'file' | 'article' | 'external_content' | 'content_snippet' | 'workflow_connector_action' — The type of the content source.
        - `url` string — The internal URL linking to the content source for teammates.
        - `title` string — The title of the content source.
        - `locale` string — The ISO 639 language code of the content source.

## Other responses

- `401` — Unauthorized
- `403` — API plan restricted
- `404` — Contact not found
- `422` — Last customer

---

[API](https://skmtc.net/intercom/apis/intercom-api.md) · [All operations](https://skmtc.net/intercom/apis/intercom-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/intercom/intercom-api/revisions/9517e80f2642/schema)
