LIVE
Code lookup
Look up a current RxNorm, ICD-10-CM, or LOINC preferred term from an exact published code.
Markdown: /docs/code-lookup.md · Canonical: https://magentlab.com/docs/code-lookup
Not a medical device. Not a diagnosis, dose, or listing recommendation.
What it computes
Look up a current RxNorm, ICD-10-CM, or LOINC preferred term from an exact published code.
When to use
When an agent already has a code and must not invent the preferred term. found=false is a valid paid 200.
When not to use
- ICD-10 means ICD-10-CM. Dotted or compact form is accepted (E11.9 or E119).
- Not a billing submission. Production coverage is Current Prescribable + ICD-10-CM + LOINC, not complete UMLS.
- Do not send names or MRNs.
Formula
Exact system+code lookup in the local catalog (ICD-10-CM dotted or compact). found=false is a valid paid 200.
Citation
- Title
- Current Prescribable RxNorm, CMS ICD-10-CM, and LOINC
- Authors
- NLM, CMS, Regenstrief Institute
- Source
- Local catalog. Production coverage is Current Prescribable RxNorm + ICD-10-CM + LOINC after gold gate.
- DOI
- none
Worked example
RxNorm 198440
Given:
code=198440system=rxnorm
- Look up system=rxnorm code=198440 in the local catalog.
- Return the preferred term when found; found=false is a valid paid 200.
Try
Opens the live endpoint. Unpaid browser requests show the paywall; agents should send Accept: application/json.
/api/codes/lookup?system=rxnorm&code=198440
Full URL: https://api.magentlab.com/api/codes/lookup?system=rxnorm&code=198440
x402 V2 curl
Expect HTTP 402 and a PAYMENT-REQUIRED
header until you retry with PAYMENT-SIGNATURE. Incomplete query params return HTTP
400 before any quote or charge.
curl -i -H "Accept: application/json" "https://api.magentlab.com/api/codes/lookup?system=rxnorm&code=198440"
Cursor mcp.json
Intended config for @magent/mcp. This is not npm @x402/fetch
(a payment fetch wrapper).
{
"mcpServers": {
"magent": {
"args": [
"-y",
"@magent/mcp"
],
"command": "npx",
"env": {
"X402_PRIVATE_KEY": "0xYOUR_SPENDING_KEY"
}
}
}
}
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
system |
string | required · rxnorm, icd10, loinc | rxnorm, icd10 (ICD-10-CM), or loinc. |
code |
string | required | Exact published identifier. ICD-10-CM accepts dotted or compact form (E11.9 or E119). Max 32 characters. |
Bulk (POST)
POST the same path with a JSON items array. Price is n times the GET unit. Invalid items return HTTP 400 before settlement.
- 1 to 25 items. Each item uses the same keys as the GET query parameters.
- The first invalid item fails the whole request (index in the 400 JSON). You are not charged.
- HTTP 200 is {count, path, items}. Each items[i] is the GET 200 body for that row.
- Catalog misses (empty matches, found=false) stay paid 200s inside that slot.
- x402 resource URL is this path plus n and body_sha256. Browsers that prefer text/html get the same paywall as GET; Pay retries POST with the same items.
Example request (fixture)
{
"items": [
{
"code": "198440",
"system": "rxnorm"
},
{
"code": "198440",
"system": "rxnorm"
}
]
}
Opens a two-item fixture on the API host. Unpaid browsers get the same MetaMask paywall as GET; Pay retries POST with those items.
Example 200 (fixture)
{
"count": 2,
"path": "/api/codes/lookup",
"items": [
{
"code": "198440",
"status": "current",
"system": "rxnorm",
"display": "acetaminophen 500 MG Oral Tablet",
"tty": "SCD",
"obsolete": false,
"found": true,
"disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
"catalog": {
"coverage": "seed",
"notes": "ICD-10 entries are ICD-10-CM (US claims), not WHO ICD-10. RxNorm codes are RxCUI. LOINC codes are official LOINC numerics.",
"source": "magent curated seed",
"systems": [
"rxnorm",
"icd10",
"loinc"
],
"version": "2026.08-wedge"
},
"billable": null,
"synonyms": [
"tylenol 500mg",
"tylenol 500 mg",
"acetaminophen 500mg",
"acetaminophen 500 mg tablet",
"paracetamol 500 mg"
]
},
{
"code": "198440",
"status": "current",
"system": "rxnorm",
"display": "acetaminophen 500 MG Oral Tablet",
"tty": "SCD",
"obsolete": false,
"found": true,
"disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
"catalog": {
"coverage": "seed",
"notes": "ICD-10 entries are ICD-10-CM (US claims), not WHO ICD-10. RxNorm codes are RxCUI. LOINC codes are official LOINC numerics.",
"source": "magent curated seed",
"systems": [
"rxnorm",
"icd10",
"loinc"
],
"version": "2026.08-wedge"
},
"billable": null,
"synonyms": [
"tylenol 500mg",
"tylenol 500 mg",
"acetaminophen 500mg",
"acetaminophen 500 mg tablet",
"paracetamol 500 mg"
]
}
]
}
Response
| Field | Type | Description |
|---|---|---|
found |
boolean | true when the code exists in the catalog |
system |
string | rxnorm, icd10, or loinc |
code |
string | Canonical catalog code when found |
display |
string | Preferred term, or null when not found |
tty |
string | Term type, or null when not found |
status |
string | current or equivalent catalog status |
billable |
boolean | ICD-10-CM billable flag; null otherwise |
obsolete |
boolean | true when the catalog marks the code obsolete |
synonyms |
array | Known synonyms; empty when not found |
catalog |
object | Seed vs ingested vs full coverage metadata |
disclaimer |
string | Not-a-device notice |
Example JSON
Machine form of the same example. Frozen fixture. Not a live lookup.
{
"code": "198440",
"status": "current",
"system": "rxnorm",
"display": "acetaminophen 500 MG Oral Tablet",
"tty": "SCD",
"obsolete": false,
"found": true,
"disclaimer": "Not a medical device. Deterministic published-formula or published-code output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
"catalog": {
"coverage": "seed",
"notes": "ICD-10 entries are ICD-10-CM (US claims), not WHO ICD-10. RxNorm codes are RxCUI. LOINC codes are official LOINC numerics.",
"source": "magent curated seed",
"systems": [
"rxnorm",
"icd10",
"loinc"
],
"version": "2026.08-wedge"
},
"billable": null,
"synonyms": [
"tylenol 500mg",
"tylenol 500 mg",
"acetaminophen 500mg",
"acetaminophen 500 mg tablet",
"paracetamol 500 mg"
]
}
Errors
| HTTP | Code | When |
|---|---|---|
| 400 | invalid_system |
system must be rxnorm, icd10, or loinc Returned before settlement; you are not charged. |
| 400 | invalid_code |
code is required and must be 1-32 characters Returned before settlement; you are not charged. |
| 400 | invalid_items |
POST body must be a JSON object with only an items array Returned before settlement; you are not charged. |
| 400 | invalid_item_count |
items must be an array of 1 to 25 objects Returned before settlement; you are not charged. |
| 400 | invalid_item |
each items entry must be a JSON object Returned before settlement; you are not charged. |
| 402 | payment_required |
Missing or invalid PAYMENT-SIGNATURE; decode the PAYMENT-REQUIRED header |
| 409 | payment_in_progress |
The same authorization nonce is already being settled; retry shortly |
| 429 | rate_limited |
Too many requests from this client |
| 503 | settlement_uncertain |
Settlement is unconfirmed; retry with the same PAYMENT-SIGNATURE |
| 503 | facilitator_unavailable |
Payment facilitator unavailable |
| 503 | facilitator_misconfigured |
Payment facilitator is not configured |
| 503 | facilitator_unauthorized |
Payment facilitator rejected credentials |
| 503 | ledger_unavailable |
Payment ledger unavailable |
| 503 | payment_unavailable |
Payment processing unavailable |
Related tools
- Code search — Rank a natural-language drug, diagnosis, or lab phrase to current RxNorm, ICD-10-CM, or LOINC codes from the local catalog.
Also searched as
- RxNorm code lookup
- ICD-10-CM display
- LOINC preferred term
- 198440 acetaminophen
Payment
Required query parameters must be present and valid. Invalid params return HTTP 400 JSON before settlement. magent does not charge. Fix the params, then request a new 402 quote for that complete URL. Catalog misses (empty matches, found=false) are valid paid 200s. Unpaid valid requests return HTTP 402 with a base64
PAYMENT-REQUIRED
header. Retry the same URL with PAYMENT-SIGNATURE. Settlement completes before the
tool runs. Full handshake and shared payment errors: Payments.
Guarantees
- Invalid query parameters return HTTP 400 before settlement. You are not charged.
- Settlement finishes before the tool executes. Uncertain settlement fails closed (HTTP 503).
- Execution is timeout-bounded and concurrency-capped.
- Calculator inputs are not persisted. Request logs store path without query.