Merge Contacts
Bulk Operations
Merge Contacts
Merge one or more duplicate contacts into a primary record
POST
Merge Contacts
Request
Merges fold the duplicates into the primary contact. The primary keeps its UUID; duplicate UUIDs are retired. Non-empty fields on the primary are preserved; missing fields are filled from the duplicates in order. Notes, activities, tasks, emails, documents, and list memberships are re-homed to the primary.Headers
Strongly recommended. Same key returns the same result within 24 hours.
Body Parameters
UUID of the contact that will remain after the merge.
UUIDs of contacts to merge into the primary. Maximum 20 per request.
When
true, non-empty fields on the primary can be overwritten by duplicate values. Defaults to fill-only behavior.When
true, the API returns a preview of the merge without making changes.Response
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and X-Request-ID. Each merged duplicate emits a contact.merged webhook event.
Example Response
Errors
| Status | Code | Description |
|---|---|---|
| 400 | validation_error | More than 20 duplicates, or primary_id appears in duplicate_ids |
| 401 | invalid_key | Invalid or expired API key |
| 403 | insufficient_permissions | Missing write:contacts permission |
| 404 | not_found | Primary or any duplicate ID was not found |
| 409 | merge_conflict | Duplicates reference each other in a circular chain |
| 429 | rate_limited | Rate limit exceeded |