Insurer negotiated rates
get_exchange_plan_profile
Get Exchange Plan Profile·v1.0.0·L2·read-only·MCP + REST·admitted 2026-09-19
Inputs
90 required
Sources
2
Known limits
4
Real answer
2.48scomplete
What it answers
- 1One ACA Marketplace (healthcare.gov / HIX) plan's profile for a plan year, every field tagged with the CCIIO PUF it came from.
- 2Give plan_id (the 14-character HIOS standard component id, e.g.
- 338344AK1060001) for the plan: issuer, metal level, plan type (HMO/PPO/EPO/POS), Individual vs SHOP, on/off exchange, network, county footprint, premium benchmarks at age 21/40/60 (min across the plan's rating areas, plus the age-40 max), the per-age premium curve from the Rate PUF (include_rate_curve, default true), headline cost shares (PCP / specialist / ER / urgent care / generic drug copay, inpatient coinsurance), CMS quality stars, and the issuer's individual-market MLR.
- 4Or give state (+ optional plan_year, metal_level, issuer_id, plan_type, on_off_exchange) for the bounded list of that state's plans, cheapest age-40 premium first. plan_year defaults to the latest year held (PY2014-2026).
- 5Deductible / MOOP are returned as not_available (not in the composed profile).
- 6FFM states only: a state-based marketplace (CA, NY, PA, GA, ...) is absent at source and the tool says so rather than returning nothing silently.
Inputs (9)
| Name | Type | Required | Default | Accepts |
|---|---|---|---|---|
include_rate_curve | boolean | optional | true | |
issuer_id | any | optional | null | |
limit | any | optional | null | |
metal_level | any | optional | null | |
on_off_exchange | any | optional | null | |
plan_id | any | optional | null | |
plan_type | any | optional | null | |
plan_year | any | optional | null | |
state | any | optional | null |
Call it
# MCP (https://mcp.vladahealth.com/mcp): the tool by name get_exchange_plan_profile(state="TX", limit=3)
curl -X POST https://api.vladahealth.com/v1/tools/get_exchange_plan_profile \
-H "Authorization: Bearer $VLADA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"state":"TX","limit":3}'
# the schema, no key
curl https://api.vladahealth.com/v1/tools/get_exchange_plan_profile/schemaA real answer
customer seat, 2026-11-09·over REST·2.48s·status
complete·complete·verbatim{
"value": {
"found": true,
"not_found_reason": null,
"mode": "list",
"query": {
"plan_id": null,
"plan_year": null,
"state": "TX",
"metal_level": null,
"issuer_id": null,
"plan_type": null,
"on_off_exchange": null,
"include_rate_curve": true,
"limit": 3
},
"plan_year": 2026,
"plans": [
{
"plan_id": "66252TX0380100",
"business_year": 2026,
"issuer_id": "66252",
"issuer_company_name": null,
"plan_marketing_name": "CHRISTUS Catastrophic (3 Free PCP visits)",
"metal_level": "Catastrophic",
"plan_type": "HMO",
"market_coverage": "Individual",
"on_off_exchange": "Both",
"network_name": "CHRISTUS Health Plan Texas",
"covers_entire_state": false,
"n_counties": 38,
"premium_age21": 250.7,
"premium_age40": 320.39,
"premium_age60": 680.39,
"premium_age40_max": 372.09,
"quality_overall": 3,
"issuer_ind_mlr_ratio": null
},
{
"plan_id": "40788TX0460006",
"business_year": 2026,
"issuer_id": "40788",
"issuer_company_name": null,
"plan_type": "HMO",
"market_coverage": "Individual",
"on_off_exchange": "Both",
"network_name": "BSW Premier HMO",
"covers_entire_state": false,
"n_counties": 104,
"premium_age21": 275.54,
"premium_age40": 352.15,
"premium_age60": 747.83,
"premium_age40_max": 652.41,
"quality_overall": 2,
"issuer_ind_mlr_ratio": null
},
{
"plan_id": "33602TX0461116",
"business_year": 2026,
"issuer_id": "33602",
"issuer_company_name": null,
"plan_type": "HMO",
"market_coverage": "Individual",
"on_off_exchange": "Both",
"network_name": "MyBlue Health",
"covers_entire_state": false,
"n_counties": 1,
"premium_age21": 277.61,
"premium_age40": 354.79,
"premium_age60": 753.43,
"premium_age40_max": 354.79,
"quality_overall": 3,
"issuer_ind_mlr_ratio": null
}
],
"row_counts": {
"plans": {
"matched": 4,
"matched_is_lower_bound": true,
"returned": 3,
"truncated": true,
"limit": 3
}
},
"units": {
"premium_age21": "USD/month",
"premium_age40": "USD/month",
"premium_age60": "USD/month",
"premium_age40_max": "USD/month",
"issuer_ind_premium_earned": "USD",
"issuer_ind_mlr_ratio": "ratio",
"quality_overall": "stars_1_to_5",
"quality_medical": "stars_1_to_5",
"quality_member_exp": "stars_1_to_5",
"n_counties": "count",
"n_rating_areas": "count",
"n_benefits_covered": "count",
"n_ehb_benefits": "count",
"pcp_copay": "as_filed_text",
"specialist_copay": "as_filed_text",
"er_copay": "as_filed_text",
"urgent_care_copay": "as_filed_text",
"generic_drug_copay": "as_filed_text",
"inpatient_coins": "as_filed_text"
},
"query_ids": [
"55481ce3-2f75-4889-bb90-e507eaefc980"
]
},
"unit": "exchange_plan_list",
"vintage": "PY2026",
"source": {
"dataset": "Vlada Exchange plan profile (composed from the CCIIO PUFs)",
"publisher": "vlada",
"catalog_updated_at": "2026-10-13"
},
"caveats": [],
"response_hash": "d7af81eddd664accefd25d71aaec5f6d509f72a3442d76cd04d58fe01b004c47",
"semantic_version": 1,
"tool_version": "get_exchange_plan_profile@1.0.0",
"explanation": null,
"status": "complete",
"audience": "customer",
"answer": {
"value_ref": "value",
"unit": "exchange_plan_list",
"scope": {
"tool": "get_exchange_plan_profile",
"filters": {
"plan_year": 2026,
"state": "TX",
"include_rate_curve": true,
"limit": 3
}
}
},
"method": "Computed over the filters shown in this answer's scope, from the sources listed in its evidence. Nothing outside those filters was included. You did not specify include_rate_curve; yes was used. You did not specify plan_year; 2026 was used.",
"evidence": {
"sources": [
{
"dataset": "Vlada Exchange plan profile (composed from the CCIIO PUFs)",
"publisher": "vlada",
"catalog_updated_at": "2026-10-13"
}
],
"response_hash": "d7af81eddd664accefd25d71aaec5f6d509f72a3442d76cd04d58fe01b004c47"
},
"defaults_applied": [
{
"param": "include_rate_curve",
"used": true,
"reason": "tool default"
},
{
"param": "plan_year",
"used": 2026,
"reason": "tool default"
}
]
}What comes back
| Field | Holds |
|---|---|
status | complete · partial · refused · failed · queued |
value | the shape below |
source · caveats · invariants_applied · response_hash | the public file and vintage; what to know before citing; the rules honoured; replayable |
refusal | code (15), message, recover_with |
{
"$defs": {
"Quality": {
"description": "Row-level quality signal. All flags precomputed at build time\n(stored on the gold mart) and passed through here.",
"properties": {
"is_outlier": {
"default": false,
"title": "Is Outlier",
"type": "boolean"
},
"is_ghost_candidate": {
"default": false,
"title": "Is Ghost Candidate",
"type": "boolean"
},
"n_similar_rates": {
"default": 0,
"title": "N Similar Rates",
"type": "integer"
},
"confidence": {
"default": 1,
"title": "Confidence",
"type": "number"
}
},
"title": "Quality",
"type": "object"
},
"Source": {
"description": "Cell-level provenance. Every served value traces back here.\n\n`snapshot_id` is the Iceberg snapshot the tool read from. Two calls\nat the same snapshot MUST produce byte-identical responses —\nthat's the content-addressed caching guarantee.",
"properties": {
"table": {
"title": "Table",
"type": "string"
},
"rate_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rate Id"
},
"source_files": {
"items": {
"type": "string"
},
"title": "Source Files",
"type": "array"
},
"snapshot_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Snapshot Id"
}
},
"required": [
"table"
],
"title": "Source",
"type": "object"
}
},
"properties": {
"value": {
"default": null,
"title": "Value"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unit"
},
"vintage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Vintage"
},
"source": {
"$ref": "#/$defs/Source"
},
"methodology": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Methodology"
},
"quality": {
"$ref": "#/$defs/Quality"
},
"invariants_applied": {
"items": {
"type": "string"
},
"title": "Invariants Applied",
"type": "array"
},
"caveats": {
"items": {
"type": "string"
},
"title": "Caveats",
"type": "array"
},
"response_hash": {
"default": "",
"title": "Response Hash",
"type": "string"
},
"semantic_version": {
"default": 1,
"title": "Semantic Version",
"type": "integer"
},
"tool_version": {
"default": "unknown",
"title": "Tool Version",
"type": "string"
},
"explanation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Explanation"
},
"status": {
"default": "complete",
"title": "Status",
"type": "string"
},
"refusal": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Refusal"
},
"failure": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Failure"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"freshness_state": {
"default": "unknown",
"title": "Freshness State",
"type": "string"
}
},
"title": "ExchangePlanProfileResponse",
"type": "object"
}Sources
| Kind | Name |
|---|---|
| source | medicare_silver.fact_exchange_plan_profile_v2 |
| source | medicare_semantic.vw_rate_puf_current |
| table | medicare_silver.fact_exchange_plan_profile_v2 |
| table | medicare_semantic.vw_rate_puf_current |
Known limits (4)
- 1FFM (healthcare.gov) states only; state-based marketplaces are absent at source.
- 2Deductible / MOOP are not in the composed profile (untyped raw JSON in the Plan Attributes PUF today) and are returned as not_available.
- 3premium_age21/40/60 are the MIN across the plan's rating areas (age-40 MAX also given); county-grain premium needs the rating area (use rate_curve / the Rate PUF).
- 4Cost shares are the base variant (-01) as filed; CSR variants differ. Quality only for CMS-rated plans in PY2023/2024/2026; MLR only PY2019-2024; PY2015 premiums thin at source; medical plans only (v1).
This page as markdown: /docs-md/tools/get_exchange_plan_profile.md · every page in one file: /llms-full.txt