PrepaidAIDocsv1
StatusConsole

Webhook events

Every event we send, when it fires, and the fields in its data.

1 min read
EventFires when
call.startedA call to your number has begun.
call.endedA call finished and has been metered.
call.transcript.readyA finished call’s transcript is stored.
booking.createdYour AI booked an appointment on a call.
message.takenYour AI took a message for you.
call.urgentYour AI flagged a call as urgent.
question.unansweredA caller asked something your AI could not answer.
credit.lowCredits are low or gone, or the plan minutes are used up. At most once a day per state.
plan.expiringYour plan is about to end.
number.releasedA 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"}