FHIR, USCDI, and US Core: What They Are, How They Fit

FHIR says how to send data. USCDI says what data. US Core says exactly how to format it. Here's how the three standards fit together.

the nighthawk · 12 min read · 2026-03-31


Most teams start their healthcare integration journey by Googling "what is FHIR." They find the spec, read about Resources and RESTful APIs, and think they understand the landscape. Then they hit a compliance requirement that mentions USCDI v3, and suddenly there are three acronyms that all seem to mean "healthcare data standard" but aren't the same thing.

They answer three different questions. Confusing them costs teams months of rework. Here's the 101.

FHIR Is the Envelope

FHIR (Fast Healthcare Interoperability Resources) is an HL7 standard for exchanging healthcare data. It defines approximately 150 resource types — Patient, Observation, Condition, MedicationRequest, Encounter, and so on — and specifies how to send them over RESTful APIs using JSON or XML.

If you've built a REST API before, FHIR will feel familiar. Resources have IDs. You GET them, POST them, PUT them, DELETE them. You search with query parameters. Authentication uses OAuth2. The payload is JSON. It's modern web architecture applied to healthcare data. (This is genuinely one of the better-designed healthcare standards — damning with faint praise, maybe, but credit where it's due.)

FHIR follows an 80/20 design principle. The base resource definitions cover the common cases — the fields that most systems need most of the time. For the remaining 20%, FHIR provides profiles (constraints that tighten the base definition) and extensions (additional fields for domain-specific data). This keeps the core spec manageable while allowing customization for domain-specific needs.

Here's what FHIR is not:

The key analogy: FHIR defines the shape of the envelope and the postal routes. It doesn't tell you what letter to put inside.

One more thing on versions: FHIR R4 is the version that matters. The 21st Century Cures Act and ONC regulations mandate FHIR R4 APIs. R5 was published in 2023 and has useful improvements (particularly to Subscriptions), but vendor adoption is minimal. R6 is in ballot. For regulatory compliance and real-world integration, R4 is the target.

USCDI Is the Required Letter

USCDI (United States Core Data for Interoperability) is defined by ONC — the Office of the National Coordinator for Health IT (now ASTP), a federal agency within HHS. It is not an HL7 product. It is a government specification.

USCDI answers a fundamentally different question than FHIR. Where FHIR asks "how do you send data?", USCDI asks "what data must you be able to exchange?"

Critically, USCDI is technology-agnostic. It applies whether you're using FHIR, C-CDA, HL7v2, or carrier pigeon. It defines data classes and data elements — categories like "Medications" and specific elements like "medication name (RxNorm)." It doesn't care about the wire format.

USCDI Versions

Version Year Key Additions Regulatory Status
v1 2020 Baseline: demographics, allergies, conditions, meds, labs, vitals, notes, immunizations, procedures ONC Final Rule (2020)
v2 2022 SDOH data elements, average blood pressure, clinical tests
v3 2023 Health insurance info, health status assessments, expanded lab elements Mandatory Jan 1, 2026 (HTI-1)
v4 2024 Encounter diagnosis, medication adherence, treatment plan HTI-2 proposed (withdrawn Dec 2025)
v5 2025 Expanded SDOH, disability status, sex parameter for clinical use Proposed

USCDI v3 is the version that matters right now. The HTI-1 final rule made it mandatory as of January 1, 2026 for certified health IT. If you're building toward certification or exchanging data with certified systems, USCDI v3 is your compliance target.

What's In USCDI v3

USCDI v3 organizes data into data classes (broad categories) and data elements (specific items within each class). The data classes include:

The Terminologies

USCDI doesn't just say "exchange lab results." It says how to encode them:

Data Required Code System Maintained By
Conditions / Problems SNOMED CT NLM (US Edition)
Lab test names LOINC Regenstrief Institute
Medications RxNorm NLM
Diagnoses (billing) ICD-10-CM CMS / WHO
Procedures CPT / SNOMED CT AMA / NLM
Immunizations CVX CDC
Vital signs LOINC Regenstrief Institute
Units of measure UCUM Regenstrief Institute

This catches people off guard. USCDI mandates specific ontologies for each data element. If your system stores conditions as free text or proprietary codes, you're not USCDI-compliant regardless of how well your FHIR API works. Ask anyone who's tried to map a legacy system's condition codes to SNOMED — it's a months-long project.

US Core Is the Form Template

So FHIR gives you the envelope. USCDI tells you what letter to put inside and which language to write it in. But there's still a gap: how exactly do you fill out the FHIR resources to satisfy USCDI requirements?

That's what US Core does.

US Core is an HL7 FHIR Implementation Guide (IG) that translates USCDI data requirements into concrete FHIR profiles. A profile takes a base FHIR resource and constrains it: making optional fields required, binding fields to specific code systems, and flagging elements as must-support (meaning your system must be able to store, display, and exchange them even if they're not always populated).

For example, USCDI says "exchange medications using RxNorm." US Core translates that into the US Core MedicationRequest profile, which specifies:

Without US Core, two teams implementing "FHIR + USCDI" could produce completely different resource structures and still technically be compliant with both specs independently. US Core eliminates that ambiguity.

Version Mapping

US Core Version FHIR Version USCDI Version Profiles
3.1.1 R4 v1 ~40
5.0.1 R4 v2 ~50
6.1.0 R4 v3 ~60
7.0.0 R4 v4 ~65
8.0.1 R4 v5 ~70

US Core 6.1.0 is the version that implements USCDI v3, which is mandatory as of January 2026. If you're building for compliance today, that's your target IG.

How They Stack Together

Here's the layer cake:

┌──────────────────────────────────────────────┐
│  USCDI v3 (ONC / ASTP)                       │
│  "Exchange lab results with LOINC codes"      │
│  WHAT data  +  WHICH vocabularies             │
├──────────────────────────────────────────────┤
│  US Core 6.1.0 (HL7)                         │
│  "Observation.code must be LOINC,             │
│   Observation.referenceRange required, ..."   │
│  HOW to structure it in FHIR                  │
├──────────────────────────────────────────────┤
│  FHIR R4 (HL7)                                │
│  GET /Observation?patient=123                  │
│  THE transport protocol                       │
└──────────────────────────────────────────────┘

A Concrete Example: Hemoglobin Lab Result

Walk through all three layers for a single hemoglobin A1c lab result:

USCDI v3 says: "Lab results must be exchangeable. Test names use LOINC. Results must include value, units, reference range, and interpretation."

US Core 6.1.0 says: "Use the US Core Laboratory Result Observation profile. Observation.code must come from the LOINC value set. Observation.value[x] is must-support. Observation.referenceRange is must-support. Observation.interpretation is must-support."

FHIR R4 says: "Here's how to encode it as JSON and serve it from a RESTful endpoint."

The result, satisfying all three layers:

{
  "resourceType": "Observation",
  "status": "final",
  "category": [{
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/observation-category",
      "code": "laboratory"
    }]
  }],
  "code": {
    "coding": [{
      "system": "http://loinc.org",
      "code": "4548-4",
      "display": "Hemoglobin A1c/Hemoglobin.total in Blood"
    }]
  },
  "subject": { "reference": "Patient/123" },
  "effectiveDateTime": "2026-03-01",
  "valueQuantity": {
    "value": 7.2,
    "unit": "%",
    "system": "http://unitsofmeasure.org",
    "code": "%"
  },
  "referenceRange": [{
    "low": { "value": 4.0, "unit": "%" },
    "high": { "value": 5.6, "unit": "%" }
  }],
  "interpretation": [{
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation",
      "code": "H",
      "display": "High"
    }]
  }]
}

