OpenAI Releases GPT-Realtime-2.1 and GPT-Realtime-2.1-mini Real-Time Voice Models: the mini Model Now Reasons, Latency Down 25%
- OpenAI has simultaneously launched two new Realtime models in the API: gpt-realtime-2.1 and gpt-realtime-2.1-mini, both built for low-latency voice and multimodal scenarios
- gpt-realtime-2.1-mini is the first reasoning-capable real-time voice model to land in the mini price tier, priced identically to the previous gpt-realtime-mini
- Reasoning effort is configurable on both models across five levels (minimal / low / medium / high / xhigh), defaulting to low to keep latency down
- Thanks to caching optimizations, response times for the slowest requests across the entire Realtime voice lineup dropped by at least 25%; for the mini model, cached audio input pricing fell from $10 to $0.30 per million tokens
- gpt-realtime-2.1 improves on its predecessor in alphanumeric recognition, silence and noise handling, and interruption behavior; the mini's audio output price is roughly a third of the full model's ($20 vs. $64)
What OpenAI Just Shipped
OpenAI has just released two new Realtime models in the API — gpt-realtime-2.1 and gpt-realtime-2.1-mini — both built for low-latency voice and multimodal interaction.
Both of these are "listen-and-respond" voice assistant models — part of the Realtime family's conversational-response, tool-calling line. OpenAI separately offers gpt-realtime-translate for simultaneous interpretation and gpt-realtime-whisper for real-time transcription; those are separate models and aren't part of this release.
First, How "Realtime" Actually Works
The Realtime API is built so a single model turns speech it hears directly into speech it speaks. It skips the three-step round trip of "speech to text, generate a text reply, then synthesize speech." This is what's called single-model speech-to-speech. Here's how the two approaches compare.
Speech → transcribed to text → a text reply is generated → synthesized back into speech. Each handoff has to wait for the previous step to finish, latency stacks up layer by layer, and the speaker's tone and pauses tend to get lost in the transcription step.
One model, speech in and speech out, with no split into three stages. Two fewer handoffs means lower latency, and tone and nuance come through better too.
The single-model approach is like two people talking face to face. The three-handoff approach is like saying something while someone next to you writes it down on a note, and another person reads it back aloud — slow, and all the tone gets lost on the paper.
Where Voice Assistants Used to Get Stuck
Voice assistants used to stall out whenever they called a tool. The model would go silent right after triggering a function call, the user would assume the call had dropped, then either talk over it or just hang up — breaking the conversation state and leaving the user with a half-finished result they'd have to redo from scratch.
Reasoning Moves Into the Mini Tier — How It Fixes the Silence Problem
This section is the heart of the release: pushing reasoning down into the low-cost mini tier, paired with a "spoken heads-up," is exactly what fixes the dead-air problem from the last section.
What "Reasoning" Means Here
Reasoning means the model thinks through how to handle a request — and whether to call a tool — before it opens its mouth, instead of blurting out whatever comes to mind the instant it hears something. The mini tier now also supports function calling, so it can plan a step ahead, call your function, and then deliver an answer.
A spoken heads-up turns silence into working-while-talking. The model can say something like "let me check on that" and keep talking while it processes the request in the background. The user hears a voice the whole time and never assumes the call dropped, so multi-step voice tasks stay coherent.
The bigger deal is the price: the mini version gained reasoning, but its pricing is exactly the same as the previous gpt-realtime-mini. Cost-sensitive voice apps can now get reasoning and tool calling for the first time without paying more.
Breaking down a single tool-using exchange, the sequence looks like this:
Five Reasoning Levels — Trading Off Latency Against Quality
Reasoning effort is configurable across five levels, from low to high: minimal, low, medium, high, xhigh. Low is the default and keeps latency down for simple exchanges; higher levels mean more latency and more output tokens. OpenAI recommends most production voice assistants start at low and only dial it up for harder tasks.
Choosing Between the Two Models
In short: for the strongest real-time reasoning, tool calling, instruction-following, and voice-assistant behavior, use the full gpt-realtime-2.1; for faster and cheaper with "good enough" capability, use gpt-realtime-2.1-mini.
| Dimension | gpt-realtime-2.1 (full) | gpt-realtime-2.1-mini |
|---|---|---|
| Positioning | Strongest real-time reasoning and voice-assistant behavior | Faster, cheaper option |
| Reasoning | Yes, adjustable effort | Yes, mini reasoning model |
| Tool calling | Yes | Yes |
| Improvements over predecessor | Better alphanumeric recognition, silence/noise handling, interruption behavior | Retains prior mini capabilities, adds reasoning |
| Audio output price | $64 / million tokens | $20 / million tokens |
| Pick it when… | You need top-tier reasoning and voice-assistant performance | You need speed and low cost, and capability is good enough |
25% Lower Latency — How Caching Saves Money
This round's latency improvement comes from caching optimizations. And caching doesn't just save time — it saves a lot of money too.
First, What Is "p95 Latency"
p95 latency is what you get when you line up every request's response time from fastest to slowest and take the value sitting at the 95th percentile. It represents how long the slowest 5% of users actually waited — not the average. For real-time voice, the stutter users actually notice is hiding in that slow tail. Cutting that tail by at least 25% makes a noticeable difference in how responsive a call feels.
Say 100 people are waiting in a checkout line. What you actually care about isn't the average wait time — it's how long the 5th-from-last person waited. If they're not complaining, the system is solid.
Why Cache Hits Cut the Price So Much
A cached input hit means this turn of the conversation is continuing from a system prompt or history that's already been processed — the service recognizes "this part's already computed," reuses it instead of recomputing, and the price drops sharply as a result. The system prompt gets cached after the first turn, so the longer the conversation and the more it's reused, the more you save. Here's the gap between cached and fresh pricing for the mini's audio input:
Full Pricing Across All Three Models
All prices are per million tokens, split into text, audio, and image categories. Click a tab to switch views; the mini column is highlighted.
| Audio / per million tokens | gpt-realtime-2.1 | 2.1-mini | Previous mini |
|---|---|---|---|
| Audio input | $32.00 | $10.00 | $10.00 |
| Audio cached input | $0.40 | $0.30 | $0.30 |
| Audio output | $64.00 | $20.00 | $20.00 |
| Text / per million tokens | gpt-realtime-2.1 | 2.1-mini | Previous mini |
|---|---|---|---|
| Text input | $4.00 | $0.60 | $0.60 |
| Text cached input | $0.40 | $0.06 | $0.06 |
| Text output | $24.00 | $2.40 | $2.40 |
| Image / per million tokens | gpt-realtime-2.1 | 2.1-mini | Previous mini |
|---|---|---|---|
| Image input | $5.00 | $0.80 | $0.80 |
| Image cached input | $0.50 | $0.08 | $0.08 |
What It's Good For
Four typical scenarios, and how each one puts reasoning, tool calling, and the recognition improvements to work:
A user calls in saying a charge looks wrong. The mini uses low-effort reasoning to assess the issue, calls lookup_account first, then check_invoice, narrating progress out loud at each step so the user never thinks the call dropped.
A user wants to move their appointment to next Tuesday. The model captures the exact date precisely, confirms it with the user, then calls the reschedule function. Only confirmed values get passed to the tool, avoiding guessed inputs.
A mobile app streams microphone audio over WebRTC. The mini answers product questions in a sentence or two, at low cost, so the feature can run at high concurrency.
A technician asks the assistant to log a part number. The improved alphanumeric recognition more accurately captures codes like "8-3-5-7-1," and the model reads it back to confirm before acting on it.
What Integration Looks Like
The minimal setup looks like this: the server first mints a short-lived client credential (the standard API key stays server-side and never gets exposed), and the browser uses that short-lived credential to connect directly via WebRTC, establishing a microphone track and a data channel to send and receive events.
The connection method depends on the scenario: browsers and mobile apps capturing and playing audio directly use WebRTC; servers that already have a raw audio stream (call centers, media pipelines) use WebSocket; phone voice agents use SIP.
Expand for two minimal code snippets (server-side credential minting + browser-side connection)
// Server: mint a short-lived client secret
const r = await fetch("https://api.openai.com/v1/realtime/client_secrets", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
session: {
type: "realtime",
model: "gpt-realtime-2.1-mini",
instructions: "You are a support agent. Reply in one or two short sentences.",
reasoning: { effort: "low" },
tools: [
{
type: "function",
name: "lookup_account",
description: "Look up a customer account by email.",
parameters: {
type: "object",
properties: { email: { type: "string" } },
required: ["email"]
}
}
],
tool_choice: "auto"
}
})
});
const { value: EPHEMERAL_KEY } = await r.json(); // pass this to the browser
// Browser: connect to the Realtime API over WebRTC
const pc = new RTCPeerConnection();
const audioEl = document.createElement("audio");
audioEl.autoplay = true;
pc.ontrack = (e) => { audioEl.srcObject = e.streams[0]; };
const mic = await navigator.mediaDevices.getUserMedia({ audio: true });
pc.addTrack(mic.getTracks()[0]);
const events = pc.createDataChannel("oai-events");
events.addEventListener("message", (e) => console.log(JSON.parse(e.data)));
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
const sdp = await fetch("https://api.openai.com/v1/realtime/calls", {
method: "POST",
body: offer.sdp,
headers: {
Authorization: `Bearer ${EPHEMERAL_KEY}`,
"Content-Type": "application/sdp"
}
});
await pc.setRemoteDescription({ type: "answer", sdp: await sdp.text() });
Start with low reasoning effort and only raise it for harder tasks; keep hard rules and defaults separate in your instructions; run an eval before and after any model migration to compare.
This is a full GA endpoint, not a beta. If your app distinguishes between end users, OpenAI recommends adding an OpenAI-Safety-Identifier header to the credential-minting request (e.g., a hash of an internal user ID), so that when the platform monitors for abuse it can pinpoint a specific user instead of mistakenly flagging the whole account.
Strengths and Limitations
Per OpenAI's own claims, here's both sides of this release:
- Reasoning pushed down into the low-cost mini tier
- Priced the same as the previous gpt-realtime-mini — no price hike
- p95 latency down at least 25% across the whole lineup
- Five adjustable reasoning levels to trade off latency against depth per task
- Single-model audio pipeline makes conversation feel more natural
- Audio is billed by token, which is hard to translate into an actual per-call cost
- Raising reasoning effort increases both latency and output tokens
- Long sessions that keep resending context without trimming will accumulate input costs
- The mini tier's capability still trails the full gpt-realtime-2.1
The model can say something like "let me look up that order" and keep talking while it processes the request in the background, keeping multi-step voice tasks coherent. MarkTechPost, by Michal Sutter