drugshortage.ch API
Direkter, strukturierter Zugriff auf alle Schweizer Arzneimittel-Lieferengpässe. Echtdaten, täglich aktualisiert, zweisprachig DE/FR. Kein Scraping – saubere REST-API mit Rate Limiting.
# Mit API-Key (Bearer Token) curl -H "Authorization: Bearer IHR_API_KEY" "https://www.drugshortage.ch/api/v1/drugshortage.php?endpoint=shortages" # Alternativ als Parameter curl "https://www.drugshortage.ch/api/v1/drugshortage.php?endpoint=shortages&api_key=IHR_KEY" # Response-Header X-RateLimit-Limit: 5000 X-RateLimit-Remaining: 4847 X-Api-Tier: basic
| Parameter | Typ | Pflicht | Beschreibung | Beispiel |
|---|---|---|---|---|
| search | string | – | Volltextsuche | amoxicillin |
| firma | string | – | Exakter Firmenname | Sandoz Pharmaceuticals AG |
| atc | string | – | ATC-Code Präfix | C09 |
| status | string | – | Status-Codes 1–11, kommagetrennt. Ohne Angabe wird der vollständige Datenbestand geliefert – inklusive abgeschlossener (9), nicht mehr verkaufter (7) und ausser Handel befindlicher (8 bzw. Trade = AH) Einträge. Mit Angabe wird auf exakt diese Codes gefiltert (status=8 umfasst auch Trade = AH). Pro Eintrag zeigen die Felder isActive und isAusserHandel den tatsächlichen Zustand. | 1,2 |
| mutatedSince | string | – | Nur Einträge, deren letzte Mutation >= Datum ist (Format ISO YYYY-MM-DD). Ideal für inkrementelle Syncs. | 2026-05-01 |
| reportedSince | string | – | Nur Einträge, deren Erstmeldung >= Datum ist (Format ISO YYYY-MM-DD). Für das Tracking von Neuzugängen. | 2026-05-01 |
| page | integer | – | Seitennummer (Standard: 1) | 2 |
| perPage | integer | – | Einträge pro Seite (Standard: 200, max: 200) | 200 |
| sort | string | – | feld:asc oder feld:desc. Erlaubte Felder: bezeichnung, firma, atc, tage, lieferdatum, datumLetzteMutation | datumLetzteMutation:desc |
| lang | string | Pro | Sprache (de/fr) | fr |
curl "...?endpoint=shortages&atc=C09&perPage=3" { "data": [{ "id": 4821, "gtin": "7680654320016", "bezeichnung": "Olmesartan Mepha Lactab 20 mg", "firma": "Mepha Pharma AG", "atcCode": "C09CA08", "statusCode": 1, "statusText": "1 aktuell keine Lieferungen", "isActive": true, "isAusserHandel": false, "trade": null, "lieferfaehigkeitDate": "15.07.2026", "ersteMeldungDate": "20.04.2026", "ersteInfoFirmaDate": "20.04.2026", "dauer": "langer Engpass (> 6 Wochen)", "datumLetzteMutation": "05.05.2026", "datumLetzteMutation2": "2026-05-05T00:00:00+02:00", "isBwl": true, "bewertung": 1 }], "total": 1180, "page": 1, "perPage": 3, "pages": 394 }
status=) enthält jetzt alle Meldungen. Wenn Sie nur laufende Engpässe wollen, filtern Sie clientseitig auf isActive: true oder fragen Sie gezielt aktive Status-Codes ab (z. B. status=1,2,3,4,5,6,10,11). Das Feld datumLetzteMutation2 liefert das Mutationsdatum als ISO-8601 mit Zeitzonen-Offset (DateTimeOffset); datumLetzteMutation bleibt das gewohnte Klartextformat.curl "...?endpoint=shortages/7680654320016" { "data": [ { ... }, { ... } ], "count": 2, "meta": { ... } }
data ist daher ein Array aller Meldungen zur GTIN, sortiert nach letzter Mutation (neueste zuerst), und count nennt deren Anzahl. Es werden alle Meldungen geliefert, auch abgeschlossene/ausser Handel.Bezieht sich bewusst nur auf aktive Engpässe (abgeschlossene/nicht verkaufte/ausser Handel werden ausgeschlossen), damit die Kennzahlen die aktuelle Versorgungslage abbilden.
curl "...?endpoint=stats" { "data": { "active": 719, "uniqueAtcGroups": 294, "avgDaysSinceMeldung": 178.8, "regulatory": { "bwl": 133, "who": 214 }, "topAtcGroups": [{ "atc": "N05", "count": 63 }, ...] } }
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| weeks | integer | – | Wochen zurück (4–260, Standard: 52) |
Wirkstoffe/Dosierungen bei denen 50–100% aller Präparate nicht lieferbar sind. Dieser Endpoint ist exklusiv bei drugshortage.ch.
curl "...?endpoint=supply"
Zeigt nur tatsächlich verfügbare Alternativen. Ausgeschlossen werden Präparate, die selbst im Engpass sind, abregistrierte/nicht mehr verkaufte, ausser Handel befindliche (Trade = AH) sowie Spital-/Importprodukte. Mit lang=fr werden die französischen Bezeichnungen (NomF) geliefert.
curl "...?endpoint=alternatives>in=7680654320016" { "gtin": "7680654320016", "gleicheFirma": [], "coMarketing": [...], "alleAlternativen": [...] }
curl "...?endpoint=company/Sandoz%20Pharmaceuticals%20AG"
Der CSV-Export liefert die aktive Sicht (ohne abgeschlossene/ausser Handel). Für den vollständigen Bestand nutzen Sie den shortages-Endpoint.
import pandas as pd df = pd.read_csv("...?endpoint=export/csv&atc=N06", encoding="utf-8-sig")
{ "status": "healthy", "database": { "healthy": true, "latencyMs": 1.1 } }
| Code | Bedeutung |
|---|---|
| 1 | aktuell keine Lieferungen |
| 2 | angekündigter Engpass |
| 3 | Lieferungen kontingentiert / eingeschränkt |
| 4 | für Spitäler verfügbar; Retail nicht verfügbar |
| 5 | für Spitäler verfügbar; Retail eingeschränkt |
| 6 | Spitäler eingeschränkt; Retail nicht verfügbar |
| 7 | registriert – nicht mehr im Verkauf |
| 8 | abregistriert – ausser Handel (auch via Trade = AH gekennzeichnet) |
| 9 | abgeschlossen |
| 10 | Versorgung erfolgt mit Pflichtlagerware |
| 11 | Grossist eingeschränkt; Direktbezug bei Firma |
shortages-Grundreport liefert standardmässig alle Status. Möchten Sie nur einen Teil, filtern Sie mit status=: abgeschlossene Engpässe mit status=9, nicht mehr verkaufte Produkte mit status=7, ausser Handel befindliche mit status=8 (liefert sowohl Status 8 als auch Trade = AH, die dauerhafte Kennzeichnung; Status 8 ist nur Übergangslösung). Den Zustand eines einzelnen Eintrags lesen Sie zuverlässig aus den Feldern statusCode, isActive und isAusserHandel ab.Fragen zur API?
Wir helfen gerne bei der Integration.
