healthcare.dev docs
API referenceCodes

Search codes

GET /v1/codes/{system}

GET https://api.healthcare.dev/v1/codes/{system}

Search by description or code prefix. Exact code matches rank first, then code prefixes, then descriptions containing every word of the query (stemmed, any order) by relevance, then close matches for typos. Retired codes are excluded unless include_retired=true.

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

Path parameters

NameTypeRequiredDescriptionExample
system"icd10cm" | "icd10pcs" | "hcpcs"yesCode systemicd10cm

Query parameters

NameTypeRequiredDescriptionExample
qstringyesSearch text (fuzzy)diabetes
limitintegernoPage size (max 100)25
cursorstringnoOpaque cursor from links.next
billable"true" | "false"noOnly billable (true) or header (false) codestrue
include_retired"true" | "false"noAlso return retired codes (default false)true
view"compact" | "full"nocompact returns only the fields an agent usually needs (fewer tokens); full (default) returns every fieldcompact
fieldsstringnoComma-separated record fields to return, e.g. code,display,billablecode,display,billable

Examples

curl

curl "https://api.healthcare.dev/v1/codes/icd10cm?q=diabetes&limit=25" \
  -H "Authorization: Bearer $HDEV_API_KEY"

TypeScript

const res = await fetch("https://api.healthcare.dev/v1/codes/icd10cm?q=diabetes&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/codes/icd10cm?q=diabetes&limit=25", headers={"Authorization": f"Bearer {os.environ['HDEV_API_KEY']}"})
body = res.json()

Try it

GEThttps://api.healthcare.dev/v1/codes/icd10cm?q=diabetes&limit=25&billable=true&include_retired=true&view=compact&fields=code%2Cdisplay%2Cbillable
Get a free key
Copy as curl
curl "https://api.healthcare.dev/v1/codes/icd10cm?q=diabetes&limit=25&billable=true&include_retired=true&view=compact&fields=code%2Cdisplay%2Cbillable" \
  -H "Authorization: Bearer $HDEV_API_KEY"

Response

Matching codes, best first

{
  "data": [
    {
      "system": "icd10cm",
      "code": "string",
      "display": "string",
      "description": "string",
      "billable": true,
      "parent": "string",
      "attributes": {},
      "status": "active",
      "effective_start": "2026-10-01",
      "effective_end": "2026-10-01",
      "replaced_by": [
        "string"
      ],
      "match_score": 0
    }
  ],
  "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/codes/icd10cm?q=diabetes&limit=25",
    "next": "/v1/codes/icd10cm?q=diabetes&limit=25&cursor=eyJrIjoiRTExLjkifQ"
  }
}

Fields

FieldTypeAlways presentDescription
system"icd10cm" | "icd10pcs" | "hcpcs"yes
codestringyes
displaystringyesShort description
descriptionstring | nullyesLong description
billablebooleanyesValid for billing (leaf / header flag)
parentstring | nullyes
attributesobjectnoSystem-specific attributes, e.g. HCPCS coverage and BETOS codes
status"active" | "retired" | "replaced"yes
effective_startstring (date)yes
effective_endstring | null (date)yes
replaced_bystring[]no
match_scorenumberyesHow well this result matches the query: 1 exact code or id, 0.9 code prefix, 0.5 to 0.9 every query word in the text (higher is closer), under 0.5 a fuzzy (typo-tolerant) match. Below 0.5, check the result before relying on it.

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