New: AI video tools. Cut, clip, caption and dub your videos. See all video tools →
Transcription

Transcribe audio

POST
/api/v1/transcription/start

Start a speech-to-text transcription.

In async mode (default), returns immediately with {started: true}. Poll /api/v1/transcription/progress for status and results.

In sync mode (sync=true), blocks until transcription completes and returns the result directly. When output_format=srt and return_timestamps=true, returns an SRT subtitle file instead of JSON.

Query Parameters

sync?Sync

Wait for transcription to complete and return the result directly

Defaultfalse
output_format?Output Format

Response format when sync=true. 'srt' returns SubRip subtitles (requires return_timestamps=true)

Default"json"
Value in"json""srt"

Request Body

application/json
  1. body
audio_base64*Audio Base64

Base64-encoded audio (WAV)

language?|

Force language (auto-detect if null)

return_timestamps?Return Timestamps

Return word-level timestamps via forced aligner

Defaultfalse
reference_text?|

Original text for punctuation restoration (e.g. from history)

asr_family?|

ASR model family (e.g. 'Qwen3-ASR', 'Parakeet v3', 'Orukeet'). Used for routing; mostly informational on Modal-direct path.

asr_quality?|

ASR variant id within the family (e.g. 'standard', 'higher_quality', 'parakeet_v3', 'orukeet'). Subprocess loads this variant on demand if it differs from the currently-loaded one.

num_speakers?|

Pin the exact diarization speaker count. Auto-detect (with trivial-cluster merging) if null.

diarization_engine?|

Speaker detection engine. The saved preference is used if null.

Response Body

Transcription started (async) or completed (sync).

  1. response
started*Started

Whether the transcription was started

reason?|

Reason if transcription could not start

Example Request
curl -X POST 'http://127.0.0.1:8100/api/v1/transcription/start' \  -H 'Content-Type: application/json' \  -d '{  "audio_base64": "UklGRi4AAABXQVZFZm10IBAAAA..."}'
Example Response
{  "started": true,  "reason": "string"}