Developers
Getting started
From zero to your first authenticated call. Every example uses a placeholder key read from an environment variable — no real secret appears in this documentation.
1. Create an application
Sign in and open the Public API workspace. Create a sandbox application first: it activates immediately, works only with synthetic data you create through the API, and can never read production clinical records. Production applications are created in review and issue credentials once authorised.
2. Issue a scoped key
- Least privilege
- Grant only the scopes the integration uses. A key can narrow the application's scopes but never widen them.
- Shown once
- The secret appears exactly once at creation. Only a SHA-256 hash is stored, so it cannot be recovered — rotate instead.
- Prefixes
- Sandbox keys start with smd_sk_test_, production keys with smd_sk_live_.
- Expiry
- Optionally set an expiry in days. Expired keys are rejected with 401.
3. Make your first request
# Unauthenticated liveness probe
curl https://gelypticmd.com/api/public/v1/health
# Authenticated read. Never put a real key in client-side code.
curl "https://gelypticmd.com/api/public/v1/clinical/encounters?limit=25&offset=0" \
-H "Authorization: Bearer $GELYPTIC_API_KEY"const res = await fetch("https://gelypticmd.com/api/public/v1/clinical/encounters?limit=25", {
headers: { Authorization: `Bearer ${process.env.GELYPTIC_API_KEY}` },
});
if (!res.ok) {
const { error } = await res.json();
throw new Error(`${error.code}: ${error.message} (request ${error.request_id})`);
}
const { data, pagination } = await res.json();import os, requests
res = requests.get(
"https://gelypticmd.com/api/public/v1/clinical/encounters",
params={"limit": 25, "offset": 0},
headers={"Authorization": f"Bearer {os.environ['GELYPTIC_API_KEY']}"},
timeout=30,
)
res.raise_for_status()
payload = res.json()
print(payload["data"], payload["pagination"])4. Submit audio for transcription
curl -X POST https://gelypticmd.com/api/public/v1/transcription \
-H "Authorization: Bearer $GELYPTIC_API_KEY" \
-F "encounter_id=00000000-0000-0000-0000-000000000000" \
-F "audio=@consultation.webm"Returns 202 with a job id. Transcription and SOAP drafting run asynchronously; subscribe to webhooks rather than polling. Drafts are always returned as drafts — clinician review is not bypassable.
One-call SOAP intake
Prefer a single call? POST /v1/soap accepts a finished transcript or the consultation audio, files the encounter and queues the whole pipeline — the structured SOAP note, ICD-10 candidates matched from the curated code table, WHO/IMCI-aligned triage and NHIS billing items arrive on your webhook.
Reference SDKs
Downloadable, framework-independent clients for trusted server environments.
import { GelypticMD } from "./gelyptic-md";
const client = new GelypticMD({
apiKey: process.env.GELYPTIC_API_KEY ?? "",
});
const { data, pagination } = await client.listEncounters({ limit: 25 });import os
from gelyptic_md import GelypticMD
client = GelypticMD(os.environ["GELYPTIC_API_KEY"])
result = client.list_encounters(limit=25)The Python CSV helper accepts approved aggregate rows only. It does not activate planned research or global-health data endpoints.
Pagination
- limit
- 1–100, default 25. Values outside the range are rejected with INVALID_REQUEST.
- offset
- Zero or greater, default 0.
- Response
- Collections return { data, pagination } where pagination carries limit, offset, count, total and has_more.
Errors and request ids
{
"error": {
"code": "INVALID_SCOPE",
"message": "This credential does not carry the required scope.",
"request_id": "req_9f2c4b1e8a7d4c2fb0a1d3e5f6071829"
}
}- X-Request-ID
- Every response carries a request id, repeated inside error bodies. Quote it in support requests.
- No internals
- Errors never contain stack traces, database messages or internal identifiers.
- 401 vs 403
- 401 means the credential is missing, invalid, revoked or expired. 403 means it is valid but lacks the scope.
- 501
- A documented but planned endpoint. The response body includes status: planned.
- 429
- Rate limited. Honour Retry-After with exponential backoff.
Data boundaries
- Your records only
- Clinical endpoints return records the calling application created. There is no cross-tenant read path.
- Global health is aggregate
- Global health and early warning endpoints expose de-identified, aggregated signals — never names, contacts, addresses, record numbers or raw notes.
- No compliance claim
- These are the security controls we implement. They are not, by themselves, a regulatory compliance certification.
About GELYPTIC MD
GELYPTIC MD is the Clinical Intelligence Layer for healthcare. We provide clinical intelligence infrastructure via a single offline-first API that powers any EMR, telemedicine, or pharmacy platform.
With one API call, developers can generate structured SOAP notes, clinical summaries and referral letters, extract evidence-linked ICD-10 and SNOMED codes, surface WHO and IMCI-aligned triage and danger signs, and produce claim-ready NHIS and insurance billing — in 30 seconds, in English, Yoruba, Hausa, Swahili and Pidgin, with or without internet.
Unlike English-only, online-only scribes, GELYPTIC MD was built for real-world care: multilingual consultations, low-connectivity clinics, and community health workflows. Our on-device engine includes cultural translation, syndromic early warning, and CHW playbooks that run fully offline and sync when connection returns.
The platform
- Public API v1
- Versioned endpoints for clinical reasoning
- Scoped API Keys
- Least-privilege, revocable credentials
- Signed Webhooks
- HMAC-signed event delivery
- Offline-First Engine
- Encrypted on-device capture
GELYPTIC MD powers the GELYPTIC MD clinical app and any third-party health app through the same intelligence layer. Built as infrastructure, used as intelligence.