Omi Medical Speech-to-Text
Build with accurate medical transcription
One API for short files, long consultations, live drafts, medical encounter vocabulary, multilingual routing, word timestamps, and speaker-labelled records.
Synchronous
Short audio
One multipart request for audio under 30 seconds. Best for dictation clips, voice controls, and immediate results.
Open guideAsynchronous
Long audio
Use the same direct-upload front door for an automatic 202 job, or presigned storage for files above 100,000,000 bytes.
Open guideRealtime preview
Live audio
Stream PCM over WebSocket, show revisable drafts, and receive an authoritative flagship record when the session closes.
Open guideTranscribe your first file
Create an API key in the console, export it as OMI_API_KEY, then choose an example. 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 [email protected] \
-F model=omi-medical-1 \
-F language=en \
-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("consultation.wav", "rb") as audio:
result = client.audio.transcriptions.create(
model="omi-medical-1",
file=audio,
response_format="verbose_json",
extra_body={"language": "en"},
)
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("consultation.wav"),
response_format: "verbose_json",
language: "en",
});
console.log(result.text);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",
"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 each utterance independently across the eight supported families.
- Encounter vocabulary accepts up to 1,000 terms; focused 5–30 term lists are recommended and use the safest direct mode.
- Speaker labels and word timestamps decorate sealed transcript text; the decoration lane cannot rewrite it.
- Patterns can recover expected dosage and identifier formatting in invited preview requests without acting as a source of transcript truth.
English is the medically benchmarked flagship
Continue