Why Canon exists
AI agents can't act safely on records that contradict themselves
Healthcare data arrives as faxes, PDFs, HL7 feeds, C-CDA, FHIR, claims and CSVs that contradict each other. Canon normalizes all of it into one patient record: standard codes, canonical units, duplicates merged, conflicts flagged, every fact cited. Agents use it via API or MCP.
The problem
AI agents are being asked to do real work in healthcare: book visits, prep referrals, check meds. But the data they get is a mess. Much of it, especially referrals, still arrives by fax or PDF. Lab feeds, hospital summaries, patient portals and insurance claims each describe the same patient differently.
Even "standard" data disagrees:
- Two LOINC codes for the same test.
- A1c in mmol/mol in one feed and % in another.
- A medication dose changed in one system but not another.
An agent reading seven raw documents will miss things or make them up.
What Canon does
You send Canon any clinical document, in any of 7 formats, and it returns one canonical patient record.
Every format in
Fax/OCR text, PDF, HL7 v2, C-CDA, FHIR R4, X12 837 claims and portal CSVs. The format is detected automatically, and documents are matched to the right patient by demographics.
Standard codes out
ICD-10, SNOMED CT, LOINC, RxNorm, CVX and CPT, with units converted to UCUM (e.g. A1c 60 mmol/mol → 7.64 %).
Reconciled across sources
The same A1c arriving by fax, HL7 and the portal becomes one result with three sources. Medication changes ("increase metformin to 1000 mg") update the current dose and keep the history.
Conflicts surfaced, never hidden
"Hospital says no known allergies, the fax says penicillin." "The portal still shows 500 mg." A diagnosis that appears only on a billing claim is flagged as such. Agents are told to check before acting.
Every fact is cited
Each item links to the source document, the exact location (OBX[2], line 31) and a verbatim snippet,
with a confidence score. Nothing is silently dropped: anything that can't be mapped is listed with a reason.
Clinically careful text extraction
Negation ("denies chest pain"), family history ("father had diabetes"), OCR repair ("5OO mg" → 500 mg) and medication start/stop/increase intent are all handled.
See it in the browser
The live demo opens on the 7-document sample patient, or drop in your own files. Conflicts come first, then coded problems, reconciled medications with change history, and lab trends. Click any row to see the exact line it came from. Customers get an Agent usage dashboard showing their agents' requests, errors, latency and LLM tokens.
Built for agents
A token-efficient patient summary, 9 tools in Anthropic/OpenAI/MCP formats, an MCP server, FHIR R4 export, and a Claude agent example. Scanned faxes can go through Claude with structured outputs, and every LLM-extracted fact must quote its evidence. Unverifiable quotes are downgraded.
How it's different from FHIR, HL7 and SNOMED
Those standards define the envelope and the dictionary. They don't make the data inside correct, de-duplicated or consistent.
Canon consumes those standards and outputs them (FHIR R4 export). Its job is to make the data trustworthy enough for an agent to act on.
A business from day one
- Multi-tenant. Each customer's data is isolated, and API keys are stored hashed.
- Auditable. A tamper-evident, hash-chained audit log records every read and write.
- Usage-based billing. Stripe at $0.05 per normalized page: signup, Checkout, metered usage, webhooks and a billing portal.