Aetna: “$50 copay/visit, deductible does not apply…”
Cigna: “You pay $60 per office visit…”
Humana: “$40 copayment. Referral required.”
Plan doc: “50% coinsurance after deductible…”
The Benefit Plan Standard

Every health plan speaks
its own language.

Thousands of carriers. Millions of plan documents. The same benefit, described a thousand ways, none of them machine-readable.
Scroll, and watch them become one.

Scroll
One benefit · three carriers

The same specialist visit,
described three different ways.

Aetna
PPO 1500 80/50 · Summary of Benefits
If you visit a specialist

$50 copay/visit; deductible does not apply.

Out-of-network: 50% coinsurance after you meet your deductible.

Cigna
Open Access Plus · What You Will Pay
Specialist visit

You pay $60 per office visit. Not subject to deductible.

Non-participating providers: plan pays 60% after deductible; you pay the rest.

Humana
Gold Plus HMO · Evidence of Coverage
Physician specialist services

$40 copayment for each covered visit.

A referral from your PCP is required. Out-of-network is not covered.

 specialist_visit.bps.json, one shape for all three
{  "benefit_id": "SPECIALIST_VISIT",  "canonical_key": "specialist",  "category": "PHYSICIAN_SERVICES",  "network_cost_shares": [    { "tier_id": "IN", "cost_shares": [      { "type": "copay", "amount": 50 },   // Aetna      { "type": "copay", "amount": 60 },   // Cigna      { "type": "copay", "amount": 40 } ] },  // Humana    { "tier_id": "OUT": deductible → coinsurance, in sequence }  ],  "conditions": [ { "type": "referral" } ]   // fine print, as data}
Three carriers, three vocabularies, three structures. A person can read all of them. Software cannot.
Scroll back up, and it takes itself apart. Your scroll runs the play.
Controlled vocabulary

Three names for the same visit.
A standard gives it one.

“Specialist office visit”
“Physician specialist services”
“Visit to a specialist’s office”
"canonical_key": "specialist"

Software can read the words off any page. What it cannot do is know that these three phrases are the same benefit. BPS settles that with controlled vocabularies: canonical benefits, categories, plan types, markets. Seven carriers stop being seven dialects and become one comparable dataset.

The ambiguity that costs real money

Two plans print the same number.

$4,500family deductible

Mom has spent $1,500 this year. Is her coverage active?

"family_deductible": { "amount": 4500, "embedded": true }
👩
Mom
spent $1,500
👨
Dad
spent $600
👧
Sofia
spent $300
👦
Leo
spent $150

No gatekeeper

How do you know you did it right?
The file answers for itself.

Every BPS document is checked against the published schema, the standard’s rulebook. The validator confirms the required fields are present, the structure is right, and every term comes from the shared vocabularies. Pass or fail, in seconds, by anyone, for free. No certification body, no committee, no waiting for approval.

$ npx ajv validate -s benefit-plan.schema.json -d my-plan.jsonloading schema v1.1.0 …checking required: plan_id, plan_name, carrier, network_tiers, benefits …checking vocabularies: canonical_key, category, plan_type … ✔ my-plan.json is a valid Benefit Plan Standard document
Open · Vendor-neutral · MIT

However you extract,
land it here.

BPS does not care how you get the data. It defines what shape it lands in. The schema, seven worked carrier examples, controlled vocabularies and a pharmacy module are public today.

MIT
licensed · no fee
7
carrier examples
v1.1.0
stable · v1.2.0 draft
2
independent adopters make it final
benefitplanstandard.org Clone the schema

The Benefit Plan Standard · An open, vendor-neutral standard for health benefit plan data.
Governance is public. Versioning is semantic. Contributions are welcome.