POST request (Content-Type: application/json, signed in the X-Signature header). Advanced webhooks use the same data as the source for their templates. This page documents every field.
You can fetch the same payload for any past call with GET /agents/{agentId}/calls/{callId}/webhook-payload.
New fields may be added at any time. Ignore fields you don’t recognize instead of rejecting the request. Fields with no value may be
null or omitted.Example
webhook.json
Examples by event
Every delivery uses the same structure. What changes is how much of it is filled in: events that fire before post-call analysis carry the identifiers, the contact, and the live status, but no outcome yet.- DIALING / CONNECTED
- COULD_NOT_CONNECT:NO_ANSWER
- Text agent (POST_PROCESSING_FINISHED)
Sent before the conversation is analyzed.
transcript, events, and conversationFlow are empty, and outcome fields are absent or null. On DIALING the callStatus is NEW; on CONNECTED it’s IN_PROGRESS.Which fields are filled on which events
Need the outcome? Subscribe to a
POST_PROCESSING_FINISHED:* event or CALL_FINISHED, not HANG_UP.
Field reference
Identifiers and context
string
Call ID. Use it with the call endpoints, and with
webhookEvent as a deduplication key.string
Call session ID. Used by the warm-transfer summary endpoint.
string
The event that triggered this delivery, for example
CALL_FINISHED. See Webhook events.string
When the call was created (ISO 8601, UTC).
boolean
true if this is an inbound agent.boolean
true for test calls placed from the dashboard (no contact attached). Filter these out in production.object
The agent that handled the call. Named
campaign for backward compatibility.object
The account (or subaccount) the agent belongs to.
string
Account ID (same as
account.id).Phone numbers and contact
string
The calling number.
string
The called number.
string
Same value as
phoneFrom.string
Same value as
phoneTo.object
The contact called.
Status and outcome
string
The call’s overall result in one field. It’s the first that applies of:
- The call status while the call isn’t completed:
NEW,IN_PROGRESS,BUSY,NO_ANSWER,VOICE_MAIL,FAILED. COMPLETEDfor completed calls that didn’t count as a real conversation (for example, silence or an immediate hang-up).- The post-call outcome once analysis is done:
INTERESTED,NOT_INTERESTED,CALL_ME_LATER,WRONG_NUMBER,DO_NOT_CALL. - The hang-up reason (see
hangUpReason) for a completed call that hasn’t been analyzed yet.
string
Telephony status:
NEW, IN_PROGRESS, COMPLETED (answered and ended), NO_ANSWER, BUSY, VOICE_MAIL, FAILED, DO_NOT_CALL_REGISTRY_MATCHED (number found on a Do Not Call registry, not dialed), or ANALYZING.string
Outcome from post-call analysis:
INTERESTED, NOT_INTERESTED, CALL_ME_LATER, WRONG_NUMBER, DO_NOT_CALL, or null if not analyzed (yet).object
What the contact asked for.
object
The success criterion that matched.
object
deprecated
Legacy version of
successCriteria, kept for older integrations. description is the criterion description and reached mirrors successCriteria.goalReached.Hang-up reasons
string
Why the call ended:
Durations and recording
number
Seconds the contact spent with the AI agent.
number
Total call length in seconds, including any transferred part.
string
Recording link, when recording is on and the recording is ready. Most complete on
CALL_FINISHED. Links can expire; get a fresh one with GET /agents/{agentId}/calls/{callId}/recording.Conversation
object[]
The conversation, in order. Each item has
role (assistant for the agent, user for the contact) and content.string[]
Titles of the script blocks the conversation passed through, in order.
object[]
Actions that happened during the call. Each item has a
type and data:Other event types are included with
data: null.object
Present when a meeting was booked:
{ "meetingUrl": "…" }.object
Details of a call transfer, when the call was forwarded.
Post-call analysis
object
Answers to the agent’s key questions, keyed by question name. Each entry has:
Read an answer with
summary["Question name"].value.object
Values the AI extracted for variables used in your webhooks and actions, keyed by variable name. Each entry has
value, and may include type and description.object[]
Questions the contact asked that the agent couldn’t answer:
question and optional context. Useful for improving your knowledge base.object[]
Commitments the agent made during the call:
commitment, commitmentType (a short free-text category such as email, call, or follow-up), and optional context.Provider details
object
Telephony identifiers.
accountSid is the Twilio account SID for calls placed through Twilio; callSessionId is the call session ID.Agent configuration fields
The payload also includes the agent’s legacy notification settings:webhookUrl, webhooks, webhookEvents, webhookStatuses, slackUrl, slackEvents, and webhookTriggerEvents. They describe configuration, not the call, and may be removed in the future. Don’t build logic on them; use webhookEvent to know why you received a delivery.
Text and Email payloads
Webhooks for Text and Email agents share the identifiers (id, campaign, account, organizationId, createdAt, summary, unansweredQuestions, promisedActions), with conversation-specific fields:
Common tasks
Related
Webhook events
When each event fires.
Advanced webhooks
Send only the fields you need, in your format.
Statuses and outcomes
How statuses are assigned.
Post-call analysis
Configure the questions behind
summary.