For developers · ATC classification

ATC code lookup, down to every product.

Resolve any Anatomical Therapeutic Chemical code to its level, parent chain, labels and defined daily dose — then walk down to its sub-classes, or list every product filed under it in any country we cover.

GET /v1/atc/{code}

  1. CCardiovascular systemLevel 1 · Anatomical group · 1 of 14
  2. C10Lipid modifying agentsLevel 2 · Therapeutic group · 1 of 10
  3. C10ALipid modifying agents, plainLevel 3 · Pharmacological group · 1 of 2
  4. C10AAHMG CoA reductase inhibitorsLevel 4 · Chemical group · 1 of 6
  5. C10AA05AtorvastatinLevel 5 · Substance · 1 of 8

Every substance in C10AA (HMG CoA reductase inhibitors)

  • C10AA01 Simvastatin
  • C10AA02 Lovastatin
  • C10AA03 Pravastatin
  • C10AA04 Fluvastatin
  • C10AA05 Atorvastatin
  • C10AA06 Cerivastatin
  • C10AA07 Rosuvastatin
  • C10AA08 Pitavastatin
The branch from anatomical group to substance, as the atc_codes table holds it — defined daily dose 20 mg oral.

Down the tree

One class, every product in it.

Ask for a group and get its substances; ask for a substance and get every product filed under it, in every country we cover.

  • 8 substances under C10AA (HMG CoA reductase inhibitors)
  • 8,656 products on record across them
  • WHO defined daily dose for Atorvastatin: 20 mg oral

HMG CoA reductase inhibitors · products on record

  • C10AA05 Atorvastatin3,323
  • C10AA07 Rosuvastatin2,452
  • C10AA01 Simvastatin1,359
  • C10AA03 Pravastatin773
  • C10AA08 Pitavastatin303
  • C10AA04 Fluvastatin266
  • C10AA02 Lovastatin171
  • C10AA06 Cerivastatin9
Product rows in the catalogue per substance of C10AA, all countries. Counts read live from the drugs table.

How it works

How to walk the ATC tree

  1. Look the code up

    GET /atc/{code} with any code from level 1 (M) to level 5 (M01AE01) returns the node and every parent up to its anatomical main group.

  2. Go down a level

    /atc/{code}/children lists the direct sub-classes, so a browser or picker can expand the tree one level at a time.

  3. List the products

    /atc/{code}/drugs returns every product whose ATC code starts with the node, in one country or all of them, paginated.

In detail

What an ATC lookup returns

The Anatomical Therapeutic Chemical (ATC) classification files every active substance in five levels: anatomical main group (M), therapeutic subgroup (M01), pharmacological subgroup (M01A), chemical subgroup (M01AE) and the substance itself (M01AE01). A lookup returns the node with its level and labels, the defined daily dose where one is assigned, and the full chain of parents — so a breadcrumb or a class filter needs one call, not five.

Because every descendant of a node shares its prefix, the same code is also a filter over the whole catalogue: M01 sweeps every anti-inflammatory product in every register we hold. To find a class by name rather than code, /v1/classes?system=atc&q= searches the labels and returns product and market counts with each class.

01 · Lookup

Node plus every parent

One call returns the node and its ancestors to level 1, so the path from substance to anatomical group is never a second request.

02 · Traversal

/children and /drugs

/children returns the direct sub-classes; /drugs returns every product anywhere under the node, filtered by country, with limit and offset.

03 · Labels & DDD

Labels and defined daily dose

English and German labels, French and Italian where the source provides them, and the DDD (value, unit, route) on substances that have one.

04 · Caching

ETags on every read

The classification changes about once a year, so node and subtree reads carry an ETag; revalidating with If-None-Match costs a 304.

Try it

A real call, end to end.

A single GET returns the node, its labels, the DDD and the parent chain to the anatomical main group.

Coverage & sourcing

  • All five ATC levels, loaded from the WIdO ATC classification (Germany’s official edition of the ATC system).
  • Defined daily doses (value, unit, route) on the substances that have one assigned.
  • /atc/{code}/drugs joins the tree to every register by ATC prefix; pass country=ALL for all of them.
  • Not every register publishes an ATC code for every product, so per-country coverage varies — see /data/sources.
  • ATC reads need the atc:read scope, which every plan includes.
  • Without country, /atc/{code}/drugs defaults to Switzerland; pass country=ALL or an ISO code.
  • We are not affiliated with the WHO Collaborating Centre or WIdO.
GET /v1/atc/M01AE01
curl 'https://drug-database.com/v1/atc/M01AE01' \
  -H 'Authorization: Bearer dd_live_…'
response
{
  "node": {
    "code": "M01AE01",
    "level": 5,
    "parent_code": "M01AE",
    "label_en": "ibuprofen",
    "label_de": "Ibuprofen",
    "label_fr": "…",
    "label_it": "…",
    "ddd_value": 1.2,
    "ddd_unit": "g",
    "ddd_route": "O"
  },
  "parents": [
    { "code": "M01AE", "level": 4, "label_en": "Propionic acid derivatives" },
    { "code": "M01A",  "level": 3, "label_en": "…" },
    { "code": "M01",   "level": 2, "label_en": "…" },
    { "code": "M",     "level": 1, "label_en": "…" }
  ],
  "_meta": { "sources": { "wido_atc": { "schema_state": "ok", … } } }
}

FAQ

Questions about ATC codes

What is an ATC code?
The Anatomical Therapeutic Chemical code classifies an active substance in five levels, from the organ system it acts on (one letter, e.g. M) down to the substance itself (seven characters, e.g. M01AE01 for ibuprofen). It is the common key that lets products from different countries be compared.
What does GET /v1/atc/{code} return?
The node — code, level, parent code, labels and, for substances, the defined daily dose (value, unit, route) — plus the full chain of parents up to the level-1 anatomical main group.
How do I list every product in an ATC class?
Call GET /v1/atc/{code}/drugs with country=ALL or an ISO country code. Because ATC is a prefix tree, a level-2 code like M01 returns every product filed anywhere beneath it. Results are paginated with limit and offset.
Can I find an ATC class by name?
Yes. GET /v1/classes?system=atc&q=statin searches the class labels and returns each matching class with its product and market counts.
Which languages are the labels in?
English and German on the nodes we hold, and French and Italian where the source provides them. Level 1 to 3 labels are as published, which for some groups means upper case.

Ready when you are

Try atc classification 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