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

Replace the host to choose a region; the API key and features are the same. 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 & endpoints
POSThttps://api.omi.health/v1/audio/transcriptions

OpenAI-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

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.

Choose a model

ModelUseLanguagesRate after included hours
omi-medical-1Medical transcription, realtime, vocabulary (batch), and speakersEight supported families$0.29/audio-hour batch · $0.45/audio-hour live
omi-general-1General transcription; batch and realtime, no custom vocabulary or PatternsEight languages$0.29/audio-hour batch · $0.45/audio-hour live
omi-medical-edge-1Quickly evaluate the open model before self-hostingEnglish$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_json

Hosted 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

FieldTypeDefaultDescription
modelstringrequiredomi-medical-1 or omi-medical-edge-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.

Handle inline results and jobs

Eligible English Medical recordings up to 15 minutes can return the completed transcript directly, including compressed inputs. Other long requests return a job. Webhooks and idempotency keys select durable job delivery for long recordings. Always handle both 200 and 202; use the jobs API for larger uploads or durable background processing.

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.

RequestOrdinary deliveryZero retention required
Inline-eligible audio up to 60 seconds200 on this connection200 for supported English Medical options
Eligible English Medical, over 60 seconds and up to 15 minutes200 when inline capacity is available; no privacy opt-in needed200 with X-Omi-Retention: none
Long-inline capacity busy or preparation unavailable202 stored job503 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=json

Add 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=json

This 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.