All webhooks
Conversations
Conversation closed
conversation.closedFires when a conversation is closed. conversation.closed_at carries the closing time.
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": "conversation.closed",
"event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
"timestamp": "2026-03-26T12:00:00.000000Z",
"company_id": 1,
"data": {
"conversation": {
"id": 45,
"status": "closed",
"contact_id": 10,
"deal_id": null,
"subject": null,
"is_archived": false,
"created_at": "2026-03-26T11:00:00.000000Z",
"closed_at": "2026-03-26T12:00:00.000000Z"
},
"contact": {
"id": 10,
"display_name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"phone": "+77001234567",
"email": "john@example.com",
"status": "lead"
}
}
}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": "conversation.closed",
"event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
"timestamp": "2026-03-26T12:00:00.000000Z",
"company_id": 1,
"data": {
"conversation": {
"id": 45,
"status": "closed",
"contact_id": 10,
"deal_id": null,
"subject": null,
"is_archived": false,
"created_at": "2026-03-26T11:00:00.000000Z",
"closed_at": "2026-03-26T12:00:00.000000Z"
},
"contact": {
"id": 10,
"display_name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"phone": "+77001234567",
"email": "john@example.com",
"status": "lead"
}
}
}Payload fields
| Field | Type | Description |
|---|---|---|
conversation.id | integer | Conversation ID |
conversation.status | string | Always closed |
conversation.closed_at | string | ISO 8601 timestamp of when the conversation was closed |
contact | object|null | Contact associated with the conversation |