OpenAI's Realtime API made "talk to your app" easy to prototype: one model, speech in, speech out, low latency. If you're building voice agents in 2026, you've probably tried it.
Prototyping and shipping are different problems, though. Once real users start calling, the single-model architecture that demos well starts working against you — on cost, on transcription accuracy, and on the details of managing a real conversation. That's what sends teams looking for an OpenAI Realtime API alternative that holds up in production.
This post does two things. First, a clear-eyed rundown of the alternatives in 2026 — Gemini Live, ElevenLabs, Deepgram, a couple of open-source options, and a chained pipeline built on AssemblyAI's speech-to-text and text-to-speech APIs. Then a concrete migration walkthrough, because a list isn't much use if nobody tells you how to actually switch.
Why teams look for an OpenAI Realtime alternative
Let's be specific about what pushes people to look.
Cost you can't predict. OpenAI Realtime is token-priced. The current flagship, gpt-realtime-2.1, runs roughly $32 per million audio input tokens and $64 per million audio output tokens. At the base rate a call lands around $0.05 per minute — fine on a spreadsheet. But conversation context gets re-processed each turn, so on longer calls real bills commonly run 2x to 5x that base rate. Prompt caching helps, but now you're maintaining caching logic just to keep a voice bot affordable. There's a cheaper gpt-realtime-2.1-mini at about $0.016 per minute, but you trade accuracy for the discount. The through-line: your cost per call climbs with call length, and you can't quote a customer a number without a footnote.
Speech accuracy on real audio. This is the architectural crux. OpenAI Realtime is one multimodal model that also does voice, which means transcription isn't a dedicated step — it's one job the model does among many. In AssemblyAI's own side-by-side testing, OpenAI Realtime hallucinated on messy input, inventing words that were never said. On a support line or a drive-through, that's not a rounding error — that's a wrong order.
Barge-in and turn quality. Interruption handling is what separates a conversation from a walkie-talkie. In that same testing, OpenAI Realtime's barge-in logic triggered on background noise — a cough was enough to make it stop talking. An agent that yields the floor to a sneeze is an agent users don't come back to.
Thirty-plus event types. The Realtime API exposes 30+ event types you subscribe to and emit — session updates, input buffer commits, response deltas, and so on. Every one is a thing to handle, a thing to get wrong, and a thing to keep working as the API evolves.
Lock-in. One model doing everything means you can't swap the transcription layer, the reasoning layer, or the voice independently. When one piece underperforms, you don't have a knob — you have a migration.
The best OpenAI Realtime API alternatives in 2026
The right pick depends on what you're optimizing for. Short, factual rundowns, then a table.
AssemblyAI (chained pipeline)
Instead of one model doing everything, you wire together dedicated models for each step — Universal-3.6 Pro Realtime for speech-to-text, the LLM of your choice, and AssemblyAI's Text-to-Speech API for voice output — orchestrated with LiveKit, Pipecat, or your own loop. Speech-to-text is billed per hour of audio with no concurrency fees, so that line doesn't drift with call length, and concurrency is unlimited. Universal-3.6 Pro Realtime is the accuracy story below. Best for: production voice agents where transcription accuracy and predictable cost matter most.
Google Gemini Live
Gemini Live is Google's real-time multimodal offering — native audio, video input, and tight integration if you're already in Google's ecosystem. Architecturally it's the same shape as OpenAI Realtime: one large multimodal model, usage-based pricing, and the same "transcription is a side effect" tradeoff, so it inherits the same accuracy and cost-predictability questions. Best for: teams already standardized on Google Cloud who need audio plus vision in one model.
ElevenLabs Conversational AI
ElevenLabs is known for its text-to-speech, and its Conversational AI product leans on that voice-output quality. On the input side — the part that decides whether your agent hears the caller correctly — its Scribe v2 model lands at 7.78% WER on AssemblyAI's English voice-agent benchmark, behind the category leaders, and concurrency is capped (around 30), which becomes a constraint at scale. Best for: applications where expressive TTS output is the top priority and input accuracy is secondary. (More in our Universal-3 Pro vs. ElevenLabs Scribe v2 comparison.)
Deepgram Voice Agent
Deepgram offers a single-API Voice Agent product alongside its standalone speech-to-text models. The differentiator is accuracy on real agent audio: its newer Flux EN model comes in at 13.50% WER on the same benchmark, well behind the leaders, and the gap widens on entity error — getting names, numbers, and addresses right — where Flux EN reaches 30.1%. Best for: teams already invested in Deepgram's stack. (Full breakdown in our AssemblyAI vs. Deepgram comparison.)
Open-source (Moshi, Qwen-Omni)
If you want to own the whole stack and self-host, the open-source options are worth a look. Kyutai's Moshi is a full-duplex speech model you can run yourself; Alibaba's Qwen-Omni is a multimodal model you can wire into orchestration frameworks like Pipecat or LiveKit. You avoid a per-minute fee, but you take on the hosting, scaling, reliability, and accuracy-tuning yourself. Best for: teams with ML infrastructure that need on-prem or full customization and can staff the maintenance.
Here's how they stack up:
| Alternative | Pricing model | Speech accuracy (WER, AssemblyAI voice-agent benchmark) | Developer experience | Concurrency |
|---|---|---|---|---|
| OpenAI Realtime | Token-based, variable (~$0.05/min base, often 2x–5x) | Prone to hallucination on messy audio | 30+ event types | Rate-limited |
| AssemblyAI | Per-hour speech pricing, no concurrency fees | 5.19% | Streaming WebSocket + LiveKit/Pipecat plugins | Unlimited |
| Gemini Live | Token-based, variable | One-model tradeoff | Multimodal API | Rate-limited |
| ElevenLabs | Usage-based | 7.78% (Scribe v2) | Single API | Plan-tiered |
| Deepgram | Usage-based | 13.50% (Flux EN) | Single API | Plan-tiered |
| Open-source | Self-hosted (infra cost) | Varies by model | DIY orchestration | Your hardware |
Universal-3.6 Pro Realtime at 5.19% WER, unlimited concurrency, no concurrency fees. Get a free API key and test the speech layer on your own traffic before you commit a dollar.
Why AssemblyAI is the production alternative
The wedge is simple. OpenAI Realtime is one multimodal model that also does voice. An AssemblyAI pipeline is dedicated models per step — Universal-3.6 Pro Realtime, your LLM, the Text-to-Speech API — assembled for conversation quality. That difference shows up in four places that matter when real calls are coming in.
Accuracy that holds on real audio. On AssemblyAI's English voice-agent benchmark — 12,460 scripted voice-agent scenarios, lower is better — Universal-3.6 Pro Realtime posts 5.19% WER. For context: ElevenLabs Scribe v2 sits at 7.78%, Deepgram Nova-3 at 8.64%, and Deepgram Flux EN at 13.50%. Independent leaderboards agree: it has the lowest word error rate on Coval's streaming leaderboard (2.2%). The gap widens on entities — the names, order numbers, and addresses your business actually runs on. Universal-3.6 Pro Realtime's entity error rate is 14.4% versus Deepgram Flux EN's 30.1%. When a caller says "my confirmation is A-as-in-apple 4 7 2," that's the number that decides whether the call works. More on the model in the Universal-3.6 Pro Realtime launch post.
Context that raises accuracy further. You can feed the agent live context — product names, customer vocabulary, whatever your domain needs. Across 20,000 files, using agent_context cut WER by 10.2%. That's a tuning knob a single-model architecture doesn't expose.
A simple streaming surface instead of 30+ events. The speech-to-text leg is standard JSON over a WebSocket, or a drop-in LiveKit or Pipecat plugin. You're not subscribing to a taxonomy of event types — you send audio and handle Turn events. That's a big reason it plays well with coding agents like Claude Code, which can scaffold an integration without wrestling a sprawling event model.
Predictable cost. Speech-to-text is billed per hour of audio with no concurrency fees, so a 2-minute call and a 20-minute call cost what you'd expect on the speech layer. Unlimited concurrency, so a traffic spike doesn't mean a support ticket. And because each layer is its own component, you can swap the LLM or retune the speech settings without tearing down the rest. For where these differences bite, we wrote up where voice agent stacks start showing their limits.
Want to see it before you read another word of code? Drop a recording into the playground to watch Universal-3.6 Pro Realtime handle your audio, then run the LiveKit quickstart to judge latency and interruption handling end to end.
Don't take the benchmark on faith. Run a recording with a hard confirmation code through Universal-3.6 Pro Realtime in the playground—see how it handles turn boundaries and gets the entities right.
How to migrate from OpenAI Realtime to AssemblyAI
The good news: if you built on OpenAI Realtime, you already have the hard parts — audio capture, a client transport, and turn logic. Migration is mostly re-pointing them at a pipeline where each layer is its own component.
Map the concepts
Here's how the mental model translates:
| OpenAI Realtime | AssemblyAI chained pipeline |
|---|---|
| session.update with dozens of fields | A streaming config (speech_model, turn detection, keyterms) plus your LLM and TTS settings in the orchestrator |
| 30+ typed events to emit and subscribe to | Turn events in from speech-to-text, audio chunks out from text-to-speech; the orchestrator wires the loop |
| Instructions passed per session | System prompt lives in your LLM call, adjustable on any turn |
| Manual VAD / turn-detection config | Turn detection handled server-side by Universal-3.6 Pro Realtime |
| Tool/function-calling via event schema | Tool-calling in your LLM layer, invoked by the orchestrator between turns |
| Audio buffers you commit and clear | Stream raw audio frames over the socket |
The shift in one sentence: instead of one session that does everything behind a wall of parameters and events, you run three components you can see, tune, and swap, and let the orchestrator handle the handoffs.
Wire the pipeline
Pick an orchestrator and drop in the speech layer. With LiveKit Agents, that is the AssemblyAI speech-to-text plugin, your LLM plugin, and a text-to-speech plugin in one agent session; Pipecat follows the same pattern with its own processors. If you would rather own the loop, open a WebSocket to Universal-3.6 Pro Realtime, hand each finalized turn to your LLM, and stream the reply through the Text-to-Speech API. The same pipeline works unchanged from a server, a browser, or a phone. Step-by-step builds are in the LiveKit and Pipecat guides.
The audio gotcha worth knowing before you ship
This one trips people up. For best accuracy, feed the model raw audio. If you're capturing in a browser, disable noiseSuppression and autoGainControl in your getUserMedia constraints — but keep echoCancellation on. Aggressive client-side processing is tuned to make audio sound nice to humans, and in doing so it smears the very signal a transcription model relies on. You want the microphone's honest output going over the wire, not a cleaned-up version that's lost detail. Turning that processing off is often the single biggest accuracy win in a migration.
Sessions and context
You don't rebuild anything to change behavior. The system prompt lives in your LLM call, so you can adjust it or inject a looked-up account detail on any turn — handy for escalating tone or handing off between skills — and agent_context lets you pass the agent's last utterance into the transcription request so short replies resolve correctly. Conversation state lives in your orchestrator, so reconnecting a dropped call is a matter of re-opening the speech sessions against state you already hold, not reconstructing it from scratch.
That's the whole migration. Point your existing audio pipeline at Universal-3.6 Pro Realtime, pick an orchestrator, fix your browser audio constraints, and you're running.
Try it
You don't have to take the benchmark numbers on faith.
- Open the playground and run your own audio through Universal-3.6 Pro Realtime.
- Read the voice agent docs for the streaming reference and orchestrator guides.
- Check pricing to run the per-hour math against your current OpenAI bill.
Try AssemblyAI free — new accounts get $50 in credits, enough to run a real pilot before you commit a dollar.
Reuse your audio pipeline, drop Universal-3.6 Pro Realtime and the Text-to-Speech API into LiveKit or Pipecat, and swap 30+ events for a loop you can see. Grab a free API key and re-point your OpenAI Realtime build today.
Frequently asked questions
What is the best alternative to the OpenAI Realtime API?
It depends on what you're optimizing for, but for production voice agents where transcription accuracy and predictable cost matter most, a chained pipeline on AssemblyAI is the strongest option. Universal-3.6 Pro Realtime posts 5.19% WER on AssemblyAI's English voice-agent benchmark, pairs with AssemblyAI's Text-to-Speech API for voice output, and bills speech-to-text per hour with no concurrency fees. Gemini Live fits teams deep in Google Cloud, and ElevenLabs fits cases where TTS output quality outweighs input accuracy.
How much does the OpenAI Realtime API cost?
It's token-priced and variable. The flagship gpt-realtime-2.1 runs about $32 per million audio input tokens and $64 per million output tokens — roughly $0.05 per minute at the base rate. Because conversation context gets re-processed each turn, real bills commonly run 2x to 5x higher on longer calls. There's a cheaper gpt-realtime-2.1-mini at around $0.016 per minute. The catch is predictability: your cost per call climbs with call length.
Is there a cheaper alternative to OpenAI Realtime?
"Cheaper" is less useful than "predictable." AssemblyAI bills Universal-3.6 Pro Realtime per hour of audio with no concurrency fees, so the speech-to-text line doesn't drift with call length the way token-based pricing does, and your LLM and text-to-speech costs stay separate, visible line items. Open-source options like Moshi or Qwen-Omni have no per-minute fee, but you take on the hosting, scaling, and accuracy-tuning costs yourself.
How do I migrate from OpenAI Realtime to AssemblyAI?
Reuse your existing audio capture and transport. Pick an orchestrator — LiveKit, Pipecat, or your own loop — and wire Universal-3.6 Pro Realtime for speech-to-text, your LLM, and AssemblyAI's Text-to-Speech API for voice output. Replace the 30+ event-type handling with a turn-in, reply-out loop. One migration tip: if you capture audio in the browser, disable noiseSuppression and autoGainControl while keeping echoCancellation on, since aggressive client-side processing hurts transcription accuracy.
What's the difference between OpenAI Realtime and a cascaded voice pipeline?
OpenAI Realtime is one multimodal model that handles speech-to-text, reasoning, and speech output all at once — but transcription is just one job among many, which is where hallucination on messy audio creeps in. A cascaded (dedicated-models-per-step) pipeline like AssemblyAI's routes each stage to a purpose-built model, so you get category-leading transcription accuracy, the ability to feed in live context, and the option to tune each layer independently, with LiveKit, Pipecat, or your own loop handling the handoffs.