---
title: Speech to Text
sidebar_label: Overview
sidebar_position: 0
description: "Choose the right transcription model, mode, and configuration."
---

# Speech to Text

Speech to text turns recorded files and live audio into text, with speaker labels, timestamps, and custom vocabulary. This page helps you choose the mode, the model, and the features that fit your application.

<SectionTab as="h2" sectionId="choose-your-mode">Choose your mode</SectionTab>

Start from the audio you have. Each case has its own page, and a quickstart to make a first call:

- **Transcribe a recorded file (offline).** Send a call recording, a meeting, or a podcast episode in one request, and get the full transcript, with timestamps and speaker labels if you ask for them. Read [File transcription](/studio/audio/speech-to-text/transcribe-files), or start with the [quickstart](/studio/audio/speech-to-text/quickstarts/transcribe-a-file).
- **Transcribe live audio (realtime).** Stream audio from a microphone or a phone line over a WebSocket, and get the text while people speak, with events that mark the end of each turn. Read [Realtime transcription](/studio/audio/speech-to-text/transcribe-in-realtime), or start with the [quickstart](/studio/audio/speech-to-text/quickstarts/transcribe-in-realtime).
- **Answer by voice (voice agent).** When your application talks back, a voice agent runs realtime transcription, a model, and speech for you. Read [Voice agents](/studio/audio/voice-agents/overview), or start with the [quickstart](/studio/audio/voice-agents/quickstarts/build-a-voice-agent).

:::tip
Not sure which one fits? The decision chart on [Offline and realtime audio](/studio/audio/concepts/offline-and-realtime#choosing) answers it in two questions.
:::

{/* MODE VOCABULARY: see the flag in the Text to Speech overview — the same decision applies here ("Offline" vs "batch", "Realtime" vs "live"). */}

<SectionTab as="h2" sectionId="choose-your-model">Choose your model</SectionTab>

Once you know the mode, the model is a small choice: realtime has one model, and offline has two. Start from what you need:

| If you need | Use | Why |
| --- | --- | --- |
| Text while people speak | [Voxtral Mini Transcribe Realtime 3](/models/voxtral-mini-transcribe-realtime-3-0) | It's the realtime model: sessions, turn detection, and a streaming delay that you set. |
| Transcripts of recorded files | [Voxtral Mini Transcribe 3](/models/voxtral-mini-transcribe-3-0) | It supports every offline feature. Start with it. |
| Higher-quality transcripts of recorded files | [Voxtral Small Transcribe 3](/models/voxtral-small-transcribe-3-0) | A larger model. Switch to it when the transcripts still have errors that [custom vocabulary](/studio/audio/concepts/custom-vocabulary) doesn't fix. |
| Answers about a recording, such as a summary or a translation | [Audio in chat completions](/studio/audio/audio-in-chat) | A chat model that hears the audio and answers in text. At launch, use `voxtral-small-latest` (Voxtral 2). |

{/* MODEL CARD LINKS: /models/voxtral-mini-transcribe-realtime-3-0, /models/voxtral-mini-transcribe-3-0, and /models/voxtral-small-transcribe-3-0 return 404 until the Voxtral 3 model cards are added to the model registry (src/schema/models/models/). The slugs follow the registry pattern <name>-<version> with version 3.0, to confirm when the cards are created. */}

:::caution
 To move your requests to the new models, see [Migrate from Voxtral 2](/studio/audio/migrate-from-voxtral-2).
:::

<SectionTab as="h2" sectionId="features-by-mode">Features by mode</SectionTab>

The mode decides which features you can use. Each feature links to the page with its settings:

| Feature | Offline | Realtime |
| --- | --- | --- |
| [Speaker labels (diarization)](/studio/audio/speech-to-text/diarize-speakers) | Yes, with segment timestamps | Yes |
| [Speaker references](/studio/audio/speech-to-text/diarize-speakers#speaker-references) |  | Yes, with diarization |
| [Context biasing](/studio/audio/speech-to-text/bias-context-and-vocabulary) | Yes | Yes |
| [Language](/studio/audio/speech-to-text/transcribe-files#pin-the-language), see the [supported languages](/studio/audio/specs-and-limits/languages) | Pin it, or let the model detect it | Pin it in the [session configuration](/studio/audio/speech-to-text/transcribe-in-realtime#session-fields), or let the model detect it |
| [Segment timestamps](/studio/audio/speech-to-text/transcribe-files#timestamps) | Yes, per segment. Word timestamps aren't available. | No: realtime segments carry a speaker label, but no start or end time. You can infer the end time from the frame alignment (if a word is emitted at 480ms with a 240ms delay, it ended at 240ms). |
| [Turn detection](/studio/audio/speech-to-text/turn-detection) | No | Yes |
| [Streaming response](/studio/audio/speech-to-text/transcribe-files#stream-the-response) | Yes: the text of a complete file arrives in pieces | Not applicable: results always arrive as events |

:::caution
Diarization and turn detection can't share a realtime session: a session that sets both returns an error. Both work in realtime, in separate sessions. For details, see [Diarization and turn detection](/studio/audio/speech-to-text/diarize-speakers#diarization-and-turn-detection).
:::

{/* Sources (Oct 9) for Features by mode: Oct 7 tests (stt agent) and the Oct 9 facts in features-subagents-brief.md. Offline: diarize requires timestamp_granularities=segment (422 otherwise); timestamp granularity none or segment, word returns 400 (Rakesh, Oct 9: no word level); turn_detection is realtime only (400 offline); stream=true gives SSE transcription.text.delta then transcription.done; language omitted = auto-detection, invalid code 422. Realtime: diarize + turn_detection -> error "Diarization is not compatible with turn detection." (Rakesh, Oct 9: both exist in realtime, not in one session); speaker_references without diarize -> error "Speaker references require diarization"; realtime diarization = transcription.segment events with speaker_id, start/end null; context_bias and language accepted in session.update. Speaker references: offline and realtime, up to 8, 3 to 15 s each (Rakesh, Oct 9), offline 400 on Oct 7. Not tested together: diarize or turn_detection combined with context_bias and language. Replaces the former "Feature compatibility" table (sectionId feature-compatibility: no inbound link in src/content/en on Oct 9, so the id was dropped). */}

<SectionTab as="h2" sectionId="next-steps">Next steps</SectionTab>

<UsefullLinkContainer>
  <LinkCard href="/studio/audio/speech-to-text/quickstarts/transcribe-a-file" title="Quickstart: transcribe an audio file" />
  <LinkCard href="/studio/audio/speech-to-text/quickstarts/transcribe-in-realtime" title="Quickstart: transcribe speech in realtime" />
  <LinkCard href="/studio/audio/speech-to-text/transcribe-files" title="File transcription" />
  <LinkCard href="/studio/audio/speech-to-text/transcribe-in-realtime" title="Realtime transcription" />
</UsefullLinkContainer>

{/* Overview (layer 2) — audio docs revamp (DOC-610). Written Oct 9 from the plan validated by Gregory:
   mode first (what you have -> mode -> page), then the model within the mode, then features by mode, then
   deprecation. Boundary: the concept Offline and realtime audio explains the modes; each feature page owns
   its settings and code; Languages owns the language lists; Migrate from Voxtral 2 owns the migration.
   Verify at the end: language counts stay off this page, Small's audio understanding confirmed on its launch
   model, offline speaker references retested, realtime segment timing confirmed, deprecation date set. */}