ExplanationOfBenefit — Benefits statement
The patient-facing summary of benefits reimbursed, denied or adjusted by the insurer. Cornerstone of the CMS Patient Access API.
Purpose of the resource
ExplanationOfBenefit (EOB) is the patient statement produced by the insurer after processing a Claim. It's what the patient receives to understand:
- which services were billed;
- which amount was reimbursed;
- what out-of-pocket they must pay (co-pay, deductible, non-covered);
- what payment was issued to the provider.
In 2026, the EOB has become central in the US ecosystem: CMS 9115-F rule (since 2021, extended in 2024 under CMS-0057-F) requires every public and private payor to provide historical EOBs to their enrolees through a Patient Access API conformant with CARIN BB 2.0.
Key fields
| Field | Type | Cardinality | Role |
|---|---|---|---|
identifier | Identifier[] | 0..* | EOB business identifier. |
status | code | 1..1 | active, cancelled, draft, entered-in-error. |
type | CodeableConcept | 1..1 | Category (matching source Claim). |
use | code | 1..1 | claim, preauthorization, predetermination. |
patient | Reference(Patient) | 1..1 | Beneficiary. |
billablePeriod | Period | 0..1 | Service period. |
created | dateTime | 1..1 | EOB generation date. |
insurer | Reference(Organization) | 1..1 | Issuing insurer. |
provider | Reference(Practitioner | PractitionerRole | Organization) | 1..1 | Service provider. |
outcome | code | 1..1 | queued, complete, error, partial. |
disposition | string | 0..1 | Human-readable disposition. |
claim | Reference(Claim) | 0..1 | Link to source Claim. |
claimResponse | Reference(ClaimResponse) | 0..1 | Link to ClaimResponse. |
diagnosis | BackboneElement[] | 0..* | Diagnoses. |
procedure | BackboneElement[] | 0..* | Procedures. |
insurance | BackboneElement[] | 1..* | Applied Coverage(s). |
item | BackboneElement[] | 0..* | Billed lines with adjudication. |
total | BackboneElement[] | 0..* | Totals per adjudication category. |
payment | BackboneElement | 0..1 | Issued payment. |
benefitBalance | BackboneElement[] | 0..* | Benefit balances (deductible consumed/remaining, out-of-pocket). |
Differences with ClaimResponse
| Aspect | ClaimResponse | ExplanationOfBenefit |
|---|---|---|
| Primary recipient | Provider (B2B) | Patient (B2C, via Patient Access API) |
| Format | Technical, payment-focused | Readable, contextualised, historic |
| Cycle | Emitted as Claim is processed | Emitted periodically (e.g. every 7 days) |
| Persistence | Often transient | Archived (often 7 years+ by regulation) |
benefitBalance field | No | Yes — annual balances (deductible, OOP) |
JSON example
EOB for the reimbursed Claim professional-2026-001: billed 120,
co-pay 20, paid 80 to provider. The patient receives this statement a week after
their visit:
{
"resourceType": "ExplanationOfBenefit",
"id": "eob-2026-001",
"status": "active",
"type": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/claim-type",
"code": "professional"
}]
},
"use": "claim",
"patient": { "reference": "Patient/example" },
"billablePeriod": {
"start": "2026-05-14",
"end": "2026-05-14"
},
"created": "2026-05-21T08:00:00+01:00",
"insurer": { "reference": "Organization/aetna" },
"provider": { "reference": "Practitioner/dr-jones" },
"outcome": "complete",
"disposition": "Processed.",
"claim": { "reference": "Claim/professional-2026-001" },
"claimResponse": { "reference": "ClaimResponse/response-2026-001" },
"insurance": [{
"focal": true,
"coverage": { "reference": "Coverage/primary-aetna" }
}],
"item": [{
"sequence": 1,
"productOrService": {
"coding": [{
"system": "http://www.ama-assn.org/go/cpt",
"code": "99213"
}]
},
"servicedDate": "2026-05-14",
"adjudication": [{
"category": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/adjudication",
"code": "submitted"
}]
},
"amount": { "value": 120.00, "currency": "USD" }
}, {
"category": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/adjudication",
"code": "copay"
}]
},
"amount": { "value": 20.00, "currency": "USD" }
}, {
"category": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/adjudication",
"code": "benefit"
}]
},
"amount": { "value": 80.00, "currency": "USD" }
}]
}],
"total": [{
"category": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/adjudication",
"code": "submitted"
}]
},
"amount": { "value": 120.00, "currency": "USD" }
}, {
"category": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/adjudication",
"code": "benefit"
}]
},
"amount": { "value": 80.00, "currency": "USD" }
}],
"payment": {
"amount": { "value": 80.00, "currency": "USD" }
}
} claim+claimResponsetrace the full upstream lineage.item[0].adjudicationcopies the ClaimResponse detail so the patient can self-serve.payment.amounttells the patient how much was paid to the provider.billablePerioddocuments the service period (here, a single day).
REST API
GET /ExplanationOfBenefit?patient=Patient/example&_sort=-created— patient statements sorted.GET /ExplanationOfBenefit?patient=Patient/example&billable-period-start=ge2026-01-01— 2026 statements.GET /ExplanationOfBenefit/eob-2026-001— specific statement.GET /ExplanationOfBenefit?coverage=Coverage/primary-aetna— statements tied to a coverage.GET /ExplanationOfBenefit?_include=ExplanationOfBenefit:claim&_include=ExplanationOfBenefit:claim-response— statement + full upstream.POST /Patient/example/$everything?_type=ExplanationOfBenefit— full patient financial history.
Profiles
| Profile | Regulator | Specifics |
|---|---|---|
| CARIN BB EOB Inpatient Institutional | HL7 CARIN Alliance | For CMS Patient Access API — hospital admissions. |
| CARIN BB EOB Outpatient Institutional | HL7 CARIN Alliance | Institutional ambulatory care. |
| CARIN BB EOB Professional NonClinician | HL7 CARIN Alliance | Professional services (office, specialists). |
| CARIN BB EOB Pharmacy | HL7 CARIN Alliance | Pharmacy. |
| CARIN BB EOB Oral | HL7 CARIN Alliance | Dental. |
| Da Vinci PDex EOB | HL7 Da Vinci | Patient Data Exchange (payor-to-payor). |
Common pitfalls
- EOB without
claimnorclaimResponse— an EOB disconnected from its source pieces is neither auditable nor reconcilable. - CARIN BB profile not respected — for CMS Patient Access API usage, pick the right CARIN BB profile (among six) and carry the mandatory elements (types, identifiers, adjudication categories).
- Missing
benefitBalance— to allow the patient to track their out-of-pocket, this block must be populated (deductible-met, out-of-pocket-met, etc.). - Technical disposition exposed as-is — avoid surfacing internal payor codes (proprietary denial reason codes) without a human-readable translation.
- Non-standard item adjudication categories — strictly use the
adjudicationCodeSystem + CARINadjudicationDenialReasonextension per profile.
Related resources
- Claim — upstream source.
- ClaimResponse — B2B / interbank decision.
- Coverage — applied coverage.
- PaymentReconciliation — reconciliation of multiple payments.
- Patient — beneficiary.
- X12 835 — legacy interbank equivalent.