Post-call webhooks
Post-call webhooks
Post-call webhooks
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 three types of post-call webhooks:
post_call_transcription): Contains full conversation data including transcripts, analysis results, and metadatapost_call_audio): Contains minimal data with base64-encoded audio of the full conversationcall_initiation_failure): Contains information about failed call initiation attempts including failure reasons and metadataImportant: Post-call transcription webhooks will be migrated to include additional fields for enhanced compatibility and consistency, ensure your endpoint can handle the extra fields.
Post-call transcription webhooks will be updated to match the same format as the GET Conversation response. The webhook data object will include three additional boolean fields:
has_audio: Boolean indicating whether the conversation has any audio availablehas_user_audio: Boolean indicating whether user audio is available for the conversationhas_response_audio: Boolean indicating whether agent response audio is available for the conversationTo ensure your webhook handlers continue working after the migration:
Once the migration is complete:
Post-call webhooks can be enabled for all agents in your workspace through the ElevenAgents 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.
It is important for the listener to validate all incoming webhooks. Webhooks currently support authentication via HMAC signatures. Set up HMAC authentication by:
The JavaScript SDK exposes constructEvent; the Python SDK exposes construct_event with rawBody, sig_header, and secret (these are not named payload / signature in Python). Both verify the signature, validate the timestamp, and parse the JSON payload.
Example webhook handler using FastAPI:
For additional security, you can whitelist the following static egress IPs from which ElevenLabs requests originate:
If you are using a data residency region then the following IPs will be used:
If your infrastructure requires strict IP-based access controls, adding these IPs to your firewall allowlist will ensure you only receive requests from ElevenLabs’ systems.
These static IPs are used across all ElevenLabs services including webhooks and MCP server requests, and will remain consistent.
Using IP whitelisting in combination with HMAC signature validation provides multiple layers of security.
ElevenLabs sends three distinct types of post-call webhooks, each with different data structures:
post_call_transcription)Contains comprehensive conversation data including full transcripts, analysis results, and metadata.
The data object contains:
As of August 15th, 2025, transcription webhooks will include the has_audio, has_user_audio,
and has_response_audio fields to match the GET Conversation
response format exactly. Prior to this date, these fields
are not included in webhook payloads.
post_call_audio)Contains minimal data with the full conversation audio as base64-encoded MP3.
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.
call_initiation_failure)Contains information about telephony call initiation attempts, including failure reasons and telephony-provider metadata.
Call initiation failure webhook events are sent when a call fails to initiate due to connection errors, user declining the call, or user not picking up. If a call goes to voicemail or is picked up by an automated service, no call initiation failure webhook is sent as the call was successfully initiated.
The data object contains:
The metadata object structure varies depending on whether the outbound call was made via Twilio or via SIP trunking. The object includes a type field that distinguishes between the two, and a body field containing provider-specific details.
SIP metadata (type: "sip"):
The body object for SIP metadata contains:
Twilio metadata (type: "twilio"):
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 ElevenAgents settings) and at the agent level (in individual agent webhook overrides).
Audio webhooks are delivered as streaming HTTP requests with the transfer-encoding: chunked header to handle large audio files efficiently.
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.
Post-call webhooks enable you to build automated workflows that trigger immediately after a call ends. Here are some practical applications:
Update your customer relationship management system with conversation data as soon as a call completes:
Maintain conversation context across multiple interactions by storing and retrieving state: