Skip to main content
This documents the v1 product. It is kept for integrations already running on it. If you are building something new, start with the Quickstart.
Voice Agents uses webhooks to notify your application about the state of every call in real-time. Whether a call connects, fails, or triggers a specific action (like creating an order), your configured callback URL receives an event payload.

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 in event.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 with 200, 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.