OpenAI is removing tts-1, tts-1-hd and gpt-4o-mini-tts from its API on January 6, 2027. Inworld retired its first-generation models in June. If your voice agent hard-codes one vendor's model IDs, voices and audio format, every announcement like that is an unplanned migration.
So when a team asks us, "We're on ElevenLabs. Should we be?", the answer is often yes. This post is about the cases where it isn't, and how to test a switch in an afternoon.
First, where ElevenLabs actually stands
The current flagship is Eleven v4, with a real-time variant, Eleven v4 Turbo (eleven_v4_turbo). ElevenLabs lists v4 Turbo at a median inference latency of about 100 ms, excluding application and network latency, with 90+ languages and the same voice cloning as v4. On the API pricing page, v4 Turbo is $0.04 per 1,000 characters ($40 per 1M), and v4 is $0.08. Flash v2.5 is also $0.04, and the docs quote about 75 ms for it, 32 languages, and a smaller model.
For voice agents, three details in the docs matter more than the headline numbers.
- v4 Turbo runs on a different WebSocket. Per ElevenLabs' comparison of its two WebSockets,
eleven_v4andeleven_v4_turboare only available on the Text to Dialogue WebSocket, not the classic Text to Speech WebSocket. If your agent was built on the older socket with Flash, moving to v4 Turbo is a protocol change, not a model-ID change.
- Sessions are metered per open connection. On the Text to Dialogue WebSocket, each open connection holds one dialogue session for its whole lifetime. The published limits are 35 sessions on Creator, 70 on Pro, 105 on Scale and Business, and "Elevated" on Enterprise. A connection opened when they're all in use is rejected with
too_many_concurrent_requests. For a phone agent that holds a socket for each call, the dialogue-session limit is the number of calls you can hold open with v4 Turbo. The older socket counts only time spent generating audio, which is why Flash-based agents scale further than the plan table suggests.
- Data residency is an Enterprise feature. EU, India and Singapore isolated environments exist, but they are separate workspaces with separate API keys, available on Enterprise.
ElevenLabs' pronunciation tooling is deep. Eleven v4 reads IPA inline, and pronunciation dictionaries with phoneme tags work on v4 and v4 Turbo. If your agent says drug names or brand names all day, that's a real reason to stay.
When it's worth looking elsewhere
From what we see, teams evaluate alternatives for one of six reasons. If none of these apply to you, stop reading and keep shipping:
- You need more open sessions than your plan gives you, and you don't want to negotiate an Enterprise contract to get them.
- Cost at volume. At $40 per 1M characters, an agent that speaks 800 characters a minute across 50,000 hours a month is a real line item. A different list price changes your unit economics more than any prompt tweak.
- Time to first audio on a phone line, measured from your region, through your telephony provider. That figure is different from inference latency, and it's the one callers hear.
- Telephony formats. Twilio media streams carry 8 kHz μ-law. Asking the vendor for μ-law directly saves you a resample-and-encode step and a class of bugs.
- Names and numbers. Confirmation codes, phone numbers, dollar amounts and surnames are where a voice agent loses trust. ElevenLabs' own text normalization guide says its smaller, faster models generalize worse on these.
- Lock-in and residency. You want EU processing without a separate workspace, on-prem, or simply a second vendor you can fail over to.
The alternatives, side by side
AssemblyAI comes first because it targets the two most common reasons above: session caps and cost at volume. The rest are ordered by language coverage, widest first, because the first thing you're likely to lose when leaving ElevenLabs is its 90+ languages. Prices are pay-as-you-go list prices from each vendor's pricing page on October 28, 2026.
| AssemblyAI-TTS-1 | Inworld TTS-2 / TTS-2 Flash | Cartesia Sonic 3.6 | Deepgram Flux TTS | Rime Coda / Mist v3 | ElevenLabs v4 Turbo (baseline) | |
|---|---|---|---|---|---|---|
| List price | $15 per 1M chars | $25 / $15 per 1M chars; lower on paid tiers | ~1 credit per char; plans from $0 to $299/mo, then Enterprise | $0.045 per 1K chars ($45 per 1M) | $0.050 / $0.030 per minute of audio | $0.04 per 1K chars ($40 per 1M) |
| Concurrency | No cap on open sessions; new sessions per minute are rate-limited | 5 to 500 concurrent generations by plan; Enterprise custom | Per plan; Enterprise custom | Up to 45 (PAYG) or 60 (Growth) | Unlimited on Enterprise | 14 to 105 dialogue sessions by plan |
| 8 kHz μ-law | Yes (pcm_mulaw) | Yes | Yes (pcm_mulaw) | Yes (mulaw) | Yes (audio/pcmu) | ulaw_8000 in its Twilio guide |
| Languages | 6 | 200+ languages and locales | 44 | 10 GA, 30+ in early access | 10 (Coda), 4 (Mist v3) | 90+ |
| Deployment | Cloud, US and EU data zones | Cloud | Cloud | Cloud, EU endpoint, dedicated, self-hosted | Cloud, VPC, on-prem | Cloud; residency on Enterprise |
AssemblyAI: no session cap, at $15 per 1M characters
AssemblyAI-TTS-1 launched on October 27, 2026, and it's built for conversational voice agents, not narration. It was trained on millions of hours of audio, including real conversational data. There are thousands of voices and instant voice cloning in the dashboard. The interfaces are a WebSocket (one session per conversation, one request per turn), an HTTP endpoint, and an OpenAI-compatible endpoint. Telephony output is pcm_mulaw or pcm_alaw at 8 kHz. You get per-word boundaries for barge-in, US and EU data zones, and LiveKit and Pipecat plugins. The Pipecat service is on Pipecat's main branch now and ships in a release after 1.14.0. The price is $15 per 1M characters.
The concurrency model is the part that matters for this comparison. There's no limit on sessions open at once. What the limits doc does rate-limit is new sessions per minute, starting at your streaming speech-to-text limit.
Where it breaks: six languages (English, Spanish, French, German, Italian, Portuguese). If you need Japanese or Hindi, stop here. There's no language detection, so you set it per session. Sessions cap at an hour and close after two minutes idle without a keep-alive. And it's brand new, without the production history of anything else on this list.
Better pick than ElevenLabs if: you run high-volume calls in those six languages and the bill and session caps are the problem.
Inworld: the widest language list and the lowest volume price
Inworld's current models are TTS-2 and TTS-2 Flash. Both cover 200+ languages and locales and support instant voice cloning. Inworld quotes a P90 time to first byte of 100 ms and 20 ms respectively, measured server-side without the network. Output includes μ-law and A-law at 8 kHz, and there's an OpenAI-compatible endpoint.
Pricing is per million characters and falls with commitment. On the pricing page, TTS-2 Flash is $15 per 1M on pay-as-you-go and $7 per 1M on the $1,500-a-month Growth plan. Concurrency is published plainly: 5, 10, 50, 150, and 500 concurrent generations across the self-serve plans. A WebSocket context only counts while audio is being exchanged, and you can hold ten times that many connections open.
Where it breaks: Inworld has already retired its first-generation models, so plan for churn. Language support is tiered by how thoroughly Inworld has evaluated each language, which means "200+" should be read as "test your languages."
Better pick than ElevenLabs if: you need many languages at a lower price, and you can commit to a plan tier.
Cartesia: snapshots you can pin
Sonic 3.6 went GA with a dated snapshot, sonic-3.6-2026-08-27, and it speaks 44 languages. That snapshot detail is the most underrated feature on this list. You can pin a version that will never change, run your evals, then move when you choose to. Given the deprecation news above, that's worth something.
The output format docs are written with telephony in mind. They cover pcm_mulaw at 8000 for Twilio and pcm_alaw for European networks. Pronunciation dictionaries take IPA or sounds-like spellings.
Where it breaks: pricing is in credits, about one per character, bundled into monthly plans (Scale is $299 for 8M credits). That's easy to start but harder to project than a flat per-character rate. On the pricing page, "high concurrency limits" are a Scale feature, and custom limits are Enterprise.
Better pick than ElevenLabs if: you want strict version control over the voice your customers hear.
Deepgram Flux TTS: the best barge-in bookkeeping
Deepgram's Flux TTS is on a new endpoint, /v2/speak. Aura-2 voices stay on /v1/speak, so this is a migration even for current Deepgram customers. The design is built around turns. When a caller barges in, you send Interrupt, and the server tells you text_spoken and text_remaining. That answers the hardest bookkeeping question in an agent: what did the caller actually hear before they cut in?
The streaming socket emits linear16, mulaw or alaw, with μ-law at 8 or 16 kHz. Sessions last up to an hour. Deepgram has an EU endpoint, dedicated endpoints, and self-hosting, which is one of the stronger residency stories on this list.
Where it breaks: list price is $0.045 per 1K characters, more than ElevenLabs v4 Turbo. Published concurrency is up to 45 on pay-as-you-go and 60 on Growth. Ten languages are GA, and about thirty more are early access. There's a launch promo that matches Flux TTS spend with credits up to $500, ending December 31, 2026.
Better pick than ElevenLabs if: you already run Deepgram speech-to-text, or barge-in correctness is your top bug.
Rime: trained for conversation, deployable on-prem
Rime's flagship is Coda, released May 2026. Rime describes it as an LLM backbone with a speech engine trained on full-duplex conversational data. It speaks 10 languages. Mist v3 is the low-latency sibling, with four languages. Arcana has been retired from the cloud API.
Two features stand out for agents. spell() forces letter-by-letter reading of codes and IDs. Coda also accepts a custom X-SAMPA lexicon in six languages. Rime's WebSocket outputs audio/pcmu at samplingRate: 8000, and you can run the same models in your VPC or on-prem.
Where it breaks: pricing is per minute of generated audio ($0.050 for Coda, $0.030 for Mist v3, 20% off on Scale). Rime estimates about 1K characters per minute, but a per-minute price doesn't line up with per-character quotes until you measure your own speaking rate. Requests that omit modelId silently get Mist v3, so set it on every call. Unlimited TTS concurrency is listed as an Enterprise feature.
Better pick than ElevenLabs if: audio can't leave your network, or your agent reads a lot of alphanumeric codes.
The one I'd skip right now: OpenAI's TTS endpoint
gpt-4o-mini-tts is simple and well documented, but the guide now carries a deprecation banner, and the shutdown is January 6, 2027. The endpoint also doesn't list μ-law among its output formats. Starting a new telephony integration on it today means scheduling a second migration before you've finished the first.
How to run a switch-over test
Pick two candidates, not five. Then run two tests on each. Neither takes more than an afternoon.
Test 1: the round-trip entity test
Write the 30–50 sentences your agent actually says that contain something a caller must not mishear: confirmation codes, phone numbers, prices, dates, and surnames from your real customer base. Synthesize each one with every candidate at 8 kHz μ-law, the format the caller hears. Run all the audio through the same speech-to-text model, and check whether each entity survives.
STT is a proxy for a listener, not a perfect one. But a TTS output that a strong STT model can't recover is very likely one a caller on a speakerphone can't either. Holding the STT constant means the TTS is the only variable.
import re # (what you send to TTS, the entity that has to survive the round trip) CASES = [ ("Your confirmation code is K7Q-4X9.", "K7Q4X9"), ("I have you at 415-555-0142. Is that right?", "4155550142"), ("Your balance is $2,450.17, due March 3rd.", "245017"), ("Can you confirm the name Siobhan Nguyen-Okafor?", "Siobhan Nguyen-Okafor"), ] def squash(s: str) -> str: return re.sub(r"[^a-z0-9]", "", s.lower()) def survived(entity: str, transcript: str) -> bool: return squash(entity) in squash(transcript) # For each vendor: transcripts = [transcribe(synthesize(text)) for text, _ in CASES] passed = sum(survived(e, t) for (_, e), t in zip(CASES, transcripts)) print(f"{passed}/{len(CASES)} entities survived") synthesize() and transcribe() are yours to fill in with each vendor's SDK. Listen to every failure yourself: some will be STT formatting quirks, and some will be the TTS reading "K7Q" as a word. Only the second kind counts against the TTS.
Test 2: the telephony test
Put each candidate behind a real phone number through your actual carrier. Request μ-law at 8 kHz from the vendor (the table above lists each one's parameter) rather than transcoding it yourself. Then measure three things:
- Time to first audio, caller side. That's the gap from your LLM's first token to the first audible sound on the handset, not the vendor's time to first byte.
- p95, not median, at the concurrency you expect at peak, from the region your servers run in, during business hours.
- Barge-in recovery. Interrupt mid-sentence twenty times, and check that your agent's memory of what it said matches what the caller heard.
What a benchmark can't tell you
Every latency figure in this post comes from a vendor, measured on that vendor's terms. ElevenLabs excludes application and network latency. Inworld measures server-side at P90. None of these numbers can be compared directly, and none were measured over your trunk, from your region, at 9am on a Monday.
Benchmarks also can't hear your content. A model that reads a news paragraph beautifully can still say "K-seven-Q" as "kuh-sev-en-kew." Price comparisons fall apart at the unit level, too. Per-character, per-credit, and per-minute pricing only convert once you know how many characters a minute your agent speaks.
The point
The TTS market converged faster than anyone expected. On clean prose, the voices on this list are close enough that most callers won't pick a winner. What hasn't converged is everything around the voice: how sessions are counted, what a model ID promises about next quarter, which audio formats come back without a resampler, and what the bill looks like at 50,000 hours.
That's why it's worth asking whether you should leave ElevenLabs. But the better question is whether you could leave in a week if you had to. Wrap the TTS call behind your own interface, keep the entity test in CI, and treat the vendor as a part you can replace. The vendor that wins on your test today may not be the right one in a year, and you should be able to switch either way.
Editor's note: This article is paid content. HackerNoon’s editorial team has reviewed it for clarity and quality standards, but the views, claims, benchmarks, and comparisons expressed are solely those of the sponsor, and HackerNoon assumes no responsibility for third-party assertions contained in sponsored content.


