Systemintegration; Zugang zu den Daten

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=
💰
Zugang & Preise
⚠️ Bitte akzeptieren Sie die Nutzungsbedingungen.
Free
CHF 0
100 Req/Tag · kein Key
  • Alle Basis-Endpoints
  • JSON · Paginierung
API ausprobieren →
Pro
CHF 79/Mo
50’000 Req/Tag · API-Key
  • Alles aus Basic
  • Französisch (lang=fr)
  • CSV-Export
  • Webhooks
Enterprise
Anfrage
Unlimitiert · dediziert
  • Alles aus Pro
  • SLA · White-Label
  • Direktsupport
Anfragen →
🔑
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 gesamte Datenbestand geliefert – inklusive abgeschlossener (9), nicht mehr im Verkauf (7) und ausser Handel (8 bzw. Trade = AH). Mit Angabe wird exakt auf diese Codes gefiltert (status=8 umfasst auch Trade = AH). Der tatsächliche Zustand steht pro Eintrag in isActive und isAusserHandel.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 Basisreport (ohne status=) enthält neu alle Meldungen. Für ausschliesslich laufende Engpässe filtern Sie clientseitig auf isActive: true oder fragen die aktiven Status-Codes explizit ab (z. B. status=1,2,3,4,5,6,10,11). Das Feld datumLetzteMutation2 liefert das Mutationsdatum im ISO-8601-Format mit Zeitzonen-Offset (DateTimeOffset); datumLetzteMutation bleibt im gewohnten Textformat.
GET shortages/{gtin} Alle Meldungen zu einem GTIN
bash
curl "...?endpoint=shortages/7680654320016"

{ "data": [ { ... }, { ... } ], "count": 2, "meta": { ... } }
Ein GTIN kann mehrere Meldungen haben (mit unterschiedlichen Status). data ist daher ein Array aller Meldungen zum GTIN, sortiert nach letzter Mutation (neueste zuerst); count gibt die Anzahl an. Es werden alle Meldungen zurückgegeben, auch abgeschlossene/ausser Handel.
GET stats Aggregierte Kennzahlen der Versorgungslage

Bezieht sich bewusst nur auf aktive Engpässe (abgeschlossene/nicht mehr im Verkauf/ausser Handel sind ausgenommen), damit die Kennzahlen die aktuelle Lage 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 ausschliesslich tatsächlich verfügbare Alternativen. Ausgeschlossen sind Präparate, die selbst im Engpass sind, abregistriert/nicht mehr im Verkauf, ausser Handel (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 Datenbestand nutzen Sie den Endpoint shortages.

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 Basisreport shortages liefert standardmässig alle Status. Für eine Teilmenge filtern Sie mit status=: abgeschlossene Engpässe mit status=9, nicht mehr verkaufte Produkte mit status=7, ausser Handel mit status=8 (liefert sowohl Status 8 als auch Trade = AH, die dauerhafte Kennzeichnung; Status 8 dient nur als Übergangslösung). Der Zustand eines einzelnen Eintrags lässt sich zuverlässig an den Feldern statusCode, isActive und isAusserHandel ablesen.
📡
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 →