Loading documentation

Access required

Your account doesn't have access to the documentation. Contact your administrator.

Sign out
Skip to main content

ICD-10-CM Get

Status: stable Category: lookup Added: 2026-10-14 Last reviewed: 2026-10-14

Summary​

Returns one ICD-10-CM code's full record: its long and short descriptions, whether it is billable, its own coding notes, and every ancestor (chapter, section, category, subcategories) with that ancestor's notes. Most rules that govern a code — Excludes1, Excludes2, Code First, Use Additional Code — live on its category or chapter rather than on the code itself, so a detail view needs the whole chain. Notes stay attributed to the node they belong to, never merged.

Any node a tree hands out is fetchable here, including a chapter (19) or section (S60-S69).

Endpoint​

FieldValue
MethodGET
Path/api/lookup/icd10cm/get
Full URLhttps://engine.tripod-health.com/api/lookup/icd10cm/get
AuthenticationAPI key (required)
Request bodynone
Response bodyapplication/json
IdempotentYes
Rate-limitedYes

Authentication​

Send a valid API key in the apikey header. See authentication.md.

Request​

Headers​

HeaderRequiredDescription
apikeyYesConsumer API key.

Path parameters​

None.

Query parameters​

ParameterTypeRequiredDefaultDescription
codestringYes—An ICD-10-CM code of 3–7 characters, with or without the dot and in any case (S62.001A, s62001a). A chapter number (1–22) or a section range (S60-S69) is also accepted.

The code is normalized before lookup: uppercased, and dotted after the third character. A well-formed code the release does not contain is a 404. A malformed value is a 400 naming code, including:

  • Incomplete-code notation such as S62.-, which names a family, not a code. Send a full code, or list the family with /api/lookup/icd10cm/tree.
  • A dot anywhere other than after the third character.
  • Plain words (hello).

A known header such as S62 is not an error: it answers 200 with billable: false.

Body​

None.

Response​

Success — 200 OK​

Request: GET /api/lookup/icd10cm/get?code=S62.001A

{
"code": "S62.001A",
"label": "Unspecified fracture of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture",
"short_label": "Unsp fracture of navicular bone of right wrist, init",
"kind": "code",
"billable": true,
"ancestors": [
{
"code": "19",
"label": "Injury, poisoning and certain other consequences of external causes",
"kind": "chapter",
"notes": {
"notes": [
"Use secondary code(s) from Chapter 20, External causes of morbidity, to indicate cause of injury. Codes within the T section that include the external cause do not require an additional external cause code",
"The chapter uses the S-section for coding different types of injuries related to single body regions and the T-section to cover injuries to unspecified body regions as well as poisoning and certain other consequences of external causes."
],
"excludes2": [
"birth trauma (P10-P15)",
"obstetric trauma (O70-O71)"
],
"use_additional_code": [
"code to identify any retained foreign body, if applicable (Z18.-)"
]
}
},
{
"code": "S60-S69",
"label": "Injuries to the wrist, hand and fingers",
"kind": "section",
"notes": {
"excludes2": [
"burns and corrosions (T20-T32)",
"frostbite (T33-T34)",
"insect bite or sting, venomous (T63.4)"
]
}
},
{
"code": "S62",
"label": "Fracture at wrist and hand level",
"kind": "category",
"notes": {
"notes": [
"A fracture not indicated as displaced or nondisplaced should be coded to displaced",
"A fracture not indicated as open or closed should be coded to closed"
],
"excludes1": [
"traumatic amputation of wrist and hand (S68.-)"
],
"excludes2": [
"fracture of distal parts of ulna and radius (S52.-)"
]
}
},
{
"code": "S62.0",
"label": "Fracture of navicular [scaphoid] bone of wrist",
"kind": "subcategory",
"notes": {}
},
{
"code": "S62.00",
"label": "Unspecified fracture of navicular [scaphoid] bone of wrist",
"kind": "subcategory",
"notes": {}
},
{
"code": "S62.001",
"label": "Unspecified fracture of navicular [scaphoid] bone of right wrist",
"kind": "subcategory",
"notes": {}
}
],
"notes": {},
"seventh_character": {
"char": "A",
"meaning": "initial encounter for closed fracture"
},
"release": "FY2027",
"request_id": "a2ccd5c7-8ea1-4013-b1b3-d27a24ffe2d4",
"timestamp": "2026-10-14T00:15:09.828Z"
}

Response fields​

