Picking a text-to-speech API sounds like the trivial part of building a voice feature. Then the invoice arrives metered per character, users notice every pause before the first word, and the model reads "Dr." however it likes. I compared the current crop on quality, price and the boring stuff that breaks in production, and the full version with every vendor screenshot lives in a longer write-up on DevToolLab. This is the condensed tour.
The timing matters because the market just shifted. ElevenLabs released Eleven v4 on September 28, 2026 at $0.08 per 1,000 characters. On October 1, OpenAI deprecated every model behind /v1/audio/speech, with shutdown set for January 6, 2027. And two popular open-source models both read "Tue." as the number two when I tested them.
How the ranking and pricing work
Quality comes from the Artificial Analysis Voice Arena: listeners hear two clips, pick the better one without knowing which model produced either, and the votes become Elo ratings across 92 models (snapshot from October 6, 2026). A second test on the same site scores pronunciation of numbers, dates and codes.
For cost, every vendor gets the same job: a US clinic sending appointment reminders, 5 million characters a month, which is roughly 39,000 calls of a 128-character message like this one:
Your appointment with Dr. Patel is confirmed for Tue., Oct. 13 at 2:30 PM. Your copay is $45.50. Questions? Call (555) 010-1234.
Most vendors meter input characters, so your text length is your bill. A few meter tokens, which tracks the length of the audio instead. Prices were checked on vendor pages on October 7, 2026. If you want to sanity-check your own volume first, paste a month of scripts into a character counter, spaces included, since that is what gets billed.
The "Tue." problem: two open models, one reminder
I ran that reminder through Kokoro-82M 0.9.4 and Piper 1.8.0 on an M3 Pro MacBook Pro CPU, then transcribed the audio back with faster-whisper 1.2.1 (small.en) to see what a listener would actually hear.
| Model | Warm synthesis | Audio | Real-time factor | Heard as |
|---|---|---|---|---|
Kokoro-82M (af_heart) | 1.52 s | 14.22 s | 0.107 | "confirmed for 2. Oct. 13", "Call 555-1012-34" |
Piper (en_US-lessac-medium) | 0.347 s | 13.66 s | 0.025 | "confirmed for 2.00. Oct. 13", "Call 555-010-1234" |
Both turned the weekday into a number, and Kokoro scrambled the phone number into something nobody can dial. A small text pass before synthesis fixed both:
import re DAYS = {"Mon": "Monday", "Tue": "Tuesday", "Wed": "Wednesday", "Thu": "Thursday", "Fri": "Friday", "Sat": "Saturday", "Sun": "Sunday"} MONTHS = {"Jan": "January", "Feb": "February", "Mar": "March", "Apr": "April", "Jun": "June", "Jul": "July", "Aug": "August", "Sep": "September", "Oct": "October", "Nov": "November", "Dec": "December"} def expand(text: str) -> str: text = re.sub(r"\b(" + "|".join(DAYS) + r")\.,?", lambda m: DAYS[m[1]] + ",", text) text = re.sub(r"\b(" + "|".join(MONTHS) + r")\.", lambda m: MONTHS[m[1]], text) text = re.sub(r"\bDr\.(?= [A-Z])", "Doctor", text) # read US phone numbers one digit at a time, pausing between groups return re.sub(r"\(?\b(\d{3})\)?[ .-]?(\d{3})[ .-](\d{4})\b", lambda m: ", ".join(" ".join(g) for g in m.groups()), text) print(expand("See Dr. Patel Tue., Oct. 13 at 2:30 PM. Call (555) 010-1234.")) See Doctor Patel Tuesday, October 13 at 2:30 PM. Call 5 5 5, 0 1 0, 1 2 3 4. After normalizing, both models came back with "Tuesday, October 13" and a dialable number. Hosted models are not immune either: Eleven v4 scores 91.7 percent on the pronunciation test and Cartesia Sonic 3.6 scores 74.5 percent.
ElevenLabs: first and second place
Eleven v4 Turbo sits at the top of the arena with 1334 Elo, and Eleven v4 is right behind it at 1321. Both support 90-plus languages and voice cloning, and they lead the pronunciation test at 90.1 and 91.7 percent. ElevenLabs quotes about 100 ms median inference for v4 Turbo, measured on its own servers, not including your network.
The tradeoff is cost. List price is $0.08 per 1,000 characters for v4 and $0.04 for v4 Turbo and Flash v2.5, so the clinic workload runs $400 on v4 and $200 on Turbo.
Alibaba Qwen-Audio TTS
Qwen-Audio-3.1-TTS-Plus places third at 1292 Elo and 3.0-TTS-Plus sixth at 1261. For a US team the practical blockers are deployment and pricing: Model Studio lists Beijing and Singapore, no US region, and the international price list covers 3.0 but not 3.1 yet. 3.0 Plus is $0.20 per 10,000 characters in Singapore (Flash is $0.15), which puts the workload at $100.
Cartesia Sonic-3.6
Fourth place at 1278 Elo, 44 languages, and advertised latency under 90 ms. The detail I liked most is model pinning: sonic-3.6 follows the latest stable snapshot, while sonic-3.6-YYYY-MM-DD never changes under you. On the downside, it scored 74.5 percent on pronunciation, and concurrency caps at 2, 3, 5 and 15 requests from Free through Scale.
Startup is $49 a month for 1.25 million credits with $45 per million over that, and Scale is $299 for 8 million. The workload lands at $217.75 on Startup.
The big clouds
Google, Amazon and Microsoft are the easy procurement choice, but their cheaper voices sit far down the board. Google's Gemini 3.8 Flash TTS is the exception at fifth (1275 Elo, 89.5 percent pronunciation), billed $0.50 per million text tokens in and $9 per million audio tokens out through December 31, 2026, then double from January 1, 2027. Chirp 3 HD voices rank 58th at $30 per million characters, with the first million free each month.
Amazon Polly charges $30 per million characters for Generative voices (53rd) and $16 for Neural (90th of 92). Azure AI Speech is $22 for Neural HD (28th) and $15 for Neural (68th) in East US.
Inworld TTS-2
Seventh at 1251 Elo, with the cheaper TTS-2 Flash at twelfth. The reason to look at it is migration: Inworld implements OpenAI's POST /v1/audio/speech request format, so moving off OpenAI means pointing the SDK at https://api.inworld.ai/v1 and changing the model name to inworld-tts-2.
TTS-2 is $25 per million characters on demand or $17.50 on the $100 Builder plan, and Flash is $15 on demand or $9 on Builder. The workload costs $125 on demand, or the $100 Builder fee.
Speechify Simba 3.2
Speechify's developer API, billed separately from its reader app, ranks eighth at 1242 Elo, and it has the lowest published self-serve rate per character in the top ten: $10 per million on Starter, $8 on Pro, $6 on Scale. Speechify cites independent first-audio times of 106 ms on Coval and 123 ms on Voice Arena.
The catch is languages. Self-serve accounts get English on Simba 3.2 and six languages on the older Simba 3.0. Starter is $10 a month with 1.9 million characters included, so the workload costs $41.
MiniMax, Fish Audio and the long tail
MiniMax Speech 2.8 HD ranks 19th and is the priciest here at $100 per million characters ($60 for Turbo), so the workload costs $500. It earns that with long-form support (up to 1 million characters per async request) and $1.50 rapid voice clones.
Fish Audio S2.1 Pro ranks 24th and bills $15 per million UTF-8 bytes with no subscription. Plain English text works out to about $75 for the workload, but accented or CJK text uses more bytes per character and costs more.
Deepgram is not on the board, but its Flux TTS (launched August 12, 2026) keeps the whole call in context, reports what the caller actually heard when they interrupt, and can be self-hosted. Aura-2 costs $0.030 per 1,000 characters and Flux TTS $0.045. Rime charges $0.05 per 1,000 for Coda (55th) and $0.03 for Mist v3. Hume's Octave 2 ranks 61st, but its pricing page now redirects to the homepage, so you will need a sales quote.
OpenAI's speech endpoint has an end date
OpenAI's deprecations page lists tts-1, tts-1-hd and both gpt-4o-mini-tts snapshots for shutdown on January 6, 2027, and points to gpt-realtime-2.1-mini as the replacement.
That replacement is a Realtime API model, so you trade a REST call for a WebSocket or WebRTC session, at $20 per million audio output tokens. tts-1 stays at $15 per million characters until the cutoff. If you are on the old endpoint today, Inworld's compatible API is the smallest code change.
Open weights and their licenses
Running your own model swaps the per-character meter for infrastructure work, and the license decides what you can ship. Kokoro-82M (54th) is Apache 2.0. Piper ran 40 times faster than real time on my CPU, but the original MIT repo was archived on October 6, 2025, and work continues as piper1-gpl under GPL-3.0. Chatterbox from Resemble AI is MIT, and Orpheus from Canopy Labs is Apache 2.0.
The highest-ranked open weights, Breeze TTS 2 (11th) and Fish Audio's S2 Pro, are research and non-commercial only. Also note that Kokoro and Piper pull in espeak-ng, which is GPL-3.0. The original post has the macOS fix I needed to get espeak-ng to load, plus the full side-by-side table with all 15 entries.
Quick comparison
| API | Arena rank | Per 1M chars | 5M chars/month |
|---|---|---|---|
| ElevenLabs v4 Turbo | 1 | $40 | $200 |
| Cartesia Sonic-3.6 | 4 | $45 past 1.25M | $217.75 |
| Inworld TTS-2 | 7 | $25 | $125 |
| Speechify Simba 3.2 | 8 | $6 to $10 | $41 |
| Azure Neural HD | 28 | $22 | $110 |
| Kokoro-82M | 54 | $0 | Hardware only |
| Google Chirp 3 HD | 58 | $30, first 1M free | $120 |
Choosing one without migrating twice
- Measure real characters. Export a month of what you actually synthesize, SSML included, and multiply by the rates above.
- Normalize first, then compare. Run your 50 hardest strings (order numbers, drug names, codes) through a text pass like the one above and through each candidate, then transcribe the audio back.
- Time the first audio byte from your own region,
us-east-1for most US stacks, because vendor latency is measured on their side. - Leave a way out. Pin dated model snapshots where they exist, and favor OpenAI-compatible endpoints or open weights so the next switch is a config change.
Before paying for anything, you can hear a normalized script in your browser's built-in voices with the Text to Speech tool.
My picks
- Voice agents that must sound human: ElevenLabs v4 Turbo, first on the board at $0.04 per 1,000 characters.
- Best quality per dollar: Speechify Simba 3.2, eighth on the board at $41 for this workload, if English covers you.
- Still on OpenAI's speech endpoint: migrate before January 6, 2027, and look at Inworld TTS-2 first.
- Tied to a cloud contract: Azure Neural HD at $22, which ranks 40 places above Azure Neural.
- Data that cannot leave your network: Kokoro under Apache 2.0, Piper if GPL-3.0 works for you, or Deepgram Flux TTS self-hosted.
The spread in price is far bigger than the spread in quality. Simba 3.2 ranks eighth at about a tenth of Eleven v4's bill for the same workload, and Kokoro runs about nine times faster than real time on a laptop CPU. Listen to your hardest line, normalized, on three candidates, from your own region, before you commit.
References
- Best Text-to-Speech APIs in 2026, Compared (original article on DevToolLab)
- Artificial Analysis Text-to-Speech Leaderboard
- ElevenLabs API pricing
- Speechify API pricing
- Cartesia pricing
- Inworld pricing
- Google Cloud Text-to-Speech pricing
- Amazon Polly pricing
- Azure AI Speech pricing
- OpenAI deprecations
- Kokoro-82M on Hugging Face
- Piper (piper1-gpl)


