type and data change:
call.*, or to *. Payloads may gain new fields over time, so ignore fields you don’t recognise. The live list, with a JSON Schema for each event, is at GET /v1/webhooks/event-types, and every event has its own page with its payload schema in the API reference.
Content fields are left out unless the endpoint has include_content: true. They’re marked below.
Calls
call.created, call.ringing, call.answered, call.ended
call.created, call.ringing, call.answered, call.ended
These four share one shape.
revision goes up with every change, so you can ignore an older event that arrives late. Content: from_number, to_number.call.ended
call.ringing adds ringing_at; call.answered adds answered_at; call.ended adds terminal_reason, ring_ms, talk_ms, total_ms and ended_at. channel is phone or web.call.transcript.ready, call.recording.ready
call.transcript.ready, call.recording.ready
call.transcript.ready
call.recording.ready
GET /v1/calls/{call_id}/transcript and …/recording.call.analyzed
call.analyzed
Content:
summary.disposition is one of the agent’s analysis.dispositionLabels. callback_at is set when the caller asked to be called back; a proposed scheduled call is created for it.call.transfer.requested, call.transfer.completed, call.transfer.failed
call.transfer.requested, call.transfer.completed, call.transfer.failed
call.transfer.completed
call.transfer.failed carries error (for example no_answer) instead of transferred_at. billed_by is kallabot or customer_carrier (your own carrier carried the transferred part).call.voicemail.detected
call.voicemail.detected
call.operator.joined, call.operator.left
call.operator.joined, call.operator.left
mode is listen, takeover or phone_takeover.Tools
tool.called
kind is api, mcp_server, google_sheets or a built-in. On a chat, conversation_id is set instead of call_id.
Conversations
Chats on WhatsApp, Messenger, Instagram and web chat.channel is whatsapp, messenger, instagram or web_chat. conversation_id is the thread and stays the same across visits; session_id is one sitting.
conversation.message.received, conversation.message.sent
conversation.message.received, conversation.message.sent
author is contact, agent, human (a teammate), business_app (sent from the WhatsApp Business app) or system.conversation.started, conversation.closed
conversation.started, conversation.closed
conversation.handed_off
conversation.handed_off
conversation.analyzed
conversation.analyzed
Numbers
number.purchased, number.released, number.updated
number.purchased, number.released, number.updated
number.compliance.updated
number.compliance.updated
stage is the simple view: draft, waiting, approved, fix, rules_changed, update, updating or hidden.number.order.updated
number.order.updated
number.port_in.updated
number.port_in.updated
number.trust.updated
number.trust.updated
item is signed_calls, caller_name or spam_check.Agents
agent.published
agent.updated may include changed_paths, JSON Pointers to what changed.
Knowledge
knowledge.source.failed
Webhooks
webhook.test
Old names
These older names are still accepted when subscribing and map to the new ones:call.completed → call.ended, transfer.requested → call.transfer.requested, transfer.completed → call.transfer.completed, transfer.failed → call.transfer.failed.
The catalogue also reserves
number.suspended, number.payment_failed and billing.balance.low. They aren’t sent yet, and GET /v1/webhooks/event-types marks them available: false. A * or number.* subscription will receive them once they ship.