Post-call webhooks
Get notified when calls end and analysis is complete through 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, including transcripts, analysis results, and metadata. The data that is returned is the same data that is returned from the Conversation API.
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:
Webhook response structure
The webhook payload contains the same data you would receive from a GET request to the Conversation API endpoint, with additional fields for event timing and type information.
Top-level fields
Example webhook payload
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