Skip to main content
The endpoint accepts multipart requests with model and file and returns transcript text. Each model accepts files up to its provider’s own limit, published as max_file_size_bytes on GET /v1/models. Discover available transcription models by selecting output_modality: "audio_transcription" from GET /v1/models. For recordings longer than a couple of hours, use ElevenLabs Scribe: 5 GB covers many hours of compressed audio (MP3, M4A, Opus) and roughly four hours of 16-bit stereo WAV.

Transcribe a file

Successful requests bill by audio duration at the selected model’s pricing.audio_input_per_minute_usd in GET /v1/models. Groq Whisper has a 10-second minimum per request, published as audio_minimum_billing_seconds. Failed upstream requests and cancelled streams are not charged. For openai/gpt-transcribe, the rate is $0.0045 per audio minute**. Both ElevenLabs Scribe models bill **$0.22 per audio hour, per second of audio.

Groq Whisper and xAI STT

Groq accepts json, text, and verbose_json responses. Word or segment timestamps use repeated timestamp_granularities[] fields with verbose_json. Both Whisper models accept temperature from 0 to 1. For xai/grok-stt-1.0, use repeated keyterm fields for vocabulary hints. Its JSON response includes text, language, duration, and word timestamps. Request response_format=text for plain text. The native controls format, diarize, filler_words, and vad_threshold pass through. format=true also requires language. The gateway accepts completed container files and does not expose xAI’s realtime WebSocket interface or raw PCM uploads on this endpoint. These request contracts follow the Groq transcription guide and xAI transcription guide.

ElevenLabs Scribe

elevenlabs/scribe-v2 is general-purpose transcription. elevenlabs/scribe-v2-medical is tuned for clinical vocabulary. Both take the same request.
language is translated to ElevenLabs’ language_code. Send one or the other, not both. The response is ElevenLabs’ JSON transcript with text, language_code, audio_duration_secs, and word timestamps. Request response_format=text for plain text. These native controls pass through: diarize, num_speakers, diarization_threshold, tag_audio_events, timestamps_granularity, file_format, additional_formats, use_multi_channel, multichannel_output_style, and enable_logging. Scribe takes no prompt, keywords[], or keyterm, and does not stream. Sending any field outside the list above returns 400 before anything is billed. That includes ElevenLabs’ asynchronous webhook delivery and remote sources (source_url, cloud_storage_url): upload the file itself. The request contract follows the ElevenLabs speech-to-text reference.

Add transcription context

Use prompt for unstructured recording context, keywords[] for expected terms, and languages[] for expected language codes.
For this model, use languages[], not the singular language field.

Stream a completed file

Set stream=true to receive transcript.text.delta events followed by a final transcript.text.done event.