drugshortage.ch API
Accès direct et structuré à toutes les pénuries de médicaments en Suisse. Données réelles, mises à jour quotidiennement, bilingue DE/FR. Pas de scraping – API REST propre avec rate limiting.
- Tous les endpoints
- Recherche & filtres
- Support e-mail
- Tout de Basic
- Français (lang=fr)
- Export CSV
- Webhooks
# Avec clé API (Bearer Token) curl -H "Authorization: Bearer VOTRE_CLE_API" "https://www.drugshortage.ch/api/v1/drugshortage.php?endpoint=shortages" # Alternativement en paramètre curl "https://www.drugshortage.ch/api/v1/drugshortage.php?endpoint=shortages&api_key=VOTRE_CLE" # En-têtes de réponse X-RateLimit-Limit: 5000 X-RateLimit-Remaining: 4847 X-Api-Tier: basic
| Paramètre | Type | Requis | Description | Exemple |
|---|---|---|---|---|
| search | string | – | Recherche plein texte | amoxicillin |
| firma | string | – | Nom exact de l’entreprise | Sandoz Pharmaceuticals AG |
| atc | string | – | Préfixe code ATC | C09 |
| status | string | – | Codes statut 1–11, séparés par virgule. Sans paramètre, l’ensemble des données est retourné – y compris les entrées terminées (9), plus en vente (7) et hors commerce (8 ou Trade = AH). Avec le paramètre, le filtrage porte exactement sur ces codes (status=8 inclut aussi Trade = AH). Pour chaque entrée, les champs isActive et isAusserHandel indiquent l’état réel. | 1,2 |
| mutatedSince | string | – | Uniquement les entrées dont la dernière mutation est >= à la date (format ISO YYYY-MM-DD). Idéal pour les synchronisations incrémentales. | 2026-05-01 |
| reportedSince | string | – | Uniquement les entrées dont la première annonce est >= à la date (format ISO YYYY-MM-DD). Pour suivre les nouvelles entrées. | 2026-05-01 |
| page | integer | – | Numéro de page (défaut: 1) | 2 |
| perPage | integer | – | Entrées par page (défaut: 200, max: 200) | 200 |
| sort | string | – | champ:asc ou champ:desc. Champs autorisés : bezeichnung, firma, atc, tage, lieferdatum, datumLetzteMutation | datumLetzteMutation:desc |
| lang | string | Pro | Langue (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 actuellement pas de livraisons", "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=) contient désormais toutes les annonces. Pour n’obtenir que les pénuries en cours, filtrez côté client sur isActive: true ou demandez explicitement les codes de statut actifs (p. ex. status=1,2,3,4,5,6,10,11). Le champ datumLetzteMutation2 fournit la date de mutation au format ISO-8601 avec décalage horaire (DateTimeOffset) ; datumLetzteMutation reste au format texte habituel.curl "...?endpoint=shortages/7680654320016" { "data": [ { ... }, { ... } ], "count": 2, "meta": { ... } }
data est donc un tableau de toutes les annonces du GTIN, trié par dernière mutation (la plus récente d’abord), et count en indique le nombre. Toutes les annonces sont retournées, y compris terminées/hors commerce.Porte volontairement uniquement sur les pénuries actives (les entrées terminées/plus en vente/hors commerce sont exclues), afin que les indicateurs reflètent la situation actuelle.
curl "...?endpoint=stats" { "data": { "active": 719, "uniqueAtcGroups": 294, "avgDaysSinceMeldung": 178.8, "regulatory": { "bwl": 133, "who": 214 }, "topAtcGroups": [{ "atc": "N05", "count": 63 }, ...] } }
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| weeks | integer | – | Semaines en arrière (4–260, défaut: 52) |
Principes actifs/dosages dont 50–100% des préparations ne sont pas livrables. Endpoint exclusif à drugshortage.ch.
curl "...?endpoint=supply"
Affiche uniquement les alternatives réellement disponibles. Sont exclues les préparations elles-mêmes en pénurie, désenregistrées/plus en vente, hors commerce (Trade = AH) ainsi que les produits hospitaliers/d’importation. Avec lang=fr, les désignations françaises (NomF) sont retournées.
curl "...?endpoint=alternatives>in=7680654320016" { "gtin": "7680654320016", "gleicheFirma": [], "coMarketing": [...], "alleAlternativen": [...] }
curl "...?endpoint=company/Sandoz%20Pharmaceuticals%20AG"
L’export CSV fournit la vue active (sans les entrées terminées/hors commerce). Pour l’ensemble complet des données, utilisez l’endpoint shortages.
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 | Signification |
|---|---|
| 1 | actuellement pas de livraisons |
| 2 | pénurie annoncée |
| 3 | quota de livraisons |
| 4 | livrable pour hôpitaux, pas pour retail |
| 5 | livrable pour hôpitaux, quota pour retail |
| 6 | quota pour hôpitaux, pas de livraisons en retail |
| 7 | enregistré mais plus en vente |
| 8 | hors commerce (également signalé via Trade = AH) |
| 9 | pénurie terminée |
| 10 | approvisionnement par la réserve obligatoire |
| 11 | grossiste limité, achat direct auprès de l’entreprise |
shortages retourne par défaut tous les statuts. Pour n’en obtenir qu’une partie, filtrez avec status= : pénuries terminées avec status=9, produits plus en vente avec status=7, hors commerce avec status=8 (retourne aussi bien le statut 8 que Trade = AH, le marquage permanent ; le statut 8 n’est qu’une solution transitoire). L’état d’une entrée individuelle se lit de manière fiable dans les champs statusCode, isActive et isAusserHandel.Des questions sur l’API?
Nous vous aidons volontiers pour l’intégration.
