Audio version of an article
<an article paragraph within the model limit>
model: eleven_multilingual_v2voice: Brianlanguage_code: enVoice a long article paragraph by paragraph and join the files.
ElevenLabs API: text to speech with v3, Multilingual v2 and Turbo through one Zerocoder key. OpenAI audio.speech format, MP3 output, priced per character.
ElevenLabs makes speech synthesis models with natural intonation: they voice text in English, Russian and other languages with voices from a ready library. Through Zerocoder, ElevenLabs v3, Multilingual v2, Turbo 2.5 and v4 Turbo are one POST to /api/v1/audio/speech in the OpenAI audio.speech format — no ElevenLabs account needed.
You pay per character: a rate per thousand characters of text with a minimum per call, charged at request time and refunded if no audio comes back. The response is a ready MP3 file. Below are the live model prices, a calculator and code samples.
The live GET /v1/models price list in US dollars. Minimum per call: $0.00556. Endpoint: /v1/audio/speech
| Model | Price | Unit |
|---|---|---|
ElevenLabs v3recommended eleven_v3 · ElevenLabsalso: eleven-v3, elevenlabs-v3 | $0.107 | per 1K characters |
ElevenLabs Multilingual v2 eleven_multilingual_v2 · ElevenLabsalso: eleven-multilingual-v2, elevenlabs-multilingual-v2 | $0.107 | per 1K characters |
ElevenLabs v4 Turbo eleven_v4_turbo · ElevenLabsalso: eleven-v4-turbo, elevenlabs-v4-turbo | $0.0533 | per 1K characters |
ElevenLabs Turbo 2.5 eleven_turbo_v2_5 · ElevenLabsalso: eleven-turbo-v2.5, eleven-turbo-2.5, elevenlabs-turbo-2.5 | $0.0533 | per 1K characters |
Pick a model and a volume — the calculator uses the same formulas as API billing.
$0.107 per 1K characters · minimum per call: $0.00556
Prices from GET /v1/models in US dollars at the internal rate. Failed generations are not charged.
An OpenAI audio.speech request: POST /v1/audio/speech with model, voice and input — the response is an MP3 file, and the charge and balance arrive in headers. The OpenAI SDK works with a swapped base URL and key; voices are listed by GET /v1/audio/voices.
Base URLhttps://zerocoder.com /api/v1Key — in the x-api-key or Authorization: Bearer header
Model in the samples — eleven_v3; any model from the table works
from openai import OpenAI client = OpenAI( base_url="https://zerocoder.com/api/v1", api_key="zc-sk-…",) r = client.audio.speech.create( model="eleven_v3", voice="Liam", input="Hello! This is a test of text to speech.",)r.write_to_file("speech.mp3") # MP3 onlyimport fs from "node:fs";import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://zerocoder.com/api/v1", apiKey: "zc-sk-…",}); const r = await client.audio.speech.create({ model: "eleven_v3", voice: "Liam", input: "Hello! This is a test of text to speech.",});fs.writeFileSync("speech.mp3", Buffer.from(await r.arrayBuffer()));curl https://zerocoder.com/api/v1/audio/speech \ -H "authorization: Bearer zc-sk-…" \ -H "content-type: application/json" \ -d '{"model": "eleven_v3", "voice": "Liam", "input": "Hello! This is a test of text to speech."}' \ --output speech.mp3 -D -# body: MP3; headers: x-billing-charged-rub, x-billing-balance-rub# options: "speed": 0.7–1.2, "language_code": "ru",# "stability" / "similarity_boost": 0–1# voices: curl https://zerocoder.com/api/v1/audio/voices -H "authorization: Bearer zc-sk-…"
From a key to production — six steps based on the real /api/v1 contracts. Each step links to the relevant docs section.
Sign up, open the API section of your account, top up the balance and create a zc-sk-… key. One key unlocks ElevenLabs and every other model in the catalogue.
Read more →POST /v1/audio/speech with model, voice and input — the OpenAI audio.speech shape: the response is an MP3 file voiced by ElevenLabs, and the charge and balance come in the response headers.
Read more →GET /v1/audio/voices returns the voice list with ids; known voices can be passed by name (Liam, Callum, Laura, Brian). For single-language text pass language_code, set the pace with speed from 0.7 to 1.2. Save the response straight to an .mp3 file.
Read more →30 requests per minute per key: on 429 wait and retry with a growing pause; 402 — top up the balance; 400 — check model against GET /v1/models. Failed generations are not charged, so retrying is safe.
Read more →GET /v1/balance returns the balance and 30-day spend; every call's price comes back in the response — write it to your logs and set an alert threshold in your own monitoring.
Read more →Keep the key in server secrets, never in the frontend. For high ElevenLabs volumes contact us — the limit is raised individually and companies can pay by invoice. Check the observed stability on the status page.
Read more →HTTP Request node: POST to the /api/v1 endpoint, x-api-key header and a JSON body built from workflow fields. For video add a Wait node and a second HTTP Request on GET ?id= in a loop until completed.
HTTP “Make a request” module: POST, Body type JSON, x-api-key header. The response is parsed automatically — the image url or the answer text flows into the next modules.
Webhooks by Zapier → Custom Request action: POST, Data — JSON with model and prompt, Headers — x-api-key. Response fields are available to the following Zap steps.
In Apps Script use UrlFetchApp.fetch with method post, contentType application/json and a payload from the cells: prompts in one column, results written to the next one.
A bot on aiogram, grammY or Telegraf calls the same HTTP API: user message → model request → reply in the chat. For video — poll the status and send the file from the finished URL.
For text models the official OpenAI and Anthropic SDKs work with a swapped base URL and our key — your application code stays the same. Images and video are a plain HTTP call from any language.

