All webhooks
Contacts
Contacts merged
contact.mergedFires when two contacts are merged into one. data.contact is the surviving (target) contact; the contact referenced by merged_from_contact_id no longer exists — update any references in your system to point to data.contact.id.
HTTP request
AISAR sends a signed POST request to your webhook_url:
http
POST {webhook_url}
Content-Type: application/json
X-AISAR-Signature: sha256=...
{
"event": "contact.merged",
"event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
"timestamp": "2026-03-26T12:00:00.000000Z",
"company_id": 1,
"data": {
"contact": {
"id": 10,
"display_name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"second_name": null,
"phone": "+77001234567",
"email": "john@example.com",
"status": "lead",
"company": null,
"title": null,
"is_group": false,
"phones": ["+77001234567"],
"emails": ["john@example.com"],
"created_at": "2026-03-26T10:00:00.000000Z"
},
"merged_from_contact_id": 25
}
}The X-AISAR-Signature header carries an HMAC-SHA256 signature of the request body — use it to verify the request came from AISAR.
Example payload
json
{
"event": "contact.merged",
"event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
"timestamp": "2026-03-26T12:00:00.000000Z",
"company_id": 1,
"data": {
"contact": {
"id": 10,
"display_name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"second_name": null,
"phone": "+77001234567",
"email": "john@example.com",
"status": "lead",
"company": null,
"title": null,
"is_group": false,
"phones": ["+77001234567"],
"emails": ["john@example.com"],
"created_at": "2026-03-26T10:00:00.000000Z"
},
"merged_from_contact_id": 25
}
}Payload fields
| Field | Type | Description |
|---|---|---|
contact | object | The contact that survives after the merge (target contact) |
contact.id | integer | Target contact ID |
merged_from_contact_id | integer | ID of the contact that was merged in and no longer exists |