# ElevenLabs Eleven v4 Turbo API ElevenLabs Eleven v4 Turbo: expressive multilingual speech with audio tags, voice selection and delivery controls. Base URL: https://01router.com/api/v1 Model ID: elevenlabs-tts-v4-turbo Documentation: https://01router.com/gateway/elevenlabs-tts-v4-turbo#api ## Quick start Set API_KEY to your project key, then run a sample from your server. Replace example media URLs with your own public URLs. ```bash export API_KEY="YOUR_API_KEY" curl "https://01router.com/api/v1/generations" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- <<'JSON' { "model": "elevenlabs-tts-v4-turbo", "input": { "prompt": "Welcome back. Let us get started.", "voice": "Rachel", "stability": 0.5, "similarity_boost": 0.75, "output_format": "mp3_44100_128", "apply_text_normalization": "auto" } } JSON ``` ## Endpoints | Method | Path | Authentication | Description | | --- | --- | --- | --- | | POST | /api/v1/generations | API key required | Create a generation (charges credits) | | GET | /api/v1/generations/{id} | API key required | Get a generation; polls the provider while running | | POST | /api/v1/generations/{id}/cancel | API key required | Cancel a running generation (credits refunded) | | POST | /api/v1/quote | Public · no key | Price a request on every provider (no charge, no key needed) | | GET | /api/v1/models/elevenlabs-tts-v4-turbo | Public · no key | Get one model | ## Authentication Send your API key as a Bearer token. Requests are billed to the key owner's credits. `Authorization: Bearer ` ## Input Send JSON with Content-Type: application/json. Model parameters belong inside input; model, provider and callback_url are top-level fields. | Name | Type | Required | Description | | --- | --- | --- | --- | | model | string | Yes | "elevenlabs-tts-v4-turbo" | | provider | string | No | Pin a provider; omit to auto-route to the cheapest. One of: fal \| wavespeed \| openrouter | | input | object | Yes | Model parameters, see the input fields below. | | callback_url | string | No | Optional public HTTPS webhook URL. The final task result is signed and delivered here; polling remains available. | ### input Required fields are marked explicitly. Other fields use the listed defaults when omitted. | Name | Type | Required | Description | Default | | --- | --- | --- | --- | --- | | input.prompt | string | Yes | Text; maxLength: 5000 | — | | input.voice | string | No | Voice | "Rachel" | | input.stability | number | No | Stability; min: 0; max: 1 | 0.5 | | input.similarity_boost | number | No | Voice similarity; min: 0; max: 1 | 0.75 | | input.language_code | string | No | ISO 639-1, e.g. en or zh | — | | input.seed | integer | No | Seed; min: 0; max: 4294967295 | — | | input.output_format | string | No | Output format; options: ["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"] | "mp3_44100_128" | | input.apply_text_normalization | string | No | Text normalization; options: ["auto","on","off"] | "auto" | Auto-routing chooses a provider that supports the request. Select a provider to see its input constraints and pinned request examples. ### Provider input schemas ```json [ { "provider": "fal", "params": [ { "name": "prompt", "type": "text", "label": "Text", "required": true, "maxLength": 5000 }, { "name": "voice", "type": "string", "label": "Voice", "default": "Rachel" }, { "name": "stability", "type": "number", "label": "Stability", "min": 0, "max": 1, "default": 0.5 }, { "name": "similarity_boost", "type": "number", "label": "Voice similarity", "min": 0, "max": 1, "default": 0.75 }, { "name": "language_code", "type": "string", "label": "Language code", "description": "ISO 639-1, e.g. en or zh" }, { "name": "seed", "type": "integer", "label": "Seed", "min": 0, "max": 4294967295 }, { "name": "output_format", "type": "enum", "label": "Output format", "options": [ "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" ], "default": "mp3_44100_128" }, { "name": "apply_text_normalization", "type": "enum", "label": "Text normalization", "options": [ "auto", "on", "off" ], "default": "auto" } ] }, { "provider": "wavespeed", "params": [ { "name": "prompt", "type": "text", "label": "Text", "required": true, "maxLength": 5000 }, { "name": "voice", "type": "string", "label": "Voice", "default": "Alicia" }, { "name": "stability", "type": "number", "label": "Stability", "min": 0, "max": 1, "default": 0.5 }, { "name": "similarity_boost", "type": "number", "label": "Voice similarity", "min": 0, "max": 1, "default": 0.75 } ] }, { "provider": "openrouter", "params": [ { "name": "prompt", "type": "text", "label": "Text", "required": true, "maxLength": 5000 }, { "name": "voice", "type": "string", "label": "Voice", "default": "george", "options": [ "george", "sarah", "adam", "alice", "bella", "bill", "brian", "callum", "charlie", "chris", "daniel", "eric", "harry", "jessica", "laura", "liam", "lily", "matilda", "river", "roger", "will" ] } ] } ] ``` ## Output Creating a task does not mean generation has finished. Keep its id, poll until succeeded or failed, then read outputs or error. Amounts below are illustrative; actual charges depend on the request. | Name | Type | Required | Description | | --- | --- | --- | --- | | id | string | Yes | Generation ID. Use it to query or cancel this task. | | object | string | Yes | generation | | model | string | Yes | elevenlabs-tts-v4-turbo | | type | string | Yes | audio | | provider | string | Yes | Provider | | status | string | Yes | queued → processing → succeeded / failed. Stop polling at either terminal state. | | input | object | Yes | Model parameters, see the input fields below. | | outputs | string[] | Yes | Result URLs. Empty while processing; read after succeeded and save the files promptly. | | error | string \| null | Yes | Failure reason, or null when no failure is reported. | | credits | number | Yes | Credits charged for this request. | | price_usd | number | Yes | Request price in USD. | | created_at | string | Yes | Creation time in ISO 8601 format. | | completed_at | string \| null | Yes | Completion time in ISO 8601 format; null before completion. | ### Task submitted ```json { "id": "gen_example", "object": "generation", "model": "elevenlabs-tts-v4-turbo", "type": "audio", "provider": "fal", "status": "processing", "input": { "prompt": "Welcome back. Let us get started.", "voice": "Rachel", "stability": 0.5, "similarity_boost": 0.75, "output_format": "mp3_44100_128", "apply_text_normalization": "auto" }, "outputs": [], "error": null, "credits": 0, "price_usd": 0, "created_at": "2026-10-25T08:00:00.000Z", "completed_at": null } ``` ### Task completed ```json { "id": "gen_example", "object": "generation", "model": "elevenlabs-tts-v4-turbo", "type": "audio", "provider": "fal", "status": "succeeded", "input": { "prompt": "Welcome back. Let us get started.", "voice": "Rachel", "stability": 0.5, "similarity_boost": 0.75, "output_format": "mp3_44100_128", "apply_text_normalization": "auto" }, "outputs": [ "https://example.com/output.wav" ], "error": null, "credits": 0, "price_usd": 0, "created_at": "2026-10-25T08:00:00.000Z", "completed_at": "2026-10-25T08:01:00.000Z" } ``` ## Get the result Poll every few seconds until status is succeeded or failed. Output URLs are provider-hosted and may expire — download them promptly. Or pass callback_url to get the result pushed. ```bash curl "https://01router.com/api/v1/generations/GENERATION_ID" -H "Authorization: Bearer $API_KEY" ``` ## Cancel a task Cancellation depends on provider support and task state. A confirmed cancellation returns status: failed and error: Canceled by user. Unsupported or completed tasks return 409 not_cancelable. ```bash curl -X POST "https://01router.com/api/v1/generations/GENERATION_ID/cancel" -H "Authorization: Bearer $API_KEY" ``` ## Quote Same body as creating a generation. Returns every available provider sorted by price, plus the ones that cannot serve the request and why. ```bash curl "https://01router.com/api/v1/quote" -H "Content-Type: application/json" --data-binary @- <<'JSON' { "model": "elevenlabs-tts-v4-turbo", "input": { "prompt": "Welcome back. Let us get started.", "voice": "Rachel", "stability": 0.5, "similarity_boost": 0.75, "output_format": "mp3_44100_128", "apply_text_normalization": "auto" } } JSON ``` ## Callbacks Optional public HTTPS webhook URL. The final task result is signed and delivered here; polling remains available. See https://01router.com/docs/callback for signature verification. ## Errors Check the HTTP status and error.message. Fix the request before retrying validation or authentication errors. A failed generation is reported in status and error on the task itself. ```json { "error": { "message": "Invalid or missing API key", "code": "unauthorized" } } ``` HTTP 400: invalid request; 401: unauthorized; 402: insufficient credits; 404: not found; 409: not cancelable; 429: rate/concurrency/quota limit; 5xx: upstream/server error. Full API reference: https://01router.com/docs/errors