01 · Barcode
For developers · Code lookup
GTIN, Pharmacode or NDC → the exact medicine.
Resolve the number on a medicine pack — a scanned GTIN, a Swiss Pharmacode, a US NDC, a German PZN — to the product and the exact pack it identifies, in one indexed read. An unknown code is an explicit not-found, never a guess.
GET /v1/drugs/lookup
Scan · GTIN
Code systems
15 code systems, one lookup.
Scan or paste the number printed on the pack: the lookup resolves it to the exact product, pack size and listed price — or says plainly that it has no match.
- GTIN, NDC, CIP13 and the national pack numbers of each register, through one endpoint
- The pack that matched, not just the product family
- An unknown code returns an explicit not-found, never a guess
- NDC (US)468,130
- GTIN190,796
- APB (BE)26,461
- CIP13 (FR)21,191
- RVG (NL)19,870
- Varunummer (SE)19,208
- Varenummer (DK)16,472
- Código nacional (ES)15,523
- Varenummer (NO)11,281
- AIC (IT)10,979
- PA number (IE)10,480
- Merkevare id (NO)9,297
- Kód SÚKL (CZ)8,848
- Myyntilupa (FI)5,515
- Vnr (IS)3,050
How it works
From barcode to record
Read the code
The linear barcode on a medicine pack is a GTIN (EAN-13). Pharmacodes, NDCs and national numbers are printed on the pack or held in your system.
Look it up
GET /drugs/lookup?system=gtin&code=… — the system names the code family; the read is one indexed lookup on (system, code).
Get product and pack
The product record plus the matched pack: pack size, listed price and currency where the register publishes one.
In detail
What a pack-code lookup returns
Every pack code we hold maps to one product record. The lookup returns that record — ATC code, manufacturer, dispensing category, reimbursement flag, country and sync date — together with the pack that matched: its pack size and, where the register lists one, its public price and currency.
Some codes legitimately appear on more than one pack row (re-registrations, multi-packs). The lookup returns the pack flagged primary, or the first by a stable order, and tells you how many rows matched in match_count — so an ambiguous code is visible rather than hidden.
02 · One endpoint
Every code family
03 · Pack-level
The exact pack matched
04 · Clean misses
Explicit not-found
Try it
A real call, end to end.
One indexed read on (system, code) — the hot path of every dispensing and scanning flow.
Supported code systems
- International and national: gtin, ean, ndc11, pharmacode, pzn, cip13, swissmedic_no, dmd_amppid.
- National registers: aic (IT), be_apb (BE), cbg_meb_id (NL), cima_codigo (ES), cz_kod_sukl (CZ), dk_varenummer (DK), fi_myyntilupa (FI), ie_pa_number (IE), no_varenummer and no_merkevare_id (NO), se_varunummer (SE).
- Live counts of pack codes per system are shown on this page, read from the database.
- Each record carries last_synced_at, the date its register was last ingested.
- Lookups need the drugs:read scope.
- After resolving, GET /v1/drugs/{id} lists every pack code on the record for cross-walking between systems.
# Barcode scan → GTIN
curl 'https://drug-database.com/v1/drugs/lookup\
?system=gtin&code=7680…' \
-H 'Authorization: Bearer dd_live_…'
# US National Drug Code (11 digits)
curl 'https://drug-database.com/v1/drugs/lookup\
?system=ndc11&code=…' \
-H 'Authorization: Bearer dd_live_…'{
"drug": {
"id": "3f8a1c2d-…",
"product_name": "Aspirin Cardio 100 mg",
"atc_code": "B01AC06",
"dispensing_cat": "B",
"is_reimbursed": true,
"country_code": "CH",
"last_synced_at": "2026-…"
},
"matched_alias": {
"system": "gtin",
"code": "7680…",
"pack_size": "…",
"public_price": …,
"currency": "CHF",
"is_primary": true
},
"match_count": 1
}My scanner reads the barcode on a medicine pack — which system is it?
Can I look up a Swiss Pharmacode?
Can I look up a US NDC?
Which code systems are supported?
What happens with an unknown code?
Ready when you are
Try barcode & code lookup on real data.
Create a key in minutes. The free plan is enough to see real responses and judge the data; the paid plans are where you build.
Free to try · 10 lookups in total · No card required