healthcare.dev docs

Medicare Advantage internal criteria (preview)

Which services a Medicare Advantage plan covers with its own internal coverage criteria, as its public posting says, with links to the plan's documents. Preview: not available yet.

Preview: not available yet

This dataset is built but not released. Until it is, its endpoints answer 503 dataset-unavailable and it is not listed in /v1/datasets. This page describes how it will work; details may change before release.

SourceEach Medicare Advantage organization's public posting of its internal coverage criteria, required by 42 CFR 422.101(b)(6) (CMS-4201-F)
Source idplan-postings
Release cadencePlans revise their policies monthly or so; we check the postings daily and publish a new version when one changes
LicenseFacts from public postings federal rules require, with a link to the plan's document; never the plan's documents or criteria text
PlansPro and Team (403 plan-upgrade-required below)
Endpoints/v1/medicare-advantage/plans, /v1/medicare-advantage/{plan_id}/criteria?code=

A Medicare Advantage plan has to follow Medicare's coverage rules: statutes, regulations, National Coverage Determinations (NCDs) and Local Coverage Determinations (LCDs). Where those don't fully establish the criteria for a service, the plan may use internal coverage criteria of its own, and it must post them publicly, without a login or paywall. This dataset tells you which services a plan's posting covers that way, the procedure codes it lists, and where the plan's own document is.

Look a plan up by Medicare Advantage contract or organization id, optionally for one code:

curl "https://api.healthcare.dev/v1/medicare-advantage/plans" -H "Authorization: Bearer $HDEV_API_KEY"
curl "https://api.healthcare.dev/v1/medicare-advantage/unitedhealthcare/criteria?code=91110" \
  -H "Authorization: Bearer $HDEV_API_KEY"
{
  "data": {
    "plan": {
      "id": "unitedhealthcare",
      "organization": { "id": "unitedhealthcare", "name": "UnitedHealthcare" },
      "contract": null,
      "applies_to": "all_ma_plans"
    },
    "code": "91110",
    "disclaimer": "Reference data, not a coverage determination.",
    "note": "Facts from each Medicare Advantage organization's public posting ...",
    "pending_review": 0,
    "criteria": [
      {
        "organization": { "id": "unitedhealthcare", "name": "UnitedHealthcare" },
        "service": {
          "key": "capsule-endoscopy",
          "policy_id": null,
          "name": "Capsule Endoscopy"
        },
        "codes": ["91110", "91111", "91112", "91299"],
        "uses_internal_criteria": {
          "answer": "yes",
          "confidence": 0.8,
          "derivation": "derived",
          "evidence": [
            {
              "url": "https://www.uhcprovider.com/en/policies-protocols/medicare-advantage-policies/medicare-advantage-medical-policies.html"
            }
          ],
          "as_of": "2026-10-25T05:30:00.000Z"
        },
        "basis": "organization_statement",
        "criteria_url": "https://www.uhcprovider.com/content/dam/provider/docs/public/policies/medadv-mp/capsule-endoscopy.pdf",
        "posting_url": "https://www.uhcprovider.com/en/policies-protocols/medicare-advantage-policies/medicare-advantage-medical-policies.html",
        "effective_date": null,
        "updated_date": "2026-09-01"
      }
    ]
  }
}

plan_id is a contract (H1036) or an organization id from GET /v1/medicare-advantage/plans. An organization's posting applies to all its Medicare Advantage plans, so a contract answers with its organization's services (applies_to: all_ma_plans). Without code you get every service in the posting; with it, the services whose posting lists that code. A code no service lists means only that: the plan may cover it under a policy without a code list, or follow Medicare's own criteria for it.

The fields

FieldWhat it is
serviceThe plan's policy: our stable key, the plan's own policy_id when it gives one, and its name
codesProcedure codes the posting lists for the service: HCPCS Level II codes and CPT numbers, never CPT descriptions
uses_internal_criteriayes or no, as the posting states it, with derivation, confidence, evidence and as_of
basisWhere the answer comes from: the organization's statement (organization_statement) or a person's check
criteria_urlThe plan's document for the service: read it for the criteria themselves
posting_urlThe organization's page listing its policies
effective_date, updated_dateWhen the policy's current version took effect, and when the plan last published or reviewed it
differs_from_medicare_criteriaPresent only when a person confirmed a difference from an NCD or LCD (below)

We never store or serve the criteria text. The plan's document is the source; we give you the facts to find it and the link.

How answers are read: derivation

We read organizations' public policy lists and statement pages, not the policy documents themselves (basis: organization_statement):

  • source_stated (confidence 1): the organization says plainly that every Medicare Advantage policy it lists is written where Medicare's criteria aren't fully established.
  • derived (confidence below 1): the organization says it may apply internal criteria in the policies it lists, without saying which; the plan's document says where they apply.
  • reviewed: the posting didn't say, so a person read it (basis: person_checked_posting).

A policy whose posting doesn't say waits for that person and isn't listed until then; pending_review counts those. When the plan changes a policy's entry in its list, we read it afresh.

differs_from_medicare_criteria

Where Medicare's own criteria exist for a code, a plan has to follow them. We compare plans' postings with Medicare coverage documents: rules find candidates (for example, a plan says a policy's codes have no Medicare criteria while an LCD lists them, or a code tied to an NCD is under a plan's internal criteria), and a person reads both documents and decides every one. Nothing is ever flagged by rules alone, and a candidate is never shown before that review.

When the person confirms that the plan's criteria differ from Medicare's for some codes, the service carries:

"differs_from_medicare_criteria": [
  {
    "medicare_document": {
      "id": "L35013",
      "type": "lcd",
      "title": "...",
      "url": "https://www.cms.gov/medicare-coverage-database/view/lcd.aspx?lcdid=35013&ver=4"
    },
    "codes": ["11720"],
    "states": ["TX"],
    "finding": {
      "answer": "differs",
      "confidence": 1,
      "derivation": "reviewed",
      "evidence": [{ "url": "https://..." }, { "url": "https://www.cms.gov/..." }],
      "as_of": "2026-10-25T05:30:00.000Z"
    }
  }
]

It says the two documents differ for those codes where the Medicare document applies (states; empty when it is national). It is a comparison of two public documents, not a legal finding or a coverage determination. Its absence means no confirmed difference, not that the criteria match.

What it is not

  • Not a coverage determination and not prior authorization: whether a member's service is covered depends on their plan and situation.
  • Not the criteria. Read the plan's document (criteria_url).
  • Not every plan. Some organizations publish their criteria only behind a portal that needs accepted terms or a sign-in, or ask not to be crawled; we leave those out rather than work around them. GET /v1/medicare-advantage/plans lists the organizations we hold.

MCP and SDKs

  • MCP: check_ma_internal_criteria with { "plan": "H1036", "code": "91110" }.
  • TypeScript: hdev.medicareAdvantage.criteria("H1036", { code: "91110" }), hdev.medicareAdvantage.plans().
  • Python: hdev.medicare_advantage.criteria("H1036", code="91110"), hdev.medicare_advantage.plans().

On this page