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.

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 RxNorm
  • remapped — Remapped to another concept
  • obsolete — Obsolete concept

Required Scope

rxnorm.search

See Also