Post-call webhooks
Overview
Post-call Webhooks allow you to receive detailed information about a call after analysis is complete. When enabled, ElevenLabs will send a POST request to your specified endpoint with comprehensive call data.
ElevenLabs supports two types of post-call webhooks:
- Transcription webhooks (
post_call_transcription
): Contains full conversation data including transcripts, analysis results, and metadata - Audio webhooks (
post_call_audio
): Contains minimal data with base64-encoded audio of the full conversation
The webhook data structure differs from the Conversation API GET endpoint response. Webhooks use a specialized data model optimized for event delivery.
Enabling post-call webhooks
Post-call webhooks can be enabled for all agents in your workspace through the Conversational AI settings page.
Post call webhooks must return a 200 status code to be considered successful. Webhooks that repeatedly fail are auto disabled if there are 10 or more consecutive failures and the last successful delivery was more than 7 days ago or has never been successfully delivered.
Authentication
It is important for the listener to validate all incoming webhooks. Webhooks currently support authentication via HMAC signatures. Set up HMAC authentication by:
- Securely storing the shared secret generated upon creation of the webhook
- Verifying the ElevenLabs-Signature header in your endpoint using the shared secret
The ElevenLabs-Signature takes the following format:
The hash is equivalent to the hex encoded sha256 HMAC signature of timestamp.request_body
. Both the hash and timestamp should be validated, an example is shown here:
Python
JavaScript
Example python webhook handler using FastAPI:
IP whitelisting
For additional security, you can whitelist the following static egress IPs from which all ElevenLabs webhook requests originate:
If your infrastructure requires strict IP-based access controls, adding these IPs to your firewall allowlist will ensure you only receive webhook requests from ElevenLabs’ systems.
These static IPs are used across all ElevenLabs webhook services and will remain consistent. Using IP whitelisting in combination with HMAC signature validation provides multiple layers of security.
Webhook response structure
ElevenLabs sends two distinct types of post-call webhooks, each with different data structures:
Transcription webhooks (post_call_transcription
)
Contains comprehensive conversation data including full transcripts, analysis results, and metadata.
Top-level fields
Data object structure
The data
object contains:
Transcription webhooks do NOT include the has_audio
, has_user_audio
, or has_response_audio
fields that are available in the GET Conversation
response, but the other information is the same.
Audio webhooks (post_call_audio
)
Contains minimal data with the full conversation audio as base64-encoded MP3.
Top-level fields
Data object structure
The data
object contains only:
Audio webhooks contain only the three fields listed above. They do NOT include transcript data, metadata, analysis results, or any other conversation details.
Example webhook payloads
Transcription webhook example
Audio webhook example
Audio webhook delivery
Audio webhooks are delivered separately from transcription webhooks and contain only the essential fields needed to identify the conversation along with the base64-encoded audio data.
Audio webhooks can be enabled or disabled using the “Send audio data” toggle in your webhook settings. This setting can be configured at both the workspace level (in the Conversational AI settings) and at the agent level (in individual agent webhook overrides).
Streaming delivery
Audio webhooks are delivered as streaming HTTP requests with the transfer-encoding: chunked
header to handle large audio files efficiently.
Processing audio webhooks
Since audio webhooks are delivered via chunked transfer encoding, you’ll need to handle streaming data properly:
Audio webhooks can be large files, so ensure your webhook endpoint can handle streaming requests and has sufficient memory/storage capacity. The audio is delivered in MP3 format.
Use cases
Automated call follow-ups
Post-call webhooks enable you to build automated workflows that trigger immediately after a call ends. Here are some practical applications:
CRM integration
Update your customer relationship management system with conversation data as soon as a call completes:
Stateful conversations
Maintain conversation context across multiple interactions by storing and retrieving state:
- When a call starts, pass in your user id as a dynamic variable.
- When a call ends, set up your webhook endpoint to store conversation data in your database, based on the extracted user id from the dynamic_variables.
- When the user calls again, you can retrieve this context and pass it to the new conversation into a {{previous_topics}} dynamic variable.
- This creates a seamless experience where the agent “remembers” previous interactions