FHG Labs Data Sources
Library  /  Canvas Medical
EHR

Canvas Medical — EHR

Client-Facilitated ●——◇——►FHG’s path runs through the client’s instance & engineering team.
Access posture — Client-Facilitated. The Canvas API is gated to the customer and trusted partners, so FHG’s data path runs through the client’s own instance and engineering team, not a direct FHG pull. FHG’s leverage is knowing what to ask for; the client’s team owns the how.

1What Canvas is

Canvas Medical is an API-first, programmable EHR — a “decoupled EHR” whose entire clinical record is reachable through a FHIR R4 API and extensible through a developer SDK and plugins. Where a legacy EHR is a closed application you log into, Canvas is a clinical-data platform a team can either use through its full point-of-care interface or build custom experiences on top of, while still leaning on Canvas’s compliance and clinical foundations. That posture is exactly why a tech-enabled, value-based-care operator chooses it: the data is meant to flow in and out as a first-class capability.

Spelling note: the vendor is Canvas Medical — one s, “Canvas,” not “Canvass.”

2Company facts

Founded2015
FounderAndrew Hines (Founder / CEO·CTO) — built Canvas after watching his wife, a family nurse practitioner, struggle with bad EHR software
President & COOAdam Farren
HeadquartersSan Francisco, California
CategoryAPI-first / “programmable” / “decoupled” EHR for tech-enabled and value-based care
Developer surfaceFHIR R4 API (“Fumage”), Workflow SDK, plugins — first public developer tools 2021, expanded 2024

3Architecture — how the data is shaped

Canvas’s defining architectural choice is the FHIR API as facade. The API (“Fumage”) sits in front of each customer’s EHR server container and translates between the FHIR R4 representation and Canvas’s internal data models. Everything a team reads or writes — clinically, financially, operationally — passes through one unified data architecture with built-in validation.

4 How a Canvas client exports the raw payload

This is the central question for FHG, and Canvas answers it through the EHI Export capability, which implements the FHIR Bulk Data Access pattern. The export is standard FHIR R4 resources in newline-delimited JSON (NDJSON) — so the raw payload is the actual clinical record, resource by resource, not a flattened report.

4a · Single-patient export — via the UI

In admin settings, open Fhir bulk data exportsADD FHIR BULK DATA EXPORT, pick the OAuth application (created during implementation), leave Export type as Patient, search the patient, and Start Export. Canvas generates per-resource output-file links. The capability is permission-gated — a user without the permission has their internal admins coordinate with Canvas support.

4b · Single-patient export — via the API

GET https://fumage-<instance-name>.canvasmedical.com/Patient/<id>/$export

<instance-name> is the customer’s Canvas instance; $export is the standard FHIR bulk-data operation.

4c · Population / all-patients export

For a group of patients or the entire instance, the requester contacts Canvas support with: instance name (URL), username, role, the patient group (or “all patients”), and the purpose. Canvas initiates the bulk export; output lands back in the same export table. Population exports can take significant time depending on instance data volume.

Resources included in the patient recordset

The EHI export scopes to the patient resource plus every resource associated with that patient — roughly 28 FHIR R4 resource types:

AllergyIntolerance · Appointment · CarePlan · CareTeam · Claim · Communication · Condition · Consent · Coverage · CoverageEligibilityResponse · Device · DiagnosticReport · DocumentReference · Encounter · Goal · Immunization · Media · MedicationDispense · MedicationRequest · MedicationStatement · Observation · Patient · Procedure · Provenance · QuestionnaireResponse · RelatedPerson · ServiceRequest · Specimen · Task

Access gate worth flagging. Canvas’s FHIR API is currently limited to organizations using Canvas as their EHR and their trusted partners — broad third-party access (with patient authorization) is described as a near-future intent, not a present capability. Practically, FHG’s path to Canvas raw data runs through the customer’s own instance and OAuth application, not through an open public API.

5The data model — three tiers of richness

Michael’s steer: “We need to navigate smartly to yield richer Canvas data.” Canvas exposes the same underlying record at three very different levels of fidelity. Knowing which tier you’re pulling is the whole game.

Tier 1 — Interop floorFHIR R4 EHI Bulk Export ($export → NDJSON). ~28 standardized FHIR resources, lossy-but-portable. Thin.
Tier 2 — Native recordSDK Data Module over the Deep Unified Architecture. ~60 native models — the complete clinical + operational + financial record, ontology-linked. Rich.
Tier 3 — Linked semanticsDeep Unified Architecture + Custom Data + ontology graph. Cross-domain, real-time navigability (condition → lab → procedure → provider → bill), HCC/RAF linkage. Richest.
The trap. A big-data / API team naturally finds Tier 1 first (it’s the one page titled “export”), pulls 28 FHIR resources, and declares victory — having left most of the clinically and financially meaningful structure on the table. The richer data is real and documented; it just lives behind the SDK, not behind $export.

What “Deep Unified Architecture” means

The patient record is one normalized, versioned, referentially-intact model — with standard ontologies linked natively into the data, not bolted on after: LOINC (labs), ICD-10 (diagnoses), CPT (procedures), SNOMED-CT (clinical terminology), HCC / RAF (risk adjustment). A single query can move across conditions, labs, procedures, encounters, clinicians, and billing — native and real-time, where a legacy EHR needs an overnight report against stitched-together tables. This is precisely FHG’s wheelhouse — the ontology linkage is health-care-data domain knowledge.

The gap, stated plainly

Tier 1 — FHIR EHI export  |  Tier 2 — SDK Data Module
Models / resources~28  |  ~60
Financial / RCM detail✗ (Claim only, thin)  |  ✓ BillingLineItem, ChargeDescriptionMaster, PayorSpecificCharge, Posting, EligibilitySummary
ADT / external events✗  |  ✓ ExternalEvent
Live protocol / care-gap state✗  |  ✓ ProtocolCurrent / ProtocolOverride
Command-level documentation✗  |  ✓ Command
HCC/RAF linkagepartial  |  ✓ native
Access mechanismone $export call  |  a plugin querying the Data Module

The entire financial/RCM layer, the ADT feed, live care-gap state, reasons-for-visit, assessments, the inbound-document queue, and Command-level documentation (the native building blocks of nearly every Canvas workflow, captured as structured fields rather than free text) are Tier-2-only. For a value-based-care operator, that’s most of the value.

6 The “navigate smartly” extraction strategy

The Data Module is read-only at plugin runtime, designed for in-instance compute, not a one-click bulk dump. To turn Tier-2 richness into an extract, someone builds a Canvas SDK plugin that queries the Data Module and emits the data on a schedule. Hence the division of labor:

FHG owns the WHAT (health-care-data semantics)

The engineering team owns the HOW

The one-line thesis: Don’t accept the 28-resource FHIR export as “the Canvas data.” The real record is the ~60-model Data Module behind the SDK. FHG names the targets and the codes; the engineering team builds the plugin that emits them. Neither half works without the other.

7The Canvas ↔ Zus relationship

Canvas Medical and Zus have a strategic product partnership, and Zus ships a pre-built “Zus for Canvas” EHR integration. In a stack that runs both, Canvas is the system of record the clinicians work in, and Zus is the aggregation layer that pulls outside history (other EHRs, pharmacy, ADT, labs) around the patient. Complementary, not competing. See the Zus overview →

8Open questions for the Canvas transcript

9Sources

Captured 2026-06-09. Re-validated quarterly against docs.canvasmedical.com. Cross-link target: the FHG Academy data-source track.