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

  1. 1One ACA Marketplace (healthcare.gov / HIX) plan's profile for a plan year, every field tagged with the CCIIO PUF it came from.
  2. 2Give plan_id (the 14-character HIOS standard component id, e.g.
  3. 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.
  4. 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).
  5. 5Deductible / MOOP are returned as not_available (not in the composed profile).
  6. 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)

NameTypeRequiredDefaultAccepts
include_rate_curvebooleanoptionaltrue
issuer_idanyoptionalnull
limitanyoptionalnull
metal_levelanyoptionalnull
on_off_exchangeanyoptionalnull
plan_idanyoptionalnull
plan_typeanyoptionalnull
plan_yearanyoptionalnull
stateanyoptionalnull

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/schema

A 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

FieldHolds
statuscomplete · partial · refused · failed · queued
valuethe shape below
source · caveats · invariants_applied · response_hashthe public file and vintage; what to know before citing; the rules honoured; replayable
refusalcode (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

KindName
sourcemedicare_silver.fact_exchange_plan_profile_v2
sourcemedicare_semantic.vw_rate_puf_current
tablemedicare_silver.fact_exchange_plan_profile_v2
tablemedicare_semantic.vw_rate_puf_current

Known limits (4)

  1. 1FFM (healthcare.gov) states only; state-based marketplaces are absent at source.
  2. 2Deductible / MOOP are not in the composed profile (untyped raw JSON in the Plan Attributes PUF today) and are returned as not_available.
  3. 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).
  4. 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