Chirp 3 vs GPT-4o Transcribe Diarize
Which one, when
These two both do transcription with speaker diarization, but they bill in different units - chirp-3 at $0.016 per audio minute versus gpt-4o-transcribe-diarize at $6.25 per million audio input tokens plus $2.5 per million text input and output tokens - so no single conversion between them is honest. Pick chirp-3 for long or live jobs: BatchRecognize spans 1 minute to 1 hour, StreamingRecognize handles real-time, and it covers 29 GA plus 82 preview locales, though word-level timestamps are unsupported. Pick gpt-4o-transcribe-diarize for shorter files under 25MB where you want diarized_json with speaker labels and segment timestamps, within its 16000-token context and 2000-token output cap.
Pricing
| Chirp 3 | GPT-4o Transcribe Diarize | Δ | |
|---|---|---|---|
| Per audio minute | $0.016 | - | - |
| Audio input / 1M tokens | - | $6.25 | - |
| Text output / 1M tokens | - | $2.5 | - |
These two models bill in different units, so no Δ is shown. Converting between them would require an assumption we have not measured. Each rate card is listed in its own unit above.
Capabilities
| Chirp 3 | GPT-4o Transcribe Diarize | |
|---|---|---|
| Speaker diarization | yes | yes |
| Streaming | yes | yes |
| Timestamps | yes | yes |
Specs
| Chirp 3 | GPT-4o Transcribe Diarize | |
|---|---|---|
| Input modalities | audio | text audio |
| Output modalities | text | text |
| Released | 2025-10-13 | 2025-10 |
| Knowledge cutoff | - | 2024-06 |
| Limits | Auto-detected audio decoding sync Recognize <1 min, BatchRecognize 1 min - 1 hr (<=20 min with word timestamps), StreamingRecognize for real-time speaker diarization in BatchRecognize and Recognize (14 languages) utterance-level timestamps (StreamingRecognize only), word-level timestamps listed as unsupported language-agnostic transcription 29 GA + 82 preview locales | mp3/mp4/mpeg/mpga/m4a/wav/webm, up to 25MB built-in speaker diarization with diarized_json output (speaker labels + segment timestamps) chunking_strategy required for audio >30s no prompt support |
| Languages | 29 GA + 82 Preview locales (111 total) across StreamingRecognize, Recognize and BatchRecognize diarization covers 14 of them | 57 languages listed for the transcriptions endpoint (one shared list for all transcription models) ISO 639-1 / 639-3 codes accepted for GPT-4o-based models |
| Max output | - | 2K |
Specs are transcribed from each vendor’s documentation; a row a vendor does not publish is left out rather than inferred. Full sources: Chirp 3 · GPT-4o Transcribe Diarize
Switch between them with one line
Both ids are in every tab below; the highlighted pair of lines is the only edit. Same endpoint, same key, same request shape.
from openai import OpenAI
client = OpenAI(
base_url="https://synthorai.io/v1",
api_key="sk-syn-...",
)
resp = client.audio.transcriptions.create(
model="chirp-3",
# model="gpt-4o-transcribe-diarize", # uncomment this line, comment the one above
file=open("meeting.mp3", "rb"),
language="en",
)
print(resp.text)import OpenAI from "openai";
import fs from "node:fs";
const client = new OpenAI({
baseURL: "https://synthorai.io/v1",
apiKey: "sk-syn-...",
});
const resp = await client.audio.transcriptions.create({
model: "chirp-3",
// model: "gpt-4o-transcribe-diarize", // uncomment this line, comment the one above
file: fs.createReadStream("meeting.mp3"),
});
console.log(resp.text);curl https://synthorai.io/v1/audio/transcriptions \
-H "Authorization: Bearer sk-syn-..." \
-F model="chirp-3" \
# -F model="gpt-4o-transcribe-diarize" \ # uncomment this line, comment the one above
-F file=@meeting.mp3package main
import (
"context"
"fmt"
"os"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
)
func main() {
client := openai.NewClient(
option.WithBaseURL("https://synthorai.io/v1"),
option.WithAPIKey("sk-syn-..."),
)
f, _ := os.Open("meeting.mp3")
resp, _ := client.Audio.Transcriptions.New(context.TODO(), openai.AudioTranscriptionNewParams{
Model: "chirp-3",
// Model: "gpt-4o-transcribe-diarize", // uncomment this line, comment the one above
File: f,
})
fmt.Println(resp.Text)
}import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.audio.transcriptions.*;
import java.nio.file.Paths;
OpenAIClient client = OpenAIOkHttpClient.builder()
.baseUrl("https://synthorai.io/v1")
.apiKey("sk-syn-...")
.build();
Transcription resp = client.audio().transcriptions().create(
TranscriptionCreateParams.builder()
.model("chirp-3")
// .model("gpt-4o-transcribe-diarize") // uncomment this line, comment the one above
.file(Paths.get("meeting.mp3"))
.build()).asTranscription();
System.out.println(resp.text());FAQ
Which is cheaper, Chirp 3 or GPT-4o Transcribe Diarize?
They bill in different units, so there is no single honest number: Chirp 3 and GPT-4o Transcribe Diarize each appear in their own unit in the table above. Compare them on your own workload; the practical trade-off is described in the verdict at the top of this page.
Can I A/B test Chirp 3 against GPT-4o Transcribe Diarize without two integrations?
Yes. Both are served through the same OpenAI-compatible endpoint with one API key. Switching is a one-line change to the model id, so you can route a fraction of traffic to each and compare bills directly.
Do Chirp 3 and GPT-4o Transcribe Diarize support speaker diarization?
The capability table above answers this per model, straight from each vendor’s documentation. Diarization, streaming and timestamps are listed separately because models differ on all three.