Skip to main content

Field Definitions

This page describes every field defined by the Benefit Plan Standard v1.1.0 JSON schema. Refer to the overview for a high-level introduction.

Canonical schema: schema/v1.1.0/benefit-plan.schema.json

Fields marked v1.1.0 were added in the 2026-05-21 minor release. All v1.1.0 additions are backward-compatible — v1.0.0 documents continue to validate unchanged.

Plan Metadata

FieldTypeRequiredDescription
plan_idstringYesUnique ID for the plan, recommended format <carrier>-<id>-<year>
plan_namestringYesCarrier-assigned marketing name of the plan
carrierstringYesName of the issuing carrier
plan_typestringNoPlan design (PPO, HMO, EPO, POS, HDHP, MA-PD, etc.). See plan-types vocabulary.
plan_yearintegerNov1.1.0 Coverage year (e.g., 2025). Useful when effective_date is absent or for grouping plans across years.
effective_datestring (date)NoISO 8601 date the plan becomes effective
expiry_datestring (date)NoISO 8601 date the plan expires or renews
coverage_periodobjectNov1.1.0 { start_date, end_date } — explicit coverage window when it differs from effective_date / expiry_date.
marketstringNoMarket segment (individual, individual_on_exchange, small_group, large_group, medicare_advantage, medicaid, ...). See markets vocabulary.
schema_versionstringNoVersion of the standard the document conforms to (e.g., 1.1.0)

Network Tiers

network_tiers is a required array. Each entry defines a level of provider participation. Common tiers are IN (in-network) and OUT (out-of-network), but carriers may define additional tiers (T1, T2, OON_EMERG, etc.).

FieldTypeRequiredDescription
tier_idstringYesShort identifier (e.g., IN, OUT, T1, T2)
namestringYesHuman-friendly name of the tier
descriptionstringNoAdditional description or notes

Accumulators

accumulators is an optional object holding plan-wide financial thresholds. v1.0.0 defined the four legacy slots, which are implicitly in-network. v1.1.0 adds four explicit out-of-network counterparts plus richer per-accumulator metadata.

Accumulator slots

SlotNetwork scopeNotes
individual_deductiblein-network (implicit)
family_deductiblein-network (implicit)
individual_oop_maxin-network (implicit)
family_oop_maxin-network (implicit)
oon_individual_deductibleout-of-networkv1.1.0 new
oon_family_deductibleout-of-networkv1.1.0 new
oon_individual_oop_maxout-of-networkv1.1.0 new
oon_family_oop_maxout-of-networkv1.1.0 new

Accumulator object shape

Each accumulator slot is an object with these fields:

FieldTypeRequiredDescription
amountnumberYesDollar amount of the deductible or OOP maximum
currencystringNoISO 4217 currency code (default USD)
periodstringNov1.1.0 Accumulation period (per_calendar_year, per_plan_year)
network_tierstringNov1.1.0 Network scope (in-network, out-of-network, or a custom tier_id)
applies_tostringNoCoverage line the accumulator applies to (medical, pharmacy, integrated). In v1.0.0 this was deductible-only; v1.1.0 allows it on OOP max for parity.
embeddedbooleanNov1.1.0 For family-level slots: whether each member has an embedded individual sub-limit that contributes to the family max.

Benefits

The benefits array is the heart of the schema. Each entry describes cost sharing for a specific service.

FieldTypeRequiredDescription
benefit_idstringYesUnique ID for the benefit item within the plan
benefit_typestringNov1.1.0 Discriminator: medical (default), pharmacy, dental, vision, behavioral_health, maternity, pediatric. Enables future modules without restructuring the schema.
categorystringYesHigh-level service category (e.g., PHYSICIAN_SERVICES, PREVENTIVE_CARE, EMERGENCY_CARE). See categories vocabulary.
service_namestringYesHuman-readable description (e.g., Primary care visit)
canonical_keystringNov1.1.0 Machine-readable canonical identifier (e.g., primary_care, imaging_advanced). See canonical-benefits vocabulary.
raw_labelstring | nullNov1.1.0 Verbatim label from the source document before normalization. Useful for traceability.
place_of_servicestring[]NoPlaces where the service is provided (e.g., office, hospital, telehealth)
network_cost_sharesobject[]YesOne entry per network tier (see Network Cost Shares)
limitsobject[]NoVisit, day, or dollar limits
conditionsobject[]NoQualifiers such as prior authorization, referral requirement, or eligibility criteria
moop_applicabilitystring | nullNoWhether this benefit's cost sharing counts toward MOOP (plan_default, include, exclude)
coding_hintsobjectNoOptional cpt_ranges and revenue_codes for coding-system mapping