More than a key: we help wire ElevenLabs and other models into your workflows — from audit to production, with invoice payment.
# 401 {"error":{"type":"authentication_error","message":"…"}}
# 402 {"error":{"type":"billing_error","message":"Not enough API balance: this call costs … (… characters × … per 1000) …"}}
# 429 {"error":{"type":"rate_limit_error","message":"…"}} ← 30 requests/min per key
# 400 {"error":{"type":"invalid_request_error","message":"Unknown speech model \"…\". Use one of: …"}}
# 400 {"error":{"type":"invalid_request_error","message":"input is too long: … characters, … accepts up to …"}} ← before any charge
# 400 {"error":{"type":"invalid_request_error","message":"Unknown voice \"…\". See GET /v1/audio/voices."}}
# 503 {"error":{"type":"model_unavailable","message":"…"}} + retry-after ← no audio → the charge is refunded
Numbers come from the public /status summary: the share of successful requests over a period for the whole API and for the category as a whole (the summary has no per-model breakdown), no SLA promises. Failed generations are not charged, so retrying is safe.
Tracking since Aug 8, 2026.
Voicing articles, news and posts for podcasts and audio versions of a site
Voice-over for clips, Reels and presentations without a recording studio
Voice replies for Telegram bots and assistants
Audio lessons and narration for online courses
Narration for product cards and ads
Bulk voicing of notifications, prompts and IVR flows

Copy the prompt and the parameters into the request body — the fields are named exactly as in the /api/v1 contract. Replace the angle-bracket placeholders with your material.
<an article paragraph within the model limit>
model: eleven_multilingual_v2voice: Brianlanguage_code: enVoice a long article paragraph by paragraph and join the files.
Tired of waiting? Our new service delivers in an hour — try it today!
model: eleven_v3voice: Lauraspeed: 1.05<a short bot reply to the user>
model: eleven_v4_turbovoice: LiamTurbo models are faster and cheaper — good for short lines.
<lesson text>
model: eleven_multilingual_v2voice: Callumspeed: 0.9stability: 0.7Your order is out for delivery. The courier will call an hour before arrival.
model: eleven_turbo_v2_5voice: Lauralanguage_code: en
Industries where this kind of generation becomes part of the workflow rather than an experiment.
ElevenLabs is billed per character: each model has its own price per 1000 characters of input text, shown in the table above and in GET /v1/models, plus a per-call minimum. The amount is charged at request time, and the actual charge and remaining balance come back in the response headers.
Use the OpenAI SDK: base_url zerocoder.com/api/v1, a zc-sk-… key, then call audio.speech with model, voice and input and save the response as an MP3 file. Without the SDK, POST /v1/audio/speech with the same JSON body via requests or curl. Samples are in the “First request” block.
ElevenLabs v3 gives the most expressive speech, Multilingual v2 steady narration of long texts in many languages, and Turbo 2.5 and v4 Turbo are fast, cheaper models for short phrases and bulk voicing. Exact ids and prices are in the table above.
The ElevenLabs API offers 67 library voices; GET /v1/audio/voices returns the full list with ids, and known voices can be passed by name — Liam (default), Callum, Laura, Brian. The models speak English, Russian and many other languages; set the language with language_code.
Per call ElevenLabs v3 takes up to 5000 characters and the other models up to 10,000; split longer text. The output is MP3 only. Set the pace with speed from 0.7 to 1.2, and voice stability and similarity with stability and similarity_boost from 0 to 1. The shared key limit is 30 requests per minute.
Yes. Request an invoice in the API dashboard and pay from the company account; the credited balance is spent on ElevenLabs and every other model with the same key. Card top-ups are instant, and accounting documents are available on request. No ElevenLabs account needed.
Yes. If the provider fails to voice the text, the charged amount goes back to the balance automatically in the same request, and the API answers 503 or 400 with the reason. Invalid parameters — an unknown voice, text that is too long, an unsupported format — are rejected before any charge.
No. The API voices text with ready library voices and returns a complete MP3 file; voice cloning, speech recognition and streaming audio output are not supported. For long material, voice the text in parts and join the files on your side.