RxNorm Search API
Search NLM's RxNorm drug terminology for drugs, ingredients, and clinical concepts.
Endpoint
GET /v1/rxnorm/search
Quick Start
Node.js
import { Fhirfly } from "@fhirfly-io/terminology";
const client = new Fhirfly({ apiKey: "YOUR_API_KEY" });
// Search for prescribable lisinopril products
const results = await client.rxnorm.search({
q: "lisinopril",
is_prescribable: true
});
console.log(`Found ${results.total} concepts`);
for (const item of results.items) {
console.log(`${item.rxcui}: ${item.name} (${item.tty})`);
}
Parameters
Text Search
At least one text search parameter is required.
| Parameter | Description | Example |
|---|---|---|
q |
General text search | q=lipitor |
name |
Search drug name | name=atorvastatin |
ingredient |
Search active ingredient | ingredient=metformin |
brand |
Search brand name | brand=lipitor |
Filters
| Parameter | Type | Description | Example |
|---|---|---|---|
tty |
string | Term type(s), comma-separated | SCD,SBD |
is_prescribable |
boolean | Prescribable drugs only | true |
status |
enum | Concept status | active |
semantic_type |
string | Semantic type | Clinical Drug |
has_ndc |
boolean | Has NDC mapping | true |
ndc |
string | Specific NDC code | 00093-7180-01 |
Pagination & Response
| Parameter | Default | Max | Description |
|---|---|---|---|
limit |
20 | 100 | Results per page |
page |
1 | 100 | Page number |
shape |
compact | — | compact, standard, full |
sort |
relevance | — | relevance, name |
Example Response
{
"facets": {
"is_prescribable": {
"true": 56
},
"semantic_type": {
"Amino Acid, Peptide, or Protein": 2,
"Clinical Drug": 53,
"Pharmacologic Substance": 3
},
"tty": {
"IN": 1,
"MIN": 1,
"PIN": 1,
"PSN": 22,
"SBD": 12,
"SCD": 10
}
},
"has_more": true,
"items": [
{
"is_prescribable": true,
"name": "hydrochlorothiazide / lisinopril",
"rxcui": "214618",
"tty": "MIN"
},
{
"is_prescribable": true,
"name": "hydrochlorothiazide / lisinopril Pill",
"rxcui": "1162125",
"tty": "SCDG"
}
],
"limit": 2,
"meta": {
"legal": {
"attribution_required": false,
"citation": "RxNorm from NLM. Accessed 2026-01-28 via FHIRfly.",
"license": "public_domain",
"source_name": "RxNorm"
}
},
"page": 1,
"total": 56,
"total_capped": false
}
Use Cases
Find Generic Clinical Drugs
Node.js
// SCD = Semantic Clinical Drug (generic)
const results = await client.rxnorm.search({
q: "atorvastatin",
tty: "SCD",
is_prescribable: true
});
Find Brand Name Drugs
Node.js
// SBD = Semantic Branded Drug
const results = await client.rxnorm.search({
brand: "lipitor",
tty: "SBD"
});
Find Drugs by Ingredient
Node.js
const results = await client.rxnorm.search({
ingredient: "metformin",
is_prescribable: true
});
Find Drugs with NDC Mapping
Node.js
const results = await client.rxnorm.search({
q: "lisinopril",
has_ndc: true
});
Term Types (TTY)
RxNorm uses term types to categorize concepts:
| TTY | Description | Prescribable |
|---|---|---|
IN |
Ingredient | No |
MIN |
Multiple Ingredients | No |
PIN |
Precise Ingredient | No |
BN |
Brand Name | No |
SCD |
Semantic Clinical Drug | Yes |
SBD |
Semantic Branded Drug | Yes |
SCDC |
Semantic Clinical Drug Component | Yes |
SBDC |
Semantic Branded Drug Component | Yes |
SCDF |
Semantic Clinical Drug Form | Yes |
SBDF |
Semantic Branded Drug Form | Yes |
SCDG |
Semantic Clinical Drug Group | Yes |
SBDG |
Semantic Branded Drug Group | Yes |
PSN |
Prescribable Name | Yes |
Use tty=SCD,SBD to find prescribable drug products.
Facets
RxNorm search returns these facets:
| Facet | Description |
|---|---|
tty |
Distribution by term type |
semantic_type |
Distribution by semantic type |
is_prescribable |
Prescribable vs non-prescribable |
Valid Values
Status Values
active— Currently active (default filter)removed— Removed from RxNormremapped— Remapped to another conceptobsolete— Obsolete concept
Required Scope
rxnorm.search
See Also
- RxNorm Lookup API — Look up a specific RxCUI
- Search APIs Overview — Common search features