# Merge a lead and a user

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

Endpoint: POST /contacts/merge
Version: 2.14
Security: bearerAuth

## Header parameters:

  - `Intercom-Version` (string)
    Intercom API version.By default, it's equal to the version set in the app package.
    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", "Preview"

## Request fields (application/json):

  - `from` (string)
    The unique identifier for the contact to merge away from. Must be a lead.
    Example: "5d70dd30de4efd54f42fd526"

  - `into` (string)
    The unique identifier for the contact to merge into. Must be a user.
    Example: "5ba682d23d7cf92bef87bfd4"

## Response 200 fields (application/json):

  - `enabled_push_messaging` (boolean,null)
    If the user has enabled push messaging.
    Example: true

  - `type` (string)
    The type of object.
    Example: "contact"

  - `id` (string)
    The unique identifier for the contact which is given by Intercom.
    Example: "5ba682d23d7cf92bef87bfd4"

  - `external_id` (string,null)
    The unique identifier for the contact which is provided by the Client.
    Example: "f3b87a2e09d514c6c2e79b9a"

  - `workspace_id` (string)
    The id of the workspace which the contact belongs to.
    Example: "ecahpwf5"

  - `role` (string)
    The role of the contact.
    Example: "user"

  - `email` (string)
    The contact's email.
    Example: "joe@example.com"

  - `email_domain` (string)
    The contact's email domain.
    Example: "example.com"

  - `phone` (string,null)
    The contacts phone.
    Example: "+1123456789"

  - `name` (string,null)
    The contacts name.
    Example: "John Doe"

  - `owner_id` (integer,null)
    The id of an admin that has been assigned account ownership of the contact.
    Example: 123

  - `has_hard_bounced` (boolean)
    Whether the contact has had an email sent to them hard bounce.
    Example: true

  - `marked_email_as_spam` (boolean)
    Whether the contact has marked an email sent to them as spam.
    Example: true

  - `unsubscribed_from_emails` (boolean)
    Whether the contact is unsubscribed from emails.
    Example: true

  - `created_at` (integer)
    (UNIX timestamp) The time when the contact was created.
    Example: 1571672154

  - `updated_at` (integer)
    (UNIX timestamp) The time when the contact was last updated.
    Example: 1571672154

  - `signed_up_at` (integer,null)
    (UNIX timestamp) The time specified for when a contact signed up.
    Example: 1571672154

  - `last_seen_at` (integer,null)
    (UNIX timestamp) The time when the contact was last seen (either where the Intercom Messenger was installed or when specified manually).
    Example: 1571672154

  - `last_replied_at` (integer,null)
    (UNIX timestamp) The time when the contact last messaged in.
    Example: 1571672154

  - `last_contacted_at` (integer,null)
    (UNIX timestamp) The time when the contact was last messaged.
    Example: 1571672154

  - `last_email_opened_at` (integer,null)
    (UNIX timestamp) The time when the contact last opened an email.
    Example: 1571672154

  - `last_email_clicked_at` (integer,null)
    (UNIX timestamp) The time when the contact last clicked a link in an email.
    Example: 1571672154

  - `language_override` (string,null)
    A preferred language setting for the contact, used by the Intercom Messenger even if their browser settings change.
    Example: "en"

  - `browser` (string,null)
    The name of the browser which the contact is using.
    Example: "Chrome"

  - `browser_version` (string,null)
    The version of the browser which the contact is using.
    Example: "80.0.3987.132"

  - `browser_language` (string,null)
    The language set by the browser which the contact is using.
    Example: "en-US"

  - `os` (string,null)
    The operating system which the contact is using.
    Example: "Mac OS X"

  - `android_app_name` (string,null)
    The name of the Android app which the contact is using.
    Example: "Intercom"

  - `android_app_version` (string,null)
    The version of the Android app which the contact is using.
    Example: "5.0.0"

  - `android_device` (string,null)
    The Android device which the contact is using.
    Example: "Pixel 3"

  - `android_os_version` (string,null)
    The version of the Android OS which the contact is using.
    Example: "10"

  - `android_sdk_version` (string,null)
    The version of the Android SDK which the contact is using.
    Example: "28"

  - `android_last_seen_at` (integer,null)
    (UNIX timestamp) The time when the contact was last seen on an Android device.
    Example: 1571672154

  - `ios_app_name` (string,null)
    The name of the iOS app which the contact is using.
    Example: "Intercom"

  - `ios_app_version` (string,null)
    The version of the iOS app which the contact is using.
    Example: "5.0.0"

  - `ios_device` (string,null)
    The iOS device which the contact is using.
    Example: "iPhone 11"

  - `ios_os_version` (string,null)
    The version of iOS which the contact is using.
    Example: "13.3.1"

  - `ios_sdk_version` (string,null)
    The version of the iOS SDK which the contact is using.
    Example: "13.3.1"

  - `ios_last_seen_at` (integer,null)
    (UNIX timestamp) The last time the contact used the iOS app.
    Example: 1571672154

  - `custom_attributes` (object)
    The custom attributes which are set for the contact.

  - `avatar` (object,null)

  - `avatar.type` (string)
    The type of object
    Example: "avatar"

  - `avatar.image_url` (string,null)
    An image URL containing the avatar of a contact.
    Example: "https://example.org/128Wash.jpg"

  - `tags` (object,null)
    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.

  - `tags.data` (array)
    This object represents the tags attached to a contact.

  - `tags.data.type` (string)
    The addressable object type
    Example: "note"

  - `tags.data.id` (string)
    The id of the addressable object
    Example: "123"

  - `tags.data.url` (string)
    Url to get more company resources for this contact
    Example: "/contacts/5ba682d23d7cf92bef87bfd4/notes"

  - `tags.url` (string)
    url to get more tag resources for this contact
    Example: "/contacts/5ba682d23d7cf92bef87bfd4/tags"

  - `tags.total_count` (integer)
    Int representing the total number of tags attached to this contact
    Example: 100

  - `tags.has_more` (boolean)
    Whether there's more Addressable Objects to be viewed. If true, use the url to view all
    Example: true

  - `notes` (object)
    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.

  - `notes.data` (array)
    This object represents the notes attached to a contact.

  - `notes.url` (string)
    Url to get more company resources for this contact
    Example: "/contacts/5ba682d23d7cf92bef87bfd4/notes"

  - `notes.total_count` (integer)
    Int representing the total number of companyies attached to this contact
    Example: 100

  - `notes.has_more` (boolean)
    Whether there's more Addressable Objects to be viewed. If true, use the url to view all
    Example: true

  - `companies` (object)
    An object with metadata about companies attached to a contact . Up to 10 will be displayed here. Use the url to get more.

  - `companies.data` (array)
    An array of company data objects attached to the contact.

  - `companies.data.id` (string)
    The unique identifier for the company which is given by Intercom.
    Example: "5ba682d23d7cf92bef87bfd4"

  - `companies.data.type` (string)
    The type of the object. Always company.
    Enum: "company"

  - `companies.data.url` (string)
    The relative URL of the company.
    Example: "/companies/5ba682d23d7cf92bef87bfd4"

  - `companies.url` (string)
    Url to get more company resources for this contact
    Example: "/contacts/5ba682d23d7cf92bef87bfd4/companies"

  - `companies.total_count` (integer)
    Integer representing the total number of companies attached to this contact
    Example: 100

  - `companies.has_more` (boolean)
    Whether there's more Addressable Objects to be viewed. If true, use the url to view all
    Example: true

  - `location` (object)
    An object containing location meta data about a Intercom contact.

  - `location.type` (string,null)
    Always location
    Example: "location"

  - `location.country` (string,null)
    The country that the contact is located in
    Example: "Ireland"

  - `location.region` (string,null)
    The overal region that the contact is located in
    Example: "Dublin"

  - `location.city` (string,null)
    The city that the contact is located in
    Example: "Dublin"

  - `social_profiles` (object)
    An object containing social profiles that a contact has.

  - `social_profiles.data` (array)
    A list of social profiles objects associated with the contact.

  - `social_profiles.data.type` (string)
    value is "social_profile"
    Example: "social_profile"

  - `social_profiles.data.name` (string)
    The name of the Social media profile
    Example: "Facebook"

  - `social_profiles.data.url` (string)
    The name of the Social media profile
    Example: "http://example.com/th1sland"

## Response 401 fields (application/json):

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

  - `request_id` (string,null)
    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,null)
    Optional. Human readable description of the error.
    Example: "Access Token Invalid"

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


