# Medicare Part B ASP

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

<Freshness dataset="medicare-asp" />

|                 |                                                                                                                                                                                |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Source          | CMS ([ASP pricing files](https://www.cms.gov/medicare/payment/part-b-drugs/asp-pricing-files)): Medicare Part B payment limit files and ASP NDC-HCPCS crosswalks               |
| Source id       | `cms-asp`                                                                                                                                                                      |
| Release cadence | Quarterly (January, April, July, October), plus CMS's revisions of earlier quarters                                                                                            |
| License         | Public domain (CMS); CPT descriptors excluded                                                                                                                                  |
| Endpoints       | [`/v1/drugs/asp/{hcpcs}`](/reference/drugs/look-up-a-medicare-part-b-drug-payment-limit), [`/v1/drugs/asp?ndc=&q=`](/reference/drugs/find-medicare-part-b-drug-payment-limits) |

Each record is one billing code (mostly HCPCS J and Q codes) with:

- the newest quarter's `payment_limit` per `dosage_descriptor` unit (generally 106% of the average
  sales price), coinsurance percentage, CMS's notes, and the vaccine, blood and clotting factor
  columns where they apply;
- `history`: every quarter loaded (the newest eight, about two years), newest first, each with
  `effective_from` and `effective_through`;
- `ndcs`: the products CMS's ASP NDC-HCPCS crosswalk assigns to the code, with package size and
  billing units per package (to convert a package to billed units), and the quarters each was
  listed.

`?date=YYYY-MM-DD` on the lookup returns `in_effect`, the quarter whose limit applies on that date
(default today). CMS posts each quarter's file a few weeks early, so the newest quarter can still be
in the future. A code missing from the newest quarter's file stays available with
`status: retired`.

```sh
curl "https://api.healthcare.dev/v1/drugs/asp/J9271?date=2026-08-15" \
  -H "Authorization: Bearer $HDEV_API_KEY"

# Which codes is this product billed under?
curl "https://api.healthcare.dev/v1/drugs/asp?ndc=0006-3026-02" \
  -H "Authorization: Bearer $HDEV_API_KEY"
```

`GET /v1/drugs/ndc/{ndc}` links to the product's payment limits as `links.asp` when the crosswalk
lists it.

## What it is not

- Not a coverage decision: CMS says the presence or absence of a code or limit in its files does not
  indicate whether Medicare covers a drug.
- Not what a patient pays, and not a retail pharmacy cost (see NADAC for that).
- CPT codes in the files (vaccines and immune globulins, such as `90375`) are served as code numbers
  only, with `code_system: cpt` and no descriptor: CPT descriptors are copyrighted by the AMA.
- `version` names the newest quarter and CMS's newest revision of any file loaded, e.g.
  `2026-10-r20261008`.
