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

# Preview a Contact Merge

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

## Request

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

Read-only preview of merging the contact `source_contact_id` into the contact in the path. Nothing is changed. Returns how the kept contact will look, which of its empty fields the source fills, what moves over (sequences, tasks, tags, audience memberships, opportunity links, custom field values) and the live sequences that would be stopped. Requires only the `api:read` scope.

Both contacts must be on the same account, and when both have an email or both have a LinkedIn URL those must match; otherwise the request is rejected with 422 `merge_invalid` and a message naming the rule.

## Path parameters

- `contact_id` string, uuid, required

## Request body

- ContactMergePreviewRequest
  - `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.

## Response `200`

Successful Response

- PublicItemResponseContactMergePreviewResponse
  - `data` ContactMergePreviewResponse, required
    - `target_contact` ContactMergeContactSummary, required
      - `id` string, required
      - `name` string, nullable
      - `email` string, nullable
      - `linkedin_url` string, nullable
      - `title` string, nullable
      - `archived` boolean
    - `source_contact` ContactMergeContactSummary, required
      - `id` string, required
      - `name` string, nullable
      - `email` string, nullable
      - `linkedin_url` string, nullable
      - `title` string, nullable
      - `archived` boolean
    - `merged_contact` ContactMergeContactSummary, required
      - `id` string, required
      - `name` string, nullable
      - `email` string, nullable
      - `linkedin_url` string, nullable
      - `title` string, nullable
      - `archived` boolean
    - `fields_filled_from_source` string[], required: Empty fields on the contact in the path that take the source's value
    - `notes_appended` boolean, required: True when the source's notes will be appended
    - `counts` ContactMergeCounts, required
      - `plays_moved` integer, required
      - `user_tasks_moved` integer, required
      - `tags_added` integer, required
      - `audience_memberships_moved` integer, required
      - `opportunity_links_moved` integer, required
      - `custom_fields_filled` integer, required
    - `blocking_sequences` MergeBlockingSequence[], required
      - `sequence_id` string, required
      - `status` string, required
      - `contact` MergeContactSummary, required
        - `id` string, required
        - `name` string, nullable
        - `email` string, nullable
      - `name` string, nullable
      - `campaign_name` string, nullable
    - `requires_sequence_stop` boolean, required: True when applying the merge would stop live sequences
  - `meta` ResponseMeta
    - `timestamp` string, date-time: Server timestamp of the response

## Other responses

- `422`: The merge request is invalid
- `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/preview/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)
