# History of a coverage policy document

URL: https://docs.healthcare.dev/reference/coverage/history-of-a-coverage-policy-document

```http
GET https://api.healthcare.dev/v1/policies/{id}/history
```

Team plan (403 `plan-upgrade-required` on other plans). One Medicare coverage document (an LCD, billing and coding article or NCD, by the `document.id` coverage answers carry) over time: each state of its facts as our published releases carried it, oldest first, with the CMS version, revision effective and retirement dates, the first and last UTC day we served it (`first_seen`, `last_seen`, as `as_of` answers them), the material changes taken in while it was live (fields changed, affected codes, effective date and the CMS page to check, as the coverage change feed lists them) and a coverage lookup link as of that date. A revision that changed nothing we serve about the document (formatting, revision history) doesn't start a new state; a new MCD version, title or page does. Facts and links only, never policy text. A date is answered by the release we were serving at the end of that UTC day. History starts on the day we first published the coverage data (`earliest_as_of` on a 422 `as-of-out-of-range`) and is never extrapolated before it or past today. 404 when the document isn't in our history.

Requires an API key: `Authorization: Bearer hdev_live_...`. See [Authentication](/authentication).

## Path parameters

| Name | Type | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `id` | string | yes | LCD (`L33252`), billing article (`A52369`) or NCD (`NCD-42`) id, as `document.id` | `A56640` |

## Query parameters

| Name | Type | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `view` | "compact" \| "standard" \| "full" | no | How much of each record to return (default `full`). `compact`: `id`, `type`, `history_starts`, `versions` (fewest tokens, for agents). `standard`: every field. `full`: every field. | `compact` |
| `fields` | string | no | Comma-separated fields to return instead of a view. Valid fields: `id`, `type`, `title`, `url`, `history_starts`, `versions`. | `id,type,history_starts` |

## Examples

**curl**

```sh
curl "https://api.healthcare.dev/v1/policies/A56640/history" \
  -H "Authorization: Bearer $HDEV_API_KEY"
```

**TypeScript**

```ts
const res = await fetch("https://api.healthcare.dev/v1/policies/A56640/history", {
  headers: { Authorization: `Bearer ${process.env.HDEV_API_KEY}` },
});
const { data, meta } = await res.json();
```

**Python**

```python
import os
import requests

res = requests.get("https://api.healthcare.dev/v1/policies/A56640/history", headers={"Authorization": f"Bearer {os.environ['HDEV_API_KEY']}"})
body = res.json()
```

## Response

The document's states over time, oldest first

```json
{
  "data": {
    "id": "string",
    "type": "lcd",
    "title": "string",
    "url": "string",
    "history_starts": "2026-10-01",
    "versions": [
      {
        "mcd_version": 1,
        "status": "active",
        "effective_date": "2026-10-01",
        "retire_date": "2026-10-01",
        "url": "string",
        "first_seen": "2026-10-01",
        "last_seen": "2026-10-01",
        "current": true,
        "changes": [
          null
        ],
        "links": {
          "coverage": null
        }
      }
    ]
  },
  "meta": {
    "source": "cms-icd10",
    "data_version": "2026.1",
    "retrieved_at": "2026-10-24T12:00:00Z",
    "license": "Public domain (CMS). Reference data, not medical advice."
  },
  "links": {
    "self": "/v1/policies/A56640/history",
    "next": null
  }
}
```

### Fields

| Field | Type | Always present | Description |
| --- | --- | --- | --- |
| `id` | string | yes | `L33252`, `A52369` or `NCD-42` |
| `type` | "lcd" \| "article" \| "ncd" | yes | `lcd` Local Coverage Determination, `article` billing and coding article, `ncd` National Coverage Determination |
| `title` | string | yes | The document's title in its latest state |
| `url` | string (uri) | yes | The document's page in its latest state |
| `history_starts` | string (date) | yes | The first date our history answers for (the UTC day we first published the coverage data); nothing earlier is known here |
| `versions` | PolicyVersion[] | yes | Oldest first |

## Errors

Errors are `application/problem+json` ([RFC 9457](https://www.rfc-editor.org/rfc/rfc9457)). Branch on `type`, not on `title`. See [Errors](/errors).

| Status | `type` | When |
| --- | --- | --- |
| 400 | `invalid-request` | A parameter or the body failed validation; `errors` lists each field. |
| 401 | `unauthorized` | Missing, malformed or revoked API key. |
| 403 | `plan-upgrade-required` | The plan doesn't include this feature; `required_plan` names the plan that does. |
| 404 | `not-found` | No record with that id (retired records are still returned). |
| 429 | `rate-limited / quota-exceeded` | Too many requests per second (retry after `Retry-After`), or the monthly quota is used up. |
| 503 | `dataset-unavailable / unavailable` | The dataset has no published version yet, or the service is degraded. |
