Developer portal
Documentation
Everything needed to build on BioMedora: guides below, then the complete API reference generated directly from the published OpenAPI contract (141 paths, 153 operations, version 1.0.0).
Getting started
The base URL for your tenant is provisioned at signup (self-hosted deployments use your own domain). Every request is JSON-in / JSON-out with bearer authentication. Start with capability discovery, which never requires credentials:
curl https://api.biomedora.com/health
curl -X POST https://api.biomedora.com/v1/documents \
-H "Authorization: Bearer $BIOMEDORA_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"content": "...", "patient_id": "patient_123", "source_format": "text"}'Document creation runs billing + quota gates, optional fail-closed de-identification, NLP compilation, graph materialization, and indexing — returning the document plus a job handle you can poll via /v1/jobs.
Authentication
- Bearer tokens — issued by your identity provider in production; dev/demo tenants can mint short-lived tokens via
POST /auth/token?user_id=&tenant_id=&role=. - API keys — machine-to-machine access as
serviceprincipals via theX-API-Keyheader. Secrets are displayed exactly once at creation; only a SHA-256 hash persists; revocation is instant. - Tenancy is derived server-side from credentials — clients cannot assert another tenant's ID. Cross-tenant access is denied and audited.
Conventions
Request tracing
Every response echoes X-Request-ID and propagates X-Correlation-ID. Include them in support inquiries.
Idempotency
Send an Idempotency-Key on unsafe requests. Identical replays return the stored response (24h TTL); key reuse with a different payload returns 409.
Pagination
List endpoints return base64 cursors: pass ?limit= (max 500) and follow next_cursor.
Errors
All errors share one envelope: {error:{code,message,category,request_id,details,retryable}}.
Rate limits
Sliding-window per tenant+user: documents 120/min · NLP 300/min · LLM 60/min · search 600/min · chat 120/min · default 1000/min. Exceeding returns 429 + Retry-After.
AI metadata
Reasoning/chat responses carry pipeline_versions, reasoning_policy, reasoning_mode (deterministic | model_reasoning) and the served model — engine internals stay private.
Errors & rate limits
{
"error": {
"code": "MODEL_NOT_ENTITLED",
"message": "Model 'gpt-4o-mini' is not entitled for this plan.",
"category": "entitlement",
"request_id": "req_01J8...",
"details": {"allowed_models": ["qwen2.5-vl-7b"]},
"retryable": false
}
}| Status | Meaning |
|---|---|
| 400 / 422 | Malformed or invalid input — details list the failing fields. |
| 401 | Missing or invalid credentials. |
| 403 | Authenticated but not permitted (RBAC/ABAC denial; audited). |
| 404 | Resource does not exist within your tenant scope. |
| 409 | Conflict — e.g., Idempotency-Key reuse with different payload. |
| 422 PRIVACY_BLOCKED | Fail-closed de-identification blocked the content. |
| 429 | Rate limited or quota HARD_LIMIT reached — honor Retry-After. |
| 402 BUDGET_LIMIT_EXCEEDED | Budget policy disabled expensive AI for this period. |
Official SDKs
Typed Python distributions (biomedora-sdk, branded alias biomedora-client) cover every public capability — including jobs polling helpers, usage inspection, and attribute-access responses. TypeScript integrates via typed REST today.
API reference
Generated at build time from openapi/openapi.json — the same contract the platform serves and the Python SDKs are built against. Click any operation to inspect parameters, request schemas, and responses.
System & Discovery
3 operations
Documents
9 operations
Privacy & De-identification
16 operations
Clinical NLP
9 operations
Patients
9 operations
Intelligence: Search · Reasoning · Chat
17 operations
Platform Operations
11 operations
FHIR
1 operations
Billing & Usage
26 operations
Storage Data Platform
7 operations
Organization Settings & Keys
12 operations
Other Public Surfaces
3 operations
Internal Operator APIs
30 operations