I've migrated four production voice agents off the OpenAI Realtime API in the past year. Two teams only needed streaming transcription. Two ran full speech-to-speech and eventually decoupled to STT + LLM + TTS. Every migration shared the same trigger: unpredictable bills and a client rewrite forced by OpenAI's beta-to-GA deprecation in May 2026.
If you're processing 400+ audio hours per month, token-metered Realtime pricing stops being a rounding error. I've watched sessions where silence, VAD triggers, and growing conversation context pushed costs past $4,000/month. That's when a flat-rate OpenAI Realtime API alternative like Privocio's Go plan ($19/400 hr per our pricing page) starts looking less like a nice-to-have and more like a budget line item you can actually forecast.
This guide covers why teams are leaving Realtime in 2026, which migration path fits your stack, the one-line SDK swap for streaming STT, cost math at agent scale, and what changes when you care about privacy.
Why teams are leaving the Realtime API in 2026
OpenAI's Realtime API graduated to GA in 2025 with breaking changes: new endpoints, renamed events, different session shapes. The beta endpoints were removed on May 12, 2026 per OpenAI's deprecation schedule. If you built on beta WebSocket events, you didn't tweak a config file. You rewrote client code.
The billing model hurts just as much. OpenAI documents that Realtime costs accrue per response across input audio, output audio, and text tokens, with conversation history growing each turn (Managing costs). Community reports on the OpenAI Developer Community describe sessions where VAD and context accumulation inflate bills beyond commercial viability. I've seen the same pattern on a LiveKit agent that idled between turns but kept paying for buffered audio.
Privacy is the third push. Realtime processes audio through a black-box multimodal model with no self-host path in public docs. For regulated workloads (healthcare, legal, fintech), that's a non-starter. You can't audit what you can't isolate.
Most teams I talk to don't actually need speech-to-speech. They need streaming STT feeding their own LLM and TTS. Realtime bundles all three, and you pay for the bundle whether you use it or not.
Two migration paths (pick yours)
Path A fits teams using Realtime for transcription only. Your WebSocket client already sends audio and reads transcript events. Swap the STT endpoint to a compatible streaming API. Keep your LLM and TTS providers unchanged. I've done this in an afternoon for a Pipecat pipeline.
Path B is for full Realtime speech-to-speech. You're using Realtime's bundled model for the entire voice loop. Decouple to a cascaded STT → LLM → TTS architecture. LiveKit's voice agent architecture guide walks through this pattern with Deepgram, Whisper, and other providers. More work upfront, but you regain control over each leg's cost and provider.
How to pick: if you only read conversation.item.input_audio_transcription.completed events, start with Path A. If you use Realtime's built-in model responses and audio output, you need Path B. At 400+ hr/month with unpredictable billing, either path works, but decouple STT to a flat-rate provider. In regulated industries, both paths need a privacy-first STT layer you can audit.
Path A is what most developer teams should start with. You keep 80% of your code and fix the cost problem on the transcription leg.
The one-line migration — OpenAI SDK compatibility
Privocio exposes an OpenAI-compatible API for transcription. If you're already using the OpenAI Python or Node SDK, the migration is a base URL change plus a new API key.
Python:
from openai import OpenAI
client = OpenAI(
base_url="https://api.privocio.com/v1",
api_key="YOUR_PRIVOCIO_KEY",
)
# Streaming transcription
with client.audio.transcriptions.with_streaming_response.create(
model="whisper-1",
file=audio_file,
response_format="verbose_json",
) as response:
for event in response.iter_bytes():
process_chunk(event)
TypeScript/Node:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.privocio.com/v1",
apiKey: process.env.PRIVOCIO_KEY,
});
const transcription = await client.audio.transcriptions.create({
file: fs.createReadStream("audio.wav"),
model: "whisper-1",
});
For SSE streaming, use POST /v1/transcriptions/stream or add stream=true depending on your client wrapper. The event shape differs from Realtime's WebSocket events. You'll map Realtime's input_audio_buffer.speech_started and conversation.item.input_audio_transcription.completed to Privocio's SSE segments. The audio ingestion stays the same; only the response parser changes.
Agent output mode is worth enabling if you're feeding transcripts into an LLM. It returns structured JSON that cuts downstream token costs by roughly 60% compared to verbose_raw output. I've seen this matter most in LangChain and CrewAI pipelines where every token in the context window costs money. See our developer use cases for integration patterns.
What doesn't change: your LLM provider, your TTS provider, your WebSocket transport layer (LiveKit, Pipecat, custom). What changes: the STT endpoint, the response event parser, and your monthly invoice.
Cost comparison at agent scale (400+ hr/month)
Be honest about scope: Realtime S2S rows below include LLM and TTS bundled in. Privocio is STT-only. The cost win comes from decoupling, not apples-to-apples speech-to-speech replacement.
| Provider | Model / Scope | Cost per 400 hr | Billing model | Privacy notes |
|---|---|---|---|---|
| OpenAI Realtime API (S2S) | gpt-realtime balanced conv. | ~$3,600–$4,800/mo (~$9–12/hr) | Token + audio tokens; grows with context | Cloud-only; data may train models |
| OpenAI Realtime (STT-only) | gpt-realtime-whisper stream | ~$408/mo ($0.017/min) | Per audio minute | Cloud-only |
| OpenAI Whisper API | whisper-1 | ~$144/mo ($0.006/min) | Per minute | Data may train; no streaming |
| Deepgram Nova-3 | Streaming STT | ~$185/mo ($0.0077/min PAYG) | Per second | Cloud default; self-host enterprise |
| AssemblyAI Voice Agent | Full pipeline | ~$1,800/mo ($4.50/hr) | Flat per connection hour | Cloud-only |
| Self-hosted (faster-whisper) | STT on own infra | ~$5–10/mo compute + ops burden | Fixed server | Full control; you operate it |
| Privocio Go | Streaming STT + Agent mode | $19 / 400 hr (4-week cycle) | Flat allowance, no overage surprise | No training on data; self-host available |
Sources: OpenAI pricing, Deepgram PAYG rates, AssemblyAI Voice Agent pricing, Privocio pricing, Ry Walker Realtime cost analysis. Realtime S2S range from ~$0.15–0.20/min token math.
At 400 hours, per-minute STT adds up. AssemblyAI's migration guide positions their $4.50/hr flat voice agent stack as cheaper than Realtime, and it is for full-pipeline users. But if you only need STT, you're still paying for a bundled voice agent you don't use. Inworld's Realtime alternatives roundup lists speech-to-speech clones. None address the decoupled STT pattern with flat-rate pricing.
Decouple STT, keep your LLM/TTS, and flat-rate billing at 400 hr/month lands you at $19 instead of $144 to $4,800 depending on which Realtime mode you were running.
Privacy and compliance checklist
Before you swap STT providers, run through this checklist. I've used it for three healthcare deployments and two fintech pilots.
- Data residency: where does audio land? Privocio has self-hosted deployment so audio never leaves your VPC. Cloud-hosted Realtime processes audio on OpenAI infrastructure with no regional isolation guarantee in public docs.
- Model training: Privocio does not train on customer data. OpenAI's API data policies vary by product tier; verify your agreement covers audio retention.
- Retention controls: can you set TTL on transcripts? Privocio supports configurable retention. Realtime session logs persist in conversation history until you truncate.
- Certifications: Enterprise plans include SOC 2 compliance. For HIPAA workloads, self-hosted STT with a BAA is the pattern I recommend.
- Audit trail: cascaded pipelines let you log each leg independently. Monolithic S2S makes it harder to prove where audio was processed.
When Realtime's monolithic model is a non-starter, you don't need another S2S clone. You need an auditable STT layer you control. Read our privacy policy for data handling specifics.
Production tips after migration
Privocio Go includes 30 RPM and 2 concurrent streams. Plan your agent concurrency accordingly. If you're running 10+ simultaneous voice sessions, Pro or Enterprise tiers add headroom.
Short audio clips work fine with synchronous API calls. Long-form audio (call center recordings, meeting transcription) should use webhooks so you don't hold a connection open for 30+ minutes. Our API docs cover both patterns.
LangChain and CrewAI agents consume structured JSON better than raw transcript dumps. Switch to Agent output mode and pass the parsed fields directly into your chain's state object. You'll cut LLM input tokens on every turn.
Privocio's 4-week billing cycle resets on a rolling window, not calendar month. Track usage against your allowance in the dashboard. I've seen teams hit 380 hours in week three and throttle non-critical transcription jobs until the cycle resets.
Decoupled STT + LLM + TTS adds round-trip latency compared to Realtime S2S. In my benchmarks, streaming SSE from Privocio delivers sub-second partial transcripts, fast enough for conversational agents where the LLM leg dominates total response time anyway. If you need sub-200ms voice loops, S2S still wins on latency. You trade that for cost control and provider choice.
Frequently Asked Questions
Is Privocio a drop-in replacement for the entire Realtime API?
No. Privocio replaces the STT layer only. You keep your LLM provider (OpenAI, Anthropic, local models) and TTS provider (ElevenLabs, OpenAI, Cartesia). If you need full speech-to-speech in one WebSocket, look at Deepgram's voice agent API or similar bundled stacks. We think decoupling is the better long-term architecture for most teams.
Can I keep OpenAI for LLM/TTS and only swap STT?
Yes, that's the migration pattern I recommend. Swap the transcription endpoint, keep GPT-4o for reasoning, keep your TTS provider. Your total stack cost drops because STT was often the fastest-growing line item on per-minute billing.
What about latency compared to Realtime S2S?
Realtime S2S wins on raw latency because it skips the STT, LLM, and TTS round trips. Decoupled streaming STT via SSE delivers partial transcripts in under a second in my production tests. For most conversational agents, the LLM inference time is the bottleneck anyway. Shaving 200ms off STT doesn't change the user experience much.
How does Privocio compare to the OpenAI Whisper API specifically?
Whisper API is cheaper per minute (~$144/400 hr) but lacks streaming and may use your data for training depending on your tier. Privocio adds streaming SSE, Agent output mode, flat-rate billing, and a no-training guarantee. See our Privocio vs Whisper comparison for the full breakdown.
What if I exceed 400 hours in a billing cycle?
Upgrade to Pro ($39/4 weeks) or Enterprise for custom allowances. The Go plan is designed for teams testing production voice agents before they scale. I'd rather you hit the limit and upgrade than overpay on per-minute billing while "evaluating."
Do I need to rewrite my WebSocket client entirely?
Only the event parser. Your audio capture, buffering, and transport layer stay the same. Map Realtime events to Privocio SSE segments. For SDK-based integrations, it's literally a base_url change.
Conclusion: Decouple STT, Keep Your Stack
The Realtime API's GA migration and token billing forced a reckoning for every production voice agent I maintain. Most teams don't need another speech-to-speech bundle. They need streaming STT with predictable costs and a privacy posture they can explain to compliance.
If you're on Realtime today, start with Path A: swap the STT endpoint, keep your LLM and TTS, and run the cost math at your actual monthly hours. At 400+ hr, flat-rate STT at $19/4 weeks beats per-minute billing by an order of magnitude.
Try the free tier (3 hr/4 weeks) or hit our docs quickstart to test the one-line SDK swap on your existing code. For the full picture on private STT, read our private speech-to-text API guide.
Image Credits:
Cover photo from Unsplash (Unsplash License).