---
title: "Merge Contacts"
method: POST
path: "/v1/contacts/{contact_id}/merge"
tags: ["Contacts"]
---

# Merge Contacts

`POST /v1/contacts/{contact_id}/merge`

## Request

- Base URL: `https://api.monaco.com`
- URL: `https://api.monaco.com/v1/contacts/{contact_id}/merge`
- Auth: none declared

Merges the contact `source_contact_id` into the contact in the path. This is irreversible, like deleting a contact: the source contact is deleted, the kept contact's empty fields are filled from it, its notes are appended, its sequences, tasks, tags, audience memberships, opportunity links, custom field values move to the kept contact, and its live sequences are stopped.

When live sequences would be stopped the request is rejected with 409 `sequence_stop_confirmation_required` unless `confirm_sequence_stop` is true. The merge runs in one transaction: on 422 `merge_failed` nothing was changed. Retrying a merge that already completed returns 404, because the source contact no longer exists.

## Path parameters

- `contact_id` string, uuid, required

## Request body

- ContactMergeRequest
  - `source_contact_id` string, uuid, required: ID of the contact to merge into the contact in the path. It is deleted when the merge is applied. Both contacts must be on the same account.
  - `confirm_sequence_stop` boolean: Confirms that the live sequences listed under `blocking_sequences` in the preview may be stopped. Without it, a merge that would stop live sequences is rejected with `sequence_stop_confirmation_required`.

## Response `200`

Successful Response

- PublicItemResponseContactMergeResponse
  - `data` ContactMergeResponse, required
    - `target_contact_id` string, required
    - `source_contact_id` string, required
    - `plays_moved` integer, required
    - `user_tasks_moved` integer, required
    - `tags_merged` integer, required
    - `fields_filled_from_source` string[], required
    - `audience_memberships_moved` integer, required
    - `opportunity_links_moved` integer, required
    - `custom_fields_filled` integer, required
    - `sequences_stopped` string[], required: IDs of the source's sequences stopped
    - `sequences_dismissed` string[], required: IDs of the source's unstarted sequences dismissed
    - `deleted_at` string, date-time, required: When the source contact was deleted
  - `meta` ResponseMeta
    - `timestamp` string, date-time: Server timestamp of the response

## Other responses

- `409`: Confirmation required to stop live sequences
- `422`: The merge request is invalid, or the merge failed
- `4XX`: Client error

## Changes

- **2026-11-03** `fc720ada2a81`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/monaco/apis/monaco-public-api/changes/v1/contacts/:contact_id/merge/post.md)

---

[API](https://skmtc.dev/monaco/apis/monaco-public-api.md) - [All operations](https://skmtc.dev/monaco/apis/monaco-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/monaco/apis/monaco-public-api/revisions/fc720ada2a81?raw)
