Core workflow

Synchronous transcription

Send a short audio file as multipart form data and receive its transcript in the same response. This is the simplest and lowest-latency route.

POSThttps://api.omi.health/v1/audio/transcriptions

OpenAI-compatible multipart endpoint · 100,000,000-byte cap (~100 MB) · audio up to 60 seconds returns inline, longer audio auto-dispatches to an async job

Language-safe by default

If you omit language, Omi detects the dominant language from the first speech-bearing window and transcribes the full recording in that language. Use an explicit BCP-47 language for the lowest latency, or language=auto for deliberate per-utterance code switching and language hints.

Basic request

curl https://api.omi.health/v1/audio/transcriptions \
  -H "Authorization: Bearer $OMI_API_KEY" \
  -F file=@dictation.m4a \
  -F model=omi-medical-1 \
  -F language=auto \
  -F response_format=verbose_json

Authenticate every request with Authorization: Bearer <key>. The file may be WAV, MP3, M4A/MP4, WebM, OGG, FLAC, or AAC; Omi converts it to mono 16 kHz PCM internally. Direct uploads inspect the container when a client sends a common MIME alias such as audio/x-m4a,audio/m4a, or audio/mp4a-latm.

Request fields

FieldTypeDefaultDescription
modelstringrequiredomi-medical-1
response_formatstringdiarized_jsonverbose_json, json, text, or diarized_json.
languageBCP-47 tagdominant-language detectionExplicit supported language or auto. Omission detects one dominant language from a bounded probe. Use auto for per-utterance routing; it is available on every plan.
language_hintsJSON array stringall 8 families1–8 candidates, valid only with language=auto.
vocabularyJSON array stringnoneExact terms expected in this encounter; up to 1,000, of which the 50 most relevant apply.
dictionarybooleantrueSet false to suppress the API key’s stored dictionary for this request.
patternscomma-separated stringnoneRequest-scoped structured-token hints; available on every plan.
profileenumdefaultOmit it or send default. The same default processing behavior is used at every duration; 60 seconds changes response delivery only. Historical standard and turbo values are deprecated aliases todefault.
diarizebooleanfalseAttach speaker labels and word timestamps.
max_speakersinteger 1–44Upper speaker-count hint used only when diarize=true.

Combine features

curl https://api.omi.health/v1/audio/transcriptions \
  -H "Authorization: Bearer $OMI_API_KEY" \
  -F file=@consultation.wav \
  -F model=omi-medical-1 \
  -F language=en-AU \
  -F response_format=verbose_json \
  -F diarize=true \
  --form-string 'vocabulary=["Tinel","Hepcludex","tirzepatide"]'

For best vocabulary behavior, provide 5–50 exact terms likely to be spoken in this recording. Lists of 50 terms or fewer are considered in full; larger lists select the 50 most relevant terms. Speaker labels and timestamps never change the transcript wording.

Response formats

FormatShapeUse it when
texttext/plainYou only need final transcript text.
json{"text":"…"}You need a minimal JSON envelope.
verbose_jsontext, language, segments, duration, model, request_id, metadata; words when availableYou need the complete integration and evaluation shape.
diarized_jsonHistorical speaker-segment shapeYou already consume the original Omi/Scribe contract.

Use async jobs above 60 seconds

Audio longer than 60 seconds belongs on the async jobs API, which uses the asynchronous-optimized pipeline, avoids long-lived HTTP connections, and keeps short requests fast.