Coverage — Insurance coverage
The resource that describes a patient's health insurance contract. Pivot of FHIR financial flows: pre-authorization, billing, reimbursement.
Purpose of the resource
Coverage represents one insurance coverage: private health insurance, supplemental / secondary plan, public program (Medicare, Medicaid, Securite sociale, NHS), workers' compensation insurance, travel insurance. A Coverage resource corresponds to a single coverage line; a patient may carry several active Coverages (primary + secondary + tertiary).
Coverage is the central piece of FHIR financial flows. It is referenced by Claim (reimbursement request), ClaimResponse, EligibilityRequest, ExplanationOfBenefit. It also carries cost-sharing (co-payments, deductibles, out-of-pocket maximum) on the patient side.
Key fields
| Field | Type | Cardinality | Role |
|---|---|---|---|
identifier | Identifier[] | 0..* | Contract identifiers (policy number, contract number). |
status | code | 1..1 | active, cancelled, draft, entered-in-error. |
kind | code | 1..1 | insurance, self-pay, other. New in R5. |
type | CodeableConcept | 0..1 | Coverage type (EHCPOL = extended healthcare, AUTOPOL = auto, DENTAL, etc.). v3 ActCode. |
policyHolder | Reference(Patient | RelatedPerson | Organization) | 0..1 | Policy holder (may differ from beneficiary). |
subscriber | Reference(Patient | RelatedPerson) | 0..1 | Subscriber (person under whose name the policy is issued). |
subscriberId | Identifier[] | 0..* | Subscriber number provided by the insurer. |
beneficiary | Reference(Patient) | 1..1 | Coverage beneficiary (mandatory). |
dependent | string | 0..1 | Dependent identifier (family rank). |
relationship | CodeableConcept | 0..1 | Beneficiary ↔ subscriber relationship (self, spouse, child, common…). |
period | Period | 0..1 | Contract validity period. |
insurer | Reference(Organization) | 0..1 | Insurance company. |
class | BackboneElement[] | 0..* | Contract classifications (group, plan, subgroup, subclass, subplan). |
order | positiveInt | 0..1 | Application order (1 = primary, 2 = secondary…) — essential when the patient holds multiple Coverages. |
network | string | 0..1 | Care network (HMO, PPO…). |
costToBeneficiary | BackboneElement[] | 0..* | Patient out-of-pocket (co-pay, deductible, out-of-pocket max). |
subrogation | boolean | 0..1 | Indicates whether the insurer exercises subrogation (third-party accident). |
contract | Reference(Contract)[] | 0..* | Links to the full Contract resource. |
Primary vs secondary coverage
A patient may hold several active Coverages simultaneously. The order
field determines the application order:
order=1— primary coverage. Receives the reimbursement claim first.order=2— secondary coverage (supplemental / "mutuelle" in France, secondary insurance in the US). Fills the remainder after primary reimbursement.order=3+— tertiary coverages (rare, but exists for specific programs like CMU-C or travel insurance).
In a Claim, you add one Claim.insurance per Coverage, with
focal=true for the coverage on which payment is requested
(typically the primary). Coordination of benefits (COB) between primary and
secondary is tracked via successive ClaimResponses.
JSON example
Primary coverage Aetna PPO 2026 for Patient "example", self-beneficiary, plan "ACME Group", co-pay USD 20 for primary care office visits:
{
"resourceType": "Coverage",
"id": "primary-aetna",
"status": "active",
"kind": "insurance",
"type": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
"code": "EHCPOL",
"display": "extended healthcare"
}]
},
"policyHolder": { "reference": "Patient/example" },
"subscriber": { "reference": "Patient/example" },
"subscriberId": [{
"value": "W123456789"
}],
"beneficiary": { "reference": "Patient/example" },
"dependent": "01",
"relationship": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/subscriber-relationship",
"code": "self"
}]
},
"period": {
"start": "2026-01-01",
"end": "2026-12-31"
},
"insurer": { "reference": "Organization/aetna" },
"class": [{
"type": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/coverage-class",
"code": "group"
}]
},
"value": "GRP-2026-ACME",
"name": "ACME Group Plan"
}, {
"type": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/coverage-class",
"code": "plan"
}]
},
"value": "PLN-PPO-2026",
"name": "Aetna PPO Standard 2026"
}],
"order": 1,
"costToBeneficiary": [{
"type": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/coverage-copay-type",
"code": "gpvisit",
"display": "GP Office Visit"
}]
},
"valueQuantity": {
"value": 20,
"code": "USD",
"system": "urn:iso:std:iso:4217"
}
}]
} kind=insurance— commercial coverage (vsself-pay).typeEHCPOL — extended healthcare policy.subscriber=beneficiary=policyHolder— patient is policy holder, subscriber and beneficiary (self-coverage).relationship.code=self.class[]two entries: group (ACME employer) + plan (Aetna PPO Standard 2026).order=1— primary coverage.costToBeneficiary[0]— USD 20 co-pay for primary care visits.
REST API
GET /Coverage?beneficiary=Patient/example&status=active— active coverages for a patient.GET /Coverage?beneficiary=Patient/example&_sort=order— coverages sorted by application order.POST /Coverage— create a new coverage after eligibility check.GET /Coverage/$eligibility-by-identifier— composite operation (per profile) for real-time eligibility check.GET /Coverage?subscriber-id=W123456789— search by subscriber number.GET /Coverage?_include=Coverage:insurer— include the issuing Organization.
National profiles
| Profile | Regulator | Specifics |
|---|---|---|
| Da Vinci PDex Coverage | HL7 Da Vinci Project | For Patient Data Exchange (CMS Rule 9115-F). Constrains identifier, type, policyHolder, beneficiary, relationship, period, payor, class. |
| CARIN BB Coverage | HL7 CARIN Alliance | For consumer claims data exchange (Blue Button 2.0). |
| US Core Coverage | HL7 US Realm — ONC EHR (USCDI v4) | Minimal profile for USCDI v4 (coverage data class statuses). |
| FR Core Coverage | ANS | For AMO (Assurance Maladie Obligatoire) and AMC (Complementary). Slicing on classes. |
| NCPDP Pharmacy Coverage | NCPDP | For US pharmacy context (BIN, PCN). |
Common pitfalls
- Confusing
subscriberandbeneficiary— subscriber can be a parent covering a child.beneficiaryis always the current patient receiving care. - No
period.end— a Coverage without an end date appears active indefinitely; manage contract end viastatus=cancelled+ fillingperiod.end. - Missing
order— withoutorder, the EHR cannot determine which coverage to bill first. Always populate when several coverages coexist. - Inconsistent
class—class[].typecodes are standardised (group,plan,subgroup,subclass,subplan,class,sequence,rxbin,rxpcn,rxid…). Inventing a proprietary code breaks interop. - Wrong
kind— new in R5. Before R5, this concept lived insidetype.kind=self-payis explicit for uninsured patients, do not omit. - Active coverage after contract end — a nightly reconciliation job must flip
statustocancelledwhenperiod.endhas passed; otherwise pre-authorisations rely on an expired coverage.
Related resources
- Claim — reimbursement request referencing Coverage.
- ClaimResponse — insurer's response.
- ExplanationOfBenefit — explanation of benefits.
- CoverageEligibilityRequest / CoverageEligibilityResponse — real-time eligibility verification.
- Patient — coverage beneficiary.
- Organization — insurer.
- InsurancePlan — insurance plan details (mutualisation).
- HL7 v2 IN1 / IN2 / IN3 — legacy equivalents.