healthcare.dev docs

Care categories

Plain-English categories over ICD-10, HCPCS and NDC records, and how to tell which answers are inferred. On every plan.

Code sets are organized for billing and statistics, not for people. Care categories group them the way a patient or a care navigator would: Knee replacement, Diabetes supplies, Blood thinners, Physical therapy and rehabilitation. Every ICD-10-CM diagnosis, ICD-10-PCS procedure, HCPCS Level II code and FDA NDC drug product can carry one or more of them.

Care categories are on every plan, Free included.

The categories

About 270 categories in a hierarchy of up to four levels: top-level groups such as bones-joints-and-muscles, then narrower ones such as joint-replacement and knee-replacement. Each has a stable slug you can store, a name to show, its parent, its path from the top and its children.

curl "https://api.healthcare.dev/v1/care-categories?q=diabetes" \
  -H "Authorization: Bearer $HDEV_API_KEY"

GET /v1/care-categories lists them all (or those whose name has every word of q). It is free: it doesn't count toward your calls.

GET /v1/care-categories/{slug} returns one category with how many active records each system has in it or in any category below it:

{
  "data": {
    "slug": "knee-replacement",
    "name": "Knee replacement",
    "parent": "joint-replacement",
    "path": ["bones-joints-and-muscles", "joint-replacement", "knee-replacement"],
    "children": [],
    "counts": { "icd10cm": 5, "icd10pcs": 154, "hcpcs": 0, "ndc": 0 }
  }
}

A count is null while that system has no published version, or its categories aren't built for the version just published.

GET /v1/care-categories/{slug}/codes?system=icd10pcs lists the records, in code order, 25 per page (up to 100 with limit; follow links.next, whose cursor only works for the same category and system). It answers 503 in the short window before a new version's categories are built:

for await (const c of hdev.careCategories.iterateCodes("knee-replacement", { system: "icd10pcs" }))
  console.log(c.code, c.display, c.derivation, c.confidence);

On code and drug records

Code records (lookups, searches, the batch, children, parents and hierarchies under /v1/codes/{system}) and NDC lookups (/v1/drugs/ndc/{ndc}) carry the record's categories:

  • care_categories: the slugs, in every view.
  • care_category_details: each category with how it was assigned, in the full view (the default).
"care_categories": ["type-2-diabetes"],
"care_category_details": [
  {
    "slug": "type-2-diabetes",
    "name": "Type 2 diabetes",
    "confidence": 0.95,
    "derivation": "source_stated",
    "evidence": [
      {
        "url": "https://www.cms.gov/medicare/coding-billing/icd-10-codes",
        "anchor": "ICD-10-CM category E11"
      }
    ],
    "as_of": "2026-10-01T00:00:00.000Z"
  }
]

An empty care_categories means no category could be assigned with confidence. We leave a record uncategorized rather than guess. A lookup with as_of (the record as it was on a past date) carries no categories: they are worked out for the published version only.

Which answers are inferred: derivation

A care category is our label, not the source's, so every one says how we got there:

derivationWhat it means
source_statedThe source classifies the record this way and the category restates it: the ICD-10-CM block "Diabetes mellitus", the ICD-10-PCS root operation "Replacement" of a knee joint, a HCPCS code range, the FDA pharmacologic class "Insulin Analog".
derivedWe inferred it: from words in the description, from a classification that usually but not always means this category, or from a record's other fields. Check it before relying on it.
reviewedA person checked it against the source.

evidence names the source and the part of its structure the answer rests on (anchor), so you can check it. confidence runs from 0 to 1; we don't assign a category below 0.8.

Freshness

Categories are worked out again with every release of the source: a new ICD-10 code set, a quarterly HCPCS update, each day's NDC directory. as_of is when the source version the answer rests on took effect.

Care categories are reference data for navigation and search. They are not clinical advice and not a coverage or billing determination.

On this page