Written and maintained by CASRAI Editorial Board
Last updated
RxNorm is a standardized clinical drug nomenclature produced and maintained by the U.S. National Library of Medicine (NLM) that provides normalized names and permanent identifiers for clinical drugs and drug delivery packs available in the United States. To support programmatic medication reconciliation, electronic prescribing (NCPDP SCRIPT), HL7 FHIR Medication coding, and observational research ETL into the OMOP Common Data Model, the NLM hosts the public RxNav REST API (also referred to as the RxNorm API) at https://rxnav.nlm.nih.gov/REST.
Unlike commercial drug compendia such as Medi-Span, First Databank (FDB), or Multum—which each maintain proprietary identifier schemas for hospital pharmacy billing and formulary management—RxNorm cross-links synonymous source strings from multiple drug knowledge bases and FDA Structured Product Labeling (SPL) into a single public graph.
What Is RxNorm and What Is an RxCUI?
When different drug compendia represent the exact same clinical product with varied string formatting (for example, "Metformin hydrochloride 500 MG Oral Tablet" vs. "Metformin HCl 500mg Tab"), RxNorm groups those synonymous source atoms under a single normalized concept and assigns it a permanent numeric identifier called an RxNorm Concept Unique Identifier (RxCUI).
An RxCUI does not encode therapeutic drug classes on its own (those are represented via external links to ATC, VA National Drug File Reference Terminology / MED-RT, or DailyMed SPL classes); rather, an RxCUI identifies a node at a specific structural granularity in the RxNorm drug graph, connected to other RxCUIs by explicit semantic relationships such as has_ingredient, tradename_of, consists_of, and has_dose_form.
How Do RxNorm Term Types (IN, PIN, SCD, SBD, GPCK, BPCK) Work?
Every RxNorm concept is assigned a Term Type (TTY) that defines its structural level of abstraction across three fundamental axes: Ingredient, Strength, and Dose Form (plus an optional Brand Name axis):
| Term Type (TTY) | Full Name | Structural Definition & Example |
|---|---|---|
IN |
Ingredient | Base active chemical moiety or substance (e.g., Metformin, RxCUI 6809). |
PIN |
Precise Ingredient | Specific salt, ester, or isomer modification of the base ingredient (e.g., Metformin hydrochloride, RxCUI 860975). |
MIN |
Multiple Ingredients | Co-formulated combination of two or more active ingredients (e.g., Empagliflozin / Metformin). |
SCDC |
Semantic Clinical Drug Component | Ingredient + Strength (e.g., Metformin hydrochloride 500 MG). |
SCDF |
Semantic Clinical Drug Form | Ingredient + Dose Form (e.g., Metformin Oral Tablet). |
SCD |
Semantic Clinical Drug | Generic clinical drug: Ingredient + Strength + Dose Form (e.g., Metformin hydrochloride 500 MG Oral Tablet, RxCUI 861007). |
BN |
Brand Name | Proprietary trade name without strength or form (e.g., Glucophage). |
SBD |
Semantic Branded Drug | Ingredient + Strength + Dose Form + [Brand Name] (e.g., Metformin hydrochloride 500 MG Oral Tablet [Glucophage]). |
GPCK / BPCK |
Generic Pack / Branded Pack | Multi-component packaging containing multiple clinical drugs (e.g., oral contraceptive blister packs or methylprednisolone dose packs). |
In observational pharmacoepidemiology and HL7 FHIR MedicationRequest analytics, researchers routinely normalize outpatient dispensing records to SCD or SBD when evaluating dose-response relationships, and traverse up the graph to IN (Ingredient) when building drug-class exposure cohorts.
How Do You Query the NLM RxNav REST API for NDC-to-RxCUI Normalization?
Pharmacy claims and hospital barcode medication administration (BCMA) logs are typically recorded using 10-digit or 11-digit FDA National Drug Codes (NDCs). Because NDCs are specific to a labeler, product, and package size—and can be deactivated or reused over time—clinical data pipelines query the NLM RxNav REST API to map NDCs and free-text strings to standard RxCUIs:
- Exact Identifier Lookup (
GET /REST/rxcui.json?idtype=NDC&id={ndc}): Resolves a 10-digit hyphenated or 11-digit HIPAA-normalized NDC (or other external identifier such asUMLSCUI,SPL_SET_ID, orGCN_SEQNO) to its active associated RxCUI. - Historical and Retired NDC Resolution (
GET /REST/ndcstatus.json?ndc={ndc}&history=1): Essential for retrospective EHR and claims cohorts spanning multiple decades. Returns the lifecycle status of an NDC (ACTIVE,OBSOLETE,ALIEN, orUNKNOWN) along with the historical RxCUI mappings and effective date ranges during which the NDC was active. - Graph Traversal by Term Type (
GET /REST/rxcui/{rxcui}/related.json?tty=IN+SCDor/allrelated.json): Given any RxCUI (such as a Branded DrugSBDor Branded PackBPCK), traverses the RxNorm semantic graph to return the corresponding base active Ingredient (IN) or generic Semantic Clinical Drug (SCD). - Fuzzy String Matching (
GET /REST/approximateTerm.json?term={string}&maxEntries=5): Applies lexical normalization, token reordering, and spelling correction to uncoded EHR medication strings, returning candidate RxCUIs ranked by match score. - RxCUI History & Remapping (
GET /REST/rxcui/{rxcui}/historystatus.json): Checks whether a retired or merged RxCUI has been superseded and returns its current replacement RxCUI(s).
Frequently Asked Questions
Why do some 11-digit pharmacy claims NDCs fail a standard active RxNorm lookup?
Retail pharmacy claims (NCPDP Telecom D.0 and X12 837) zero-pad FDA 10-digit NDCs (4-4-2, 5-3-2, or 5-4-1) into an unhyphenated 5-4-2 11-digit format, and historical claims frequently contain NDCs from discontinued drug packages or repackagers. Using /REST/ndcstatus.json?ndc={11-digit-ndc}&history=1 resolves both 11-digit formatting and obsolete historical NDCs to their corresponding clinical drug RxCUI.
What is the difference between RxNorm and RxNorm Extension in OHDSI OMOP?
Because NLM RxNorm covers only drug products marketed in the United States, international clinical databases contain dosages, forms, and brands absent from the NLM release. The OHDSI vocabulary team maintains RxNorm Extension, which extends the exact same RxNorm Term Type hierarchy (IN, SCD, SBD, GPCK) to non-U.S. medicinal products so multinational OMOP network studies can query a unified drug hierarchy.
What are the rate limits and local deployment options for the NLM RxNav API?
The public NLM RxNav REST API enforces a rate limit of 20 requests per second per IP address. For high-throughput ETL pipelines processing millions of EHR medication orders, NLM provides RxNav-in-a-Box, a downloadable Docker container distribution of the monthly RxNorm database and REST server that institutions can run locally inside their own firewall with no rate limits.







