LIVE
Ontology translation
Natural language to current RxNorm, ICD-10-CM, and LOINC codes. Pay-per-request USDC on Base. No API keys.
When to use
Map a natural-language drug, diagnosis, or lab phrase to a current RxNorm, ICD-10-CM, or LOINC code. Use when an agent must not hallucinate or invent a billing/pharmacy code.
Try
Opens the live endpoint. Unpaid browser requests show the paywall; agents should send Accept: application/json.
/api/ontology/translate?query=Tylenol%20500mg&system=rxnorm
Full URL: https://api.magentlab.com/api/ontology/translate?query=Tylenol%20500mg&system=rxnorm
Request
GET
/api/ontology/translate · x402 V2 · USDC on Base · $0.005 USDC
x402 V2 curl
Expect HTTP 402 and a PAYMENT-REQUIRED
header until you retry with PAYMENT-SIGNATURE.
curl -i -H "Accept: application/json" "https://api.magentlab.com/api/ontology/translate?query=Tylenol%20500mg&system=rxnorm"
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"
}
}
}
}
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
query |
string | required | Natural-language drug, diagnosis, or lab description. Max 512 characters. Do not send patient names. |
system |
string | optional · rxnorm, icd10, loinc | Restrict to rxnorm, icd10 (ICD-10-CM), or loinc. Omit to search all. |
tty |
string | optional · SCD, SBD, IN, PIN, MIN, BN, GPCK, BPCK, DF, SCDC, SBDC, SCDF, SBDF, CM, LN | Restrict term type. Pharmacy orders typically want SCD. ICD-10-CM is CM; LOINC is LN. |
limit |
integer | optional · default 5 | Number of ranked matches to return (1-25). Default 5. |
min_score |
integer | optional · default 35 | Minimum rank score 0-100. Default 35. |
include_obsolete |
boolean | optional · default false | Include deprecated/obsolete codes. Default false. |
billable_only |
boolean | optional · default true | ICD-10-CM: return only HIPAA billable codes, not headers. Default true. |
Success fields
| Field | Type | Description |
|---|---|---|
query |
string | Echo of the submitted query |
system |
string | rxnorm, icd10, loinc, or all |
match_count |
integer | Number of ranked matches returned |
match_quality |
string | none, low, or high |
matches |
array | Ranked codes. First row is the best deterministic hit. |
catalog |
object | Seed vs ingested vs full coverage metadata |
disclaimer |
string | Not-a-device notice |
Example
Frozen fixture. Not a live lookup.
{
"system": "rxnorm",
"matches": [
{
"code": "198440",
"status": "current",
"system": "rxnorm",
"display": "acetaminophen 500 MG Oral Tablet",
"tty": "SCD",
"obsolete": false,
"billable": null,
"score": 95
}
],
"query": "Tylenol 500mg",
"disclaimer": "Not a medical device. Deterministic published-formula or coded-ontology output for autonomous agents. A licensed clinician remains responsible for patient care and billing submissions.",
"catalog": {
"coverage": "full",
"icd10cm_fy": "FY2026-04",
"license": {
"icd10cm": "ICD-10-CM from CMS/NCHS. US claims codes, not WHO ICD-10.",
"loinc": "This material contains content from LOINC (http://loinc.org). LOINC is copyright © Regenstrief Institute, Inc. and the Logical Observation Identifiers Names and Codes (LOINC) Committee and is available at no cost under the license at http://loinc.org/license. LOINC® is a registered United States trademark of Regenstrief Institute, Inc.",
"rxnorm": "This product uses publicly available data courtesy of the U.S. National Library of Medicine (NLM), National Institutes of Health, Department of Health and Human Services; NLM is not responsible for the product and does not endorse or recommend this or any other product."
},
"loinc_version": "2.82",
"notes": "ICD-10 entries are ICD-10-CM (US claims), not WHO ICD-10. RxNorm is Current Prescribable Content until a licensed full monthly ingest lands.",
"rxnorm_release": "2026-08-03",
"source": "postgres ingest",
"systems": [
"rxnorm",
"icd10",
"loinc"
],
"version": "icd10:FY2026-04|loinc:2.82|rxnorm:2026-08-03"
},
"match_count": 1,
"match_quality": "high"
}
Payment
Unpaid 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.
Errors
| HTTP | Code | When |
|---|---|---|
| 400 | invalid_query |
query is required and must be 1-512 characters |
| 400 | invalid_system |
system must be rxnorm, icd10, or loinc |
| 400 | invalid_tty |
tty must be a known RxNorm, ICD-10-CM, or LOINC term type |
| 400 | invalid_limit |
limit must be an integer from 1 to 25 |
| 400 | invalid_min_score |
min_score must be an integer from 0 to 100 |
| 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 |
Guarantees
- Settlement finishes before the tool executes. Uncertain settlement fails closed (HTTP 503).
- Lookups run on our nodes — no third-party data API wrappers.
- Localhost, IP literals, and metadata hostnames are rejected.
- Execution is timeout-bounded and concurrency-capped.