FieldTypeAlways presentDescription
codestringYesThe normalized code: uppercase, dotted after the third character.
labelstringYesThe official long description.
short_labelstring | nullYesThe official short description. null on chapters and sections, which have none.
kindstringYeschapter, section, category, subcategory, or code. code means billable.
billablebooleanYestrue when the code is valid on a claim. A three-character code with no children (R55) is billable.
ancestorsarrayYesEvery ancestor, root (chapter) first. Empty for a chapter.
ancestors[].codestringYesThe ancestor's key: a chapter number, a section range, or a code.
ancestors[].labelstringYesThe ancestor's official description.
ancestors[].kindstringYesThe ancestor's kind.
ancestors[].notesobjectYesThe ancestor's own coding notes, in the same shape as notes.
notesobjectYesThis node's own coding notes, keyed by note type. Each present key holds an array of strings. Keys: includes, inclusion_terms, excludes1, excludes2, code_first, use_additional_code, code_also, notes. Absent keys mean no note of that type; {} means none at all.
seventh_characterobjectNoPresent on a seven-character code. char is the code's 7th character and meaning its official meaning.
seventh_charactersarrayNoPresent on a stem that requires a 7th character. Each entry is { char, meaning }, listing exactly the extensions the release defines for this stem.
rangestringNoPresent on chapters and sections: the code range they span, e.g. S00-T88.
releasestringYesThe ICD-10-CM release the record reflects, e.g. FY2027.
request_idstringYesCorrelation ID. Quote in support tickets.
timestampstring (ISO 8601 UTC)YesServer time when the response was emitted.

Status codes​

CodeMeaningWhen
200OKCode or node found.
400ValidationErrorcode missing, malformed, in incomplete-code notation (S62.-), a chapter number outside 1–22, or repeated. field is code.
401UnauthenticatedMissing or invalid API key.
404NotFoundThe value is well-formed but the release holds no such code or node.
429RateLimitedPer-consumer rate limit exceeded.
500InternalErrorUnexpected failure. Quote request_id in the ticket.

Examples​

curl​

curl -sS "https://engine.tripod-health.com/api/lookup/icd10cm/get?code=S62.001A" \
-H "apikey: $ENGINE_API_KEY"

A stem that requires a 7th character​

S62.001 is not billable on its own; it lists the extensions that complete it.

curl -sS "https://engine.tripod-health.com/api/lookup/icd10cm/get?code=S62.001" \
-H "apikey: $ENGINE_API_KEY"
{
"code": "S62.001",
"label": "Unspecified fracture of navicular [scaphoid] bone of right wrist",
"short_label": "Unspecified fracture of navicular bone of right wrist",
"kind": "subcategory",
"billable": false,
"ancestors": [
{
"code": "19",
"label": "Injury, poisoning and certain other consequences of external causes",
"kind": "chapter",
"notes": {
"notes": [
"Use secondary code(s) from Chapter 20, External causes of morbidity, to indicate cause of injury. Codes within the T section that include the external cause do not require an additional external cause code",
"The chapter uses the S-section for coding different types of injuries related to single body regions and the T-section to cover injuries to unspecified body regions as well as poisoning and certain other consequences of external causes."
],
"excludes2": [
"birth trauma (P10-P15)",
"obstetric trauma (O70-O71)"
],
"use_additional_code": [
"code to identify any retained foreign body, if applicable (Z18.-)"
]
}
},
{
"code": "S60-S69",
"label": "Injuries to the wrist, hand and fingers",
"kind": "section",
"notes": {
"excludes2": [
"burns and corrosions (T20-T32)",
"frostbite (T33-T34)",
"insect bite or sting, venomous (T63.4)"
]
}
},
{
"code": "S62",
"label": "Fracture at wrist and hand level",
"kind": "category",
"notes": {
"notes": [
"A fracture not indicated as displaced or nondisplaced should be coded to displaced",
"A fracture not indicated as open or closed should be coded to closed"
],
"excludes1": [
"traumatic amputation of wrist and hand (S68.-)"
],
"excludes2": [
"fracture of distal parts of ulna and radius (S52.-)"
]
}
},
{
"code": "S62.0",
"label": "Fracture of navicular [scaphoid] bone of wrist",
"kind": "subcategory",
"notes": {}
},
{
"code": "S62.00",
"label": "Unspecified fracture of navicular [scaphoid] bone of wrist",
"kind": "subcategory",
"notes": {}
}
],
"notes": {},
"seventh_characters": [
{ "char": "A", "meaning": "initial encounter for closed fracture" },
{ "char": "B", "meaning": "initial encounter for open fracture" },
{ "char": "D", "meaning": "subsequent encounter for fracture with routine healing" },
{ "char": "G", "meaning": "subsequent encounter for fracture with delayed healing" },
{ "char": "K", "meaning": "subsequent encounter for fracture with nonunion" },
{ "char": "P", "meaning": "subsequent encounter for fracture with malunion" },
{ "char": "S", "meaning": "sequela" }
],
"release": "FY2027",
"request_id": "991987a5-e3b9-4c21-bf93-f6e401d4f7d8",
"timestamp": "2026-10-14T00:15:38.258Z"
}

Python (requests)​

