Regions & endpoints
api.omi.health, api.eu.omi.health and api.us.omi.health. api.omi.health routes each request to the nearest healthy EU or US region, with Frankfurt fallback. To pin a region, use api.eu.omi.health or api.us.omi.health. See what each host guarantees.Omi Medical Speech-to-Text
Build with accurate medical transcription
One API for short files and long consultations, with encounter vocabulary, automatic language detection, word timestamps, and speaker-labelled records.
Building with a coding agent?
Synchronous
Short audio
One front door for every duration: clips up to 60 seconds return inline; eligible English Medical recordings up to 15 minutes can also return inline. Other long requests become jobs. Best for dictation clips, voice controls, and immediate results.
Open guideAsynchronous
Long audio
For recordings above 60 seconds, create a job first and upload directly to signed storage. Direct upload remains accepted up to 100,000,000 bytes.
Open guideChecklist
Go to production
Protect keys, make uploads idempotent, handle retries, choose retention, monitor service health, and pin the served model build.
Open guideTranscribe your first file
Create an API key in the console, export it as OMI_API_KEY, then choose an example. Start with a clip up to 60 seconds so automatic language detection returns inline on every plan. The endpoint is OpenAI-compatible, so existing OpenAI SDK clients only need a different base URL.
curl
curl https://api.omi.health/v1/audio/transcriptions \
-H "Authorization: Bearer $OMI_API_KEY" \
-F file=@short-dictation.wav \
-F model=omi-medical-1 \
-F language=auto \
-F response_format=verbose_jsonPython · OpenAI SDK
Install the SDK once:
python -m pip install openaiimport os
from openai import OpenAI
client = OpenAI(
base_url="https://api.omi.health/v1",
api_key=os.environ["OMI_API_KEY"],
)
with open("short-dictation.wav", "rb") as audio:
result = client.audio.transcriptions.create(
model="omi-medical-1",
file=audio,
response_format="verbose_json",
extra_body={"language": "auto"},
)
print(result.text)JavaScript · OpenAI SDK
Install the SDK once:
npm install openaiimport fs from "node:fs";
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.omi.health/v1",
apiKey: process.env.OMI_API_KEY,
});
const result = await client.audio.transcriptions.create({
model: "omi-medical-1",
file: fs.createReadStream("short-dictation.wav"),
response_format: "verbose_json",
language: "auto",
});
console.log(result.text);Regions & endpoints
Choose the processing region with the hostname. Every host offers the same API, features, API key, pricing and plan limits. Audio, async jobs and stored results stay in the region that processes the request. Console account records and sign-in are in Frankfurt (EU).
| Host | Where requests are processed | Use it when |
|---|---|---|
api.omi.health | Nearest healthy EU or US region, with Frankfurt fallback. | You have no regional requirement and want the nearest region automatically. |
api.eu.omi.health | EU (Frankfurt) only. Never falls back to the US. | You require EU-only processing and storage. |
api.us.omi.health | US only (currently Ohio). Never falls back to the EU. | You require US-only processing and storage, or your users are in the Americas. |
US-only processing: use https://api.us.omi.health and wss://api.us.omi.health/v1/stream to keep every request in the US. Only the hostname changes.
Poll and download async jobs through the poll_url and result URLs the API returns; a job stays in the region that created it. Open realtime connections do not move between regions; reconnect to change host. Choosing api.eu.omi.health or api.us.omi.health is your regional processing instruction under the DPA. Read the routing announcement.
What you get back
Use verbose_json when you need timestamps, language metadata, model information, or a request ID for support. Use text for plain text and json for the smallest JSON response.
{
"text": "The patient takes metformin 500 mg twice daily.",
"language": "en",
"language_source": "detected",
"duration": 4.82,
"model": "omi-medical-1",
"request_id": "0b0e…",
"segments": [
{
"id": "seg_0001",
"speaker": "A",
"text": "The patient takes metformin 500 mg twice daily.",
"start": 0.22,
"end": 4.60,
"confidence": null
}
],
"metadata": {
"api_version": "2026-07-01",
"runtime": "omi-runtime",
"processing_ms": {"asr": 640, "diarization": 0}
}
}Capabilities at a glance
- English is the benchmarked, medically evaluated language.
- Spanish, Portuguese, French, German, Dutch, Arabic, and Hindi are available for testing and evaluation, and are not medically evaluated.
language=auto- detects the spoken language on short inline requests and long jobs on every plan.
- Encounter vocabulary accepts up to 1,000 terms and selects at most 50 per request; the response separately reports accepted, delivered, corrected, and unresolved terms.
- Speaker labels and word timestamps are added without changing transcript wording.
- Patterns can recover expected dosage and identifier formatting, when enabled on your key, without acting as a source of transcript truth.
English is the medically benchmarked flagship
Continue