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.
Regions & endpoints
api.us.omi.health processes and stores data in the US only, api.eu.omi.health in the EU only. api.omi.health routes to the nearest healthy region. Regions & endpointshttps://api.omi.health/v1/audio/transcriptionsOpenAI-compatible multipart endpoint · 100,000,000-byte cap (~100 MB) · clips return inline; eligible English Medical up to 15 minutes can too; other long requests become jobs
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.
Choose a model
| Model | Use | Languages | Rate after included hours |
|---|---|---|---|
omi-medical-1 | Medical transcription, realtime, vocabulary (batch), and speakers | Eight supported families | $0.29/audio-hour batch · $0.45/audio-hour live |
omi-general-1 | General transcription; batch and realtime, no custom vocabulary or Patterns | Eight languages | $0.29/audio-hour batch · $0.45/audio-hour live |
omi-medical-edge-1 | Quickly evaluate the open model before self-hosting | English | $0.10/audio-hour · batch only |
curl https://api.omi.health/v1/audio/transcriptions \
-H "Authorization: Bearer $OMI_API_KEY" \
-F file=@dictation.m4a \
-F model=omi-medical-edge-1 \
-F language=en \
-F diarize=true \
-F max_speakers=2 \
-F response_format=verbose_jsonHosted Edge returns deterministic transcript segments and word timestamps for both short and long audio, with optional speaker labels when diarize=true. It does not support realtime, vocabulary, Patterns, language detection, or processing profiles. Excess Edge demand may queue or return a retryable capacity response so it cannot slow flagship traffic.
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 | 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. |
Handle inline results and jobs
Sync delivery and zero retention are separate
Eligible ordinary requests can return synchronously up to 15 minutes without enabling zero retention. The usual 60-second audio boundary applies to requests outside that extended inline path; it is not an HTTP timeout. Both limits measure recording duration, not upload or processing time.
| Request | Ordinary delivery | Zero retention required |
|---|---|---|
| Inline-eligible audio up to 60 seconds | 200 on this connection | 200 for supported English Medical options |
| Eligible English Medical, over 60 seconds and up to 15 minutes | 200 when inline capacity is available; no privacy opt-in needed | 200 with X-Omi-Retention: none |
| Long-inline capacity busy or preparation unavailable | 202 stored job | 503 if busy; 422 if unsupported; no stored fallback |
For extended inline delivery, send omi-medical-1, language=en, dictionary=falseand a json, text or verbose_json response. Keep speakers, custom vocabulary, context, webhooks and idempotency keys off. Audio must fit the 32-MiB RAM budget, including its decoded analysis audio. General, speakers and other excluded options on long recordings use async delivery. Ordinary integrations should handle both 200 and 202.
curl https://api.omi.health/v1/audio/transcriptions \
-H "Authorization: Bearer $OMI_API_KEY" \
-F 'file=@dictation.flac;type=audio/flac' \
-F model=omi-medical-1 \
-F language=en \
-F dictionary=false \
-F response_format=jsonAdd X-Omi-Retention: none to require RAM-only processing and prohibit stored fallback. The header does not unlock the 15-minute sync limit. For connection timeouts, see the production guide.
Zero-retention batch delivery
Available on Builder, PAYG and Enterprise at the same transcription price. Send X-Omi-Retention: none to process in memory and receive the transcript on this connection, without storing audio or a result for later retrieval. The console setting applies this requirement to all your batch keys; it can take up to 60 seconds to propagate, so use the header when you need it immediately.
curl https://api.omi.health/v1/audio/transcriptions \
-H "Authorization: Bearer $OMI_API_KEY" \
-H "X-Omi-Retention: none" \
-F file=@dictation.m4a \
-F model=omi-medical-1 \
-F language=en \
-F dictionary=false \
-F response_format=jsonThis mode supports English omi-medical-1, explicit language=en and dictionary=false, with json, text or verbose_json responses, up to 15 minutes and the 32-MiB memory budget. Speakers, custom vocabulary, context, webhooks and idempotency keys are unsupported. Unsupported requests return 422; busy capacity returns 503. Neither falls back to stored jobs. A successful response acknowledges X-Omi-Retention: none.
If the connection fails, there is no saved result to fetch again. Content-free usage and audit metadata remain. For durable async delivery, choose your retention window or delete the result using DELETE /v1/jobs/{job_id}/result.