Quickstart
Your first OHM extraction in five minutes.
Quickstart
By the end of this page you'll have a published Studio API, a test-mode API key, and a working curl and JavaScript call returning structured clinical JSON.
Time: ~5 minutes.
Sign in to Studio
Open studio.ohm.doctor and log in with your OHM admin account. Studio uses the same JWT auth as the rest of OHM — no extra setup.
Create a project
A project groups related APIs and keys. Click + New project, name it (triage-demo), and pick a slug.
Create your first API
Click + New API. Pick a starter — OPD Prescription is a good baseline. The Builder opens with seven tabs: Builder, Prompt, Inputs, Insights, Playground, API call, Logs, Versions, Settings.
Click Publish. The status pill flips to PUBLISHED — your API is now callable.
Mint a key
From the sidebar pick All keys → + New key. Choose:
- Test mode (
ohms_test_*) — safe in mobile bundles, allowed for local dev. - Live mode (
ohms_live_*) — server-side only.
The key is shown ONCE
The plaintext key appears in a reveal modal exactly once — there is no
"show again" button afterwards (we only store the bcrypt hash). Copy it
immediately to your password manager and save it to a .env file
in the project you're about to call from. If you close the modal
without copying, the key is unrecoverable — mint a new one.
Save it to your project's .env. Add the hospital's API URL too —
OHM is hospital-deployed (see Versions) so the API URL
is per-customer, not a single global SaaS endpoint:
# .env (add to .gitignore)
OHM_API_KEY=ohms_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OHM_API_URL=https://api.ohm.doctor # OHM's demo hospital
# Or for a production hospital integration:
# OHM_API_URL=https://api.<hospital>.exampleThen load it in your shell so the cURL example below picks it up:
export $(grep -v '^#' .env | xargs)
echo $OHM_API_KEY # should print your key
echo $OHM_API_URL # should print the hospital URLCall your API
curl -X POST "$OHM_API_URL/api/studio/v1/extract/triage-demo" \
-H "Authorization: Bearer $OHM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Patient is 35yo male, fever 3 days, BP 130/85, HR 92, temp 38.6°C. Started on paracetamol 650mg TDS for 5 days."
}'If you see { "error": "...", "code": "..." }, jump to
Troubleshooting — the page maps every status code to
the most likely fix.
npm install @ohm_studio/sdkimport { OHM } from "@ohm_studio/sdk";
const ohm = new OHM({ apiKey: process.env.OHM_API_KEY! });
const { data } = await ohm.extract({
apiSlug: "triage-demo",
text: transcript,
});npm install @ohm_studio/sdk-react-nativeimport { OHM } from "@ohm_studio/sdk-react-native";
const ohm = new OHM({
apiKey: TEST_KEY, // ohms_test_*
acknowledgeBundledKey: true, // dev-only override
});
const { transcript, data } = await ohm.audio.extract({
apiSlug: "triage-demo",
file: { uri: localUri, name: "rec.m4a", type: "audio/mp4" },
});You should get back JSON like:
{
"data": {
"vitals": { "bp": { "systolic": 130, "diastolic": 85 }, "hr": 92, "temp": 38.6 },
"diagnoses": [{ "name": "Fever", "status": "active" }],
"medications": [
{ "name": "Paracetamol", "dosage": "650mg", "frequency": "TDS", "duration": "5 days" }
]
},
"apiSlug": "triage-demo"
}Live keys never ship in mobile bundles
ohms_live_* keys must stay on your backend. The RN SDK refuses to
initialise with a live key unless you pass acknowledgeBundledKey: true,
and that's a dev-only escape hatch. Read API key handling.
What's next
- Build your first audio API — record voice, get JSON
- Authentication — JWT vs API keys, scopes, rotation
- SDK reference