Dashboard

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

At least one text search parameter is required.

ParameterDescriptionExample
qGeneral text searchq=lipitor
nameSearch drug namename=atorvastatin
ingredientSearch active ingredientingredient=metformin
brandSearch brand namebrand=lipitor

Filters

ParameterTypeDescriptionExample
ttystringTerm type(s), comma-separatedSCD,SBD
is_prescribablebooleanPrescribable drugs onlytrue
statusenumConcept statusactive
semantic_typestringSemantic typeClinical Drug
has_ndcbooleanHas NDC mappingtrue
ndcstringSpecific NDC code00093-7180-01

Pagination & Response

ParameterDefaultMaxDescription
limit20100Results per page
page1100Page number
shapecompactcompact, standard, full
sortrelevancerelevance, 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:

TTYDescriptionPrescribable
INIngredientNo
MINMultiple IngredientsNo
PINPrecise IngredientNo
BNBrand NameNo
SCDSemantic Clinical DrugYes
SBDSemantic Branded DrugYes
SCDCSemantic Clinical Drug ComponentYes
SBDCSemantic Branded Drug ComponentYes
SCDFSemantic Clinical Drug FormYes
SBDFSemantic Branded Drug FormYes
SCDGSemantic Clinical Drug GroupYes
SBDGSemantic Branded Drug GroupYes
PSNPrescribable NameYes

Use tty=SCD,SBD to find prescribable drug products.

Facets

RxNorm search returns these facets:

FacetDescription
ttyDistribution by term type
semantic_typeDistribution by semantic type
is_prescribablePrescribable vs non-prescribable

Valid Values

Status Values

  • active — Currently active (default filter)
  • removed — Removed from RxNorm
  • remapped — Remapped to another concept
  • obsolete — Obsolete concept

Required Scope

rxnorm.search

See Also