NIH API: Explain ICD-10-CM diagnosis code
Explains an ICD-10-CM diagnosis code with its official name, category, chapter, and whether it is billable, using the NLM Clinical Tables diagnosis table.
Unofficial. Not affiliated with or endorsed by NIH.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Code, required
code ICD-10-CM diagnosis code as printed, with or without the dot (for example, E11.9 or E119).
B20
Input as JSON
{ "code": "B20"}Output
{ "code": "B20", "chapter": "Certain infectious and parasitic diseases", "billable": true, "page_url": "https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search?terms=B20&sf=code" , "category_code": "B20", "category_name": "Human immunodeficiency virus [HIV] disease", "official_name": "Human immunodeficiency virus [HIV] disease"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"clinicaltables.nlm.nih.gov/explain_diagnosis_code","input":{"code":"B20"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "clinicaltables.nlm.nih.gov/explain_diagnosis_code" , "input": { "code": "B20" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "clinicaltables.nlm.nih.gov/explain_diagnosis_code" , "input": { "code": "B20" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run clinicaltables.nlm.nih.gov/explain_diagnosis_code# with {"code":"B20"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string", "description": "ICD-10-CM diagnosis code as printed, with or without the dot (for example, E11.9 or E119)." } }}Output schema
{ "type": "object", "required": [ "code", "official_name", "category_code", "category_name", "chapter", "billable", "page_url" ], "properties": { "code": { "type": "string", "description": "Diagnosis code with a dot after the first three characters." }, "chapter": { "type": "string", "description": "ICD-10-CM chapter name in words." }, "billable": { "type": "boolean", "description": "Whether the code is sufficiently specific to bill." }, "page_url": { "type": "string", "description": "Link to the code in the NLM Clinical Tables search." }, "category_code": { "type": "string", "description": "Three-character ICD-10-CM category code." }, "category_name": { "type": "string", "description": "Official three-character category name." }, "official_name": { "type": "string", "description": "Official diagnosis name." } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
clinicaltables.nlm.nih.gov/explain_diagnosis_code- Returns
- code, official name, category code and name, chapter, billable flag, NLM page link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method clinicaltables.nlm.nih.gov/explain_diagnosis_code with the inputs above.
Ask your agent
- What does ICD-10-CM code E11.9 mean, and is it billable?
- Look up the official name and chapter for diagnosis code J45909.
- Can you explain the ICD-10-CM code I10 and which category it belongs to?
- I need the billing status and full description for code M54.5 on nih.gov.
- Which chapter does ICD-10-CM code S72001A fall under, and what is its official name?
See more
All NIH methodsFinds ICD-10-CM diagnosis codes and official names from a plain-language condition description, retrying with simplified wording when the first search finds nothing.
clinicaltables.nlm.nih.gov/search_diagnosis_codesFinds NIH research grants by topic, organisation, or researcher name. Searches the last five fiscal years by default.
reporter.nih.gov/search_grantsFinds PubMed medical and life-science articles by topic, with publication details and free full-text links when PubMed confirms them.
pubmed.ncbi.nlm.nih.gov/search_articlesLooks up a chemical on PubChem by common name or CAS number and returns its formula, molecular weight, names, description, SMILES, InChIKey and 2D structure image link.
pubchem.ncbi.nlm.nih.gov/get_chemicalGets the full PubMed abstract and publication details for one article by title, PubMed link, or PubMed number (PMID). A title is searched in PubMed titles first and must closely match a found article. Some articles have no abstract or free full text.
pubmed.ncbi.nlm.nih.gov/get_articleLooks up a chemical on PubChem by name or CAS number and returns its GHS hazard labels, route-specific first aid, flash point and workplace exposure limits.
pubchem.ncbi.nlm.nih.gov/get_chemical_safetyExplains a MedlinePlus medical test: what it measures, why it is ordered, how it is done, preparation, risks, and what the results mean.
medlineplus.gov/explain_lab_testLooks up a MedlinePlus health topic for a condition or symptom and returns its overview, related topics, and encyclopedia sections when a matching article is linked.
medlineplus.gov/get_health_topic