Capability · Interaction checks

N-way interaction checks, one POST.

Send 2–50 drugs by ATC, ID or market identifier and get every interacting pair back with a graded severity, mechanism and recommendation.

POST /api/v1/interactions/check

What you get

Built for production drug data

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

Matching is ATC-based, so it is jurisdiction-agnostic: a Swiss Pharmacode and a US NDC for the same molecule collapse to the same ATC and interact identically.

N-way

Up to 50 drugs, one call

Send 2–50 drugs; the API generates every unique pair and checks each against the interactions table. No client-side pairing, no quadratic round-trips.
Severity

Graded, gateable scale

Each hit grades 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 one field.
Identifiers

Mixed identifier input

Reference drugs by ATC, internal ID, or { system, code } for Pharmacode / GTIN / NDC / PZN / CIP13 in the same request — all resolved to ATC server-side.
Honest gaps

Nothing fails silently

Inputs that do not resolve to an ATC come back in unresolved_drugs with the original echo, so a missing match is visible rather than dropped.

Try it

A real call, end to end

POST a list of drugs in any supported identifier system; get back the interacting pairs and an overall severity_max.

POST /api/v1/interactions/check
curl -X POST 'https://drug-database.com/api/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": "Additive antiplatelet/anticoagulant effect",
      "recommendation": "Avoid combination; monitor for bleeding.",
      "last_reviewed": "2026-02-14"
    }
  ],
  "severity_max": "severe",
  "unresolved_drugs": [],
  "_meta": { "sources": ["epha", "bag_sl", "oddb"] }
}

Coverage & sourcing

  • 27,611 interaction pairs, keyed on WHO ATC so they apply across all 19 jurisdictions.
  • Interaction content is data sourced from EPha, BAG-SL and oddb; each pair carries a last_reviewed date.
  • Identifier resolution reuses the same alias index as the lookup endpoint — one molecule, many codes.
  • Severity is an ordered enum, so severity_max is a safe single-field gate.
Good to know
  • · Interaction checks need the interactions:write scope.
  • · We surface public interaction data; it is not a substitute for clinical judgement.

FAQ

Common questions

Each interaction grades 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.
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.
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.
Anything that does not resolve to an ATC code is returned in unresolved_drugs with the original input echoed back, so nothing fails silently and you can surface it to the user.
It is aggregated from public sources — EPha, BAG-SL and oddb — and keyed on WHO ATC. Each pair carries a last_reviewed date. We are not affiliated with these sources, and the output is a data service, not clinical advice.

Ready when you are

Put interaction checks in production this afternoon.

Spin up a key in minutes. The free tier covers prototyping and low-volume production.

Free tier · 100 requests/day · No card required