# Medicare coverage support

URL: https://docs.healthcare.dev/datasets/medicare-coverage

<Freshness dataset="medicare-coverage" />

|                 |                                                                                                                                                                 |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Source          | CMS [Medicare Coverage Database](https://www.cms.gov/medicare-coverage-database/downloads/downloads.aspx): LCDs, billing and coding articles and NCDs           |
| Source id       | `cms-mcd`                                                                                                                                                       |
| Release cadence | CMS rebuilds the exports weekly; we check daily and publish a new version when a coverage fact changes                                                          |
| License         | Public domain (CMS); CPT descriptors excluded                                                                                                                   |
| Plans           | Pro and Team (`403` `plan-upgrade-required` on Free and Builder)                                                                                                |
| Endpoints       | [`/v1/coverage/medicare?code=&dx=&state=`](/reference/coverage/medicare-coverage-support-for-a-code-and-diagnosis), [`/v1/coverage/changes`](/coverage-changes) |

Medicare Administrative Contractors publish Local Coverage Determinations (LCDs) and billing and
coding articles. Many articles list the ICD-10-CM codes that support medical necessity for the
procedure codes they cover, and some list codes that don't. This endpoint reads those lists for
one procedure code, one diagnosis and, optionally, one state:

```sh
curl "https://api.healthcare.dev/v1/coverage/medicare?code=11720&dx=B35.1&state=TX" \
  -H "Authorization: Bearer $HDEV_API_KEY"
```

```json
{
  "data": {
    "code": "11720",
    "dx": "B35.1",
    "state": "TX",
    "disclaimer": "Reference data, not a coverage determination.",
    "coverage": {
      "answer": "supported",
      "confidence": 1,
      "derivation": "source_stated",
      "evidence": [
        {
          "url": "https://www.cms.gov/medicare-coverage-database/view/article.aspx?articleid=56640&ver=16",
          "anchor": "h3Icd10SupportHeader"
        }
      ],
      "as_of": "2026-10-19T06:55:00.000Z"
    },
    "basis": "documents_agree",
    "results": [
      {
        "document": {
          "id": "A56640",
          "type": "article",
          "version": 16,
          "title": "Billing and Coding: Debridement of Mycotic Nails",
          "...": "..."
        },
        "states": ["TX"],
        "state_regions": [],
        "coverage": {
          "answer": "supported",
          "confidence": 1,
          "derivation": "source_stated",
          "...": "..."
        },
        "basis": "dx_listed_as_supporting",
        "context": false
      }
    ]
  }
}
```

`results` has one entry per LCD or article that lists the code (in `state`, when you send one);
`coverage` at the top combines them: their answer when they agree, otherwise `unclear`. An LCD
whose criteria are narrative, when its own billing article answers for the code, is listed with
`context: true`: it is evidence to read, not a separate answer, so it doesn't make the overall
answer `unclear`. Documents that answer come first, then `context` ones; within each group the
order carries no meaning. `?view=compact` returns only the overall answer; `view=full` (the default)
adds `results`. No
document listing the code means there is no local policy for it: `unclear`, with empty `results`.
National Coverage Determinations (NCDs) don't list codes; articles that implement one name it in
`related_ncds`.

## The three answers

| `answer`        | Means                                                                                                                                                            |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `supported`     | The document lists the diagnosis among the codes that support medical necessity for this procedure code.                                                         |
| `not_supported` | The document lists the diagnosis among the codes that don't, or says that diagnoses it doesn't list don't support the code and this one isn't listed.            |
| `unclear`       | The document doesn't settle it for this pair: its criteria are narrative only, the diagnosis comes with extra conditions, or its lists aren't tied to this code. |

`basis` names which of these it was, in terms of the document: `dx_listed_as_supporting`,
`dx_listed_as_not_supporting`, `dx_not_listed`, `conditional` (listed, but marked as needing
something more, such as a second diagnosis), `conflicting_lists`, `pairing_not_stated` (the
article has several code groups and doesn't say which list goes with this code) or `no_dx_list`.

## How each answer was reached: `derivation`

Every answer carries the same five fields (the same as every derived answer; see
[Derived answers](/responses#derived-answers-derivation)):

- **`derivation`** says how the answer was reached. `source_stated`: the document states it in
  its published code lists, and we only read the list. `derived`: we concluded it from what the
  document says, without the document stating it outright. `reviewed`: a person checked it. Here,
  `supported` and `not_supported` are always `source_stated`; `unclear` is `derived`, because
  "the document doesn't settle this" is our reading, not something CMS writes.
- **`confidence`** is from 0 to 1: `1` for answers the document states, `0` for `unclear`.
  Don't act on an answer below your own threshold without checking the evidence.
- **`evidence`** links the document's page in the Medicare Coverage Database, with the section
  (`anchor`) to read: the supporting or non-supporting ICD-10 list, the code list, or the coverage
  indications.
- **`as_of`** is when CMS published the export the answer was read from.
- **`answer`** is one of the three above.

We serve facts and links, never the policy text: read the linked page for the criteria
themselves.

## What it is not

- **Not a coverage determination.** Every response says so. A listed diagnosis doesn't guarantee
  payment: the service must still be reasonable and necessary and meet the LCD's criteria, and
  the medical record must support it.
- Not prior authorization, Medicare Advantage plan criteria or a payment amount (see
  [Medicare Part B ASP](/datasets/medicare-asp) for drug payment limits).
- CPT codes appear as code numbers only, never with their descriptors (copyrighted by the AMA).
  Dental (CDT) codes are left out.
- Send the full billable ICD-10-CM code (`E11.9`, with or without the dot): a category such as
  `E11` matches only if a document lists it.
- Not a bulk download. Each account can look up a limited number of different code and diagnosis
  pairs a day (5,000 on Pro, 20,000 on Team), all its keys together; repeats don't count. See
  [daily lookup limits](/rate-limits#daily-lookup-limits-on-derived-data).

When a coverage document changes in a way that can change an answer, it appears in the
[coverage change feed](/coverage-changes).
