Contacts
Outbound eligibility updated
contact.outbound_eligibility_updatedFires when the outbound eligibility of a contact changes — the WhatsApp Business 24-hour messaging window (a new qualifying inbound message opens/resets the window) or the WhatsApp call permission (the contact grants or denies it, or it expires). Important: this is a realtime broadcast delivered only over the WebSocket (Reverb) company channel for in-app consumption — it is not sent to outbound webhook subscriptions. Depending on the trigger, the payload takes one of two shapes: with a call object (call-permission change) or without it (24-hour window change).
HTTP request
AISAR sends a signed POST request to your webhook_url:
POST {webhook_url}
Content-Type: application/json
X-AISAR-Signature: sha256=...
{
"event": "contact.outbound_eligibility_updated",
"event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
"timestamp": "2026-06-20T12:00:00.000000Z",
"company_id": 1,
"data": {
"contact_account_id": 15,
"contact_id": 10,
"channel_id": 2,
"call": {
"permission_status": "temporary",
"permission_expires_at": 1781000000,
"can_call": true
}
}
}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
{
"event": "contact.outbound_eligibility_updated",
"event_id": "evt_01JXXXXXXXXXXXXXXXXXXXXX",
"timestamp": "2026-06-20T12:00:00.000000Z",
"company_id": 1,
"data": {
"contact_account_id": 15,
"contact_id": 10,
"channel_id": 2,
"call": {
"permission_status": "temporary",
"permission_expires_at": 1781000000,
"can_call": true
}
}
}Payload fields
| Field | Type | Description |
|---|---|---|
contact_id | integer | Contact ID whose eligibility changed |
channel_id | integer | Channel ID the eligibility is scoped to |
contact_account_id | integer | Contact account ID. Present only on the call-permission variant |
call | object | Present only on the call-permission variant; absent for the 24h-window variant |
call.permission_status | string | Current WhatsApp call permission: none, temporary, or permanent |
call.permission_expires_at | integer|null | Unix timestamp when a temporary permission expires; null for permanent / none |
call.can_call | boolean | Whether an outbound call is currently allowed (permission valid and unexpired) |