Call webhooks
Events for the call lifecycle on phone (PSTN) and WhatsApp numbers, plus call-permission requests.
Events for calls on your numbers, both regular phone (PSTN) and WhatsApp, from ring to hangup. Delivery, retries, idempotency, and signature verification work the same for every event and are covered in the webhooks overview.
Events
| Event | Description |
|---|---|
call.received | Fired when an inbound call (phone/PSTN or WhatsApp) reaches one of your numbers and is routed to its destination. |
call.ended | Fired when a call (phone/PSTN or WhatsApp) ends; carries duration, end reason, cost breakdown, and the recording when enabled. |
call.failed | Fired when a call (phone/PSTN or WhatsApp) fails with a hard error before or during bridging. |
call.permission_request | Fired when a WhatsApp user accepts or rejects your call-permission request. |
call.received
Fired when an inbound call, regular phone (PSTN) or WhatsApp, reaches one of your numbers and is routed to its configured destination (an AI voice agent, SIP endpoint, or phone number). The payload carries the Zernio call id, caller and business numbers, the destination snapshot (forwardTo), and contactId/conversationId links into the inbox so you can message the caller, during the call or after, with the regular send APIs. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"call.received"The account context included in inbox webhook payloads.
date-timeResponse Body
call.ended
Fired when a call (phone/PSTN or WhatsApp) ends. Carries durationSeconds, the endReason (hangup, no_answer, rejected, error), a cost breakdown under call.billing, and, when recording is enabled on the number, a recordingUrl with its expiry. The classic automation here is a missed-call follow-up: on endReason: "no_answer", text the caller back over the linked conversationId. Subscribe with Create webhook settings or Update webhook settings.
"call.ended"The account context included in inbox webhook payloads.
date-timeResponse Body
call.failed
Fired when a call (phone/PSTN or WhatsApp) fails with a hard error before or during bridging (for example, the destination rejected the SIP INVITE). Carries the platform error code and message. Subscribe with Create webhook settings or Update webhook settings.
"call.failed"The account context included in inbox webhook payloads.
date-timeResponse Body
call.permission_request
Fired when a WhatsApp user responds to your call-permission request (business-initiated calls require one). Carries the user's number, their response (accept or reject), whether it is permanent, and the expiry when it is not. Subscribe with Create webhook settings or Update webhook settings.
"call.permission_request"The account context included in inbox webhook payloads.
date-time