AISARAISAR
All webhooks

Conversations

Conversation closed

conversation.closed

Fires 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

FieldTypeDescription
conversation.idintegerConversation ID
conversation.statusstringAlways closed
conversation.closed_atstringISO 8601 timestamp of when the conversation was closed
contactobject|nullContact associated with the conversation