Primary AI Canon API

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.

See it on a real record Get an API key Read the source

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.

faxPDFHL7 v2C-CDA FHIR R4X12 837portal CSV

Even "standard" data disagrees:

Same patient, different answers
  • 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