# Code lookup

Status: LIVE
Price: $0.005 USDC
`GET /api/codes/lookup`
HTML: https://magentlab.com/docs/code-lookup
Markdown: https://magentlab.com/docs/code-lookup.md

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

Current Prescribable RxNorm, CMS ICD-10-CM, and LOINC
NLM, CMS, Regenstrief Institute
Local catalog. Production coverage is Current Prescribable RxNorm + ICD-10-CM + LOINC after gold gate.
DOI: none

## Worked example

### RxNorm 198440

Given: `code=198440, system=rxnorm`

1. Look up system=rxnorm code=198440 in the local catalog.
2. Return the preferred term when found; found=false is a valid paid 200.


## Parameters

- `system` (string, required): 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.

Method: `POST /api/codes/lookup`
Max items: 25
Price: unit_amount * n (unit 5000 atomic)
Status: PREVIEW

- 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:

```json
{
  "items": [
    {
      "code": "198440",
      "system": "rxnorm"
    },
    {
      "code": "198440",
      "system": "rxnorm"
    }
  ]
}
```

Human paywall (two-item fixture): https://api.magentlab.com/paywall/bulk/code-lookup

Example 200:

```json
{
  "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 fields

- `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

Frozen fixture. Not a live lookup.

```json
{
  "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 400 `invalid_system`: system must be rxnorm, icd10, or loinc Returned before settlement; you are not charged.
- HTTP 400 `invalid_code`: code is required and must be 1-32 characters Returned before settlement; you are not charged.
- HTTP 400 `invalid_items`: POST body must be a JSON object with only an items array Returned before settlement; you are not charged.
- HTTP 400 `invalid_item_count`: items must be an array of 1 to 25 objects Returned before settlement; you are not charged.
- HTTP 400 `invalid_item`: each items entry must be a JSON object Returned before settlement; you are not charged.
- HTTP 402 `payment_required`: Missing or invalid PAYMENT-SIGNATURE; decode the PAYMENT-REQUIRED header
- HTTP 409 `payment_in_progress`: The same authorization nonce is already being settled; retry shortly
- HTTP 429 `rate_limited`: Too many requests from this client
- HTTP 503 `settlement_uncertain`: Settlement is unconfirmed; retry with the same PAYMENT-SIGNATURE
- HTTP 503 `facilitator_unavailable`: Payment facilitator unavailable
- HTTP 503 `facilitator_misconfigured`: Payment facilitator is not configured
- HTTP 503 `facilitator_unauthorized`: Payment facilitator rejected credentials
- HTTP 503 `ledger_unavailable`: Payment ledger unavailable
- HTTP 503 `payment_unavailable`: Payment processing unavailable

## Related tools

- [Code search](https://magentlab.com/docs/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.

## 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.
