ICD-10-CM Get
Status:
stableCategory:lookupAdded:2026-10-14Last 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
| Field | Value |
|---|---|
| Method | GET |
| Path | /api/lookup/icd10cm/get |
| Full URL | https://engine.tripod-health.com/api/lookup/icd10cm/get |
| Authentication | API key (required) |
| Request body | none |
| Response body | application/json |
| Idempotent | Yes |
| Rate-limited | Yes |
Authentication
Send a valid API key in the apikey header. See
authentication.md.
Request
Headers
| Header | Required | Description |
|---|---|---|
apikey | Yes | Consumer API key. |
Path parameters
None.
Query parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
code | string | Yes | — | 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
| Field | Type | Always present | Description |
|---|---|---|---|
code | string | Yes | The normalized code: uppercase, dotted after the third character. |
label | string | Yes | The official long description. |
short_label | string | null | Yes | The official short description. null on chapters and sections, which have none. |
kind | string | Yes | chapter, section, category, subcategory, or code. code means billable. |
billable | boolean | Yes | true when the code is valid on a claim. A three-character code with no children (R55) is billable. |
ancestors | array | Yes | Every ancestor, root (chapter) first. Empty for a chapter. |
ancestors[].code | string | Yes | The ancestor's key: a chapter number, a section range, or a code. |
ancestors[].label | string | Yes | The ancestor's official description. |
ancestors[].kind | string | Yes | The ancestor's kind. |
ancestors[].notes | object | Yes | The ancestor's own coding notes, in the same shape as notes. |
notes | object | Yes | This 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_character | object | No | Present on a seven-character code. char is the code's 7th character and meaning its official meaning. |
seventh_characters | array | No | Present on a stem that requires a 7th character. Each entry is { char, meaning }, listing exactly the extensions the release defines for this stem. |
range | string | No | Present on chapters and sections: the code range they span, e.g. S00-T88. |
release | string | Yes | The ICD-10-CM release the record reflects, e.g. FY2027. |
request_id | string | Yes | Correlation ID. Quote in support tickets. |
timestamp | string (ISO 8601 UTC) | Yes | Server time when the response was emitted. |
Status codes
| Code | Meaning | When |
|---|---|---|
200 | OK | Code or node found. |
400 | ValidationError | code missing, malformed, in incomplete-code notation (S62.-), a chapter number outside 1–22, or repeated. field is code. |
401 | Unauthenticated | Missing or invalid API key. |
404 | NotFound | The value is well-formed but the release holds no such code or node. |
429 | RateLimited | Per-consumer rate limit exceeded. |
500 | InternalError | Unexpected 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 checkreleaseagainst the date of service. - Prompting for a 7th character. Fetch the stem and offer
seventh_charactersas the choices; fetch a complete code and read itsseventh_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; walkancestors[].notestoo. - 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
200as proof the code is billable. Headers answer200withbillable: false.
Debugging
- Capture
request_id. Present in every response body. 400 ValidationErrornamingcode. 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.404 NotFoundfor 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).seventh_charactersmissing on a code you expected to need one. Only stems that require a 7th character carry it; a complete seven-character code carriesseventh_character(singular) instead.
Rate limits
See rate-limits.md for the current per-consumer limits.
Related
- lookup-icd10cm-search.md — find codes by words or a code fragment.
- lookup-icd10cm-tree.md — walk the hierarchy one level at a time.
- lookup-cpt-get.md — the same record shape for procedure codes.
- lookup-naics-get.md, lookup-regulations-get.md — the other lookup resources' single-record operations.
- authentication.md, errors.md, rate-limits.md, conventions.md — cross-cutting contract rules.
Change history
| Date | Change |
|---|---|
| 2026-10-14 | Initial publication. |
| 2026-10-14 | The engine assigns every request ID; an X-Request-ID request header is not used. |