AISARAISAR
All webhooks

Contacts

Outbound eligibility updated

contact.outbound_eligibility_updated

Fires 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:

http
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

json
{
  "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

FieldTypeDescription
contact_idintegerContact ID whose eligibility changed
channel_idintegerChannel ID the eligibility is scoped to
contact_account_idintegerContact account ID. Present only on the call-permission variant
callobjectPresent only on the call-permission variant; absent for the 24h-window variant
call.permission_statusstringCurrent WhatsApp call permission: none, temporary, or permanent
call.permission_expires_atinteger|nullUnix timestamp when a temporary permission expires; null for permanent / none
call.can_callbooleanWhether an outbound call is currently allowed (permission valid and unexpired)