Every field in that resource serves a purpose defined by one of the three layers. Remove referenceRange and you violate US Core. Change the LOINC code to a proprietary code and you violate USCDI. Change the JSON structure and you violate FHIR. All three layers work together.

How New Standards Get Built: The Gravity Project

So you have the three-layer model: FHIR is the protocol, USCDI says what data to exchange, US Core says how to format it. But where do the requirements come from? How does a new data domain go from "we should standardize this" to "it's legally mandated"?

The Gravity Project is the best example of this pipeline in action. It's worth understanding not just for the SDOH content, but because it shows you exactly how the standards machine works.

Step 1: Identify the gap

Healthcare doesn't happen in a vacuum. A patient's health outcomes are shaped as much by where they live, what they eat, and whether they can get to their appointments as by the medications they're prescribed. These are Social Determinants of Health (SDOH) — food insecurity, housing instability, transportation access, financial strain, social isolation, interpersonal violence, education, employment.

Before Gravity, there was no standard way to represent any of this in clinical data. Every health system that tracked SDOH used different codes, different screening tools, different data structures. A food insecurity screening result from one system was meaningless to another.

Step 2: Form an HL7 FHIR Accelerator

HL7 runs a program called FHIR Accelerators — industry collaborations that bring together stakeholders (providers, payers, vendors, government agencies, patients) to build consensus around a specific domain. Gravity launched in 2019 with backing from the Social Interventions Research and Evaluation Network (SIREN) at UCSF and a broad coalition of health systems, EHR vendors, and community organizations.

The accelerator model matters because it's not one company deciding how SDOH should work. It's a consensus process — clinicians, informaticists, and implementers debating terminology bindings, profile constraints, and workflow patterns until they reach agreement.

Step 3: Standardize the terminology

