ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

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

FieldTypeCardinalityRole
identifierIdentifier[]0..*EOB business identifier.
statuscode1..1active, cancelled, draft, entered-in-error.
typeCodeableConcept1..1Category (matching source Claim).
usecode1..1claim, preauthorization, predetermination.
patientReference(Patient)1..1Beneficiary.
billablePeriodPeriod0..1Service period.
createddateTime1..1EOB generation date.
insurerReference(Organization)1..1Issuing insurer.
providerReference(Practitioner | PractitionerRole | Organization)1..1Service provider.
outcomecode1..1queued, complete, error, partial.
dispositionstring0..1Human-readable disposition.
claimReference(Claim)0..1Link to source Claim.
claimResponseReference(ClaimResponse)0..1Link to ClaimResponse.
diagnosisBackboneElement[]0..*Diagnoses.
procedureBackboneElement[]0..*Procedures.
insuranceBackboneElement[]1..*Applied Coverage(s).
itemBackboneElement[]0..*Billed lines with adjudication.
totalBackboneElement[]0..*Totals per adjudication category.
paymentBackboneElement0..1Issued payment.
benefitBalanceBackboneElement[]0..*Benefit balances (deductible consumed/remaining, out-of-pocket).

Differences with ClaimResponse

AspectClaimResponseExplanationOfBenefit
Primary recipientProvider (B2B)Patient (B2C, via Patient Access API)
FormatTechnical, payment-focusedReadable, contextualised, historic
CycleEmitted as Claim is processedEmitted periodically (e.g. every 7 days)
PersistenceOften transientArchived (often 7 years+ by regulation)
benefitBalance fieldNoYes — 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:

json eob-paid.json
{
  "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 + claimResponse trace the full upstream lineage.
  • item[0].adjudication copies the ClaimResponse detail so the patient can self-serve.
  • payment.amount tells the patient how much was paid to the provider.
  • billablePeriod documents 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

ProfileRegulatorSpecifics
CARIN BB EOB Inpatient InstitutionalHL7 CARIN AllianceFor CMS Patient Access API — hospital admissions.
CARIN BB EOB Outpatient InstitutionalHL7 CARIN AllianceInstitutional ambulatory care.
CARIN BB EOB Professional NonClinicianHL7 CARIN AllianceProfessional services (office, specialists).
CARIN BB EOB PharmacyHL7 CARIN AlliancePharmacy.
CARIN BB EOB OralHL7 CARIN AllianceDental.
Da Vinci PDex EOBHL7 Da VinciPatient Data Exchange (payor-to-payor).

Common pitfalls

  • EOB without claim nor claimResponse — 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 adjudication CodeSystem + CARIN adjudicationDenialReason extension per profile.
  • Claim — upstream source.
  • ClaimResponse — B2B / interbank decision.
  • Coverage — applied coverage.
  • PaymentReconciliation — reconciliation of multiple payments.
  • Patient — beneficiary.
  • X12 835 — legacy interbank equivalent.