Network Cost Shares

Each entry in benefits[].network_cost_shares describes how members pay in a specific network tier.

FieldTypeRequiredDescription
tier_idstringYesIdentifier of the network tier (matches network_tiers[].tier_id)
coveredbooleanYesWhether the service is covered in this tier
cost_sharesobject[]NoOrdered sequence of cost-share components (see below). Omitted when covered: false.
notesstring | nullNoFree-form notes or qualifiers for this tier

Cost Shares

Each entry in network_cost_shares[].cost_shares describes one step in the cost-share calculation (copay, coinsurance, deductible). Steps are evaluated in sequence order.

FieldTypeRequiredDescription
typestringYescopay, coinsurance, or deductible
sequenceintegerYesOrder in which this cost share is applied (starting at 1)
amountnumber | nullNoDollar amount for copay or flat deductible
ratenumber | nullNoPercentage rate (0.0–1.0) for coinsurance
basisstring | nullNoCalculation basis (per_visit, per_day, per_test, per_prescription, allowed_amount)
applies_to_deductiblebooleanNoWhether this step applies before the deductible is met (default false)
applies_to_moopbooleanNoWhether this step counts toward the maximum out-of-pocket (default true)
notesstring | nullNov1.1.0 Free-text qualifier for this step (e.g., "copay waived after day 5")

Example

A PPO benefit with in-network $25 copay and out-of-network 50% coinsurance after the deductible:

{
"network_cost_shares": [
{
"tier_id": "IN",
"covered": true,
"cost_shares": [
{ "type": "copay", "sequence": 1, "amount": 25, "basis": "per_visit",
"applies_to_deductible": false, "applies_to_moop": true }
]
},
{
"tier_id": "OUT",
"covered": true,
"cost_shares": [
{ "type": "deductible", "sequence": 1, "rate": 1.0, "basis": "allowed_amount",
"applies_to_deductible": true, "applies_to_moop": true },
{ "type": "coinsurance", "sequence": 2, "rate": 0.50, "basis": "allowed_amount",
"applies_to_deductible": true, "applies_to_moop": true }
]
}
]
}

Limits

A limit object contains:

FieldTypeRequiredDescription
typestringYesLimit type (visits, days, dollars)
valuenumberYesNumeric value of the limit (e.g., 20)
periodstring | nullNoPeriod over which the limit applies (per_year, per_episode, per_lifetime)

Conditions

Conditions capture qualifiers like prior authorization or referral requirements:

{
"type": "authorization",
"code": "PRIOR_AUTH",
"description": "Prior authorization required from the plan"
}
FieldTypeRequiredDescription
typestringYesauthorization, referral, clinical, etc.
codestring | nullNoOptional code identifying the condition
descriptionstringYesHuman-readable description

Source References

source_references is an optional, top-level (plan-level) array providing citations back to the source document for auditing.

FieldTypeDescription
page_numberintegerPage number in the source document
page_rangestringOptional line/page range identifier
excerptstringVerbatim excerpt from the source

A typical entry:

{
"page_number": 3,
"page_range": "L100-L150",
"excerpt": "Primary care visit to treat an injury or illness: $35 copay per visit. Deductible does not apply."
}
note

v1.0.0 docs incorrectly described source_refs as a per-benefit, required field. The actual schema (v1.0.0 and v1.1.0) defines source_references at the top level and as optional. For per-field provenance, see the FHIR alignment guide and the canonical-benefits vocabulary.

Vocabularies

v1.1.0 publishes four non-normative recommended vocabularies. The schema leaves the corresponding fields as free-form strings so adopters can extend; the vocabularies provide consistent values for interoperability.

VocabularyUsed forFile
Canonical benefitsbenefits[].canonical_keyvocabularies/canonical-benefits.json
Categoriesbenefits[].categoryvocabularies/categories.json
Marketsmarketvocabularies/markets.json
Plan typesplan_typevocabularies/plan-types.json

FHIR Alignment

The FHIR alignment guide provides a field-by-field crosswalk from BPS to FHIR R4 InsurancePlan, with a worked example and round-tripping guidance.

Deprecated and Reserved Fields

The schema reserves several field names for future module expansions. For example, the pharmacy_deductible slot is not currently part of v1.1.0 but may be introduced when the Pharmacy module is integrated. See the modules overview for details.