Pharmacode Lookup API

Pharmacode Lookup API for Swiss drugs

Turn a Swiss Pharmacode into a full drug product in one call. GET /v1/drugs/lookup?system=pharmacode&code=… does a single indexed read and returns the canonical drug row — ATC code, manufacturer, Swissmedic dispensing category, BAG-SL reimbursement flag — plus the matched alias with its pack size and public price.

Because every product carries a Swissmedic-No and a set of aliases, a Pharmacode lookup is also your bridge to GTIN and Swissmedic-No: resolve once, then read the full record to cross-walk to any other identifier system for the same pack.

GET /v1/drugs/lookup?system=pharmacode
curl 'https://drug-database.com/v1/drugs/lookup\
?system=pharmacode&code=1234567' \
  -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": {
    "drug_id": "3f8a1c2d-…",
    "system": "pharmacode",
    "code": "1234567",
    "pack_size": 30,
    "public_price": 14.35,
    "currency": "CHF",
    "is_primary": true
  },
  "_meta": { "sources": [ "bag_sl", "oddb" ] }
}

What you get

One indexed read

Single lookup on (system, code) — the hot path of every Swiss dispense flow.

GTIN / Swissmedic-No bridge

Resolved product carries swissmedic_no and all aliases, so you can cross-walk identifier systems.

Pack-level detail

The matched alias returns pack_size, public_price, and currency for the exact Pharmacode.

Frequently asked

What is a Pharmacode?

Pharmacode is the Swiss pharmaceutical article number maintained in the Refdata register. It identifies a specific pack on the Swiss market. The lookup endpoint maps it to the canonical drug row in one indexed read.

Can I bridge from Pharmacode to GTIN or Swissmedic-No?

Yes. The resolved drug carries its swissmedic_no, and the full record (GET /v1/drugs/:id) lists every alias — GTIN, Swissmedic-No, and others — for the same product, so you can cross-walk between identifier systems.

Which other identifier systems does the same endpoint accept?

The same /v1/drugs/lookup endpoint resolves gtin, pharmacode, cip13, pzn, swissmedic_no, ean, ndc11, and dmd_amppid — just change the system parameter.

Start free — 100 requests/day

Free tier: 100 requests/day, no card. Lookups need the drugs:read scope. The same endpoint resolves GTIN, NDC, PZN, CIP13, EAN, and Swissmedic-No — see the docs.