API reference · Transcribe

Stream audio in, get the transcript back

POST /api/v1/transcribe

One shot: the request body is the audio itself and the response is an SSE stream ending in the transcript. Intended for shells and simple scripts; files above 200 MB belong on the upload routes. Rate limit: 120 requests per minute.

The first event is accepted and carries the job_id and a download_url, emitted before any waiting — so a caller whose connection drops can still retrieve the job it has been billed for. The id is also mirrored in the X-Job-Id response header.

Authenticate with your key in the X-API-Key header — Authentication.

Query parameters

  • model string default: zephyr

    The transcription model. One today.

  • output_type string default: json

    Format of the stored transcript at download_url.

    One of json, txt, srt, vtt, docx, pdf

  • word_timestamps boolean default: true
  • speaker_labels boolean default: true
  • nltk boolean default: true

    Punctuation and sentence segmentation.

  • custom_vocabulary string

    Comma-separated domain terms to bias towards. A query string cannot carry a JSON array, so this route takes the list as one comma-separated string.

  • callback_url string (uri)

    Webhook to POST on completion or permanent failure.

Request body

Required. The raw file bytes — send the file itself, not JSON. Accepted types: audio/mpeg, audio/wav, audio/mp4, audio/ogg, audio/flac, video/mp4, application/octet-stream.

Responses

  • 200 An event stream ending in the transcript.
  • 401 Missing, malformed or revoked API key.
  • 402 The account is out of credit. Top up, or turn on auto-recharge, and retry. Reads and cancellations keep working.
  • 413 The file exceeds the limit for this route: 10 GB through the upload routes, 200 MB streaming to /api/v1/transcribe.
  • 422 A field is missing or the wrong type. The body names the offending field.
  • 429 Too many requests for this endpoint. Back off and retry; the official SDKs do this for you.