Gemini 2.5 Flash Native Audio is Google's native-audio Live API model, which the model page describes as enabling low-latency, real-time voice and video interactions with Gemini 2.5 Flash: it processes continuous streams of audio, video, or text and answers with immediate, human-like speech rather than chaining a transcriber and a synthesiser.
- Input
- text audio video $0.5/M
- Output
- text audio $2/M
- Audio input
- $3/M
- Audio output
- $12/M
- Knowledge cutoff
- 2025-01
Benchmarks
gemini-2.5-flash-native-audio: 8 published, but no benchmark it shares with enough other models to compare.
Price in context
Where the price sits among 6 comparable models
The bar shows how this model’s price compares with every other model of the same kind on Synthorai. The cheapest and the most expensive are named at each end. These are base rates; batch, region and cache-write discounts are on the pricing page.
Specs & limits
Tokens
| Context window (vendor spec) | 131,072 |
|---|---|
| Max output (vendor spec) | 8,192 |
| Knowledge cutoff | 2025-01 |
Thinking
| Vendor control | thinkingBudget |
|---|---|
| Default | dynamic thinking applied when the request sets nothing |
| Can be turned off | Yes |
| Thinking behaviour | The Live API guide documents this 2.5 Live model as using a token budget rather than a level: dynamic thinking on by default, thinkingBudget 0 to disable. |
| Parameter | reasoning_effort |
| Values | minimal · low · medium · high accepted set is the provider's |
Audio
| Audio limits |
|
|---|---|
| Streaming transcription | Yes |
Realtime
| Voices | Any voice from the Gemini text-to-speech voice set; native-audio output models switch languages naturally during a conversation. |
|---|---|
| Session |
|
Model
| Modalities | text + audio + video → text + audio |
|---|
Native-audio Live API model that processes raw audio end to end rather than chaining STT and TTS. Google's model page lists a January 2025 knowledge cutoff and an unusually small 8,192-token output limit alongside the 131,072-token input window.
Use gemini-2.5-flash-native-audio in 30 seconds
OpenAI Realtime-compatible: connect over WebSocket and stream audio in, audio out. WS /v1/realtime
import asyncio, base64, json, websockets
URL = "wss://synthorai.io/v1/realtime?model=gemini-2.5-flash-native-audio"
# Send ONLY the Authorization header - the beta protocol is retired.
HEADERS = {"Authorization": "Bearer sk-syn-..."}
async def main():
async with websockets.connect(URL, additional_headers=HEADERS) as ws:
# 1) configure the speech-to-speech session
await ws.send(json.dumps({
"type": "session.update",
"session": {
"type": "realtime",
"output_modalities": ["audio"],
"audio": {"output": {"voice": "alloy"}},
},
}))
# 2) send input audio (base64 PCM16), then request a spoken reply
await ws.send(json.dumps({"type": "input_audio_buffer.append", "audio": pcm16_b64}))
await ws.send(json.dumps({"type": "input_audio_buffer.commit"}))
await ws.send(json.dumps({"type": "response.create"}))
# 3) stream the model's audio (and text) back
async for raw in ws:
ev = json.loads(raw)
if ev["type"] == "response.audio.delta":
play(base64.b64decode(ev["delta"])) # audio out
elif ev["type"] == "response.done":
break
asyncio.run(main())import WebSocket from "ws";
const ws = new WebSocket("wss://synthorai.io/v1/realtime?model=gemini-2.5-flash-native-audio", {
// Send ONLY the Authorization header — the beta protocol is retired.
headers: { Authorization: "Bearer sk-syn-..." },
});
ws.on("open", () => {
// configure the speech-to-speech session
ws.send(JSON.stringify({ type: "session.update", session: {
type: "realtime", output_modalities: ["audio"], audio: { output: { voice: "alloy" } },
} }));
// send input audio (base64 PCM16), then request a spoken reply
ws.send(JSON.stringify({ type: "input_audio_buffer.append", audio: pcm16Base64 }));
ws.send(JSON.stringify({ type: "input_audio_buffer.commit" }));
ws.send(JSON.stringify({ type: "response.create" }));
});
ws.on("message", (raw) => {
const ev = JSON.parse(raw.toString());
if (ev.type === "response.audio.delta") playAudio(Buffer.from(ev.delta, "base64")); // audio out
else if (ev.type === "response.done") ws.close();
});# Realtime is a WebSocket protocol - use a WS client such as websocat.
# Each line below is one OpenAI Realtime event (JSON) sent to the session.
websocat -H 'Authorization: Bearer sk-syn-...' \
'wss://synthorai.io/v1/realtime?model=gemini-2.5-flash-native-audio' <<'EOF'
{"type":"session.update","session":{"type":"realtime","output_modalities":["audio"],"audio":{"output":{"voice":"alloy"}}}}
{"type":"input_audio_buffer.append","audio":"<base64-pcm16>"}
{"type":"input_audio_buffer.commit"}
{"type":"response.create"}
EOF
# Responses stream back as response.audio.delta (base64 audio out) … response.donepackage main
import (
"net/http"
"github.com/gorilla/websocket"
)
func main() {
h := http.Header{}
h.Set("Authorization", "Bearer sk-syn-...")
// Send ONLY the Authorization header — the beta protocol is retired.
c, _, err := websocket.DefaultDialer.Dial("wss://synthorai.io/v1/realtime?model=gemini-2.5-flash-native-audio", h)
if err != nil {
panic(err)
}
defer c.Close()
// configure the speech-to-speech session, send audio, request a spoken reply
c.WriteJSON(map[string]any{"type": "session.update", "session": map[string]any{
"type": "realtime", "output_modalities": []string{"audio"},
"audio": map[string]any{"output": map[string]any{"voice": "alloy"}}}})
c.WriteJSON(map[string]any{"type": "input_audio_buffer.append", "audio": pcm16B64})
c.WriteJSON(map[string]any{"type": "input_audio_buffer.commit"})
c.WriteJSON(map[string]any{"type": "response.create"})
for {
var ev struct {
Type string `json:"type"`
Delta string `json:"delta"`
}
if err := c.ReadJSON(&ev); err != nil {
return
}
if ev.Type == "response.audio.delta" {
playAudio(ev.Delta) // base64 audio out
} else if ev.Type == "response.done" {
return
}
}
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.WebSocket;
import java.util.concurrent.CompletionStage;
// JDK built-in WebSocket — no extra dependency needed.
WebSocket ws = HttpClient.newHttpClient().newWebSocketBuilder()
.header("Authorization", "Bearer sk-syn-...")
// Send ONLY the Authorization header — the beta protocol is retired.
.buildAsync(URI.create("wss://synthorai.io/v1/realtime?model=gemini-2.5-flash-native-audio"), new WebSocket.Listener() {
public CompletionStage<?> onText(WebSocket w, CharSequence data, boolean last) {
// handle response.audio.delta (base64 audio out) / response.done here
w.request(1);
return null;
}
}).join();
// configure the session, send input audio, then request a spoken reply
ws.sendText("{\"type\":\"session.update\",\"session\":{\"type\":\"realtime\",\"output_modalities\":[\"audio\"],\"audio\":{\"output\":{\"voice\":\"alloy\"}}}}", true);
ws.sendText("{\"type\":\"input_audio_buffer.append\",\"audio\":\"<base64-pcm16>\"}", true);
ws.sendText("{\"type\":\"input_audio_buffer.commit\"}", true);
ws.sendText("{\"type\":\"response.create\"}", true);About gemini-2.5-flash-native-audio
- Sessions run over a stateful WebSocket, taking raw 16-bit PCM at 16 kHz in and returning it at 24 kHz, and the model accepts audio, video, and text while returning audio and text.
- Token limits are 131,072 for input and an unusually small 8,192 for output, the session context window is 128k tokens for native-audio models, and audio-only sessions run 15 minutes, or 2 minutes with video, unless extended through session management.
- Function calling, search grounding, and thinking are supported; caching, structured outputs, code execution, and the Batch API are not.
- Two capabilities set this generation apart from the newer Live model and are the reason to stay on it: proactive audio, which lets the model decide not to respond when the input is not relevant, and affective dialog, which adapts response style to the expression and tone of the speaker.
- Asynchronous function calling is also supported here, so a declaration marked non-blocking lets the model keep talking while a tool runs.
- Voices come from Google's text-to-speech set, native-audio output switches languages naturally during a conversation and does not accept an explicit language code, and the knowledge cutoff is January 2025.
- Synthorai exposes it through the OpenAI-compatible /v1/realtime WebSocket endpoint used for the rest of its voice catalog.
FAQ
Is the gemini-2.5-flash-native-audio API free to try?
gemini-2.5-flash-native-audio is currently in invited beta: access is application-based rather than open signup. Apply from the Synthorai console; once approved, standard pay-as-you-go pricing applies with no subscription.
What is gemini-2.5-flash-native-audio best at?
Low-latency real-time voice and video over the Live API; proactive audio and affective dialog, absent from the newer Live model; audio-only sessions run 15 minutes, two with video. See the About section for the full picture from the vendor's own release notes.
How much does gemini-2.5-flash-native-audio cost?
gemini-2.5-flash-native-audio costs $0.5 per million input tokens and $2 per million output tokens on Synthorai. That is the provider's list price, with no platform markup.
How do I connect to the gemini-2.5-flash-native-audio API?
gemini-2.5-flash-native-audio is a speech-to-speech model: connect over WebSocket to wss://synthorai.io/v1/realtime?model=gemini-2.5-flash-native-audio with the OpenAI Realtime SDK (or a raw WebSocket) and stream audio in, audio out. It is not a POST /v1/audio/transcriptions file upload. Authenticate with your sk-syn key, sending only the Authorization header (the beta protocol is retired).
How do I get access to gemini-2.5-flash-native-audio?
gemini-2.5-flash-native-audio is in invited beta: request access from the Synthorai console. Once approved it works like every other model: point your OpenAI SDK at base_url="https://synthorai.io/v1" and set model="gemini-2.5-flash-native-audio".
Related models
Compare
Every value on this page is transcribed from the vendor's own documentation, linked above, and carries the date it was checked. Prices are compared across the catalogue; specification values that vendors define differently are shown with the difference stated rather than charted. Nothing here is measured by us, and nothing is scored.