Skip to content

Start Bulk Merge

POST
/duplicates/bulk-merge

Merge a group: start a bulk merge run over up to 50 suggestion pairs. Proxies POST /v1/duplicates/bulk-merge (duplicates/interfaces/router.py:617) — same blocker checks, same per-pair transactions, same MergeContactBlockedError/ MergeCompanyBlockedError handling. Returns immediately with a run_id; poll GET /duplicates/bulk-merge/{run_id} for progress. Merge is destructive: an already-applied pair is only reversible via POST /duplicates/undo-merge/{merge_history_id} within its 30-day window, so check the response and the recent-merges feed rather than assuming success.

Idempotency: this is a POST, so it already honours the standard Idempotency-Key header via the platform-wide IdempotencyMiddleware (developer_api/dependencies /idempotency_middleware.py) — no per-route wiring needed. Retrying the same key returns the first run’s response instead of starting a second run.

Authorizations

Parameters

Header Parameters

X-Target-Org-Id
Any of:
string

Request Body required

Kick off a bulk merge run for up to BULK_MERGE_MAX_PAIRS suggestion pairs. Mirrors duplicates/interfaces/router.py::_BulkMergeRequest.

object
criterion
required
string
Allowed values: most_recent_engagement oldest_engagement created_first created_last most_recently_updated
suggestion_ids
required
Array<string>
>= 1 items <= 50 items

Responses

200

Successful Response

object
data
required
object
key
additional properties
any
pagination
Any of:
object
has_next
required

Whether there are more pages

boolean
limit
required

Items per page

integer
next_cursor
Any of:
string
page
required

Current page number (1-indexed)

integer
total
required

Total number of items

integer

422

Validation Error

object
detail
Array<object>
object
loc
required
Array
msg
required
string
type
required
string