- Merge a lead and a user
You can merge a contact with a role of lead into a contact with a role of user.
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 Gonewith aLinkheader 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.
Intercom API version.
By default, it's equal to the version set in the app package.
The unique identifier for the contact to merge away from. Must be a lead.
The unique identifier for the contact to merge into. Must be a user.
- The production API serverhttps://api.intercom.io/contacts/merge
- The european API serverhttps://api.eu.intercom.io/contacts/merge
- The australian API serverhttps://api.au.intercom.io/contacts/merge
- successful
- skip duplicate validation
curl -i -X POST \
'https://api.intercom.io/contacts/merge?include_merge_history=false' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-H 'Intercom-Version: Preview' \
-d '{
"from": "6762f0d51bb69f9f2193bb7f",
"into": "6762f0d51bb69f9f2193bb80"
}'successful
The unique identifier for the contact which is given by Intercom.
The unique identifier for the contact which is provided by the Client.
The contacts phone number normalized to the E164 format
The id of an admin that has been assigned account ownership of the contact.
Whether the contact has marked an email sent to them as spam.
(Unix timestamp in seconds) The time when the contact was created.
(Unix timestamp in seconds) The time when the contact was last updated.
(Unix timestamp in seconds) The time specified for when a contact signed up.
(Unix timestamp in seconds) The time when the contact was last seen (either where the Intercom Messenger was installed or when specified manually).
(Unix timestamp in seconds) The time when the contact last messaged in.
(Unix timestamp in seconds) The time when the contact was last messaged.
(Unix timestamp in seconds) The time when the contact last opened an email.
(Unix timestamp in seconds) The time when the contact last clicked a link in an email.
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.
The version of the browser which the contact is using.
The language set by the browser which the contact is using.
The name of the Android app which the contact is using.
The version of the Android app which the contact is using.
The version of the Android OS which the contact is using.
The version of the Android SDK which the contact is using.
(Unix timestamp in seconds) The time when the contact was last seen on an Android device.
(Unix timestamp in seconds) The last time the contact used the iOS app.
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.
An object with metadata about companies attached to a contact . Up to 10 will be displayed here. Use the url to get more.
An object containing location meta data about a Intercom contact.
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.
{ "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": null, "formatted_phone": null, "name": "Joe Bloggs", "avatar": null, "owner_id": null, "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": null, "last_replied_at": null, "last_contacted_at": null, "last_email_opened_at": null, "last_email_clicked_at": null, "language_override": null, "browser": null, "browser_version": null, "browser_language": null, "os": null, "location": { "type": "location", "country": null, "region": null, "city": null, "country_code": null, "continent_code": null }, "android_app_name": null, "android_app_version": null, "android_device": null, "android_os_version": null, "android_sdk_version": null, "android_last_seen_at": null, "ios_app_name": null, "ios_app_version": null, "ios_device": null, "ios_os_version": null, "ios_sdk_version": null, "ios_last_seen_at": null, "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": null, "utm_content": null, "utm_medium": null, "utm_source": null, "utm_term": null, "referrer": null, "enabled_push_messaging": null }