Pre-recorded transcription — pick your engine

Two batch surfaces. They are not interchangeable.

POST /v1/listen/prerecordedPOST /v1/transcribe
EngineParakeet-TDT (streaming, chunk-pumped)faster-whisper large-v3 (batch)
ShapeSynchronous — one responseAsync job — submit / poll / result
Audio lengthShort clips (≲ a few minutes)1 hour+
Languages25 EU locales99 incl. tr, ar + all EU
Word timestampsYesYes
DiarizationSortformer (4-speaker cap)Pluggable — Sortformer or pyannote
Word hints / contextKeyword boost onlyword_hints + context + medical lexicon
WebhookNocallback_url

Rule of thumb. Audio longer than a few minutes, or any need for Turkish/Arabic, multi-speaker labelling, or vocabulary biasing → use /v1/transcribe. The synchronous route stays for short clips and is unchanged.

Async engine status: ENABLED

Submit a job

Options ride as ONE JSON string in an options form field — not as separate -F fields. A flat -F 'language=de' is silently ignored and the job runs with defaults.

curl -X POST http://localhost:4600/v1/transcribe \
  -F 'file=@consultation.wav' \
  -F 'options={"language":"de","diarize":true,"medical_lexicon":true,"word_hints":["Ösophagusvarizen","Sankt Augustin"]}'
# → 202 {"job_id": "...", "status": "queued"}

# Remote URL: options live inline, in the SAME object as `url`
curl -X POST http://localhost:4600/v1/transcribe \
  -H 'content-type: application/json' \
  -d '{"url":"https://example.com/consultation.mp3","language":"de"}'

curl http://localhost:4600/v1/transcribe/$JOB_ID          # status + progress
curl http://localhost:4600/v1/transcribe/$JOB_ID/result   # DG Results envelope

Options

Rendered from the live request model — this table cannot drift from the code.

FieldDefaultPurpose
language—
context—
word_hints—
medical_lexiconFalse
smart_formatTrue
term_correctionFalse
diarizeFalse
callback_url—
url—

Vocabulary biasing

context and word_hints feed Whisper's initial_prompt, which conditions the decoder toward supplied spellings. This is the highest-leverage control for medical terms, surnames and place names. medical_lexicon=true appends the in-repo lexicon for the resolved locale. Biasing is a prior, not a guarantee — it raises the likelihood of a spelling, it does not force it.

The envelope is the same Deepgram-shaped Results frame the streaming path emits — see TypeScript.