Contact updated
Incoming webhook deliveries are authenticated with HMAC signature headers (X-Chatway-Signature and X-Chatway-Timestamp), not your Chatway API key.
An existing contact was updated.
Use contact.updated to keep an existing CRM record synchronized. Find the record using data.contact.id, then inspect data.updated_fields and the matching entries in data.previous_values and data.current_values. For example, an email change should update the existing contact rather than create a second record under the new address. Use Get Chat Contact to retrieve a fresh profile and Contact created for the initial contact notification.
For signature verification and retries, see Webhooks overview.
POST webhook: contact.updatedParameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
X-Chatway-Event | header | Yes | string | Event name for this delivery. Example: contact.updated |
X-Chatway-Webhook-Id | header | Yes | string (uuid) | Unique webhook subscription ID. Example: 9f3c2a1b-4d5e-4f70-8a9b-0c1d2e3f4a5b |
X-Chatway-Delivery-Id | header | Yes | string | Unique ID for this HTTP delivery attempt (`del_` + 32 hex characters). A new value is sent on each retry. Example: del_1b0279b1f28f12c0b9f2a2fdbf3758ee |
X-Chatway-Delivery-Attempt | header | Yes | string | Attempt number for this event (`1` on first try). Sent as a decimal string in the header. Example: 1 |
X-Chatway-Timestamp | header | Yes | string | Unix timestamp in seconds when the request was signed. Sent as a decimal string in the header. Example: 1770201001 |
X-Chatway-Signature | header | Yes | string | `sha256=` followed by the lowercase hex HMAC SHA256 of `{X-Chatway-Timestamp}.{raw request body}`, keyed with your webhook secret. The example is computed for the example body serialized as compact JSON, the example timestamp, and the placeholder secret `whsec_exampleSecretForDocsOnly00000000`. Example: sha256=5acc28571882f63c2ffb9504466bd3a952d4b75ca35bb2b887fdbbf8bf064f35 |
Request body
Signed JSON envelope for this event.
application/json
id (string, required)— Stable event ID (`evt_…`). Same across HTTP retries for this notification.event (string, required)— Event name. For this webhook, always `contact.updated`.data (object, required)— Payload for contact.updated.contact (object, required)id (string (uuid), required)name (string|null, required)— Contact name. Always present; null when unknown.email (string|null, required)— Contact email. Always present; null when unknown.phone (string|null, required)— Contact phone. Always present; null when unknown.
updated_fields (array<string>, required)previous_values (object, required)— Map of field names to values before the update.current_values (object, required)— Map of field names to values after the update.
occurred_at (string (date-time), required)— When the business event occurred.version (string, required)— Payload schema version.
Responses
200
Return any 2xx status to acknowledge receipt.
410
Optional HTTP 410 Gone to signal the endpoint is permanently unavailable. Like every non-2xx response below 500 (including 408 and 429), it is not retried. It does not disable the subscription; turn the webhook off in Chatway Settings if you want deliveries to stop.
Examples
Request body example
{
"id": "evt_1234567890abcdef1234567890abcdef",
"event": "contact.updated",
"data": {
"contact": {
"id": "9b0c5fe6-35ad-459d-b6ba-4288191f84f1",
"name": "John Doe",
"email": "[email protected]",
"phone": "+1XXXXXXXXXX"
},
"updated_fields": [
"email"
],
"previous_values": {
"email": "[email protected]"
},
"current_values": {
"email": "[email protected]"
}
},
"occurred_at": "2026-02-04T10:30:00Z",
"version": "2026-09"
}