GPT Realtime Whisper is OpenAI's streaming speech-to-text model for live audio.
- Input
- audio text
- Output
- text
- Price
- $0.017/min
- Context
- 16K
- Knowledge cutoff
- 2024-09
Rates by prompt length
The whole request uses the rate for its input-length tier. Prices are USD per million tokens.
| Input tokens | Input | Output | Thinking input |
|---|
Price in context
Where the price sits among 9 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) | 16,000 |
|---|---|
| Max output (vendor spec) | 2,000 |
| Knowledge cutoff | 2024-09 |
Audio
| Languages | OpenAI does not publish a model-specific language list on this model card; verify the target language with representative audio. |
|---|---|
| Audio limits |
|
| Streaming transcription | Yes |
Model
| Modalities | audio + text → text |
|---|
Use GPT Realtime Whisper in 30 seconds
Used only inside an OpenAI Realtime session, as its input transcription model: open the session on a Realtime model and set session.audio.input.transcription.model to gpt-realtime-whisper. WS /v1/realtime
import asyncio, json, websockets
URL = "wss://synthorai.io/v1/realtime?model=gpt-realtime-2.1"
# 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) name gpt-realtime-whisper as the session's input transcription model
await ws.send(json.dumps({
"type": "session.update",
"session": {
"type": "realtime",
"audio": {"input": {"transcription": {"model": "gpt-realtime-whisper"}}},
},
}))
# 2) send input audio (base64 PCM16) and commit it
await ws.send(json.dumps({"type": "input_audio_buffer.append", "audio": pcm16_b64}))
await ws.send(json.dumps({"type": "input_audio_buffer.commit"}))
# 3) the transcript of what was said arrives as its own event
async for raw in ws:
ev = json.loads(raw)
if ev["type"] == "conversation.item.input_audio_transcription.completed":
print(ev["transcript"])
break
asyncio.run(main())import WebSocket from "ws";
const ws = new WebSocket("wss://synthorai.io/v1/realtime?model=gpt-realtime-2.1", {
// Send ONLY the Authorization header, the beta protocol is retired.
headers: { Authorization: "Bearer sk-syn-..." },
});
ws.on("open", () => {
// name gpt-realtime-whisper as the session's input transcription model
ws.send(JSON.stringify({ type: "session.update", session: {
type: "realtime", audio: { input: { transcription: { model: "gpt-realtime-whisper" } } },
} }));
// send input audio (base64 PCM16) and commit it
ws.send(JSON.stringify({ type: "input_audio_buffer.append", audio: pcm16Base64 }));
ws.send(JSON.stringify({ type: "input_audio_buffer.commit" }));
});
ws.on("message", (raw) => {
const ev = JSON.parse(raw.toString());
if (ev.type === "conversation.item.input_audio_transcription.completed") {
console.log(ev.transcript); // the transcript of what was said
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=gpt-realtime-2.1' <<'EOF'
{"type":"session.update","session":{"type":"realtime","audio":{"input":{"transcription":{"model":"gpt-realtime-whisper"}}}}}
{"type":"input_audio_buffer.append","audio":"<base64-pcm16>"}
{"type":"input_audio_buffer.commit"}
EOF
# The transcript arrives as conversation.item.input_audio_transcription.completedpackage main
import (
"fmt"
"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=gpt-realtime-2.1", h)
if err != nil {
panic(err)
}
defer c.Close()
// name gpt-realtime-whisper as the session's input transcription model, then send audio
c.WriteJSON(map[string]any{"type": "session.update", "session": map[string]any{
"type": "realtime",
"audio": map[string]any{"input": map[string]any{
"transcription": map[string]any{"model": "gpt-realtime-whisper"}}}}})
c.WriteJSON(map[string]any{"type": "input_audio_buffer.append", "audio": pcm16B64})
c.WriteJSON(map[string]any{"type": "input_audio_buffer.commit"})
for {
var ev struct {
Type string `json:"type"`
Transcript string `json:"transcript"`
}
if err := c.ReadJSON(&ev); err != nil {
return
}
if ev.Type == "conversation.item.input_audio_transcription.completed" {
fmt.Println(ev.Transcript) // the transcript of what was said
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=gpt-realtime-2.1"), new WebSocket.Listener() {
public CompletionStage<?> onText(WebSocket w, CharSequence data, boolean last) {
// conversation.item.input_audio_transcription.completed carries the transcript
w.request(1);
return null;
}
}).join();
// name gpt-realtime-whisper as the session's input transcription model, then send audio
ws.sendText("{\"type\":\"session.update\",\"session\":{\"type\":\"realtime\",\"audio\":{\"input\":{\"transcription\":{\"model\":\"gpt-realtime-whisper\"}}}}}", true);
ws.sendText("{\"type\":\"input_audio_buffer.append\",\"audio\":\"<base64-pcm16>\"}", true);
ws.sendText("{\"type\":\"input_audio_buffer.commit\"}", true);About GPT Realtime Whisper
- It emits low-latency transcript updates and is billed by audio duration, rather than text tokens.
- The model card lists a 16,000-token context and a 2,000-token output ceiling, but does not publish a model-specific language list.
- OpenAI's current transcription guide recommends newer models for new realtime integrations and retains this one for existing integrations where supported; test the target language and noisy audio before choosing it.
FAQ
Is the GPT Realtime Whisper API free to try?
Yes: new accounts get 10 trial calls and up to $1 in free credit, no card required. That's enough to try GPT Realtime Whisper against your real workload before adding a payment method.
What is GPT Realtime Whisper best at?
Streaming transcript updates from live audio; billed per audio minute; existing integrations; newer starting models available. See the About section for the full picture from the vendor's own release notes.
How much does GPT Realtime Whisper cost?
GPT Realtime Whisper costs $0.017 per minute of audio transcribed on Synthorai: pay-as-you-go, no platform markup, no subscription.
How do I use GPT Realtime Whisper?
GPT Realtime Whisper is not called on its own. It transcribes the caller's audio inside a Realtime session: connect to wss://synthorai.io/v1/realtime with a Realtime model, set session.audio.input.transcription.model to "gpt-realtime-whisper", and read each transcript from the conversation.item.input_audio_transcription.completed event. It bills $0.017 per minute of input audio, on top of the session's own rates.
How do I get access to GPT Realtime Whisper?
Use your Synthorai API key to open the Realtime session and name "gpt-realtime-whisper" as its input transcription model. GPT Realtime Whisper is built for Realtime sessions, not for the /v1/audio/transcriptions file API; to transcribe a file, pick one of the speech-to-text models. One API key covers every model on the gateway.
Related models
Compare
Specifications and vendor benchmarks link to their sources. Gateway support describes the Synthorai implementation. Archived examples are individual gateway requests, not a guarantee of general model performance. Prices use the public feed or its build snapshot.