Solution · Drug interaction API

Drug interaction API — one call for a whole medication list.

POST a medication list by ATC, ID or identifier and get back every interacting pair with a graded severity — and, where the licensed source gives them, the mechanism and a recommendation.

647,075

products

19

countries

50

live sources

POST /v1/interactions/check

In code

One request. The record back.

One POST checks a whole medication list for interactions. The API resolves every drug you send — by ATC code, internal ID or market identifier (Pharmacode, GTIN, NDC, PZN, CIP13) — down to its ATC code, generates every unique pair, and returns the interactions it finds with a graded severity, plus the mechanism and a recommendation where the source provides them.

  • N-way, one call. Send up to 50 drugs; the API builds and checks every unique pair. No client-side pairing.
  • Graded severity. A 5-step ordered scale plus severity_max for a single-field gate in your dispense flow.
  • Mixed identifiers. ATC, drug ID, or Pharmacode / GTIN / NDC / PZN / CIP13 in the same request — all resolved for you.

POST a list of drugs in any supported identifier system and get the interacting pairs, an overall severity_max, and the licence of every row. Trimmed; illustrative values.

POST /v1/interactions/check
curl -X POST 'https://drug-database.com/v1/interactions/check' \
  -H 'Authorization: Bearer dd_live_…' \
  -H 'Content-Type: application/json' \
  -d '{
    "drugs": [
      { "atc_code": "B01AC06" },
      { "atc_code": "B01AA03" },
      { "system": "gtin", "code": "7680651870019" }
    ]
  }'
response
{
  "interactions": [
    {
      "atc_a": "B01AA03",
      "atc_b": "B01AC06",
      "severity": "severe",
      "mechanism": null,
      "recommendation": null,
      "licence": { "class": "nc", "licences": ["CC-BY-NC-4.0"], "attribution": ["…"] }
    }
  ],
  "severity_max": "severe",
  "locked": { "count": 1, "reason": "commercial_licence_required" },
  "attributions": ["Interaction severity from DDInter 2.0 …"],
  "unresolved_drugs": [],
  "disclaimer": "Informational only; not a medical device …",
  "_meta": { "sources": { "ddinter": { "last_synced_at": "…" } } }
}

Live data

A real list, checked pair by pair.

Matching is ATC-based, so it is jurisdiction-agnostic: a Swiss Pharmacode and a US NDC for the same molecule interact identically. Every row names its licence — DDInter 2.0 rows come back to every key, unmetered; EPha rows from the Growth plan.

  • 647,075 products from 19 countries’ registers
  • 27,611 interaction records on file
  • Every row carries its source and last-checked date

7 of 10 pairs have a record

  • severeClopidogrel + Omeprazole

  • severeClopidogrel + Fluoxetine

  • moderateClopidogrel + Atorvastatin

  • moderateAtorvastatin + Omeprazole

+ 3 more: Clopidogrel + Metoprolol (info); Omeprazole + Metoprolol (info); Omeprazole + Fluoxetine (info)

3 pairs with no record on file — which is not the same as safe.

An example list of 5 medicines; each of the 10 pairs looked up in the interaction records (synced 29 Sept 2026).Screen your own list

Where it comes from

Coverage & sourcing

  • Interaction pairs keyed on ATC, so they apply across all 19 jurisdictions.
  • DDInter 2.0 rows (CC BY-NC 4.0): free and unmetered for every key, always with their attribution.
  • EPha rows: included from the Growth plan; below it, locked.count says how many were withheld.
  • Inputs that do not resolve to an ATC are returned in unresolved_drugs — nothing fails silently.
  • Any key gets the free rows; EPha rows need the interactions:write scope (Growth and above) and quota left.
  • A data service, not clinical advice or a medical device; we are not affiliated with DDInter or EPha.

Clinical sources, latest sync first

  • Swissmedic recalls
  • ePHA interactions
  • PharmGKB
  • DDInter
  • openFDA drug recalls
  • NLM DailyMed
  • ClinicalTrials.gov
Sources passing their checks, as of 3 Oct, 00:05 UTC.Every source and its status

FAQ

Common questions, answered plainly.

How does the severity scale work?
Each interaction is graded on a 5-step ordered scale: info, minor, moderate, severe, contraindicated. The response also returns severity_max so you can gate a dispense flow on a single field.
Can I check more than two drugs at once?
Yes. Send 2 to 50 drugs in one request. The API generates every unique pair from your list (N-way), checks each against the interactions table, and returns all hits — you do not pair them up yourself.
How do I reference a drug?
Each entry can be an ATC code ({ "atc_code": "B01AC06" }), an internal drug ID, or a market identifier ({ "system": "gtin", "code": "..." }). Identifiers and IDs are resolved to their ATC code server-side.
Which sources are behind the interactions, and what does a free key get?
Two, and each row says which. DDInter 2.0 is licensed CC BY-NC 4.0: its rows come back to every key, on every plan, unmetered, always with the attribution you must show. EPha is commercially licensed: its rows are included from the Growth plan; below it, the response carries locked.count — how many rows were withheld — and never their content.
Anything that cannot be resolved?
Inputs that do not resolve to an ATC code are returned in unresolved_drugs with the original input echoed back, so nothing fails silently.

Ready when you are

Start building with the Drug interaction API. Free key, no card.

The free plan includes 10 lookups a month — enough to judge the data. Pro is $29/month when you build on it.