NDC & Barcode Lookup

NDC & Barcode to Drug API

Resolve the identifier on a medication pack to a drug in one call. The barcode your scanner reads is a GTIN (or EAN); a US pack carries an NDC. Pass it to GET /v1/drugs/lookup?system=gtin&code=… (or system=ndc11) and get back the canonical drug row plus the exact pack that matched.

Identifier resolution is unified: GTIN, NDC, EAN, Pharmacode, PZN, CIP13, dm+d AMPP-ID, and Swissmedic-No all hit the same endpoint and return the same shape. Resolve once, then read the full record to cross-walk between systems for the same product.

GET /v1/drugs/lookup?system=gtin
# Barcode scan → GTIN
curl 'https://drug-database.com/v1/drugs/lookup\
?system=gtin&code=7680651870019' \
  -H 'Authorization: Bearer ms_live_…'

# US National Drug Code
curl 'https://drug-database.com/v1/drugs/lookup\
?system=ndc11&code=00071015523' \
  -H 'Authorization: Bearer ms_live_…'
response — trimmed
{
  "drug": {
    "id": "3f8a1c2d-1b4e-4c7a-9d2f-0a1b2c3d4e5f",
    "swissmedic_no": "65187",
    "product_name": "Aspirin Cardio 100 mg",
    "atc_code": "B01AC06",
    "manufacturer": "Bayer (Schweiz) AG",
    "dispensing_cat": "B",
    "is_reimbursed": true,
    "country_code": "CH",
    "last_synced_at": "2026-06-08T02:14:00Z"
  },
  "matched_alias": {
    "system": "gtin",
    "code": "7680651870019",
    "pack_size": 30,
    "is_primary": true
  },
  "_meta": { "sources": [ "bag_sl", "oddb" ] }
}

What you get

Barcode → product

GTIN/EAN from a scanner resolves to the canonical drug row in one indexed read.

NDC in the same shape

system=ndc11 resolves a US National Drug Code with an identical response — only the system changes.

Cross-system identity

One product, many identifiers: resolve any one, then read the full record to map to the rest.

Frequently asked

My scanner reads a GTIN/EAN barcode — what do I pass?

A linear barcode on a medication pack encodes a GTIN (or EAN). Pass system=gtin and the digits in code. The endpoint resolves it to the canonical drug row, with the matched pack returned alongside.

Can I resolve a US NDC?

Yes. Pass system=ndc11 with an 11-digit National Drug Code. The same endpoint and the same response shape — only the identifier system changes.

Which identifier systems are supported?

gtin, ndc11, pharmacode, cip13, pzn, swissmedic_no, ean, and dmd_amppid. Resolve any one to a single canonical product, then read the full record to cross-walk to the others.

Start free — 100 requests/day

Free tier: 100 requests/day, no card. Lookups need the drugs:read scope. Unknown identifiers return a clean 404 identifier_not_found — see the docs.