# Uses the call() helper from quickstart.md.
record = call("GET", "/api/lookup/icd10cm/get?code=s62001a")
print(record["code"], record["label"], "billable" if record["billable"] else "header")
for node in record["ancestors"] + [record]:
for excluded in node["notes"].get("excludes1", []):
print(f" Excludes1 (from {node['code']}): {excluded}")

Node.js (native fetch)​

// Uses the call() helper from quickstart.md.
const record = await call("GET", "/api/lookup/icd10cm/get?code=S62.001A");
const rules = [...record.ancestors, record].flatMap((node) =>
Object.entries(node.notes).map(([type, texts]) => ({ from: node.code, type, texts })),
);
console.log(record.code, record.seventh_character?.meaning, rules.length);

TypeScript​

type NoteType =
| "includes" | "inclusion_terms" | "excludes1" | "excludes2"
| "code_first" | "use_additional_code" | "code_also" | "notes";

type Notes = Partial<Record<NoteType, string[]>>;

interface Icd10cmAncestor {
code: string;
label: string;
kind: "chapter" | "section" | "category" | "subcategory";
notes: Notes;
}

interface SeventhCharacter {
char: string;
meaning: string;
}

interface Icd10cmRecord {
code: string;
label: string;
short_label: string | null;
kind: "chapter" | "section" | "category" | "subcategory" | "code";
billable: boolean;
ancestors: Icd10cmAncestor[];
notes: Notes;
seventh_character?: SeventhCharacter;
seventh_characters?: SeventhCharacter[];
range?: string;
release: string;
request_id: string;
timestamp: string;
}

const record = await call<Icd10cmRecord>("GET", "/api/lookup/icd10cm/get?code=S62.001A");

Error scenarios​

Incomplete-code notation​

Send:

curl -sS "https://engine.tripod-health.com/api/lookup/icd10cm/get?code=S62.-" \
-H "apikey: $ENGINE_API_KEY" \
-w "\nHTTP %{http_code}\n"

Receive (400):

{
"timestamp": "2026-10-14T00:15:28.933Z",
"error": "ValidationError",
"message": "'code' uses incomplete-code notation ('S62.-'), which names a family, not a code; send a full code, or use tree to list the family",
"field": "code",
"request_id": "5f882723-2f8b-46c9-861f-4436192b6df4"
}

Not a code​

Send:

curl -sS "https://engine.tripod-health.com/api/lookup/icd10cm/get?code=hello" \
-H "apikey: $ENGINE_API_KEY" \
-w "\nHTTP %{http_code}\n"

Receive (400):

{
"timestamp": "2026-10-14T00:15:29.493Z",
"error": "ValidationError",
"message": "'code' must be an ICD-10-CM code of 3-7 characters, e.g. S62.001A or s62001a",
"field": "code",
"request_id": "17d28f6c-3876-4abf-a35a-f8592c302bde"
}

Unknown code​

Send:

curl -sS "https://engine.tripod-health.com/api/lookup/icd10cm/get?code=S62.999Z" \
-H "apikey: $ENGINE_API_KEY" \
-w "\nHTTP %{http_code}\n"

Receive (404):

{
"timestamp": "2026-10-14T00:15:29.250Z",
"error": "NotFound",
"message": "No ICD-10-CM code or node 'S62.999Z'",
"request_id": "50709994-a859-4760-b10d-1cfdb205f99d"
}

Intended use​

  • Code detail panels that show a code's description alongside the rules that govern it, including the ones inherited from its category and chapter.
  • Validating a code before it goes on a claim — check billable, and check release against the date of service.
  • Prompting for a 7th character. Fetch the stem and offer seventh_characters as the choices; fetch a complete code and read its seventh_character.meaning.

Mistaken use​

  • Do not search with get. It resolves one exact code. To find codes from words or a fragment, use /api/lookup/icd10cm/search.
  • Do not read only the top-level notes. They are usually empty on a leaf code. The governing Excludes1 and Code First rules sit on ancestors; walk ancestors[].notes too.
  • Do not send S62.- to get every code in a family. List the family's members with /api/lookup/icd10cm/tree (?node=S62).
  • Do not treat a 200 as proof the code is billable. Headers answer 200 with billable: false.

Debugging​

  1. Capture request_id. Present in every response body.
  2. 400 ValidationError naming code. Read the message: it says whether the value used family notation, put the dot in the wrong place, or is not code-shaped at all.
  3. 404 NotFound for a code you have seen on a claim. The code may belong to another fiscal-year release, or to a different code set (ICD-10-PCS procedure codes and WHO ICD-10 codes are not part of ICD-10-CM).
  4. seventh_characters missing on a code you expected to need one. Only stems that require a 7th character carry it; a complete seven-character code carries seventh_character (singular) instead.

Rate limits​

See rate-limits.md for the current per-consumer limits.

Change history​

DateChange
2026-10-14Initial publication.
2026-10-14The engine assigns every request ID; an X-Request-ID request header is not used.