
xAI STT v1 API by xAI
xAI STT v1 is a production-grade speech-to-text model that transcribes audio into accurate, formatted text. It supports 24+ languages with automatic language detection, word-level timestamps, speaker diarization, multichannel transcription, and inverse text normalization.
xAI STT v1 — Speech to Text
Developer: xAI
Model ID: xai/stt-v1
Release Date: April 2026
Overview
xAI STT v1 is a production-grade speech-to-text model from xAI, the company behind Grok. It transcribes audio into accurate, formatted text either in a single batch API call or in real time over a WebSocket stream. The model supports 24+ languages with automatic language detection, word-level timestamps, speaker diarization, multichannel transcription, and Inverse Text Normalization that renders numbers, currencies, and units in their written form.
xAI STT v1 is built on the same audio infrastructure that powers Grok Voice, Tesla in-vehicle assistants, and Starlink customer support — infrastructure that has been battle-tested at scale across consumer and enterprise workloads. It is engineered for demanding real-world use cases such as call-center analytics, voice agents, meeting transcription, and media captioning, where named-entity accuracy (names, account numbers, dates) and low latency matter most.
In xAI's published benchmarks the model reports a 6.9% word error rate on general audio and a 5.0% error rate on phone-call entity recognition — ahead of ElevenLabs (12.0%), Deepgram (13.5%), and AssemblyAI (21.3%) on the same entity task — while matching the leading providers (≈2.4% error) on clean video/podcast audio.
Key Capabilities
- Batch and streaming transcription — Transcribe an uploaded file or remote URL in a single request, or stream audio in real time over WebSocket for live captioning and voice agents.
- 24+ languages with auto-detection — Transcribes speech in any supported language; leave
languageunset to auto-detect, or set it to enable language-specific text formatting. - Word-level timestamps — Every word is returned with precise
start/endtimes in seconds. - Speaker diarization — With
diarize: true, each word carries aspeaker_ididentifying the detected speaker. - Multichannel transcription — Transcribe up to 8 audio channels independently, returning a per-channel result set.
- Inverse Text Normalization — With
text_normalization: true, spoken numbers and currency are converted to written form (e.g. "one hundred dollars" → "$100"). - Keyterm biasing — Bias the model toward up to 100 domain-specific terms (product names, jargon) of up to 50 characters each.
- Filler-word control — Remove disfluencies like "um" and "uh" by default, or retain them with
filler_words: true. - Broad format support — Auto-detects common container formats; accepts raw/headerless audio with explicit format hints.
- Privacy-first — Audio is not stored or used for model training.
Use Cases
- Call-center analytics & QA — High-accuracy entity recognition for names, account numbers, and dates in noisy phone audio.
- Real-time voice agents — Low-latency streaming transcription paired with xAI's TTS and Voice Agent APIs for end-to-end conversational AI.
- Meeting & interview transcription — Speaker-attributed transcripts via diarization with word-level timing.
- Media captioning & subtitling — Accurate transcription of podcasts, videos, and broadcasts.
- Multilingual workflows — Single API covering 24+ languages with automatic detection.
- Compliance & search — Searchable, timestamped transcripts for archives and regulated industries.
Supported Audio Formats
Container formats (auto-detected — set audio_format to auto):
WAV, MP3, OGG, Opus, FLAC, AAC, MP4, M4A, MKV.
Raw / headerless formats (require audio_format plus sample_rate):
PCM, µ-law (mulaw), A-law (alaw).
Technical limits:
| Property | Value |
|---|---|
| Maximum file size | 500 MB |
| Channels | Mono, stereo, or up to 8 channels |
| Sample rates | 8000, 16000, 22050, 24000, 44100, 48000 Hz |
Supported Languages
| Code | Language | Code | Language |
|---|---|---|---|
ar | Arabic | ja | Japanese |
cs | Czech | ko | Korean |
da | Danish | mk | Macedonian |
nl | Dutch | ms | Malay |
en | English | fa | Persian |
fil | Filipino | pl | Polish |
fr | French | pt | Portuguese |
de | German | ro | Romanian |
hi | Hindi | ru | Russian |
id | Indonesian | es | Spanish |
it | Italian | sv | Swedish |
th | Thai | tr | Turkish |
vi | Vietnamese |
Leave
languageunset for automatic detection. The model transcribes any supported language regardless of this setting; specifying it together withtext_normalization: trueenables locale-aware formatting of numbers, currencies, and units.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
model | string | xai/stt-v1 | Model identifier. Required. |
audio | string | — | Publicly accessible URL of an audio file (max 500 MB) or a base64-encoded audio string. Required. |
language | string | — | ISO 639-1 language code (Filipino uses fil). Leave unset for automatic detection. |
text_normalization | boolean | false | Enables Inverse Text Normalization (spoken → written numbers/currency). Requires language when true. |
diarize | boolean | false | Enables speaker diarization; adds speaker_id to each word. |
multichannel | boolean | false | Transcribes each audio channel independently. |
filler_words | boolean | false | Includes filler words ("um", "uh") when true; removed by default. |
keyterm | string[] | [] | Up to 100 terms (≤50 chars each) to bias transcription toward. |
audio_format | string | auto | auto for container formats; pcm, mulaw, or alaw for raw audio. |
sample_rate | integer | — | Sample rate in Hz. Required for raw audio. |
channels | integer | — | Number of channels (2–8). Required only for multichannel raw audio. |
enable_sync_mode | boolean | false | When true, the request waits until the result is generated and uploaded, returning it directly in the response. API-only. |
Response
The transcription result (stt_result) contains:
| Field | Description |
|---|---|
text | Full transcribed text. |
language | Detected language name. |
language_code | Detected language code (ISO 639-3). |
language_probability | Confidence of the detected language (0–1). |
duration | Audio duration in seconds. |
words[] | Word-level segments, each with text, start, end, type, and speaker_id (when diarized). |
When multichannel is enabled, stt_result additionally contains a nested channels[] array — each element holds a full per-channel transcription result (text, words[], etc.) plus a zero-based channel index.
Pricing
Price configuration path: models/xai/stt/price
Pricing for xAI STT v1 is metered by the duration of the transcribed audio (in minutes), derived from the input audio. The minute-based rate corresponds to xAI's published batch transcription pricing of **0.10 ÷ 60 ≈ $0.0017 per minute).
SKU
| SKU | Description | Unit Price |
|---|---|---|
sku_minute | Price per minute of audio | $0.0017 |
Formula
cost = parseVideoDuration(audio) / 60.0 × sku_minute
Where parseVideoDuration(audio) returns the audio duration in seconds; dividing by 60.0 converts it to minutes, which is multiplied by the per-minute unit price.
Examples
| Audio Length | Duration (s) | Duration (min) | Cost |
|---|---|---|---|
| Short clip | 30 s | 0.5 | $0.00085 |
| Phone call | 5 min | 5 | $0.0085 |
| Podcast episode | 60 min | 60 | $0.1020 |
| Long recording | 120 min | 120 | $0.2040 |
The effective rate is **≈ 0.20 per hour); the configuration above reflects the batch per-minute rate.
Benchmarks
| Task | xAI STT v1 | ElevenLabs | Deepgram | AssemblyAI |
|---|---|---|---|---|
| Phone-call entity recognition (error rate) | 5.0% | 12.0% | 13.5% | 21.3% |
| Video / podcast transcription (error rate) | 2.4% | 2.4% | 3.0% | 3.2% |
| General audio (word error rate) | 6.9% | — | — | — |
Source: xAI published benchmarks (April 2026).















