Asynchronous Speech to Text
How-to guide · Assumes you have completed the Speech to Text quickstart.
Overview
Webhooks allow you to receive automatic notifications when your Speech to Text transcription tasks are completed, eliminating the need to continuously poll the API for status updates. This is particularly useful for long-running transcription jobs or when processing large volumes of audio files.
When a transcription is completed, ElevenLabs will send a POST request to your specified webhook URL with the transcription results, including the transcript text, language detection, and any metadata.
Using webhooks
This guide assumes you have set up your API key and SDK. Complete the quickstart first if you haven’t.
Create or edit a webhook
In the ElevenLabs dashboard, go to Developers > Webhooks. Click Create webhook, or edit an existing webhook.

Configure the webhook with:
- Name: A descriptive name for your webhook
- Callback URL: Your publicly accessible HTTPS endpoint
- Webhook Auth Method: Either
HMACorOAuth. It is up to the client to implement the verification mechanism. ElevenLabs sends headers that allow for verification but we do not enforce it. - Events: Select Transcription completed.
Webhook payload
When a transcription is completed, your webhook endpoint will receive a POST request with the transcription and webhook data:
Please refer to the Speech-to-text API reference to learn about the details of the response structure.
If the request included a transcript_edit instruction, the transcription object also contains an edited_transcript field with the edited text.
If the transcription fails, your endpoint receives a webhook_error event instead. It has no data object: it carries a top-level request_id (the same id returned when the request was accepted), an error_message and the request’s webhook_metadata.
Implementing your webhook endpoint
Here’s an example of how to implement a webhook endpoint to handle incoming notifications:
Security considerations
Signature verification
Always verify webhook signatures to ensure requests came from ElevenLabs.
HTTPS requirement
Webhook URLs must use HTTPS to ensure secure transmission of transcription data.
Rate limiting
Implement rate limiting on your webhook endpoint to prevent abuse:
Failure responses
Return a 2xx status code to acknowledge the webhook.
By default, Speech to Text transcription webhooks are delivered once. Every non-2xx response counts as a failed delivery, and repeated failures auto-disable the webhook.
If you turn on retries for the webhook, failed deliveries (5xx, 408, 429 or connection errors) are retried up to 5 more times, roughly 30 seconds, 2 minutes, 8 minutes, 30 minutes and 30 minutes after the previous attempt. Other 4xx responses are not retried. Every attempt for the same event carries the same ElevenLabs-Webhook-Delivery-Id header, so your handler can ignore duplicates.
Requests made with enable_logging set to false (zero retention mode) get up to 2 quick retries, 5 seconds and 30 seconds after the previous attempt, when retries are turned on. The transcript is never stored.
If a delivery still fails, fetch the result with Get transcript using the transcription_id returned when the request was accepted. Transcripts are not stored for requests made with enable_logging set to false.
Testing webhooks
Local development
For local testing, use tools like ngrok to expose your local server:
Use the provided HTTPS URL as your webhook endpoint during development.
Webhook testing
You can test your webhook implementation by making a transcription request and monitoring your endpoint: