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.
POST
https://api.omi.health/v1/audio/transcriptionsOpenAI-compatible multipart endpoint · audio under 30 seconds · 50 MB upload ceiling
Basic request
curl https://api.omi.health/v1/audio/transcriptions \
-H "Authorization: Bearer $OMI_API_KEY" \
-F [email protected] \
-F model=omi-medical-1 \
-F language=en \
-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.
Request fields
| Field | Type | Default | Description |
|---|---|---|---|
model | string | required | omi-medical-1 or omi-medical-edge-1. |
response_format | string | diarized_json | verbose_json, json, text, or diarized_json. |
language | BCP-47 tag | key default, then en | Explicit supported language or auto. Omission is not automatic detection. |
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. |
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; invited preview. |
diarize | boolean | false | Attach speaker labels and word timestamps. |
Combine features
curl https://api.omi.health/v1/audio/transcriptions \
-H "Authorization: Bearer $OMI_API_KEY" \
-F [email protected] \
-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–30 exact terms likely to be spoken in this recording. Speaker decoration runs after the transcript is sealed, so it does not change the words.
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 at 30 seconds
Audio of 30 seconds or longer belongs on the async jobs API, which uses the asynchronous-optimized pipeline, avoids long-lived HTTP connections, and keeps short requests fast.