ElevenLabs Eleven v3 API, ElevenLabs Dubbing API, ElevenLabs Music API, ElevenLabs Multilingual v2 API: Pricing, Documentation
by ElevenLabs
ElevenLabs Eleven v3 API, developers can generate lifelike speech in multiple languages, clone voices from short audio samples, and create original music tracks. The API powers applications ranging from audiobook narration and podcast production to real-time voice assistants and multilingual content localization with human-quality audio output.

Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
ElevenLabs Eleven v3 TTS API Documentation
https://gateway.pixazo.ai/elevenlabs-eleven-v3-tts/v1/elevenlabs-eleven-v3-tts-request
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
ElevenLabs Eleven v3 TTS generate request
Request Code
POST https://gateway.pixazo.ai/elevenlabs-eleven-v3-tts/v1/elevenlabs-eleven-v3-tts-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"text": "[excited] Welcome to the future of voice. [whispers] Listen closely. [laughs] This is amazing.",
"voice": "Rachel",
"stability": 0.5,
"timestamps": false,
"apply_text_normalization": "auto"
}
import requests
url = "https://gateway.pixazo.ai/elevenlabs-eleven-v3-tts/v1/elevenlabs-eleven-v3-tts-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"text": "[excited] Welcome to the future of voice. [whispers] Listen closely. [laughs] This is amazing.",
"voice": "Rachel",
"stability": 0.5,
"timestamps": false,
"apply_text_normalization": "auto"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/elevenlabs-eleven-v3-tts/v1/elevenlabs-eleven-v3-tts-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"text": "[excited] Welcome to the future of voice. [whispers] Listen closely. [laughs] This is amazing.",
"voice": "Rachel",
"stability": 0.5,
"timestamps": false,
"apply_text_normalization": "auto"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data));
curl -X POST "https://gateway.pixazo.ai/elevenlabs-eleven-v3-tts/v1/elevenlabs-eleven-v3-tts-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"text": "[excited] Welcome to the future of voice. [whispers] Listen closely. [laughs] This is amazing.",
"voice": "Rachel",
"stability": 0.5,
"timestamps": false,
"apply_text_normalization": "auto"
}'
Output
{
"request_id": "elevenlabs-eleven-v3-tts_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/elevenlabs-eleven-v3-tts_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - ElevenLabs Eleven v3 TTS generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| text | Yes | string | — | 1–5000 characters | Text to convert to speech (1–5000 characters). Supports inline emotion tags such as [whispers], [laughs], [excited]. |
| voice | No | string | "Rachel" | Any ElevenLabs voice name or voice ID | Voice used for speech generation. Accepts a voice name or an ElevenLabs voice ID. Voices supported by Eleven v3 include: Rachel, Aria, Roger, Sarah, Laura, Charlie, George, Callum, River, Liam, Charlotte, Alice, Matilda, Will, Jessica, Eric, Chris, Brian, Daniel, Lily and Bill. |
| stability | No | float | 0.5 | 0.0–1.0 | Voice stability (0.0–1.0). Lower values (e.g., 0.2) produce more expressive, variable speech; higher values (e.g., 0.8) produce more consistent, steady speech. |
| timestamps | No | boolean | false | — | If true, returns an array of per-word timestamps alongside the audio output. |
| language_code | No | string | — | — | ISO 639-1 language code (e.g., "en", "es", "ja") to enforce a specific spoken language. Overrides auto-detection. |
| apply_text_normalization | No | enum | "auto" | "auto", "on", "off" | Whether to apply text normalization rules. Allowed values: auto, on, off. auto applies normalization only when beneficial; on forces it; off disables it entirely. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| audio | 1 | MP3, WAV | Reference voice. |
Example Request
{
"text": "[excited] Welcome to the future of voice. [whispers] Listen closely. [laughs] This is amazing.",
"voice": "Rachel",
"stability": 0.5,
"timestamps": false,
"apply_text_normalization": "auto"
}
Response
{
"request_id": "elevenlabs-eleven-v3-tts_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/elevenlabs-eleven-v3-tts_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_API_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'elevenlabs-eleven-v3-tts' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "elevenlabs-eleven-v3-tts_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "elevenlabs-eleven-v3-tts",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/elevenlabs-eleven-v3-tts_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "elevenlabs-eleven-v3-tts_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "elevenlabs-eleven-v3-tts",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/elevenlabs-eleven-v3-tts_019dxxxx/output.mp3"],
"media_type": "audio/mpeg"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
ElevenLabs Eleven v3 TTS API Pricing
ElevenLabs Music API Documentation
https://gateway.pixazo.ai/elevenlabs-music/v1/elevenlabs-music-request
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
ElevenLabs Music generate request
Request Code
POST https://gateway.pixazo.ai/elevenlabs-music/v1/elevenlabs-music-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "Uplifting indie folk track with acoustic guitar, soft piano, and warm harmonies",
"music_length_ms": 30000,
"force_instrumental": false,
"respect_sections_durations": true,
"output_format": "mp3_44100_128"
}
import requests
url = "https://gateway.pixazo.ai/elevenlabs-music/v1/elevenlabs-music-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "Uplifting indie folk track with acoustic guitar, soft piano, and warm harmonies",
"music_length_ms": 30000,
"force_instrumental": false,
"respect_sections_durations": true,
"output_format": "mp3_44100_128"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/elevenlabs-music/v1/elevenlabs-music-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
};
const data = {
"prompt": "Uplifting indie folk track with acoustic guitar, soft piano, and warm harmonies",
"music_length_ms": 30000,
"force_instrumental": false,
"respect_sections_durations": true,
"output_format": "mp3_44100_128"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data));
curl -X POST "https://gateway.pixazo.ai/elevenlabs-music/v1/elevenlabs-music-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "Uplifting indie folk track with acoustic guitar, soft piano, and warm harmonies",
"music_length_ms": 30000,
"force_instrumental": false,
"respect_sections_durations": true,
"output_format": "mp3_44100_128"
}'
Output
{
"request_id": "elevenlabs-music_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/elevenlabs-music_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - ElevenLabs Music generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Conditional | string | — | — | Text prompt describing the music to generate. Example: "Uplifting indie folk track with acoustic guitar, soft piano, and warm harmonies". Provide either prompt or composition_plan: the two cannot be used together, and at least one must be supplied. |
| composition_plan | Conditional | object | — | — | Structured composition plan used instead of prompt for fine-grained control. Contains positive_global_styles, negative_global_styles, and sections. Each section requires section_name (1–100 characters), positive_local_styles, negative_local_styles, duration_ms (3000–120000), and lines (max 30 lines, up to 200 characters each). When supplied, the track length is the sum of the section durations, so music_length_ms is ignored. |
| music_length_ms | No | integer | — | 3000–600000 | Length of the generated track in milliseconds (3 seconds to 10 minutes). Used only with prompt and ignored when composition_plan is supplied. If omitted, the model chooses a suitable length. |
| force_instrumental | No | boolean | false | — | If true, guarantees an instrumental track with no vocals. Applies to prompt-based generation. |
| respect_sections_durations | No | boolean | true | — | If true, enforces strict adherence to the duration_ms of each section in composition_plan; if false, the model may vary section timing. Applies only when composition_plan is supplied. |
| output_format | No | enum | "mp3_44100_128" | mp3_22050_32, mp3_44100_32, mp3_44100_64, mp3_44100_96, mp3_44100_128, mp3_44100_192, pcm_8000, pcm_16000, pcm_22050, pcm_24000, pcm_44100, pcm_48000, ulaw_8000, alaw_8000, opus_48000_32, opus_48000_64, opus_48000_96, opus_48000_128, opus_48000_192 | Audio codec, sample rate, and bitrate. |
Example Request
{
"prompt": "Uplifting indie folk track with acoustic guitar, soft piano, and warm harmonies",
"music_length_ms": 30000,
"force_instrumental": false,
"respect_sections_durations": true,
"output_format": "mp3_44100_128"
}
Response
{
"request_id": "elevenlabs-music_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/elevenlabs-music_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_API_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'elevenlabs-music' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "elevenlabs-music_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "elevenlabs-music",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/elevenlabs-music_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "elevenlabs-music_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "elevenlabs-music",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/elevenlabs-music_019dxxxx/output.mp3"],
"media_type": "audio/mpeg"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
ElevenLabs Music API Pricing
ElevenLabs Dubbing API Documentation
Dub a video or audio file into another language while preserving each speaker's voice. Video sources come back as dubbed video with the picture intact; audio sources come back as audio. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED.
POST https://gateway.pixazo.ai/elevenlabs-dubbing/v1/dubAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Dubbing - ElevenLabs Dubbing
Request Code
POST https://gateway.pixazo.ai/elevenlabs-dubbing/v1/dub
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"source_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg",
"target_lang": "de",
"source_lang": "en",
"name": "q3-webinar-de",
"num_speakers": 2,
"start_time": 0,
"end_time": 120,
"drop_background_audio": true,
"highest_resolution": true
}import requests
url = "https://gateway.pixazo.ai/elevenlabs-dubbing/v1/dub"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"source_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg",
"target_lang": "de",
"source_lang": "en",
"name": "q3-webinar-de",
"num_speakers": 2,
"start_time": 0,
"end_time": 120,
"drop_background_audio": True,
"highest_resolution": True
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/elevenlabs-dubbing/v1/dub", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"source_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg",
"target_lang": "de",
"source_lang": "en",
"name": "q3-webinar-de",
"num_speakers": 2,
"start_time": 0,
"end_time": 120,
"drop_background_audio": true,
"highest_resolution": true
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/elevenlabs-dubbing/v1/dub' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"source_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg", "target_lang": "de", "source_lang": "en", "name": "q3-webinar-de", "num_speakers": 2, "start_time": 0, "end_time": 120, "drop_background_audio": true, "highest_resolution": true}'Output
{
"request_id": "elevenlabs-dubbing_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/elevenlabs-dubbing_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.
Webhook Headers
| Header | Required | Description |
|---|---|---|
| X-Webhook-URL | To enable | HTTPS URL to receive the Webhook callback. Must respond 2xx. |
| X-Webhook-Mode | No | terminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks). |
Example: enable Webhook
curl -X POST 'https://gateway.pixazo.ai/elevenlabs-dubbing/v1/dub' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook' \
-H 'X-Webhook-Mode: terminal' \
--data-raw '{"source_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg", "target_lang": "de"}'Callback Payload (success)
{
"request_id": "elevenlabs-dubbing_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "elevenlabs-dubbing",
"output": {
"media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/elevenlabs-dubbing/019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mp4",
"media_type": "video/mp4"
},
"duration": 15.86
}Failure callback shape
{
"request_id": "elevenlabs-dubbing_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "elevenlabs-dubbing",
"error": "Couldn't extract audio from the downloaded file.",
"output": null
}Delivery semantics
- terminal mode (default): one Webhook callback when the request is COMPLETED or ERROR.
- sync mode: a Webhook callback on every poll.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200 OKwithin a few seconds; the Webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
source_url | Yes | string (uri) | — | public http(s); max 600 seconds of media | Public URL of the video or audio file to dub. Must be reachable without authentication and must contain an audible speech track. These aliases are also accepted: video_url, audio_url, media_url, url. |
target_lang | Yes | string | — | ISO-639-1 or ISO-639-3 code; 86 languages | Language to dub into, for example es, fr, de, hi, ja, pt. Use the base language tag — region-qualified tags such as pt-BR or es-MX are not supported. Alias: target_language. |
source_lang | No | string | auto | ISO-639-1 or ISO-639-3 code, or auto | Language of the source media, as a base language tag. auto detects it. Alias: source_language. |
name | No | string | — | truncated to 200 characters | Optional name for the dubbing job, useful for your own reconciliation. Longer values are truncated to the first 200 characters. |
num_speakers | No | integer | 0 | 0 – 32 | Number of distinct speakers in the source. 0 detects the count automatically. |
start_time | No | integer | — | 0 – 86400 (seconds) | Dub only from this offset into the source media, in seconds. |
end_time | No | integer | — | 0 – 86400 (seconds), must exceed start_time | Dub only up to this offset into the source media, in seconds. |
target_accent | No | string | — | free text; truncated to 200 characters | Experimental. Preferred accent for the dubbed voices; also informs the dialect chosen during translation. |
highest_resolution | No | boolean | false | true, false | Render the dubbed video at the highest resolution available. |
drop_background_audio | No | boolean | false | true, false | Remove background audio. Improves quality for speeches and monologues. |
use_profanity_filter | No | boolean | — | true, false | Beta. Censors profanities in the transcript as [censored]. |
disable_voice_cloning | No | boolean | false | true, false | Use a similar voice from the ElevenLabs Voice Library instead of cloning the speaker's own voice. Library voices count against your workspace voice limit, and the dub fails if no slot is free. |
Minimum request
Only source_url and target_lang are required. Everything else has a working default.
{
"source_url": "https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3",
"target_lang": "es"
}Source Media & Languages
Source requirements
source_urlmust be a publichttp(s)URL reachable without authentication — no signed-header or private-bucket URLs.- The file must contain an audible speech track. Silent video, music-only audio and files whose audio stream cannot be read are rejected.
- A video source returns dubbed video with the original picture intact (
video/mp4). An audio source returns audio (audio/mpeg).
Limits
| Limit | Value | Behaviour when exceeded |
|---|---|---|
| Maximum source length | 600 seconds (10 minutes) | Submit still returns 202. The source is measured after the request is queued and before anything is sent to ElevenLabs, so an over-length source ends the job there: the next status poll returns status: "ERROR" with Source media is <N>s long; this endpoint accepts up to 600s. Nothing is charged — the hold on your balance is released. |
| Concurrent dubbing jobs | 3 | Submit further jobs only after one finishes; keep no more than three in flight. |
To dub media longer than 600 seconds, split it into segments and submit each segment separately — or use start_time and end_time to dub only the portion you need.
The length check is best-effort: it depends on reading the duration out of the file at source_url. If that duration cannot be read, the job is not blocked — it is dubbed and billed normally. Keep your sources within 600 seconds rather than relying on the check to stop them.
Processing time
Processing time scales with media length. Measured: about 12 seconds for 15 seconds of audio, and about 22 seconds for 16 seconds of video.
Supported languages
This endpoint runs ElevenLabs dubbing_v1, which supports the 86 languages below. Give the code in target_lang (and optionally in source_lang). Use the base language tag — region-qualified variants such as pt-BR, es-MX or en-GB are not supported:
| Code | Language | Code | Language |
|---|---|---|---|
af | Afrikaans | ar | Arabic |
hy | Armenian | as | Assamese |
ast | Asturian | az | Azerbaijani |
be | Belarusian | bn | Bengali |
bs | Bosnian | bg | Bulgarian |
my | Burmese | yue | Cantonese |
ca | Catalan | ceb | Cebuano |
ny | Chichewa | zh | Chinese |
hr | Croatian | cs | Czech |
da | Danish | nl | Dutch |
en | English | et | Estonian |
fil | Filipino | fi | Finnish |
fr | French | gl | Galician |
ka | Georgian | de | German |
el | Greek | gu | Gujarati |
ha | Hausa | he | Hebrew |
hi | Hindi | hu | Hungarian |
is | Icelandic | id | Indonesian |
ga | Irish | it | Italian |
ja | Japanese | jv | Javanese |
kn | Kannada | kk | Kazakh |
ko | Korean | ky | Kyrgyz |
lv | Latvian | ln | Lingala |
lt | Lithuanian | lb | Luxembourgish |
mk | Macedonian | ms | Malay |
ml | Malayalam | mt | Maltese |
mi | Maori | mr | Marathi |
mn | Mongolian | ne | Nepali |
no | Norwegian | oc | Occitan |
or | Odia | ps | Pashto |
fa | Persian | pl | Polish |
pt | Portuguese | pa | Punjabi |
ro | Romanian | ru | Russian |
sr | Serbian | sd | Sindhi |
sk | Slovak | sl | Slovenian |
so | Somali | es | Spanish |
sw | Swahili | sv | Swedish |
tl | Tagalog | tg | Tajik |
ta | Tamil | te | Telugu |
th | Thai | tr | Turkish |
uk | Ukrainian | ur | Urdu |
uz | Uzbek | vi | Vietnamese |
cy | Welsh | yo | Yoruba |
Example Request
{
"source_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg",
"target_lang": "de",
"source_lang": "en",
"name": "q3-webinar-de",
"num_speakers": 2,
"start_time": 0,
"end_time": 120,
"drop_background_audio": true,
"highest_resolution": true
}Example Response
{
"request_id": "elevenlabs-dubbing_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/elevenlabs-dubbing_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable Webhook callbacks (see Webhook section). |
| X-Webhook-Mode | No | terminal (default) or sync. |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — invalid or missing parameters: a missing or non-http(s) source_url, a missing or malformed target_lang, an end_time that is not greater than start_time, or a value outside its allowed range. Nothing is charged. Source media longer than 600 seconds is not a 400 — it is accepted here and fails on the status poll instead. |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 403 | Forbidden. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Error Responses
{
"request_id": "elevenlabs-dubbing_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "elevenlabs-dubbing",
"error": "Couldn't extract audio from the downloaded file.",
"output": null
}A failed dub is reported via the status endpoint (or Webhook) with status: "ERROR", an error message and output: null. The messages you are most likely to see:
| Cause | Message |
|---|---|
| Source URL unreachable, or its audio/video metadata cannot be read | URL 'https://…/does-not-exist.mp4' is invalid or audio/video metadata cannot be extracted from it. |
| Source has no audible speech track | Couldn't extract audio from the downloaded file. |
Source media longer than the 600-second limit. Submit returns 202; the job then fails on the first status poll, before anything is sent to ElevenLabs, and nothing is charged | Source media is 667s long; this endpoint accepts up to 600s. |
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or FAILED/ERROR).
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}curl 'https://gateway.pixazo.ai/v2/requests/status/elevenlabs-dubbing_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response (video source)
{
"request_id": "elevenlabs-dubbing_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "elevenlabs-dubbing",
"output": {
"media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/elevenlabs-dubbing/019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mp4",
"media_type": "video/mp4"
},
"duration": 15.86
}An audio source returns the same envelope with media_type of audio/mpeg and an audio media_url. output.media_url is a Pixazo-hosted URL. The top-level duration is the length of the source media in seconds — it is what the per-minute charge is computed from.
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR. |
| model_id | string | The model that handled the request. |
| output.media_url | string | Pixazo-hosted URL of the dubbed media. |
| output.media_type | string | MIME type of the output — video/mp4 for video sources, audio/mpeg for audio sources. |
| duration | number | Length of the source media in seconds. The per-minute charge is computed from this value. |
| polling_url | string | Status URL for this request. |
| error | string | Error message when status is FAILED/ERROR; output is null in that case. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or FAILED/ERROR (failure).
Typical Workflow
POST https://gateway.pixazo.ai/elevenlabs-dubbing/v1/dubwithsource_urlandtarget_lang; readrequest_idfrom the202response.- Poll
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}— or supplyX-Webhook-URLon submit and skip polling. - When
statusisCOMPLETED, downloadoutput.media_url. - Keep no more than 3 dubbing jobs in flight at once.
Pricing
Billed at $0.50 per minute of source media, rounded up to the next whole minute. Billing is measured on the source length, not on the length of the output, and a 15-second clip therefore bills one full minute.
| Source media | Billable minutes | Cost |
|---|---|---|
| 15 seconds | 1 | $0.50 |
| 60 seconds | 1 | $0.50 |
| 90 seconds | 2 | $1.00 |
| 600 seconds (the maximum accepted) | 10 | $5.00 |
Media longer than 600 seconds is rejected before anything is sent to ElevenLabs — the job ends as ERROR on the first status poll and nothing is charged — so the most expensive possible single request is $5.00.
ElevenLabs Dubbing API Pricing
ElevenLabs Turbo v2.5 API Documentation
Low-latency ElevenLabs generation across 32 languages, at half the price of Multilingual v2 — the better default unless you need maximum fidelity. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the audio.
POST https://gateway.pixazo.ai/elevenlabs-turbo-v2-5/v1/text-to-speechAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Text to Speech - ElevenLabs Turbo v2.5
Request Code
POST https://gateway.pixazo.ai/elevenlabs-turbo-v2-5/v1/text-to-speech
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"text": "Hello from Pixazo. This is a text to speech demo.",
"voice_id": "JBFqnCBsd6RMkjVDRZzb"
}import requests
url = "https://gateway.pixazo.ai/elevenlabs-turbo-v2-5/v1/text-to-speech"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"text": "Hello from Pixazo. This is a text to speech demo.",
"voice_id": "JBFqnCBsd6RMkjVDRZzb"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/elevenlabs-turbo-v2-5/v1/text-to-speech", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"text": "Hello from Pixazo. This is a text to speech demo.",
"voice_id": "JBFqnCBsd6RMkjVDRZzb"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/elevenlabs-turbo-v2-5/v1/text-to-speech' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"text": "Hello from Pixazo. This is a text to speech demo.", "voice_id": "JBFqnCBsd6RMkjVDRZzb"}'Output
{
"request_id": "elevenlabs-turbo-v2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/elevenlabs-turbo-v2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.
| Header | Required | Description |
|---|---|---|
| X-Webhook-URL | To enable | HTTPS URL to receive the Webhook callback. |
| X-Webhook-Mode | No | terminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks). |
Example: enable Webhook
curl -X POST 'https://gateway.pixazo.ai/elevenlabs-turbo-v2-5/v1/text-to-speech' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook' \
--data-raw '{"text": "Hello from Pixazo. This is a text to speech demo.", "voice_id": "JBFqnCBsd6RMkjVDRZzb"}'Callback Payload (success)
{
"request_id": "elevenlabs-turbo-v2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "elevenlabs-turbo-v2-5",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.mp3"
],
"media_type": "audio/mpeg"
},
"created_at": "2026-08-01T09:14:16.102Z",
"completed_at": "2026-08-01T09:14:22.870Z"
}Failure callback shape
{
"request_id": "elevenlabs-turbo-v2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "elevenlabs-turbo-v2-5",
"error": "Description of the failure"
}Delivery semantics
- terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
- sync mode: a Webhook callback on each status change.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200within a few seconds; the Webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
text | Yes | string | — | up to 10,000 characters | The text to speak. |
voice_id | Yes | string | — | an ElevenLabs voice id | Which ElevenLabs voice to use, e.g. JBFqnCBsd6RMkjVDRZzb. Browse voices in the ElevenLabs voice library. |
output_format | No | string | mp3_44100_128 | mp3_<rate>_<kbps> or opus_48000_<kbps> | Codec, sample rate and bitrate in one value. Opus formats are returned as .ogg. |
language_code | No | string | auto | ISO 639-1, e.g. en | Force a language instead of letting the model infer it. |
voice_settings | No | object | — | stability, similarity, style | Fine-grained voice controls passed through to ElevenLabs. |
seed | No | integer | — | 0 – 4294967295 | Makes generation repeatable for identical input. |
Voices
32 languages. Use any voice id from your ElevenLabs voice library.
Example Request
{
"text": "Hello from Pixazo. This is a text to speech demo.",
"voice_id": "JBFqnCBsd6RMkjVDRZzb"
}Example Response
{
"request_id": "elevenlabs-turbo-v2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/elevenlabs-turbo-v2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable Webhook callbacks (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — a missing or out-of-range parameter. The message names the field. |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or ERROR), then download output.media_url.
curl 'https://gateway.pixazo.ai/v2/requests/status/elevenlabs-turbo-v2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "elevenlabs-turbo-v2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "elevenlabs-turbo-v2-5",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.mp3"
],
"media_type": "audio/mpeg"
},
"created_at": "2026-08-01T09:14:16.102Z",
"completed_at": "2026-08-01T09:14:22.870Z"
}Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED or ERROR. |
| model_id | string | The model that handled the request. |
| output.media_url | array | URL of the generated audio file. |
| output.media_type | string | MIME type of the audio. |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| error | string | Error message when status is ERROR. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or ERROR (failure).
Pricing
Billed at $0.05 per 1,000 characters of input text, rounded up to the next whole 1,000. You are charged for the text you submit, not the length of the audio produced.
| Input text | Billed blocks | Cost |
|---|---|---|
| A short sentence (~50 characters) | 1 | $0.05 |
| A paragraph (~800 characters) | 1 | $0.05 |
| A 3,000-character article | 3 | $0.15 |
| 10,000 characters | 10 | $0.5 |
Failed requests are not billed.
ElevenLabs Turbo v2.5 API Pricing
ElevenLabs Multilingual v2 API Documentation
ElevenLabs' quality-first model. The most natural delivery of the ElevenLabs line, at the cost of higher latency. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED, then download the audio.
POST https://gateway.pixazo.ai/elevenlabs-multilingual-v2/v1/text-to-speechAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Text to Speech - ElevenLabs Multilingual v2
Request Code
POST https://gateway.pixazo.ai/elevenlabs-multilingual-v2/v1/text-to-speech
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"text": "Hello from Pixazo. This is a text to speech demo.",
"voice_id": "JBFqnCBsd6RMkjVDRZzb"
}import requests
url = "https://gateway.pixazo.ai/elevenlabs-multilingual-v2/v1/text-to-speech"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"text": "Hello from Pixazo. This is a text to speech demo.",
"voice_id": "JBFqnCBsd6RMkjVDRZzb"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/elevenlabs-multilingual-v2/v1/text-to-speech", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"text": "Hello from Pixazo. This is a text to speech demo.",
"voice_id": "JBFqnCBsd6RMkjVDRZzb"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/elevenlabs-multilingual-v2/v1/text-to-speech' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"text": "Hello from Pixazo. This is a text to speech demo.", "voice_id": "JBFqnCBsd6RMkjVDRZzb"}'Output
{
"request_id": "elevenlabs-multilingual-v2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/elevenlabs-multilingual-v2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a Webhook callback when the request reaches a terminal state. Provide a Webhook URL via header on the submit request.
| Header | Required | Description |
|---|---|---|
| X-Webhook-URL | To enable | HTTPS URL to receive the Webhook callback. |
| X-Webhook-Mode | No | terminal (default, one callback on COMPLETED/ERROR) or sync (per-poll callbacks). |
Example: enable Webhook
curl -X POST 'https://gateway.pixazo.ai/elevenlabs-multilingual-v2/v1/text-to-speech' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook' \
--data-raw '{"text": "Hello from Pixazo. This is a text to speech demo.", "voice_id": "JBFqnCBsd6RMkjVDRZzb"}'Callback Payload (success)
{
"request_id": "elevenlabs-multilingual-v2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "elevenlabs-multilingual-v2",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.mp3"
],
"media_type": "audio/mpeg"
},
"created_at": "2026-08-01T09:14:16.102Z",
"completed_at": "2026-08-01T09:14:22.870Z"
}Failure callback shape
{
"request_id": "elevenlabs-multilingual-v2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "elevenlabs-multilingual-v2",
"error": "Description of the failure"
}Delivery semantics
- terminal mode: one Webhook callback when the request is COMPLETED or ERROR.
- sync mode: a Webhook callback on each status change.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200within a few seconds; the Webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
text | Yes | string | — | up to 10,000 characters | The text to speak. |
voice_id | Yes | string | — | an ElevenLabs voice id | Which ElevenLabs voice to use, e.g. JBFqnCBsd6RMkjVDRZzb. Browse voices in the ElevenLabs voice library. |
output_format | No | string | mp3_44100_128 | mp3_<rate>_<kbps> or opus_48000_<kbps> | Codec, sample rate and bitrate in one value. Opus formats are returned as .ogg. |
language_code | No | string | auto | ISO 639-1, e.g. en | Force a language instead of letting the model infer it. |
voice_settings | No | object | — | stability, similarity, style | Fine-grained voice controls passed through to ElevenLabs. |
seed | No | integer | — | 0 – 4294967295 | Makes generation repeatable for identical input. |
Voices
29 languages. Use any voice id from your ElevenLabs voice library.
Example Request
{
"text": "Hello from Pixazo. This is a text to speech demo.",
"voice_id": "JBFqnCBsd6RMkjVDRZzb"
}Example Response
{
"request_id": "elevenlabs-multilingual-v2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/elevenlabs-multilingual-v2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable Webhook callbacks (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — a missing or out-of-range parameter. The message names the field. |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or ERROR), then download output.media_url.
curl 'https://gateway.pixazo.ai/v2/requests/status/elevenlabs-multilingual-v2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "elevenlabs-multilingual-v2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "elevenlabs-multilingual-v2",
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/{request_id}/output.mp3"
],
"media_type": "audio/mpeg"
},
"created_at": "2026-08-01T09:14:16.102Z",
"completed_at": "2026-08-01T09:14:22.870Z"
}Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED or ERROR. |
| model_id | string | The model that handled the request. |
| output.media_url | array | URL of the generated audio file. |
| output.media_type | string | MIME type of the audio. |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| error | string | Error message when status is ERROR. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or ERROR (failure).
Pricing
Billed at $0.10 per 1,000 characters of input text, rounded up to the next whole 1,000. You are charged for the text you submit, not the length of the audio produced.
| Input text | Billed blocks | Cost |
|---|---|---|
| A short sentence (~50 characters) | 1 | $0.1 |
| A paragraph (~800 characters) | 1 | $0.1 |
| A 3,000-character article | 3 | $0.3 |
| 10,000 characters | 10 | $1 |
Failed requests are not billed.
ElevenLabs Multilingual v2 API Pricing
⚡ Performance
Live usage measured on Pixazo's gateway, split by model version. Generation time is how long a generation takes end-to-end (lower is better). Success rate is the percent of generations that complete (higher is better).
〰 Uptime
Percent of generations that succeeded over the selected period, per model version.