OriginChain
Industries · bedside, triage, audit

AI database for healthcare. Vitals, notes, and similar cases — one database.

The problem

Care teams need vitals on the second, clinicians need similar-case retrieval over de-identified summaries, and compliance needs a tamper-evident audit trail — three product surfaces that today come from three different vendors.

The OriginChain answer

OriginChain stores vitals, labs, clinical notes, case embeddings, and the PHI-access audit log on one hash-keyed substrate. Point-gets on a patient record run in 4 ms, BM25 finds 'penicillin allergy' across notes in 16 ms, and HNSW retrieves similar past cases at recall@10 = 0.96 with p99 109 ms in default high_recall mode (or p99 37 ms in fast mode at recall 0.69). HIPAA available on Enterprise; BYOK encryption per instance; single-tenant region-isolated.

point-get p99
< 4 ms
BM25 search p99
< 20 ms
HIPAA
available on Enterprise
encryption
AES-256, BYOK optional
what they use OriginChain for

One bearer token. One endpoint. Every query shape.

Each example below is a real call against the public HTTP API. Copy the curl, set $OC_TOKEN, and you'll see the same shape of response your app gets in production. Latency numbers are measured against a Storm-tier instance in ap-south-1.

Schemas you'd register

Register these once via oc schema put or the /v1/schema endpoint, and every example below resolves against them.

schema purpose key fields
patients Patient registry patient_ref · bed_id · ward · condition
vitals Bedside vitals stream patient_ref · ts · hr · spo2 · temp_c · bp_sys
labs Lab result history patient_ref · ts · test · value · unit · ref_range
clinical_notes Free-text clinical notes note_id · patient_ref · ts · author · text
cases_embed De-identified case embeddings case_id · embedding[768] · outcome
audit_access PHI access audit trail ts · actor · patient_ref · action

SQL for analytics and reconciliation

Standard SQL with JOIN, GROUP BY, HAVING, and window functions against the same store.

sql POST /v1/sql

Abnormal labs in a ward, today

request: SELECT p.patient_ref, p.bed_id, l.test, l.value, l.ref_range FROM patients p JOIN labs l ON l.patient_ref = p.patient_ref WHERE p.ward = 'ICU-3' AND l.ts > date_trunc('day', now()) AND NOT (l.value BETWEEN l.ref_low AND l.ref_high)
JOIN + range filter · ~48 ms · schemas: patients · labs
curl
curl -X POST https://oc-acme.ap-south-1.originchain.ai/v1/sql \
  -H "Authorization: Bearer $OC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sql":"SELECT p.patient_ref, p.bed_id, l.test, l.value FROM patients p JOIN labs l ON l.patient_ref = p.patient_ref WHERE p.ward = ''ICU-3'' AND l.ts > date_trunc(''day'', now()) AND NOT (l.value BETWEEN l.ref_low AND l.ref_high)"}'
response · application/json
{
  "rows": [
    { "patient_ref": "P-48317", "bed_id": "ICU-3-07", "test": "K+",      "value": 5.9 },
    { "patient_ref": "P-48401", "bed_id": "ICU-3-12", "test": "lactate", "value": 4.2 }
  ],
  "meta": { "latency_ms": 48 }
}

Vector search for similarity

HNSW with tunable speed/recall. Default high_recall: recall@10 = 0.96 at 100k, p99 109 ms. Fast: p99 37 ms (recall 0.69). Metadata filters during graph traversal.

vector · hnsw POST /v1/vector/topk

Five past cases most similar to the current patient

request: topk against cases_embed for the current patient summary
recall@10 = 0.96 · p99 109 ms at 100k summaries (high_recall) · schemas: cases_embed
curl
curl -X POST https://oc-acme.ap-south-1.originchain.ai/v1/vector/topk \
  -H "Authorization: Bearer $OC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "schema": "cases_embed",
    "field":  "embedding",
    "query":  "@P-48201_summary",
    "k":      5,
    "metric": "cosine"
  }'
response · application/json
{
  "rows": [
    { "case_id": "C-00188", "score": 0.961, "outcome": "discharged_d7"  },
    { "case_id": "C-04412", "score": 0.948, "outcome": "discharged_d10" },
    { "case_id": "C-09918", "score": 0.931, "outcome": "transferred_icu" }
  ],
  "meta": { "latency_ms": 109, "index_size": 100000, "mode": "high_recall" }
}

Full-text search with BM25

Unicode tokenizer, stop-words, language stemming. Phrase, OR, and field-scoped queries.

full-text · bm25 POST /v1/fts/search

BM25 across clinical notes

request: find clinical notes mentioning 'penicillin allergy' or 'beta-lactam' in ICU-3
BM25 + Snowball stemming · ~16 ms · schemas: clinical_notes · patients
curl
curl -X POST https://oc-acme.ap-south-1.originchain.ai/v1/fts/search \
  -H "Authorization: Bearer $OC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "schema": "clinical_notes",
    "field":  "text",
    "q":      "penicillin allergy OR beta-lactam",
    "filter": { "patient_ward": "ICU-3" },
    "k":      20
  }'
response · application/json
{
  "rows": [
    { "note_id": "N-44102", "patient_ref": "P-48317", "score": 8.71, "snippet": "...documented penicillin allergy from 2024 admission..." },
    { "note_id": "N-44188", "patient_ref": "P-48401", "score": 7.45, "snippet": "...avoid beta-lactam class antibiotics, sensitivity noted..." }
  ],
  "meta": { "latency_ms": 16 }
}

Natural-language questions

Plain English in. JSON out. Compiled plan cached after first touch.

natural language POST /v1/ask

Two-hour vitals history for a patient

request: patient P-48201's vitals history for the last two hours
point-get + range scan · ~30 ms · schemas: patients · vitals
curl
curl -X POST https://oc-acme.ap-south-1.originchain.ai/v1/ask \
  -H "Authorization: Bearer $OC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"q":"patient P-48201 vitals for the last 2 hours"}'
response · application/json
{
  "patient": { "ref": "P-48201", "bed": "ICU-12", "condition": "post-op day 2" },
  "vitals": [
    { "ts": "2026-04-23T07:42:10+05:30", "hr":  88, "spo2": 97, "temp_c": 37.1 },
    { "ts": "2026-04-23T08:02:10+05:30", "hr": 104, "spo2": 95, "temp_c": 37.6 }
  ],
  "meta": { "latency_ms": 30 }
}
why one substrate

Cross-shape consistency, by construction.

When SQL, vector, full-text, and graph all read from the same hash-keyed k/v store, a row written at 09:14:02.118 is visible to every shape on the next read. No ETL window, no replication lag, no consistency tax across vendors.

single-tenant

Region-isolated dedicated instance

Your data sits in your region, on a dedicated instance with its own keys and its own resource budget. No noisy-neighbour. No shared control plane.

durable

PITR + cross-AZ replication

Every write goes to a durable WAL, replicated to a hot standby in a second AZ. Restore to any second in your retention window.

observable

OTLP metrics + audit log

Per-key latency histograms, hit rate on the plan cache, and an append-only audit log of every privileged action — exported via OTLP to your observability stack.

ready when you are

Ninety seconds to an endpoint. No stack to wire up.

Pick a region, pick a tier, and we provision a single-tenant instance on AWS. The first query you send is the first query we'll show you how to write — in English.

talk to a human