For each SDOH domain, Gravity mapped existing screening tools and interventions to standard code systems: LOINC for screening instruments (PRAPARE, AHC-HRSN), SNOMED CT and ICD-10-CM for conditions, and SNOMED CT for interventions and goals. This is the unglamorous foundation work — deciding that "patient reports not having enough food" maps to a specific LOINC code, so that every system records it the same way.

Step 4: Publish a FHIR Implementation Guide

Gravity published the SDOH Clinical Care FHIR IG (STU 2.2), defining profiles for Conditions, Goals, ServiceRequests, Procedures, and Observations specific to SDOH workflows. These profiles layer on top of US Core — they don't reinvent the wheel, they constrain existing US Core profiles with SDOH-specific value sets and must-support elements.

Step 5: Get adopted into USCDI

Here's where it becomes mandatory. ONC incorporated Gravity's SDOH data elements into USCDI v2 (2022). Once something is in USCDI, it's on the path to regulatory enforcement. ONC expanded the SDOH elements further in v3, v4, and v5.

Step 6: It becomes law

USCDI v3 — which includes SDOH data elements — became mandatory on January 1, 2026 under the HTI-1 final rule. What started as a consensus project in 2019 is now a federal requirement in 2026. That's the pipeline.

Industry need identified
    ↓
HL7 FHIR Accelerator formed (consensus process)
    ↓
Terminology standardized (LOINC, SNOMED, ICD-10)
    ↓
FHIR Implementation Guide published
    ↓
ONC adopts data elements into USCDI
    ↓
US Core incorporates into FHIR profiles
    ↓
Federal rulemaking makes it mandatory

Every major new data domain in healthcare interoperability follows this path. Understanding it tells you not just what's required today, but what's coming next.

Other FHIR Accelerators Following the Same Path

Gravity isn't the only accelerator working through this pipeline. The one you should know about is Da Vinci — it targets payer-provider exchange (prior auth, coverage requirements, quality measures) and has a regulatory mandate landing January 2027. CMS-0057-F requires payers to implement FHIR APIs using Da Vinci IGs. Same path as Gravity: industry consensus → published IGs → CMS adopted them into regulation.

Others worth tracking: CARIN Alliance (consumer claims access, already mandated), CodeX/mCODE (oncology, growing adoption at cancer centers), Helios (public health reporting, in production), and Vulcan (clinical research, earlier stage). Each follows the same pipeline — the only question is how far along they are.

The Regulatory Timeline

Standards don't matter without enforcement. Three regulations turned FHIR from aspirational to mandatory:

ONC Cures Act Final Rule (May 2020)ONC mandated FHIR R4 APIs and USCDI v1 for certified health IT, following Congress's direction in the 21st Century Cures Act (2016). This is where FHIR went from "nice to have" to "legally required." The g(10) certification criterion specifically requires FHIR R4 with SMART on FHIR (OAuth2-based) authorization — every certified EHR must support it.

HTI-1 Final Rule (December 2023) — Updated the certification program to require USCDI v3 as of January 1, 2026. This is the current regulatory baseline. (The HTI-2 proposed rule would have pushed to USCDI v4 and added FHIR Subscription requirements, but it was largely withdrawn in December 2025. Worth watching — it could get revived.)

CMS-0057-F (January 2027) — Extends the FHIR mandate from EHR vendors to health insurers. Payers must implement Patient Access, Provider Access, and Prior Authorization APIs using FHIR and Da Vinci IGs. This is a big deal — it means the vendor side of every prior auth integration currently handled via fax and proprietary portals is about to become a FHIR endpoint.

The bottom line: if you're building health IT in the US, FHIR R4 + USCDI v3 + US Core 6.1.0 is the compliance baseline. Legally mandated.

The Cheat Sheet

Question Answer Who Defines It
How do I send healthcare data? FHIR R4 HL7 International
What data must I send? USCDI v3 ONC (ASTP)
How exactly do I format it in FHIR? US Core 6.1.0 HL7 International
What codes go in the fields? SNOMED CT, LOINC, RxNorm, ICD-10-CM NLM, Regenstrief, AMA, WHO
How do I authenticate? SMART on FHIR HL7 / CHIP at BCH
What about social determinants? Gravity SDOH Clinical Care IG HL7 Gravity Project
What about payer data exchange? Da Vinci IGs HL7 Da Vinci Project
What about oncology? mCODE HL7 CodeX
What about public health reporting? eCR IG HL7 Helios
What about clinical research? Vulcan FHIR for Research HL7 Vulcan

tl;dr: FHIR is the envelope, USCDI is the letter, and US Core is the form template. Get them confused and you'll spend months building something that technically sends FHIR but doesn't meet compliance requirements. Get them right and the entire IG ecosystem — Gravity, Da Vinci, CARIN, CodeX — slots into the same architecture.


Ready to build? Build a SMART on FHIR app in 30 minutes using a sandbox with realistic synthetic data. Or just browse the API →


Related posts

All posts · Home · Docs