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.
https://api.omi.health/v1/audio/transcriptionsOpenAI-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
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_jsonAuthenticate 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
| Field | Type | Default | Description |
|---|---|---|---|
model | string | required | omi-medical-1 |
response_format | string | diarized_json | verbose_json, json, text, or diarized_json. |
language | BCP-47 tag | dominant-language detection | Explicit 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_hints | JSON array string | all 8 families | 1–8 candidates, valid only with language=auto. |
vocabulary | JSON array string | none | Exact terms expected in this encounter; up to 1,000, of which the 50 most relevant apply. |
dictionary | boolean | true | Set false to suppress the API key’s stored dictionary for this request. |
patterns | comma-separated string | none | Request-scoped structured-token hints; available on every plan. |
profile | enum | default | Omit 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. |
diarize | boolean | false | Attach speaker labels and word timestamps. |
max_speakers | integer 1–4 | 4 | Upper 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
| Format | Shape | Use it when |
|---|---|---|
text | text/plain | You only need final transcript text. |
json | {"text":"…"} | You need a minimal JSON envelope. |
verbose_json | text, language, segments, duration, model, request_id, metadata; words when available | You need the complete integration and evaluation shape. |
diarized_json | Historical speaker-segment shape | You already consume the original Omi/Scribe contract. |
Use async jobs above 60 seconds