{"openapi":"3.1.0","info":{"title":"Choice Arrangement Deck API (IDEON-compatible routes)","version":"1.0.0","description":"Plans, rates, networks and drug coverage with the paths, snake_case field names and error bodies of the IDEON API, under the version root /api/v1. Coverage: ACA individual-market medical plans and Medicare Advantage. CAD\u0027s own /v1/medicare routes add Medicare Advantage and Part D plans with fuller benefits (plan years 2026 and 2027). Dental, vision, life, disability, accident, critical illness, hospital indemnity, small group and Medicaid are not offered. Authentication is OAuth 2.0 client credentials (Authorization: Bearer ...), not an API key header. Accept-Version v6 (default) to v9 selects string or object benefit cells. select=a.b,a.c limits fields; paged lists send Total, Per-Page, Page and Link headers. Errors are {\u0022errors\u0022:{\u0022base\u0022:[\u0022...\u0022]}} (keys base, authentication, authorization, rate_limit or the field name on 422). Daily limits are CAD\u0027s: 100 calls at full speed, 500 more at one per 5 seconds, then 429. The /v1 routes keep working. Do not send consumer personal data.\n\n## Differences from IDEON / not supported\n- Ids: plan ids are 14-character HIOS ids; network and formulary ids are strings (IDEON uses integers); the level slug is expanded_bronze style. zip_county, zip_code, county and state ids are integers (zip_county = ZIP x 100000 \u002B FIPS).\n- Plan years: select with year (query or body) or enrollment_date; the /api/v1 root never changes. Network and formulary ids are strings by design.\n- Authentication is CAD\u0027s OAuth client-credentials token only (no IDEON header alias); limits are CAD\u0027s.\n- Plans: state-based-exchange plans have no copay or coinsurance (null); no logos, carrier grouping, state live flags or NDC drug packages (use rx_cui_ids); premium_subsidized is the federal credit only (no state subsidies, no CHIP/Medicaid screening: eligible_for_chip_medicaid is null). Plan years 2026 and 2027 only for subsidies and affordability.\n- Medicare Advantage: benefits are limited to primary care, specialist, emergency, urgent care, drug deductible and MOOP; no provider networks (providers filter returns 422); stand-alone Part D plans are not published.\n- Groups and members are stateless: POST /groups and POST/PUT /groups/{id}/members validate and echo; ichra_affordability_calculations and ichra_quotes take group, locations and members inline, return a complete result in the 201 response and store nothing. GET/DELETE groups and members, supplemental_data, GET /ichra_affordability_calculations/{id}[/members], GET /ichra_quotes/{id}[/rates[/{member_id}]] and bulk export files do not exist.\n- Not offered (no data or outside the product): dental, vision, life, disability, accident, critical illness, hospital indemnity, small group quoting, Medicaid, bulk exports, plans/medical/changes, provider search, network_comparisons, npn_validation and quote proposals. Unsupported lines or markets return an empty list or a 422 naming the field.","termsOfService":"https://choicearrangementdeck.com/developer/terms"},"servers":[{"url":"https://api.choicearrangementdeck.com/api/v1"}],"security":[{"oauth2":[]}],"paths":{"/health":{"get":{"tags":["utilities"],"operationId":"getHealth","summary":"API health check","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}}],"security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}}}}}}}}},"/plans/medical/{id}":{"get":{"tags":["medical plans"],"operationId":"showMedicalPlan","summary":"Show an individual-market major medical plan","parameters":[{"name":"id","in":"path","required":true,"description":"Path parameter","schema":{"type":"string"}},{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"year","in":"query","required":false,"description":"Plan year (default","schema":{"type":"integer"}},{"name":"select","in":"query","required":false,"description":"Comma list such as plan.name,plan.hsa_eligible; id is always returned","schema":{"type":"string"}}],"description":"id is the 14-character HIOS plan ID (an optional -NN CSR variant suffix is accepted and ignored). Benefit cells are strings in Accept-Version v6 and v7 (\u0027In-Network: $40 / Out-of-Network: Not Applicable | limit: 12 visit(s) per year\u0027) and objects {in_network, out_of_network, limit} in v8 and v9. Plans from state-based exchanges have no copay or coinsurance in the source data, so those amounts are null.","x-required-scope":"plans","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"object"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/plans/medical/search":{"post":{"tags":["medical plans"],"operationId":"findMajorMedicalPlans","summary":"Search individual-market major medical plans with premiums","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"page","in":"query","required":false,"description":"Page (default 1)","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page (default 10, max 100)","schema":{"type":"integer"}},{"name":"select","in":"query","required":false,"description":"Fields to return, e.g. plans.name,plans.premium","schema":{"type":"string"}}],"description":"Plans sold in the ZIP and county. Send applicants for premiums (premium, premiums_by_applicant), providers[{npi}] for in-network status and rx_cui_ids for drug coverage (NDC drug_packages are not supported). sort is \u003Cfield\u003E:asc|desc with field premium, name, id, level or carrier_name. premium_subsidized is the premium minus the federal premium tax credit when household_income (annual dollars) and household_size are sent (plan years 2026 and 2027; no state subsidies).","x-required-scope":"prices","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"zip_code":{"type":"string","description":"5-digit ZIP"},"fips_code":{"type":"string","description":"5-digit county FIPS"},"enrollment_date":{"type":"string","description":"YYYY-MM-DD; selects the plan year"},"year":{"type":"integer","description":"Plan year when no enrollment_date is sent (extension; default the default plan year)"},"market":{"type":"string","description":"individual (only)"},"applicants":{"type":"array","description":"[{age, child, smoker}]"},"providers":{"type":"array","description":"[{npi}]"},"rx_cui_ids":{"type":"array","description":"RxNorm RxCUIs (extension)"},"ids":{"type":"array","description":"Plan IDs to keep"},"sort":{"type":"string","description":"premium:asc"},"household_income":{"type":"integer","description":"Annual household income; with household_size adds premium_subsidized"},"household_size":{"type":"integer","description":"Household size"},"page":{"type":"integer","description":"Page"},"per_page":{"type":"integer","description":"Items per page"},"select":{"type":"string","description":"Fields to return"}},"required":["zip_code","fips_code"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object"},"plans":{"type":"array"},"coverages":{"type":"array"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/plans/medadv/{id}":{"get":{"tags":["medicare advantage"],"operationId":"showMedAdvPlan","summary":"Show a Medicare Advantage plan","parameters":[{"name":"id","in":"path","required":true,"description":"Path parameter","schema":{"type":"string"}},{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"year","in":"query","required":false,"description":"Medicare plan year","schema":{"type":"integer"}}],"description":"id is the CMS contract-plan-segment ID such as H0028_007_0. Benefits carry the primary care, specialist, emergency, urgent care, drug deductible and MOOP strings; out-of-network amounts are \u0027unknown\u0027. Stand-alone Part D plans are not published.","x-required-scope":"plans","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"medicare_advantage_plan":{"type":"object"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/plans/medadv/search":{"post":{"tags":["medicare advantage"],"operationId":"findMedicareAdvantagePlans","summary":"Search Medicare Advantage plans by county","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"page","in":"query","required":false,"description":"Page","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page","schema":{"type":"integer"}}],"description":"Medicare Advantage provider networks are not available: a non-empty providers list is rejected with a 422.","x-required-scope":"plans","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"zip_code":{"type":"string","description":"5-digit ZIP"},"fips_code":{"type":"string","description":"5-digit county FIPS"},"enrollment_date":{"type":"string","description":"YYYY-MM-DD; selects the plan year"},"year":{"type":"integer","description":"Plan year when no enrollment_date is sent (extension)"},"ids":{"type":"array","description":"Plan IDs to keep"},"page":{"type":"integer","description":"Page"},"per_page":{"type":"integer","description":"Items per page"}},"required":["zip_code","fips_code"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object"},"plans":{"type":"array"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/zip_counties":{"get":{"tags":["geography"],"operationId":"getZipCounties","summary":"Search ZIP counties by ZIP prefix","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"zip_prefix","in":"query","required":true,"description":"3 to 5 digits","schema":{"type":"string"}},{"name":"year","in":"query","required":false,"description":"Plan year","schema":{"type":"integer"}},{"name":"page","in":"query","required":false,"description":"Page","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page","schema":{"type":"integer"}}],"description":"Returns relational arrays (zip_counties, counties, states, zip_codes) with integer ids: zip_code id = the ZIP, county id = the FIPS code, state id = the state FIPS number, zip_county id = ZIP x 100000 \u002B FIPS. State live flags are null (no data).","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object"},"zip_counties":{"type":"array"},"counties":{"type":"array"},"states":{"type":"array"},"zip_codes":{"type":"array"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/zip_counties/{id}":{"get":{"tags":["geography"],"operationId":"showZipCounty","summary":"Show one ZIP county","parameters":[{"name":"id","in":"path","required":true,"description":"Path parameter","schema":{"type":"string"}},{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"year","in":"query","required":false,"description":"Plan year","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"zip_county":{"type":"object"},"counties":{"type":"array"},"states":{"type":"array"},"zip_codes":{"type":"array"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/providers/{npi}/plans":{"get":{"tags":["providers"],"operationId":"getProviderPlans","summary":"Plans whose network includes a provider","parameters":[{"name":"npi","in":"path","required":true,"description":"Path parameter","schema":{"type":"string"}},{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"year","in":"query","required":true,"description":"Plan year","schema":{"type":"integer"}},{"name":"line_of_coverage","in":"query","required":true,"description":"medical","schema":{"type":"string"}},{"name":"market","in":"query","required":false,"description":"individual","schema":{"type":"string"}},{"name":"zip_code","in":"query","required":false,"description":"With fips_code, limits to plans sold there","schema":{"type":"string"}},{"name":"fips_code","in":"query","required":false,"description":"With zip_code","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page","schema":{"type":"integer"}}],"description":"line_of_coverage must be medical. Providers in no known network return an empty list. Network membership is issuer-directory or derived (see the CAD /v1 provider status for provenance).","x-required-scope":"providers","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object"},"plans":{"type":"array"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/networks/disruption_analysis":{"post":{"tags":["networks"],"operationId":"createDisruptionAnalysis","summary":"In-network and out-of-network providers per network","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}}],"description":"network_ids are CAD network ids (strings, as returned by /networks). Providers that are in no known network read as out of network.","x-required-scope":"providers","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"npis":{"type":"array","description":"NPIs (max 25)"},"network_ids":{"type":"array","description":"Network ids (max 25)"},"year":{"type":"integer","description":"Plan year (extension)"}},"required":["npis","network_ids"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"disruption_analysis":{"type":"array"},"meta":{"type":"object"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/carriers":{"get":{"tags":["carriers"],"operationId":"getCarriers","summary":"Search carriers (HIOS issuers)","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"search_term","in":"query","required":false,"description":"Name contains","schema":{"type":"string"}},{"name":"state_code","in":"query","required":false,"description":"State","schema":{"type":"string"}},{"name":"issuer_id","in":"query","required":false,"description":"HIOS issuer id","schema":{"type":"string"}},{"name":"carrier_id","in":"query","required":false,"description":"Carrier id","schema":{"type":"string"}},{"name":"line_of_coverage","in":"query","required":false,"description":"medical (default) or medicare_advantage","schema":{"type":"string"}},{"name":"market","in":"query","required":false,"description":"individual","schema":{"type":"string"}},{"name":"year","in":"query","required":false,"description":"Plan year","schema":{"type":"integer"}},{"name":"page","in":"query","required":false,"description":"Page","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page","schema":{"type":"integer"}}],"description":"Each HIOS issuer is one carrier with one issuer; no parent-carrier grouping or logos. line_of_coverage medical or medicare_advantage; other lines return an empty list.","x-required-scope":"plans","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"carriers":{"type":"array"},"meta":{"type":"object"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/networks":{"get":{"tags":["networks"],"operationId":"listNetworks","summary":"Search networks","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"search_term","in":"query","required":false,"description":"Name contains","schema":{"type":"string"}},{"name":"state_code","in":"query","required":false,"description":"State","schema":{"type":"string"}},{"name":"carrier_id","in":"query","required":false,"description":"HIOS issuer id","schema":{"type":"string"}},{"name":"line_of_coverage","in":"query","required":false,"description":"medical","schema":{"type":"string"}},{"name":"market","in":"query","required":false,"description":"individual","schema":{"type":"string"}},{"name":"year","in":"query","required":false,"description":"Plan year","schema":{"type":"integer"}},{"name":"page","in":"query","required":false,"description":"Page","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page","schema":{"type":"integer"}}],"description":"Network ids are strings (CMS network ids or derived ids), not integers.","x-required-scope":"plans","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"networks":{"type":"array"},"meta":{"type":"object"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/drugs":{"get":{"tags":["drugs"],"operationId":"listDrugs","summary":"Search drugs","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"search_term","in":"query","required":false,"description":"Name contains (3\u002B characters)","schema":{"type":"string"}},{"name":"rx_cui","in":"query","required":false,"description":"RxNorm RxCUI","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page","schema":{"type":"integer"}}],"description":"Drugs are ingredient-level (RxNorm); drug_packages is always empty (no NDC data) and med_id is null.","x-required-scope":"drugs","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"drugs":{"type":"array"},"meta":{"type":"object"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/drugs/{id}/coverages":{"get":{"tags":["drugs"],"operationId":"getDrugCoverages","summary":"Formulary coverage of a drug by plan","parameters":[{"name":"id","in":"path","required":true,"description":"Path parameter","schema":{"type":"string"}},{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"year","in":"query","required":true,"description":"Plan year","schema":{"type":"integer"}},{"name":"line_of_coverage","in":"query","required":true,"description":"medical","schema":{"type":"string"}},{"name":"state_code","in":"query","required":true,"description":"Two-letter state","schema":{"type":"string"}},{"name":"market","in":"query","required":false,"description":"individual","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Items per page","schema":{"type":"integer"}}],"description":"id is a drug id from /drugs or an RxCUI. Only covered plans are listed; drug_package_id is the RxCUI. line_of_coverage must be medical.","x-required-scope":"drugs","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coverages":{"type":"array"},"meta":{"type":"object"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/groups":{"post":{"tags":["groups (stateless)"],"operationId":"createGroup","summary":"Validate a group and echo it (nothing is stored)","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}}],"description":"Groups are not stored. group.external_id is required and becomes the id returned and used in /groups/{id}/... paths; locations need zip_code and fips_code. GET, DELETE and supplemental_data endpoints do not exist. Send the group, locations and members again in every ICHRA request.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"group":{"type":"object","description":"company_name, external_id (required), company_tax_id, broker and agency fields (accepted, ignored)"},"locations":{"type":"array","description":"[{external_id, name, zip_code, fips_code, primary, number_of_employees}]"}},"required":["group","locations"]}}}},"responses":{"201":{"description":"Created (complete: nothing is stored)","content":{"application/json":{"schema":{"type":"object","properties":{"group":{"type":"object"},"locations":{"type":"array"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/groups/{id}/members":{"post":{"tags":["groups (stateless)"],"operationId":"createGroupMembers","summary":"Validate members and echo them (nothing is stored)","parameters":[{"name":"id","in":"path","required":true,"description":"Path parameter","schema":{"type":"string"}},{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}}],"description":"Validates the census (date_of_birth, zip_code and fips_code or a location_id, dependents) and returns it with ids. The census is not stored, so it is not available to later calls.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array","description":"Members with dependents (max 200)"},"locations":{"type":"array","description":"Locations that members refer to by location_id"}},"required":["members"]}}}},"responses":{"201":{"description":"Created (complete: nothing is stored)","content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}},"put":{"tags":["groups (stateless)"],"operationId":"updateGroupMembers","summary":"Validate members and echo them (nothing is stored)","parameters":[{"name":"id","in":"path","required":true,"description":"Path parameter","schema":{"type":"string"}},{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}}],"description":"Same as POST: there is no stored census to replace.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array","description":"Members with dependents (max 200)"},"locations":{"type":"array","description":"Locations that members refer to by location_id"}},"required":["members"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/groups/{id}/ichra_affordability_calculations":{"post":{"tags":["ichra"],"operationId":"createIchraAffordabilityCalculation","summary":"ICHRA affordability for a group (synchronous, stateless)","parameters":[{"name":"id","in":"path","required":true,"description":"Path parameter","schema":{"type":"string"}},{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}}],"description":"Send ichra_affordability_calculation {effective_date, plan_year, rating_area_location home|work}, plus group, locations and members (date_of_birth, zip_code, fips_code, household_income, household_size and safe_harbor_income per member; incomes are annual dollars). {id} is any label you choose. The 201 response is already complete: the group-level minimum_employer_contribution (max over members of lowest-cost silver - required percentage x monthly safe-harbor income; 9.96% for 2026, 10.22% for 2027) and fpl_minimum_employer_contribution (same with the single-person poverty line), and members[] with both amounts, the premium_tax_credit and the lowest and second-lowest silver reference plans. GET /ichra_affordability_calculations/{id} does not exist; nothing is stored.","x-required-scope":"prices","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ichra_affordability_calculation":{"type":"object","description":"effective_date, plan_year, rating_area_location"},"group":{"type":"object","description":"Echoed id only"},"locations":{"type":"array","description":"Needed for rating_area_location work"},"members":{"type":"array","description":"Members (max 200)"}},"required":["ichra_affordability_calculation","members"]}}}},"responses":{"201":{"description":"Created (complete: nothing is stored)","content":{"application/json":{"schema":{"type":"object","properties":{"ichra_affordability_calculation":{"type":"object"},"members":{"type":"array"},"meta":{"type":"object"},"group":{"type":"object"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/groups/{id}/ichra_quotes":{"post":{"tags":["ichra"],"operationId":"createIchraQuote","summary":"ICHRA quote for a group (synchronous, stateless)","parameters":[{"name":"id","in":"path","required":true,"description":"Path parameter","schema":{"type":"string"}},{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}},{"name":"page","in":"query","required":false,"description":"Page of members (default 1)","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Members per page (default 10, max 100)","schema":{"type":"integer"}}],"description":"Send quote {effective_date, calculations, outputs, plan_filters} plus group, locations and members (with dependents). The 201 response is complete and holds members[] (page and per_page, default 10, max 100) with every individual-market plan available to the member, premium and premiums_by_applicant (family rating applied), and the requested calculations (ichra_affordability, ptc_subsidy, csr_eligibility). plan_filters: hios_issuer_ids, exchange_availability, reference_plans (only the named reference plans are returned). bulk_export_file is not supported and GET /ichra_quotes/{id}/rates does not exist; nothing is stored, so request later pages with the same body.","x-required-scope":"prices","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"quote":{"type":"object","description":"effective_date (required), calculations, outputs, plan_filters"},"group":{"type":"object","description":"Echoed id only"},"locations":{"type":"array","description":"Locations that members refer to"},"members":{"type":"array","description":"Members with dependents (max 200)"}},"required":["quote","members"]}}}},"responses":{"201":{"description":"Created (complete: nothing is stored)","content":{"application/json":{"schema":{"type":"object","properties":{"quote":{"type":"object"},"members":{"type":"array"},"meta":{"type":"object"},"group":{"type":"object"}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"401":{"description":"errors.authentication","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"403":{"description":"errors.authorization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"404":{"description":"errors.base","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"422":{"description":"errors.\u003Cfield\u003E","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"429":{"description":"errors.rate_limit, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}},"503":{"description":"No data version is published, with Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errors"}}}}}}},"/oauth/token":{"post":{"tags":["auth"],"operationId":"getToken","summary":"Exchange client credentials for an access token","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}}],"description":"Same endpoint as POST /v1/oauth/token (OAuth 2.0 client_credentials, HTTP Basic or form body). Errors use the OAuth shape.","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string"},"expires_in":{"type":"integer"},"scope":{"type":"string"}}}}}}}}},"/.well-known/jwks.json":{"get":{"tags":["auth"],"operationId":"getJwks","summary":"Public token signing keys (JWKS)","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}}],"security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array"}}}}}}}}},"/openapi.json":{"get":{"tags":["utilities"],"operationId":"getOpenApi","summary":"This OpenAPI document","parameters":[{"name":"Accept-Version","in":"header","required":false,"description":"v6 (default), v7, v8 or v9","schema":{"type":"string","enum":["v6","v7","v8","v9"]}}],"security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"openapi":{"type":"string"}}}}}}}}}},"components":{"securitySchemes":{"oauth2":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://api.choicearrangementdeck.com/api/v1/oauth/token","scopes":{"plans":"Plans, carriers, networks, geography","prices":"Plan search with premiums, ICHRA","drugs":"Drugs and coverages","providers":"Provider plans, disruption analysis"}}}}},"schemas":{"Errors":{"type":"object","properties":{"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}}}}