API Dokumentation

API v1 · öffentlich

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.

BASE URL drugshortage.ch/api/v1/drugshortage.php?endpoint=
🔑
Authentifizierung
bash
# 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
Endpoints
GET shortages Paginierte Liste aller Lieferengpässe
ParameterTypPflichtBeschreibungBeispiel
searchstringVolltextsucheamoxicillin
firmastringExakter FirmennameSandoz Pharmaceuticals AG
atcstringATC-Code PräfixC09
statusstringStatus-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
mutatedSincestringNur Einträge, deren letzte Mutation >= Datum ist (Format ISO YYYY-MM-DD). Ideal für inkrementelle Syncs.2026-05-01
reportedSincestringNur Einträge, deren Erstmeldung >= Datum ist (Format ISO YYYY-MM-DD). Für das Tracking von Neuzugängen.2026-05-01
pageintegerSeitennummer (Standard: 1)2
perPageintegerEinträge pro Seite (Standard: 200, max: 200)200
sortstringfeld:asc oder feld:desc. Erlaubte Felder: bezeichnung, firma, atc, tage, lieferdatum, datumLetzteMutationdatumLetzteMutation:desc
langstringProSprache (de/fr)fr
bash
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
}
Der Grundreport (ohne 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.
GET shortages/{gtin} Alle Meldungen zu einer GTIN
bash
curl "...?endpoint=shortages/7680654320016"

{ "data": [ { ... }, { ... } ], "count": 2, "meta": { ... } }
Eine GTIN kann mehrere Meldungen (mit unterschiedlichen Status) haben. 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.
GET stats Aggregierte Kennzahlen der Versorgungslage

Bezieht sich bewusst nur auf aktive Engpässe (abgeschlossene/nicht verkaufte/ausser Handel werden ausgeschlossen), damit die Kennzahlen die aktuelle Versorgungslage abbilden.

bash
curl "...?endpoint=stats"

{ "data": { "active": 719, "uniqueAtcGroups": 294,
  "avgDaysSinceMeldung": 178.8, "regulatory": { "bwl": 133, "who": 214 },
  "topAtcGroups": [{ "atc": "N05", "count": 63 }, ...] } }
GET timeline Wöchentliche Zeitreihe neuer Meldungen
ParameterTypPflichtBeschreibung
weeksintegerWochen zurück (4–260, Standard: 52)
GET supply Versorgungsengpässe nach Wirkstoff/Dosierung exklusiv drugshortage.ch

Wirkstoffe/Dosierungen bei denen 50–100% aller Präparate nicht lieferbar sind. Dieser Endpoint ist exklusiv bei drugshortage.ch.

bash
curl "...?endpoint=supply"
GET alternatives?gtin= Verfügbare Alternativen für ein Produkt

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.

bash
curl "...?endpoint=alternatives&gtin=7680654320016"

{ "gtin": "7680654320016",
  "gleicheFirma": [], "coMarketing": [...], "alleAlternativen": [...] }
GET company/{firma} Firmenprofil mit Bewertung
bash
curl "...?endpoint=company/Sandoz%20Pharmaceuticals%20AG"
GET export/csv Gefilterter CSV-Export (aktive Engpässe) Pro+

Der CSV-Export liefert die aktive Sicht (ohne abgeschlossene/ausser Handel). Für den vollständigen Bestand nutzen Sie den shortages-Endpoint.

python
import pandas as pd
df = pd.read_csv("...?endpoint=export/csv&atc=N06", encoding="utf-8-sig")
GET health System-Health-Check
json
{ "status": "healthy", "database": { "healthy": true, "latencyMs": 1.1 } }
🏷️
Status-Codes
CodeBedeutung
1aktuell keine Lieferungen
2angekündigter Engpass
3Lieferungen kontingentiert / eingeschränkt
4für Spitäler verfügbar; Retail nicht verfügbar
5für Spitäler verfügbar; Retail eingeschränkt
6Spitäler eingeschränkt; Retail nicht verfügbar
7registriert – nicht mehr im Verkauf
8abregistriert – ausser Handel (auch via Trade = AH gekennzeichnet)
9abgeschlossen
10Versorgung erfolgt mit Pflichtlagerware
11Grossist eingeschränkt; Direktbezug bei Firma
Der 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.
📡
HTTP Status Codes
200 Erfolgreich
400 Ungültige Parameter
401 Ungültiger API-Key
404 Nicht gefunden
429 Rate Limit überschritten
500 Serverfehler

Fragen zur API?

Wir helfen gerne bei der Integration.

Kontakt aufnehmen →