Install
pip install elevenlabs # Python
npm install @elevenlabs/elevenlabs-js # JavaScript
export READALOUD_API_KEY=rtts_... # placeholder: use your own key
Change three values: base URL https://api.readaloudai.org, your ReadAloud key, and voice id readaloud-default. Create a ReadAloud API key at https://readaloudai.org/developers and export it as READALOUD_API_KEY; new accounts start with free credits.Quickstart
import os
from elevenlabs.client import ElevenLabs
client = ElevenLabs(api_key=os.environ["READALOUD_API_KEY"], base_url="https://api.readaloudai.org")
audio = client.text_to_speech.convert(
voice_id="readaloud-default",
text="Thanks for calling. How can I help you today?",
model_id="eleven_flash_v2_5",
output_format="mp3_44100_128",
)
data = b"".join(audio)
open("elevenlabs_py.mp3", "wb").write(data)
print(len(data), "bytes")What was tested
Checked with elevenlabs (Python, PyPI) on Python 3.14.6, and @elevenlabs/elevenlabs-js (npm) on Node 26.8.2. Version tested: Python 2.71.0, JavaScript 2.71.0. Date: October 10, 2026. This is one dated check against the live API. Other versions, and later releases, may behave differently.
What worked
- The Python SDK's text_to_speech.convert with base_url set to the ReadAloud host returned 38,497 bytes of MP3; ffprobe read it as 44.1 kHz mono of 2.40 seconds.
- The JavaScript SDK's textToSpeech.convert with baseUrl set returned 38,079 bytes of MP3, read by ffprobe as 44.1 kHz mono of 2.38 seconds.
- Both calls used the model id eleven_flash_v2_5 and output format mp3_44100_128 unchanged from typical ElevenLabs code, and only the key, the base URL and the voice id differed.
- The ReadAloud migration page lists the further routes, formats and error codes that were run, with their results.
Limits and what is not supported
- This page's own runs are one convert call per SDK. For everything else, including streaming, WebSocket, voices and error classes, see the migration page, which records what was run.
- ElevenLabs voice ids and your ElevenLabs voice clones do not exist on ReadAloud. The voice is readaloud-default, the single English voice on ReadAloud Live, and it is not an ElevenLabs voice.
- The audio is made at 24 kHz, so the 44.1 kHz MP3 has the requested sample rate but no content above 12 kHz. Each request is limited to 5,000 characters.
- Speech to text, dubbing, agents and the other ElevenLabs products are not served through this API.
Limits that apply to every integration
- 5,000 characters per request. Split longer text and send it in order.
- Output formats on the OpenAI-compatible route: mp3 (default, 24 kHz), opus (48 kHz, Ogg), wav (24 kHz) and pcm (24 kHz, 16-bit, mono); aac and flac return 400.
- No SSML and no audio tags.
- Beyond capacity the API returns 429 (HTTP) or an "at capacity" error with close code 1013 (WebSocket); retry with a short backoff.
What ReadAloud costs
- ReadAloud Live: $4 per 1M characters ($0.004 per 1,000), the low-latency tier, built for live calls and voice agents.
- ReadAloud Studio: $10 per 1M characters ($0.01 per 1,000), the higher-priced tier for read-aloud and narration, with several English voices.
Billing is per character of speech that finishes; cancelled requests are not billed, and there are no minimums. Every account gets a one-time grant of free credits (worth $0.10, about 10,000 characters of speech). It is one capped pool per account, shared across all of the account's keys and across speech, transcription, dubbing, voice conversion and voice design, and it is used first. When it runs out, requests return 402 until a payment method is added, then billing is pay as you go. Current prices are on the Voice API page (/developers).
Common questions
- What is the JavaScript version of the quickstart?
- const client = new ElevenLabsClient({ apiKey: process.env.READALOUD_API_KEY, baseUrl: 'https://api.readaloudai.org' }); const audio = await client.textToSpeech.convert('readaloud-default', { text: 'Hello.', modelId: 'eleven_flash_v2_5', outputFormat: 'mp3_44100_128' }); iterate the result with for await to collect the chunks. We ran this form on @elevenlabs/elevenlabs-js 2.71.0.
- Can I keep my ElevenLabs voice id?
- No. ElevenLabs voice ids return 404 here and are not mapped to ReadAloud voices. Pass readaloud-default.
- Will it be the same voice?
- No. It is a different voice, and we make no claim about how it compares. Listen to it on your own text before switching.
- Where do I find the full list of what works and what does not?
- On the migration page at readaloudai.org/developers/migrate-from-elevenlabs, which lists tested routes, differences, unsupported products and error codes.
Something here does not match what you see? Tell us at support@readaloudai.org.