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.
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" }
]
}'{
"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.
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 recallsClinical
- ePHA interactionsClinical
- PharmGKBClinical
- DDInterClinical
- openFDA drug recallsClinical
- NLM DailyMedClinical
- ClinicalTrials.govClinical
FAQ
Common questions, answered plainly.
How does the severity scale work?
Can I check more than two drugs at once?
How do I reference a drug?
Which sources are behind the interactions, and what does a free key get?
Anything that cannot be resolved?
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.