BYTETOOLS

RxNorm API

Free NIH RxNorm API with no key: normalised drug names, ingredients, brand-generic mapping and clinical drug identifiers from the US National Library of Medicine.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-19

What is the RxNorm API?

RxNorm is a free, key-free API from the US National Library of Medicine providing normalised drug nomenclature — mapping brand names to generics, resolving ingredients and strengths, and linking to standard clinical drug identifiers.

RxNorm solves the drug naming problem. The same medication appears under dozens of brand names, formulations and spellings across health systems, and RxNorm assigns a normalised concept identifier (RXCUI) that ties them together.

That makes it foundational for any clinical software: given 'Tylenol', 'paracetamol' and 'acetaminophen 500 MG tablet', RxNorm resolves all three to related concepts so you can reason about them as one drug rather than three strings.

Quick facts

Base URL
https://rxnav.nlm.nih.gov/REST
Authentication
No API key required.
Rate limit
20 requests per second per IP.
Pricing
Free public domain US government data.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the RxNorm API

Every request below was executed against the live API on 2026-08-19, and the response shown is the real body it returned — not an illustration.

1. Look up a drug by name

GET https://rxnav.nlm.nih.gov/REST/drugs.json?name=aspirin

curl
curl 'https://rxnav.nlm.nih.gov/REST/drugs.json?name=aspirin'
JavaScript (fetch)
const res = await fetch("https://rxnav.nlm.nih.gov/REST/drugs.json?name=aspirin");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://rxnav.nlm.nih.gov/REST/drugs.json?name=aspirin", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "drugGroup": {
    "name": null,
    "conceptGroup": [
      {
        "tty": "BPCK",
        "conceptProperties": [
          {
            "rxcui": "2047428",
            "name": "{100 (acetaminophen 250 MG / aspirin 250 MG / caffeine 65 MG Oral Tablet [Excedrin]) / 24 (acetaminophen 250 MG / aspirin 250 MG / diphenhydramine citrate 38 MG Oral Tablet [Excedrin PM Triple Action]) } Pack [Excedrin PM Triple Action Caplets and Excedrin Extra Strength Pain Reliever]",
            "synonym": "Excedrin PM Triple Action Caplets and Excedrin Extra Strength Pain Reliever Kit",
            "tty": "BPCK",
            "language": "ENG",
            "suppress": "N",
            "umlscui": ""
          }
        ]
      },
      {
        "tty": "GPCK",
        "conceptProperties": [
          {
            "rxcui": "1730187",
            "name": "{1 (aspirin 325 MG / dextromethorphan hydrobromide 10 MG / phenylephrine bitartrate 7.8 MG Effervescent Oral Tablet) / 1 (aspirin 500 MG / dextromethorphan hydrobromide 10 MG / doxylamine succinate 6.25 MG / phenylephrine bitartrate 7.8 MG Effervescent Oral Tablet) } Pack",
            "synonym": "1 daytime (aspirin 325 MG / dextromethorphan HBr 10 MG / phenylephrine bitartrate 7.8 MG Effervescent Oral Tablet) / 1 nighttime (aspirin 500 MG / dextromethorphan HBr 10 MG / doxylamine succinate 6.25 MG / phenylephrine bitartrate 7.8 MG Effervescent Oral Tablet) Pack",
            "tty": "GPCK",
            "language": "ENG",
            "suppress": "N",
            "umlscui": ""
          },
          {
            "rxcui": "2047427",

Parameters

ParameterTypeRequiredDescription
drugs.json?name=stringOptionalFind all drug concepts matching a name. aspirin
rxcui/<rxcui>/related.jsonpathOptionalConcepts related to a given RXCUI. 1191
approximateTerm.json?term=stringOptionalFuzzy match for misspelled drug names. aspirn
ttystringOptionalRestrict to term types such as SCD, SBD or IN. SCD

Response fields

drugGroup.conceptGrouparray
Groups of concepts by term type (tty).
conceptGroup[].ttystring
Term type: IN ingredient, SCD clinical drug, SBD branded drug, BPCK pack.
conceptProperties[].rxcuistring
The normalised concept identifier — the key output.
conceptProperties[].namestring
Full normalised drug name with strength and form.
conceptProperties[].synonymstring
Alternative name for the same concept.

What you can build with the RxNorm API

  • Normalise drug names across health record systems
  • Map brand names to generic equivalents
  • Build medication search with fuzzy matching for misspellings
  • Link prescriptions to standard clinical identifiers

Common errors and how to fix them

Empty conceptGroup

The drug name was not recognised.

Fix: Try /approximateTerm.json, which handles misspellings and partial names.

Confusing term types

tty codes are dense clinical terminology.

Fix: IN is the ingredient, SCD a clinical drug with strength and form, SBD the branded equivalent. Pick the level you need.

429

More than 20 requests per second.

Fix: Throttle; RxNorm enforces this per IP.

RxNorm API — frequently asked questions

Is the RxNorm API free?

Yes, completely free with no API key. It is published by the US National Library of Medicine as public domain data.

What is an RXCUI?

The normalised concept identifier RxNorm assigns to a drug concept. It is the key output — it lets you treat different names for the same medication as one entity.

How do I handle misspelled drug names?

Use the /approximateTerm.json endpoint, which does fuzzy matching and is designed for user-entered medication names.

What do the tty codes mean?

Term types. IN is an ingredient, SCD a clinical drug with strength and dose form, SBD the branded equivalent, and BPCK a branded pack. Choose the level of specificity your application needs.

Tools that pair with this API

RxNorm is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-19; always check the official documentation before relying on this API in production, as terms and limits can change.