Skip to main content
Webhooks allow you to receive real-time HTTP notifications when call events occur in your application, such as incoming calls, call completions, recordings, and voicemails. For general webhook concepts, see Webhooks.

Creating a Webhook

Subscribe to calling events by creating a webhook for your application. Via Dashboard
  1. Navigate to your application’s Webhooks page
  2. Click “Create Webhook”
  3. Enter your webhook URL
  4. Select the calling events you want to receive
  5. (Optional) Add custom headers for authentication
  6. Save the webhook
Via API Use the POST /v1/webhooks endpoint with calling event types:
Create Calling Webhook

Webhook Payload Structure

Every calling webhook includes these top-level fields:

Call Data

The data.call object is present in all calling webhooks and includes:

Call Lifecycle Events

These events track the progress of a call from initiation to completion.

calls.initiated

Fired when a call is created (outbound) or an incoming call is received (inbound).
calls.initiated payload

calls.ringing

Fired when an outbound call is ringing at the destination.
calls.ringing payload

calls.answered

Fired when the call is answered. Includes answeredAt and answeredBy fields.
calls.answered payload

calls.completed

Fired when a call ends normally. Includes duration, endReason, and endedAt fields.
calls.completed payload

calls.failed

Fired when a call fails. Includes an error object with details about the failure.
calls.failed payload

calls.no_answer

Fired when no one answers the call.
calls.no_answer payload

Participant Events

These events track participants joining and leaving a call.

calls.participant_joined

Fired when a participant joins the call.
calls.participant_joined payload

calls.participant_left

Fired when a participant leaves the call. Includes the participant’s duration and leftAt timestamp.
calls.participant_left payload

Recording and Voicemail Events

calls.recording.completed

Fired when a call recording has finished processing and is available for download.
calls.recording.completed payload

calls.voicemail.received

Fired when a voicemail is left. Includes the voicemail audio URL and transcription (when available).
calls.voicemail.received payload
The transcription field may be null if transcription is not enabled or still processing. You can retrieve the transcription later using the voicemail API endpoints.
The url fields in recording and voicemail webhook payloads are time-limited signed URLs. If you need to access the file later, use the Recordings API to generate a fresh URL.

Event Summary

Handling Calling Webhooks

Here is an example of how to handle calling webhooks in your application:
Handle Calling Webhooks
Use the eventId field to implement idempotency. Track processed event IDs to prevent handling the same event twice if it is delivered more than once.