USCDI (United States Core Data for Interoperability) is the ONC-published list of data classes and elements that certified health IT must be able to exchange. FHIR R4 is the API standard that actually carries them. The bridge between the two is US Core, the HL7 implementation guide that maps every USCDI element to a concrete FHIR resource, field, and terminology binding. USCDI says what must move; FHIR says how; US Core says exactly where each element lives on the wire.
Teams hit this triad the first time a certification requirement or a partner contract says "support USCDI" and someone asks what endpoint that means. The honest answer is that USCDI alone means nothing at the API level. When we built a FHIR R4 platform covering USCDI v3, the USCDI requirement dissolved into concrete engineering: US Core 6.1.0 conformance across forty-two resource providers, terminology services for the required code systems, and search parameters covering the full US Core surface. That translation, from policy list to resource providers, is the work.
What USCDI actually is
USCDI is a policy artifact, not a technical one. ONC publishes it in versions, each expanding the set of data classes: patient demographics, problems, medications, allergies, immunizations, lab results, clinical notes, procedures, and onward through newer classes like health insurance information and patient goals. Each class contains elements, and each element carries an applicable vocabulary: LOINC for labs, SNOMED CT for problems, RxNorm for medications, ICD-10 for diagnoses.
Two properties matter for engineers. First, USCDI is a floor, not a ceiling: it defines the minimum exchangeable set, and real integrations routinely need more. Second, it is deliberately format-agnostic. The same USCDI element can travel in a FHIR resource, a C-CDA document, or a flat extract. Certification rules pin which standard applies in which context, and for API access the answer is FHIR R4 shaped by US Core.
What FHIR adds on top
FHIR contributes everything USCDI leaves unsaid: the resource model, the REST semantics, search, operations, bundles, and the machinery of an actual API. A USCDI medication element becomes a MedicationRequest resource with a status, an intent, a subject reference, and an RxNorm coding. A lab result becomes an Observation with a LOINC code, a value, and a category. The data class names sound like table names; the resources are where the engineering constraints live.
FHIR also adds the parts that make exchange operable rather than merely possible: OAuth scopes that gate which resources an app may read, capability statements that advertise what a server supports, and Bulk Data for population-scale export. None of that appears in USCDI, all of it appears in the certification criteria that reference USCDI, which is why "we support USCDI" and "we have a certifiable FHIR API" are very different claims.
US Core: the bridge between them
US Core is where the two vocabularies meet, and it is the document your engineers will actually keep open. For each USCDI data class, US Core defines a profile: which FHIR resource carries it, which fields are mandatory (must-support in profile language), which terminology bindings are required, and which search parameters a server must implement.
The profiles are stricter than base FHIR in exactly the places interoperability breaks. Base FHIR allows a Patient without an identifier; US Core does not. Base FHIR allows an Observation coded in any system; US Core pins LOINC for laboratory results. This strictness is the point: it is what lets a consumer written against US Core work against any conformant server, instead of against the one server it was tested on.
The version pairing is the detail that bites. Each US Core version implements a specific USCDI version, and certification rules pin specific pairings. A build that targets the wrong pairing, US Core profiles from one vintage against USCDI requirements from another, produces rework precisely at certification time. Confirm the pairing before writing resource providers, not after.
Versions: USCDI, US Core, FHIR
| Artifact | Published by | Versioning behavior | What a version changes |
|---|---|---|---|
| USCDI | ONC | Annual expansion (v1, v2, v3, v4, ...) | Which data classes and elements are required |
| US Core | HL7 | Tracks USCDI versions with a lag | Profiles, must-support fields, bindings, search params |
| FHIR | HL7 | Major releases (R4 stable, R5 emerging) | The resource model and API itself |
The stable ground today is FHIR R4: certification rules reference it, and R5 adoption in US regulatory context is a future concern, not a current one. On our platform work the practical pattern was R4 with selective R5 backports, subscription topics, for instance, exposed as extensions, so the server tracks where the standard is going without leaving the version partners actually speak.
Where builds go wrong
Treating the mapping as one-to-one. USCDI data classes fan out across resources and resources aggregate multiple classes. Assuming a class equals a resource produces a data model that fights US Core instead of following it. The profile set is the map; use it directly.
Skipping the terminology service. USCDI's vocabularies are not decoration. Without a server-side terminology capability, ValueSet expansion and code validation, every consumer ships its own copies of LOINC, SNOMED CT, and RxNorm subsets, and they drift apart within a quarter. We watched exactly that drift before building expansion and validation into the platform itself.
Validating against base FHIR instead of profiles. A payload can be perfectly valid R4 and fail every US Core constraint that matters. Conformance testing has to run against the profiles, and against the search parameter requirements, which are the half of US Core teams forget until a partner's queries return nothing.
Ignoring what happens after the API. USCDI-shaped data arriving over FHIR still lands somewhere: an aggregation layer that serves internal consumers, or a warehouse that preserves history for analytics. The contract discipline that US Core imposes at the boundary is worth carrying inward, one typed contract, quirks absorbed at the edge, which is the same architecture as our clinical data aggregation hub and the reason aggregation platforms pair naturally with FHIR surfaces.
USCDI will keep growing a class at a time, US Core will keep chasing it, and FHIR R4 will stay the carrier for years. Build the translation layer once, properly, profiles, terminology, search, and version churn becomes an update, not a rebuild. That posture, standards as engineering constraints rather than compliance paperwork, is the core of our healthcare integration practice.
Common questions
Is USCDI a data format?
No. USCDI is a policy list: the data classes and elements that certified health IT must be able to exchange. It says nothing about wire format. The format comes from the standard that carries it, in practice FHIR R4 shaped by US Core profiles.
What is the difference between USCDI and US Core?
USCDI is the list of required data elements, published by ONC. US Core is the FHIR implementation guide, published through HL7, that maps each USCDI element to a concrete FHIR resource, field, and terminology binding. USCDI tells you what. US Core tells you exactly where it goes on the wire.
Which USCDI version should a new build target?
Target the version pinned by the current ONC certification rule, then check which US Core version implements it. The pairing matters more than the number: building against a US Core version that implements a different USCDI vintage than your certification target creates rework at exactly the wrong time. Confirm the pairing before writing resource providers.
Do USCDI data classes map one-to-one onto FHIR resources?
No, and that mismatch is where integration time goes. One data class can fan out across several resources, and one resource can carry elements from several classes. Medications alone touch MedicationRequest and the terminology layer behind it. The US Core profile set is the only reliable map.
We built this in production
FHIR · TEFCA · USCDI integration
Production FHIR R4 server covering 42 resource types, SMART on FHIR v2.1 with PKCE, TEFCA QHIN handshake against Epic Nexus and CommonWell, and a tamper-evident audit chain scoped to the Consent that authorized each read...
Clinical data aggregation hub
API hub aggregating multiple clinical data sources behind a single read-friendly contract for internal teams. Typed C# SDK shipped to consumers, schema-versioned endpoints, per-request budgeting, and audit logging so com...
Keep reading
TEFCA vs FHIR: what each one actually does
TEFCA is a trust framework for network exchange, FHIR is the API standard the data rides on. How they differ, where they meet, and what you build for each.
Clinical data aggregation: architecture that scales
What a clinical data aggregation platform does, the hub pattern that stops every consumer re-integrating every source, and the failure modes to design against.
This is the standards side of what we do. The engineering practice behind it, HEDIS pipelines, FHIR platforms, and clinical document systems built under BAA, lives on the healthcare integration page.
Working on something in this space?
Describe the system and the standard you are up against. The engineer who answers is the engineer who ships it.