Webhook events
Every event we send, when it fires, and the fields in its data.
| Event | Fires when |
|---|---|
call.started | A call to your number has begun. |
call.ended | A call finished and has been metered. |
call.transcript.ready | A finished call’s transcript is stored. |
booking.created | Your AI booked an appointment on a call. |
message.taken | Your AI took a message for you. |
call.urgent | Your AI flagged a call as urgent. |
question.unanswered | A caller asked something your AI could not answer. |
credit.low | Credits are low or gone, or the plan minutes are used up. At most once a day per state. |
plan.expiring | Your plan is about to end. |
number.released | A number went back to the carrier after its plan lapsed. |
call.started
data
{ "call_id": "v3:u5OAKGEPT3Dx8SZSSDRWEMdNH2Oriq", "from": "+64211234567", "to": "+6448872813"}call_id here is the carrier’s id for the call, the same one call.ended carries. from is null for a withheld number.
call.ended
data
{ "call_id": "v3:u5OAKGEPT3Dx8SZSSDRWEMdNH2Oriq", "from": "+64211234567", "to": "+6448872813", "caller_name": "Aroha Ngata", "outcome": "booked", "duration_seconds": 96, "started_at": "2026-10-28T02:14:09.000Z"}outcome is the value the voice engine recorded: booked, message, transferred, completed, missed_intent or spam. The API reports completed as answered, and missed_intent and spam as missed.
call.transcript.ready
data
{ "call_id": "b81d2f44-5a90-4a1e-9d6c-77b0c3e21a05", "turns": 14}call_id is the id Retrieve a call takes — fetch it there for the words. turns is how many there are.
booking.created
data
{ "start": "2026-10-30T21:00:00.000Z", "service": "Check-up", "caller_name": "Aroha Ngata", "source": "ai_call"}message.taken and call.urgent
data
{ "message_id": "9a1c2e3f-4b5d-4e6f-8a7b-0c1d2e3f4a5b", "kind": "message", "body": "Wants a quote for a heat pump install. Free after 3pm.", "caller_name": "Sam Patel", "caller_phone": "+64211234567", "call_id": "b81d2f44-5a90-4a1e-9d6c-77b0c3e21a05"}The same shape for both; kind is message or urgent. call_id is the id Retrieve a call takes, or null.
question.unanswered
data
{ "question": "Do you take ACC claims?", "call_id": "b81d2f44-5a90-4a1e-9d6c-77b0c3e21a05"}credit.low
data
{ "credits": 0, "state": "empty"}state is low, empty or minutes_used_up. credits is in credit-hundredths.
plan.expiring
data
{ "plan": "standard", "days_left": 3, "expires_at": "2026-11-01T00:00:00.000Z"}number.released
data
{ "number": "+6448872813", "released_at": "2026-11-26T03:00:00.000Z"}