Natural text to speech for any website or app.
The voices behind AtlasVoice for WordPress, now as a simple REST API. Send text, get back an MP3. It works for Shopify, Wix, Webflow, Squarespace or anything you build yourself.
100,000 free characters a month 81 languages and accents, free 380 AtlasVoice Cloud voices with Premium
curl -X POST "https://api.atlasvoice.cloud/v1/synthesize?raw=1" \ -H "Authorization: Bearer $ATLASVOICE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"text": "Hello from AtlasVoice.", "lang": "en-US"}' \ -o hello.mp3
Why the AtlasVoice API
Built for real sites, not demos
It's the same service that powers AtlasVoice for WordPress. Now your platform can use it too.
Works anywhere
A plain REST API: call it from any server language, on any platform.
Stream while it's made
Add stream=1 and the MP3 starts arriving with the first sentences, so a player can begin at once.
Private by design
Your text is never stored, and the generated MP3 is deleted from our servers within minutes.
Fair billing
You pay per character of text, and failed requests are never counted.
A dashboard included
See your usage, keys and any failed requests at app.atlasvoice.cloud, or ask the API with GET /v1/usage.
Clear errors
Every error has a stable code and a plain-English message, like quota_exceeded, with Retry-After when you should wait.
Quick start
From sign-up to audio in three steps
Create a free account
Sign up at app.atlasvoice.cloud and add a project for your site or app. Copy the API key; it's shown only once.
Send your text from your server
Call POST /v1/synthesize with your key. Keep the key on your server, never in browser code.
Save the MP3
Add ?raw=1 to get the file itself, and store it with your content. Without it you get a link that works for 10 minutes.
import { writeFile } from 'node:fs/promises'; const res = await fetch('https://api.atlasvoice.cloud/v1/synthesize?raw=1', { method: 'POST', headers: { Authorization: `Bearer ${process.env.ATLASVOICE_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ text: 'Hello from AtlasVoice.', lang: 'en-US' }), }); if (!res.ok) throw new Error((await res.json()).error.message); await writeFile('hello.mp3', Buffer.from(await res.arrayBuffer()));
$ch = curl_init('https://api.atlasvoice.cloud/v1/synthesize?raw=1'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . getenv('ATLASVOICE_API_KEY'), 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode(['text' => 'Hello from AtlasVoice.', 'lang' => 'en-US']), ]); $mp3 = curl_exec($ch); if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 200) { file_put_contents('hello.mp3', $mp3); }
import os, requests res = requests.post( "https://api.atlasvoice.cloud/v1/synthesize", params={"raw": 1}, headers={"Authorization": f"Bearer {os.environ['ATLASVOICE_API_KEY']}"}, json={"text": "Hello from AtlasVoice.", "lang": "en-US"}, timeout=60, ) res.raise_for_status() with open("hello.mp3", "wb") as f: f.write(res.content)
curl -X POST "https://api.atlasvoice.cloud/v1/synthesize?raw=1" \ -H "Authorization: Bearer $ATLASVOICE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"text": "Hello from AtlasVoice.", "lang": "en-US"}' \ -o hello.mp3
Reference
The essentials
Send your key as Authorization: Bearer av_live_…. Every error comes back as {"error": {"code", "message"}}.
| Request | What it does |
|---|---|
POST /v1/synthesize | Turns text in a lang (such as en-US) into speech. Returns JSON with a 10-minute MP3 link and your usage, or the MP3 itself with ?raw=1. Up to 5,000 characters per request; send longer text in parts. |
GET /v1/usage | Your plan, characters used this month, what's left, and when it resets. |
GET /v1/voices | Every language and voice you can use. No key needed. |
?raw=1&stream=1 | Streams the MP3 while it's being made, for players that start before the file is complete. An unfinished stream is never billed. |
Plans
Free to start. Premium with your Pro licence.
One AtlasVoice Pro licence covers both the WordPress plugin and the API, so there's nothing extra to buy for your other sites.
Free
$0
No card needed
- 100,000 characters a month
- 81 languages and accents with the AtlasVoice TTS voice
- 30 requests a minute
- Streaming, usage dashboard and failed-request logs
Premium
From $59 a year
With an AtlasVoice Pro licence · 14-day money-back guarantee (conditions apply (opens in a new tab))
- No monthly character limit
- 380 AtlasVoice Cloud voices in 47 languages, from
voice.atlasvoice.cloudwith the same key - 120 requests a minute
- Paste your licence key into the project's Premium licence box in the dashboard; each site uses one seat
Need a plan just for the API, or more requests per minute? Tell us what you need (opens in a new tab).
Good to know
Before you build
Keep your key on the server
API keys are secret. Call the API from your backend, never from JavaScript in the browser, where anyone could copy the key.
Store the audio yourself
Generated files are deleted from our servers after 10 minutes. Save the MP3 with your content and serve it from your own site.
Long text goes in parts
Send up to 5,000 characters per request and join the MP3s. Add the article's full length (
total_chars) to the first part, and a post that won't fit this month is refused before anything is charged.A JavaScript SDK is on the wayComing soon
Our open-source
text-to-speech-ttspackage will become the official SDK, with safe browser keys locked to your domain.
Start today
Your first 100,000 characters are on us
Create a free account, add your site or app, and turn your first article into audio in minutes.