healthcare.dev docs
API referenceDatasets

Releases and what changed

GET /v1/datasets/{dataset}/releases

GET https://api.healthcare.dev/v1/datasets/{dataset}/releases

Every published release of a dataset, newest first, with how many records it added, changed (revised) and retired, when the source published it and when we did. On every plan. The records themselves are in the change feed (changes links to /v1/changes?dataset=&version=, Builder and up). Retired records stay answerable with status: retired and, where known, replaced_by.

Requires an API key: Authorization: Bearer hdev_live_.... See Authentication.

Path parameters

NameTypeRequiredDescriptionExample
datasetstringyesDataset id from /v1/datasetsicd10cm

Query parameters

NameTypeRequiredDescriptionExample
limitintegernoPage size, 1 to 100 (default 25)25
cursorstringnoOpaque cursor from links.next
versionstringnoOnly this release (data_version)fy2027

Examples

curl

curl "https://api.healthcare.dev/v1/datasets/icd10cm/releases?limit=25" \
  -H "Authorization: Bearer $HDEV_API_KEY"

TypeScript

const res = await fetch("https://api.healthcare.dev/v1/datasets/icd10cm/releases?limit=25", {
  headers: { Authorization: `Bearer ${process.env.HDEV_API_KEY}` },
});
const { data, meta } = await res.json();

Python

import os
import requests

res = requests.get("https://api.healthcare.dev/v1/datasets/icd10cm/releases?limit=25", headers={"Authorization": f"Bearer {os.environ['HDEV_API_KEY']}"})
body = res.json()

Try it

GEThttps://api.healthcare.dev/v1/datasets/icd10cm/releases?limit=25&version=fy2027
Get a free key
Copy as curl
curl "https://api.healthcare.dev/v1/datasets/icd10cm/releases?limit=25&version=fy2027" \
  -H "Authorization: Bearer $HDEV_API_KEY"

Response

Releases, newest first

{
  "data": [
    {
      "dataset": "string",
      "version": "string",
      "status": "current",
      "effective_date": "2026-10-01",
      "published_at": "2026-10-24T12:00:00Z",
      "source_published_at": "2026-10-24T12:00:00Z",
      "source_published_basis": "last-modified",
      "lag_hours": 0,
      "baseline": true,
      "records": 1,
      "added": 1,
      "changed": 1,
      "retired": 1,
      "changes": "string"
    }
  ],
  "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/datasets/icd10cm/releases?limit=25",
    "next": "/v1/datasets/icd10cm/releases?limit=25&cursor=eyJrIjoiRTExLjkifQ"
  }
}

Fields

FieldTypeAlways presentDescription
datasetstringyes
versionstringyesThe release's data_version
status"current" | "superseded"yescurrent is the version served now; older releases are superseded
effective_datestring (date)yesDate the release takes effect
published_atstring (date-time)yesWhen we published it
source_published_atstring | null (date-time)yesWhen the source published it
source_published_basis"last-modified" | "metadata" | "file-name" | "detected" | nullyesWhere source_published_at comes from: the source file's Last-Modified, the source's own metadata (an API or index date), the date in the release's file name, or detected (the source gives no date: the first time our pipeline saw the release, an estimate)
lag_hoursnumber | nullyesHours from the source publishing this release to us publishing it
baselinebooleanyesThe first load of the dataset: every record counts as added and the change feed has no rows for it
recordsinteger | nullyesRecords in the release, retired ones included
addedintegeryesRecords new in this release
changedintegeryesRecords revised in this release
retiredintegeryesRecords retired in this release
changesstring | nullyesThe release's records in the change feed (/v1/changes, Builder and up); null for a baseline

Errors

Errors are application/problem+json (RFC 9457). Branch on type, not on title. See Errors.

StatustypeWhen
400invalid-requestA parameter or the body failed validation; errors lists each field.
401unauthorizedMissing, malformed or revoked API key.
404not-foundNo record with that id (retired records are still returned).
429rate-limited / quota-exceededToo many requests per second (retry after Retry-After), or the monthly quota is used up.
503dataset-unavailable / unavailableThe dataset has no published version yet, or the service is degraded.

On this page