Webhooks & APIOutbound
contact.split
Emitted when a previous merge is undone and contacts become separate people again
type: contact.split
Fired after an un-merge commits. Contacts that a previous merge had folded into a survivor are separate people again.
This is the mirror image of contact.merged - it lets a subscriber that reconciled records onto the winner split them back apart.
When it fires
- An operator un-merges a contact from the merge history on the contact profile.
It fires after the split has committed.
data shape
type Data = {
contact: {
restored: string[]; // contact ids that are separate people again
from: string; // the winner they had been folded into
};
splitAt: string; // ISO-8601 UTC
};The field names are not symmetric with contact.merged. Here from is the winner the contacts are being pulled out of, and restored lists the contacts that are separate again. In contact.merged, from means the opposite - the losers. Read the field names carefully rather than reusing a merge handler.
Example envelope
{
"id": "evt_01JV4QFKY65B1F4LK0X9S2A5EQ",
"type": "contact.split",
"timestamp": "2026-04-24T12:40:00.000Z",
"data": {
"contact": {
"restored": ["6804f4d5a6f9f35f6e66f1a2"],
"from": "6804f4d5a6f9f35f6e66f1c9"
},
"splitAt": "2026-04-24T12:40:00.000Z"
},
"meta": {
"eventId": "evt_01JV4QFKY65B1F4LK0X9S2A5EQ",
"event": "contact.split",
"occurredAt": "2026-04-24T12:40:00.000Z",
"organisationId": "6640f3d5c8a0d7e8b7f20222",
"connectionId": "6640f45ac8a0d7e8b7f2014a",
"apiVersion": "2026-04-01",
"attempt": 1
}
}How to handle it
- For each id in
restored, recreate it as its own record (or un-alias it, if you kept it as an alias offrom). - Re-attribute history you had folded onto
fromback to the restored ids where your own data lets you.
Notes
restoredalways has at least one entry.- A split does not undo message history that arrived while the contacts were merged - it only separates the identities.
Related
contact.merged- the merge this reverses- Shared Types -
ContactPayload