This documents the v1 product. It is kept for integrations already running
on it. If you are building something new, start with the
Quickstart.
Call Lifecycle
Every call progresses through a specific lifecycle. At each stage, an event is fired.Lifecycle Events
These events track the normal progression of a successful call.Failure & Retry Events
If a call cannot be established, one of these events will fire. The system may automatically retry based on your campaign settings.Other Events
After all retry attempts are exhausted,
call.lifecycle-ended is sent to signal that no further attempts will be made for this specific call task.Webhook Payload Structure
Every webhook event shares a common envelope structure.Key Fields
metadata: The custom JSON object you passed when initiating the call. This is passed back in every event, allowing you to link calls to your internal records (e.g.,userId,orderId).event.type: The specific event name (e.g.,call.in-progress,end-of-call).event.data: The payload specific to the event.
Special Payloads
Some events contain additional data inevent.data.
end-of-call
Contains the AI analysis, summary, and credit usage.
call.lifecycle-ended
Contains a report of all attempts.
Actions
Actions are special events triggered by the AI during the conversation when a specific task needs to be performed on your end, such as creating an order or sending a message.create_order
Fires when the AI determines the customer wants to place an order and has provided all necessary details.
send_whatsapp
Fires when the AI cannot complete a task (like creating an order) due to missing info, and triggers a fallback message via WhatsApp.
Handling Webhooks
Here is an example of how to handle these events in a Node.js Express application.Security
To ensure that the webhooks you receive are genuinely from Voice Agents, you should verify the signature included in the headers. See Webhook Signature Verification for implementation details.The same thing in v2
Most of the shape above survives — one event per state change, an envelope you acknowledge with200, a signature you verify. The names changed, the retry
and action machinery did not carry over, and the analysis is not built yet.
metadata works differently. v1 echoes your object back on every event. v2
hands you the call_id in the 202 response to
POST /v2/calls — store that against your own record
before the first event can arrive, and correlate on it. variables you pass at
create are used in the prompt; they do not come back on the event.
Full reference: v2 Webhooks.