enabled_events
on a webhook endpoint.
Event catalog
| Event | When it fires |
|---|---|
call.queued | The call has been created and credits reserved, before we dial. |
call.ringing | The carrier has started ringing the destination. |
call.answered | The callee picked up; the AI session is now live. |
call.completed | The call finished normally and structured output extraction is done. This is usually the event you want. |
call.failed | The call ended in a provider- or AI-side failure. See error_code / error_message. |
call.no_answer | The call rang out without being picked up. |
call.busy | The carrier reported a busy signal. |
call.canceled | The caller canceled before the remote party picked up. |
Envelope shape
Every delivery carries the same wrapper:id— unique id for this delivery. Use it as an idempotency key.type— one of the eight event types above.created— unix timestamp (seconds) when CallingBox emitted the event.api_version— schema version fordata.call. Today this is always2026-04.data.call— the full call object as of the time of the event. Field values earlier in the lifecycle may still benull.
Which fields are populated when?
Because each event fires at a different stage, some fields are only populated later in the lifecycle:| Field | Populated on |
|---|---|
status | Every event (matches the type, except queued maps to initiated once dialing starts). |
started_at | call.ringing and later. |
answered_at | call.answered and later. |
ended_at, duration_seconds | Terminal events only. |
result, result_status | call.completed only, after extraction finishes. |
billed_duration_seconds, billing_amount_milli_cents | Terminal events, after settlement. |
Why call.completed fires after call.failed/etc, never alongside
Only one terminal event fires per call:
- Normal hangup →
call.completedafter we’ve run structured output extraction, so the payload contains the finalresult. - Anything else →
call.failed,call.no_answer,call.busy, orcall.canceledimmediately on hangup.
Example payloads
call.queued
call.answered
call.completed
call.failed
Listing event types programmatically
GET /v1/webhook_events returns the current catalog. Handy in dashboards
or when bootstrapping a customer onboarding flow.