{"id":21589,"date":"2026-06-03T23:36:41","date_gmt":"2026-06-03T21:36:41","guid":{"rendered":"https:\/\/www.drugshortage.ch\/?page_id=21589"},"modified":"2026-06-17T20:17:54","modified_gmt":"2026-06-17T18:17:54","slug":"api-integration","status":"publish","type":"page","link":"https:\/\/www.drugshortage.ch\/index.php\/api-integration\/","title":{"rendered":"API Integration"},"content":{"rendered":"\n<!-- ============================================================\n     drugshortage.ch API Dokumentation \u2013 neu gestaltet (FR)\n     ============================================================ -->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Outfit:wght@300;400;500;600;700;800&amp;family=JetBrains+Mono:wght@400;500;600&amp;display=swap\" rel=\"stylesheet\">\n<style>\n:root {\n  --primary:   #e53e3e;\n  --primary-d: #c53030;\n  --navy:      #0f172a;\n  --slate:     #334155;\n  --muted:     #64748b;\n  --border:    #e2e8f0;\n  --bg:        #f8fafc;\n  --white:     #ffffff;\n  --green:     #16a34a;\n  --blue:      #2563eb;\n  --amber:     #d97706;\n  --mono:      'JetBrains Mono', monospace;\n  --sans:      'Outfit', sans-serif;\n}\n\n#apidoc2 * { box-sizing:border-box; margin:0; padding:0; }\n#apidoc2 { font-family:var(--sans); color:var(--slate); line-height:1.6; }\n\n\/* \u2500\u2500 Hero \u2500\u2500 *\/\n.d2-hero {\n  background: var(--white);\n  border:1px solid var(--border);\n  border-radius:16px;\n  padding:48px 40px;\n  margin-bottom:28px;\n  position:relative;\n  overflow:hidden;\n}\n.d2-hero::after {\n  content:'';\n  position:absolute;\n  top:0; right:0; bottom:0;\n  width:40%;\n  background: linear-gradient(135deg, #fff5f5 0%, #fef2f2 50%, #fff 100%);\n  z-index:0;\n}\n.d2-hero-content { position:relative; z-index:1; max-width:580px; }\n.d2-hero-eyebrow {\n  display:inline-flex; align-items:center; gap:6px;\n  background:#fef2f2; border:1px solid #fecaca;\n  color:var(--primary); font-size:11px; font-weight:600;\n  padding:4px 12px; border-radius:20px; letter-spacing:.5px;\n  text-transform:uppercase; margin-bottom:16px;\n}\n.d2-hero-eyebrow::before { content:'\u25cf'; font-size:8px; }\n.d2-hero h1 {\n  font-size:36px; font-weight:800; color:var(--navy);\n  line-height:1.15; margin-bottom:12px; letter-spacing:-.5px;\n}\n.d2-hero h1 span { color:var(--primary); }\n.d2-hero p { color:var(--muted); font-size:15px; line-height:1.7; margin-bottom:20px; }\n.d2-base-url {\n  display:inline-flex; align-items:center; gap:0;\n  background:var(--navy); border-radius:10px; overflow:hidden;\n  font-family:var(--mono); font-size:12px;\n}\n.d2-base-url-label {\n  background:var(--primary); color:#fff; padding:8px 14px; font-weight:600; font-size:11px;\n}\n.d2-base-url-path { color:#94a3b8; padding:8px 16px; }\n.d2-base-url-path span { color:#86efac; }\n\n\/* \u2500\u2500 Section \u2500\u2500 *\/\n.d2-section { margin-bottom:28px; }\n.d2-section-head {\n  display:flex; align-items:center; gap:10px;\n  margin-bottom:16px;\n}\n.d2-section-icon {\n  width:32px; height:32px; border-radius:8px;\n  background:var(--primary); color:#fff;\n  display:flex; align-items:center; justify-content:center;\n  font-size:15px; flex-shrink:0;\n}\n.d2-section-title { font-size:15px; font-weight:700; color:var(--navy); }\n\n\/* \u2500\u2500 Tiers \u2500\u2500 *\/\n.d2-tiers { display:grid; grid-template-columns:repeat(auto-fit, minmax(180px, 1fr)); gap:12px; margin-bottom:6px; }\n.d2-tier {\n  border:1.5px solid var(--border); border-radius:12px;\n  padding:18px; background:var(--white); position:relative;\n  transition:all .2s;\n}\n.d2-tier:hover { border-color:var(--primary); transform:translateY(-1px); box-shadow:0 4px 16px rgba(229,62,62,.08); }\n.d2-tier.featured { border-color:var(--primary); }\n.d2-tier-badge {\n  position:absolute; top:-10px; left:16px;\n  background:var(--primary); color:#fff;\n  font-size:10px; font-weight:700; padding:2px 10px; border-radius:10px;\n}\n.d2-tier-name { font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.8px; color:var(--muted); margin-bottom:8px; }\n.d2-tier-price { font-size:24px; font-weight:800; color:var(--navy); margin-bottom:2px; }\n.d2-tier-price sub { font-size:12px; font-weight:400; color:var(--muted); vertical-align:baseline; }\n.d2-tier-req { font-size:11px; color:var(--muted); margin-bottom:10px; padding-bottom:10px; border-bottom:1px solid var(--border); }\n.d2-tier-features { list-style:none; }\n.d2-tier-features li { font-size:12px; color:var(--slate); padding:2px 0; display:flex; align-items:flex-start; gap:5px; }\n.d2-tier-features li::before { content:'\u2713'; color:var(--green); font-weight:700; flex-shrink:0; }\n\n\/* \u2500\u2500 Auth \u2500\u2500 *\/\n.d2-auth-box {\n  background:var(--navy); border-radius:12px; overflow:hidden;\n}\n.d2-code-header {\n  display:flex; justify-content:space-between; align-items:center;\n  padding:10px 16px; background:rgba(255,255,255,.05); border-bottom:1px solid rgba(255,255,255,.08);\n}\n.d2-code-lang { font-family:var(--mono); font-size:11px; color:#64748b; }\n.d2-code-copy { font-family:var(--mono); font-size:11px; color:#4ade80; background:none; border:none; cursor:pointer; }\n.d2-code-copy:hover { color:#fff; }\npre.d2-pre {\n  padding:16px 18px; font-family:var(--mono); font-size:12px;\n  color:#cbd5e1; overflow-x:auto; line-height:1.7;\n}\n.d2-pre .cm  { color:#475569; }\n.d2-pre .kw  { color:#f87171; }\n.d2-pre .str { color:#4ade80; }\n.d2-pre .hk  { color:#7dd3fc; }\n.d2-pre .hv  { color:#86efac; }\n.d2-pre .num { color:#fbbf24; }\n\n\/* \u2500\u2500 Endpoints \u2500\u2500 *\/\n.d2-endpoint {\n  border:1.5px solid var(--border); border-radius:12px;\n  margin-bottom:10px; background:var(--white); overflow:hidden;\n  transition:border-color .2s;\n}\n.d2-endpoint:hover { border-color:#cbd5e0; }\n.d2-endpoint-header {\n  display:flex; align-items:center; gap:12px;\n  padding:14px 18px; cursor:pointer; user-select:none;\n}\n.d2-endpoint-header:hover { background:#fafafa; }\n.d2-method {\n  font-family:var(--mono); font-size:11px; font-weight:700;\n  padding:3px 9px; border-radius:6px; min-width:44px; text-align:center; flex-shrink:0;\n}\n.d2-get  { background:#dbeafe; color:#1d4ed8; }\n.d2-post { background:#dcfce7; color:#15803d; }\n.d2-path {\n  font-family:var(--mono); font-size:13px; font-weight:600;\n  color:var(--navy); flex:1;\n}\n.d2-edesc { font-size:12px; color:var(--muted); }\n.d2-pro-tag {\n  background:#fef9c3; color:#854d0e; font-size:10px;\n  font-weight:700; padding:2px 8px; border-radius:6px;\n}\n.d2-exclusive-tag {\n  background:linear-gradient(135deg,#e53e3e,#c53030); color:#fff;\n  font-size:10px; font-weight:700; padding:2px 8px; border-radius:6px;\n}\n.d2-chevron { color:#cbd5e1; font-size:14px; transition:transform .2s; flex-shrink:0; }\n.d2-chevron.open { transform:rotate(180deg); }\n.d2-endpoint-body {\n  display:none; border-top:1.5px solid var(--border);\n  padding:18px;\n}\n.d2-endpoint-body.open { display:block; }\n\n\/* \u2500\u2500 Params \u2500\u2500 *\/\n.d2-params { width:100%; border-collapse:collapse; margin-bottom:14px; font-size:12px; }\n.d2-params th {\n  padding:7px 12px; text-align:left; background:var(--bg);\n  color:var(--muted); font-size:10px; font-weight:700;\n  text-transform:uppercase; letter-spacing:.5px; border-bottom:2px solid var(--border);\n}\n.d2-params td { padding:8px 12px; border-bottom:1px solid var(--border); vertical-align:top; }\n.d2-params tr:last-child td { border-bottom:none; }\n.d2-pname { font-family:var(--mono); font-weight:600; color:var(--navy); font-size:12px; }\n.d2-ptype { font-family:var(--mono); color:#7c3aed; font-size:11px; }\n.d2-preq  { color:var(--primary); font-weight:700; font-size:11px; }\n.d2-popt  { color:var(--muted); font-size:11px; }\n\n\/* \u2500\u2500 Status Codes \u2500\u2500 *\/\n.d2-status { width:100%; border-collapse:collapse; font-size:12px; background:var(--white); border:1.5px solid var(--border); border-radius:12px; overflow:hidden; }\n.d2-status th {\n  padding:8px 14px; text-align:left; background:var(--bg);\n  color:var(--muted); font-size:10px; font-weight:700;\n  text-transform:uppercase; letter-spacing:.5px; border-bottom:2px solid var(--border);\n}\n.d2-status td { padding:8px 14px; border-bottom:1px solid var(--border); vertical-align:top; }\n.d2-status tr:last-child td { border-bottom:none; }\n.d2-status-code { font-family:var(--mono); font-weight:700; color:var(--navy); text-align:center; width:48px; }\n.d2-note {\n  display:flex; align-items:flex-start; gap:10px;\n  background:#fffbeb; border:1.5px solid #fde68a;\n  border-radius:10px; padding:14px 16px; margin-top:14px;\n  font-size:13px; color:#78350f; line-height:1.55;\n}\n.d2-note::before { content:'\\26a0'; font-size:15px; flex-shrink:0; }\n\n\/* \u2500\u2500 HTTP Codes \u2500\u2500 *\/\n.d2-http-grid { display:flex; flex-wrap:wrap; gap:8px; }\n.d2-http-item {\n  display:flex; align-items:center; gap:8px;\n  padding:8px 14px; border:1.5px solid var(--border);\n  border-radius:8px; font-size:12px; background:var(--white);\n}\n.d2-http-code { font-family:var(--mono); font-weight:700; font-size:14px; }\n.d2-http-200 .d2-http-code { color:var(--green); }\n.d2-http-400 .d2-http-code { color:var(--amber); }\n.d2-http-401 .d2-http-code { color:var(--primary); }\n.d2-http-404 .d2-http-code { color:var(--primary); }\n.d2-http-429 .d2-http-code { color:var(--amber); }\n.d2-http-500 .d2-http-code { color:var(--primary); }\n\n\/* \u2500\u2500 CTA \u2500\u2500 *\/\n.d2-cta {\n  background:var(--navy); border-radius:16px;\n  padding:36px 40px; margin-top:28px;\n  display:flex; align-items:center; justify-content:space-between;\n  flex-wrap:wrap; gap:20px;\n}\n.d2-cta h3 { font-size:20px; font-weight:700; color:#fff; margin-bottom:4px; }\n.d2-cta p  { color:#64748b; font-size:13px; }\n.d2-cta-btn {\n  display:inline-block; background:var(--primary); color:#fff;\n  padding:12px 28px; border-radius:10px; font-weight:700;\n  font-size:14px; text-decoration:none; white-space:nowrap;\n  transition:background .2s;\n}\n.d2-cta-btn:hover { background:var(--primary-d); }\n\n\/* Divider *\/\n.d2-divider { height:1px; background:var(--border); margin:24px 0; }\n.d2-tier-btn {\n  display:block; width:100%; padding:10px 14px; border-radius:8px;\n  font-family:var(--sans); font-size:13px; font-weight:600; text-align:center;\n  margin-top:14px; cursor:pointer; text-decoration:none; transition:all .2s;\n  border:2px solid transparent;\n}\n.d2-tier-btn-primary { background:var(--primary); color:#fff; border-color:var(--primary); }\n.d2-tier-btn-primary:hover { background:var(--primary-d); border-color:var(--primary-d); }\n.d2-tier-btn-secondary { background:#0f172a; color:#fff; border-color:#0f172a; }\n.d2-tier-btn-secondary:hover { background:#1e293b; border-color:#1e293b; }\n.d2-tier-btn-outline { background:#fff; color:var(--slate); border-color:var(--border); }\n.d2-tier-btn-outline:hover { border-color:#94a3b8; color:var(--navy); }\n.d2-tier-btn:disabled { opacity:.4; cursor:not-allowed; }\n.d2-tos-wrap {\n  display:flex; align-items:flex-start; gap:10px;\n  background:#f8fafc; border:1.5px solid var(--border);\n  border-radius:10px; padding:14px 16px; margin-bottom:16px;\n  font-size:13px; color:var(--muted); line-height:1.5;\n}\n.d2-tos-wrap input[type=checkbox] { width:16px; height:16px; margin-top:2px; flex-shrink:0; accent-color:var(--primary); cursor:pointer; }\n.d2-tos-warn { font-size:12px; color:var(--primary); margin-top:-10px; margin-bottom:14px; display:none; }\n\n@media (max-width:768px) {\n  .d2-hero { padding:28px 20px; }\n  .d2-hero h1 { font-size:26px; }\n  .d2-hero::after { display:none; }\n  .d2-cta { flex-direction:column; padding:24px 20px; }\n}\n<\/style>\n\n<div id=\"apidoc2\">\n\n  <!-- Hero -->\n  <div class=\"d2-hero\">\n    <div class=\"d2-hero-content\">\n      <div class=\"d2-hero-eyebrow\">API v1 \u00b7 public<\/div>\n      <h1>drugshortage.ch <span>API<\/span><\/h1>\n      <p>Acc\u00e8s direct et structur\u00e9 \u00e0 toutes les p\u00e9nuries de m\u00e9dicaments en Suisse. Donn\u00e9es r\u00e9elles, mises \u00e0 jour quotidiennement, bilingue DE\/FR. Pas de scraping \u2013 API REST propre avec rate limiting.<\/p>\n      <div class=\"d2-base-url\">\n        <span class=\"d2-base-url-label\">BASE URL<\/span>\n        <span class=\"d2-base-url-path\">drugshortage.ch\/api\/v1\/drugshortage.php?<span>endpoint=<\/span><\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Tiers -->\n  <div class=\"d2-section\">\n    <div class=\"d2-section-head\">\n      <div class=\"d2-section-icon\">&#x1f4b0;<\/div>\n      <span class=\"d2-section-title\">Acc\u00e8s &amp; Tarifs<\/span>\n    <\/div>\n    <div class=\"d2-tos-wrap\">\n      <input type=\"checkbox\" id=\"d2-tos\" onchange=\"d2toggleTos(this)\">\n      <label for=\"d2-tos\">J&#8217;ai lu les <a href=\"https:\/\/www.drugshortage.ch\/index.php\/conditions-utilisation\/\" target=\"_blank\" style=\"color:var(--primary);\">conditions d&#8217;utilisation<\/a> et je les accepte.<\/label>\n    <\/div>\n    <div class=\"d2-tos-warn\" id=\"d2-tos-warn\">&#x26a0;&#xfe0f; Veuillez accepter les conditions d&#8217;utilisation.<\/div>\n    <div class=\"d2-tiers\">\n      <div class=\"d2-tier\">\n        <div class=\"d2-tier-name\">Free<\/div>\n        <div class=\"d2-tier-price\">CHF 0<\/div>\n        <div class=\"d2-tier-req\">100 req\/jour \u00b7 sans cl\u00e9<\/div>\n        <ul class=\"d2-tier-features\">\n          <li>Tous les endpoints de base<\/li>\n          <li>JSON \u00b7 pagination<\/li>\n        <\/ul>\n        <a href=\"https:\/\/www.drugshortage.ch\/index.php\/kontakt\/\" class=\"d2-tier-btn d2-tier-btn-outline\">Essayer l&#8217;API \u2192<\/a>\n      <\/div>\n      <div class=\"d2-tier featured\">\n        <div class=\"d2-tier-badge\">Recommand\u00e9<\/div>\n        <div class=\"d2-tier-name\">Basic<\/div>\n        <div class=\"d2-tier-price\">CHF 29<sub>\/mois<\/sub><\/div>\n        <div class=\"d2-tier-req\">5&#8217;000 req\/jour \u00b7 cl\u00e9 API<\/div>\n        <ul class=\"d2-tier-features\">\n          <li>Tous les endpoints<\/li>\n          <li>Recherche &amp; filtres<\/li>\n          <li>Support e-mail<\/li>\n        <\/ul>\n        <button class=\"d2-tier-btn d2-tier-btn-primary\" disabled=\"\" onclick=\"d2kaufe('basic','price_1TeVGCKZkvHmj4lAxvQc8pqe',29,this)\">S&#8217;abonner \u00e0 Basic \u2013 CHF 29\/mois<\/button>\n      <\/div>\n      <div class=\"d2-tier\">\n        <div class=\"d2-tier-name\">Pro<\/div>\n        <div class=\"d2-tier-price\">CHF 79<sub>\/mois<\/sub><\/div>\n        <div class=\"d2-tier-req\">50&#8217;000 req\/jour \u00b7 cl\u00e9 API<\/div>\n        <ul class=\"d2-tier-features\">\n          <li>Tout de Basic<\/li>\n          <li>Fran\u00e7ais (lang=fr)<\/li>\n          <li>Export CSV<\/li>\n          <li>Webhooks<\/li>\n        <\/ul>\n        <button class=\"d2-tier-btn d2-tier-btn-secondary\" disabled=\"\" onclick=\"d2kaufe('pro','price_1TeVGgKZkvHmj4lAXC2JJHTj',79,this)\">S&#8217;abonner \u00e0 Pro \u2013 CHF 79\/mois<\/button>\n      <\/div>\n      <div class=\"d2-tier\">\n        <div class=\"d2-tier-name\">Enterprise<\/div>\n        <div class=\"d2-tier-price\">Sur demande<\/div>\n        <div class=\"d2-tier-req\">Illimit\u00e9 \u00b7 d\u00e9di\u00e9<\/div>\n        <ul class=\"d2-tier-features\">\n          <li>Tout de Pro<\/li>\n          <li>SLA \u00b7 White-Label<\/li>\n          <li>Support direct<\/li>\n        <\/ul>\n        <a href=\"https:\/\/www.drugshortage.ch\/index.php\/kontakt\/\" class=\"d2-tier-btn d2-tier-btn-outline\">Demander \u2192<\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"d2-divider\"><\/div>\n\n  <!-- Authentification -->\n  <div class=\"d2-section\">\n    <div class=\"d2-section-head\">\n      <div class=\"d2-section-icon\">&#x1f511;<\/div>\n      <span class=\"d2-section-title\">Authentification<\/span>\n    <\/div>\n    <div class=\"d2-auth-box\">\n      <div class=\"d2-code-header\">\n        <span class=\"d2-code-lang\">bash<\/span>\n        <button class=\"d2-code-copy\" onclick=\"d2kopiere(this)\">copier<\/button>\n      <\/div>\n      <pre class=\"d2-pre\"><span class=\"cm\"># Avec cl\u00e9 API (Bearer Token)<\/span>\ncurl -H <span class=\"str\">\"Authorization: Bearer VOTRE_CLE_API\"<\/span>   <span class=\"str\">\"https:\/\/www.drugshortage.ch\/api\/v1\/drugshortage.php?endpoint=shortages\"<\/span>\n\n<span class=\"cm\"># Alternativement en param\u00e8tre<\/span>\ncurl <span class=\"str\">\"https:\/\/www.drugshortage.ch\/api\/v1\/drugshortage.php?endpoint=shortages&amp;api_key=VOTRE_CLE\"<\/span>\n\n<span class=\"cm\"># En-t\u00eates de r\u00e9ponse<\/span>\n<span class=\"hk\">X-RateLimit-Limit:<\/span>     <span class=\"hv\">5000<\/span>\n<span class=\"hk\">X-RateLimit-Remaining:<\/span> <span class=\"hv\">4847<\/span>\n<span class=\"hk\">X-Api-Tier:<\/span>           <span class=\"hv\">basic<\/span><\/pre>\n    <\/div>\n  <\/div>\n\n  <div class=\"d2-divider\"><\/div>\n\n  <!-- Endpoints -->\n  <div class=\"d2-section\">\n    <div class=\"d2-section-head\">\n      <div class=\"d2-section-icon\">&#x26a1;<\/div>\n      <span class=\"d2-section-title\">Endpoints<\/span>\n    <\/div>\n\n    <!-- shortages -->\n    <div class=\"d2-endpoint\">\n      <div class=\"d2-endpoint-header\" onclick=\"d2toggle(this)\">\n        <span class=\"d2-method d2-get\">GET<\/span>\n        <span class=\"d2-path\">shortages<\/span>\n        <span class=\"d2-edesc\">Liste pagin\u00e9e de toutes les p\u00e9nuries<\/span>\n        <span class=\"d2-chevron\">\u25be<\/span>\n      <\/div>\n      <div class=\"d2-endpoint-body\">\n        <table class=\"d2-params\">\n          <thead><tr><th>Param\u00e8tre<\/th><th>Type<\/th><th>Requis<\/th><th>Description<\/th><th>Exemple<\/th><\/tr><\/thead>\n          <tbody>\n            <tr><td class=\"d2-pname\">search<\/td><td class=\"d2-ptype\">string<\/td><td class=\"d2-popt\">\u2013<\/td><td>Recherche plein texte<\/td><td>amoxicillin<\/td><\/tr>\n            <tr><td class=\"d2-pname\">firma<\/td><td class=\"d2-ptype\">string<\/td><td class=\"d2-popt\">\u2013<\/td><td>Nom exact de l&#8217;entreprise<\/td><td>Sandoz Pharmaceuticals AG<\/td><\/tr>\n            <tr><td class=\"d2-pname\">atc<\/td><td class=\"d2-ptype\">string<\/td><td class=\"d2-popt\">\u2013<\/td><td>Pr\u00e9fixe code ATC<\/td><td>C09<\/td><\/tr>\n            <tr><td class=\"d2-pname\">status<\/td><td class=\"d2-ptype\">string<\/td><td class=\"d2-popt\">\u2013<\/td><td>Codes statut 1\u201311, s\u00e9par\u00e9s par virgule. <strong>Sans param\u00e8tre, l&#8217;ensemble des donn\u00e9es est retourn\u00e9<\/strong> \u2013 y compris les entr\u00e9es termin\u00e9es (9), plus en vente (7) et hors commerce (8 ou <code>Trade = AH<\/code>). Avec le param\u00e8tre, le filtrage porte exactement sur ces codes (<code>status=8<\/code> inclut aussi <code>Trade = AH<\/code>). Pour chaque entr\u00e9e, les champs <code>isActive<\/code> et <code>isAusserHandel<\/code> indiquent l&#8217;\u00e9tat r\u00e9el.<\/td><td>1,2<\/td><\/tr>\n            <tr><td class=\"d2-pname\">mutatedSince<\/td><td class=\"d2-ptype\">string<\/td><td class=\"d2-popt\">\u2013<\/td><td>Uniquement les entr\u00e9es dont la derni\u00e8re mutation est &gt;= \u00e0 la date (format ISO YYYY-MM-DD). Id\u00e9al pour les synchronisations incr\u00e9mentales.<\/td><td>2026-05-01<\/td><\/tr>\n            <tr><td class=\"d2-pname\">reportedSince<\/td><td class=\"d2-ptype\">string<\/td><td class=\"d2-popt\">\u2013<\/td><td>Uniquement les entr\u00e9es dont la premi\u00e8re annonce est &gt;= \u00e0 la date (format ISO YYYY-MM-DD). Pour suivre les nouvelles entr\u00e9es.<\/td><td>2026-05-01<\/td><\/tr>\n            <tr><td class=\"d2-pname\">page<\/td><td class=\"d2-ptype\">integer<\/td><td class=\"d2-popt\">\u2013<\/td><td>Num\u00e9ro de page (d\u00e9faut: 1)<\/td><td>2<\/td><\/tr>\n            <tr><td class=\"d2-pname\">perPage<\/td><td class=\"d2-ptype\">integer<\/td><td class=\"d2-popt\">\u2013<\/td><td>Entr\u00e9es par page (d\u00e9faut: 200, max: 200)<\/td><td>200<\/td><\/tr>\n            <tr><td class=\"d2-pname\">sort<\/td><td class=\"d2-ptype\">string<\/td><td class=\"d2-popt\">\u2013<\/td><td>champ:asc ou champ:desc. Champs autoris\u00e9s : bezeichnung, firma, atc, tage, lieferdatum, datumLetzteMutation<\/td><td>datumLetzteMutation:desc<\/td><\/tr>\n            <tr><td class=\"d2-pname\">lang<\/td><td class=\"d2-ptype\">string<\/td><td class=\"d2-popt\">Pro<\/td><td>Langue (de\/fr)<\/td><td>fr<\/td><\/tr>\n          <\/tbody>\n        <\/table>\n        <div class=\"d2-auth-box\">\n          <div class=\"d2-code-header\"><span class=\"d2-code-lang\">bash<\/span><\/div>\n          <pre class=\"d2-pre\">curl <span class=\"str\">\"...?endpoint=shortages&amp;atc=C09&amp;perPage=3\"<\/span>\n\n<span class=\"cm\">{\n  \"data\": [{\n    \"id\": 4821, \"gtin\": \"7680654320016\",\n    \"bezeichnung\": \"Olmesartan Mepha Lactab 20 mg\",\n    \"firma\": \"Mepha Pharma AG\", \"atcCode\": \"C09CA08\",\n    \"statusCode\": 1, \"statusText\": \"1 actuellement pas de livraisons\",\n    \"isActive\": true, \"isAusserHandel\": false, \"trade\": null,\n    \"lieferfaehigkeitDate\": \"15.07.2026\",\n    \"ersteMeldungDate\": \"20.04.2026\",\n    \"ersteInfoFirmaDate\": \"20.04.2026\",\n    \"dauer\": \"langer Engpass (&gt; 6 Wochen)\",\n    \"datumLetzteMutation\": \"05.05.2026\",\n    \"datumLetzteMutation2\": \"2026-05-05T00:00:00+02:00\",\n    \"isBwl\": true, \"bewertung\": 1\n  }],\n  \"total\": 1180, \"page\": 1, \"perPage\": 3, \"pages\": 394\n}<\/span><\/pre>\n        <\/div>\n        <div class=\"d2-note\">Le rapport de base (sans <code>status=<\/code>) contient d\u00e9sormais <strong>toutes<\/strong> les annonces. Pour n&#8217;obtenir que les p\u00e9nuries en cours, filtrez c\u00f4t\u00e9 client sur <code>isActive: true<\/code> ou demandez explicitement les codes de statut actifs (p. ex. <code>status=1,2,3,4,5,6,10,11<\/code>). Le champ <code>datumLetzteMutation2<\/code> fournit la date de mutation au format ISO-8601 avec d\u00e9calage horaire (DateTimeOffset) ; <code>datumLetzteMutation<\/code> reste au format texte habituel.<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- shortages\/:gtin -->\n    <div class=\"d2-endpoint\">\n      <div class=\"d2-endpoint-header\" onclick=\"d2toggle(this)\">\n        <span class=\"d2-method d2-get\">GET<\/span>\n        <span class=\"d2-path\">shortages\/{gtin}<\/span>\n        <span class=\"d2-edesc\">Toutes les annonces pour un GTIN<\/span>\n        <span class=\"d2-chevron\">\u25be<\/span>\n      <\/div>\n      <div class=\"d2-endpoint-body\">\n        <div class=\"d2-auth-box\">\n          <div class=\"d2-code-header\"><span class=\"d2-code-lang\">bash<\/span><\/div>\n          <pre class=\"d2-pre\">curl <span class=\"str\">\"...?endpoint=shortages\/7680654320016\"<\/span>\n\n<span class=\"cm\">{ \"data\": [ { ... }, { ... } ], \"count\": 2, \"meta\": { ... } }<\/span><\/pre>\n        <\/div>\n        <div class=\"d2-note\">Un GTIN peut avoir plusieurs annonces (avec des statuts diff\u00e9rents). <code>data<\/code> est donc un <strong>tableau<\/strong> de toutes les annonces du GTIN, tri\u00e9 par derni\u00e8re mutation (la plus r\u00e9cente d&#8217;abord), et <code>count<\/code> en indique le nombre. Toutes les annonces sont retourn\u00e9es, y compris termin\u00e9es\/hors commerce.<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- stats -->\n    <div class=\"d2-endpoint\">\n      <div class=\"d2-endpoint-header\" onclick=\"d2toggle(this)\">\n        <span class=\"d2-method d2-get\">GET<\/span>\n        <span class=\"d2-path\">stats<\/span>\n        <span class=\"d2-edesc\">Indicateurs agr\u00e9g\u00e9s de la situation<\/span>\n        <span class=\"d2-chevron\">\u25be<\/span>\n      <\/div>\n      <div class=\"d2-endpoint-body\">\n        <p style=\"font-size:13px;color:var(--muted);margin-bottom:12px;\">Porte volontairement uniquement sur les p\u00e9nuries <strong>actives<\/strong> (les entr\u00e9es termin\u00e9es\/plus en vente\/hors commerce sont exclues), afin que les indicateurs refl\u00e8tent la situation actuelle.<\/p>\n        <div class=\"d2-auth-box\">\n          <div class=\"d2-code-header\"><span class=\"d2-code-lang\">bash<\/span><\/div>\n          <pre class=\"d2-pre\">curl <span class=\"str\">\"...?endpoint=stats\"<\/span>\n\n<span class=\"cm\">{ \"data\": { \"active\": 719, \"uniqueAtcGroups\": 294,\n  \"avgDaysSinceMeldung\": 178.8, \"regulatory\": { \"bwl\": 133, \"who\": 214 },\n  \"topAtcGroups\": [{ \"atc\": \"N05\", \"count\": 63 }, ...] } }<\/span><\/pre>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- timeline -->\n    <div class=\"d2-endpoint\">\n      <div class=\"d2-endpoint-header\" onclick=\"d2toggle(this)\">\n        <span class=\"d2-method d2-get\">GET<\/span>\n        <span class=\"d2-path\">timeline<\/span>\n        <span class=\"d2-edesc\">S\u00e9rie temporelle hebdomadaire<\/span>\n        <span class=\"d2-chevron\">\u25be<\/span>\n      <\/div>\n      <div class=\"d2-endpoint-body\">\n        <table class=\"d2-params\">\n          <thead><tr><th>Param\u00e8tre<\/th><th>Type<\/th><th>Requis<\/th><th>Description<\/th><\/tr><\/thead>\n          <tbody>\n            <tr><td class=\"d2-pname\">weeks<\/td><td class=\"d2-ptype\">integer<\/td><td class=\"d2-popt\">\u2013<\/td><td>Semaines en arri\u00e8re (4\u2013260, d\u00e9faut: 52)<\/td><\/tr>\n          <\/tbody>\n        <\/table>\n      <\/div>\n    <\/div>\n\n    <!-- supply -->\n    <div class=\"d2-endpoint\">\n      <div class=\"d2-endpoint-header\" onclick=\"d2toggle(this)\">\n        <span class=\"d2-method d2-get\">GET<\/span>\n        <span class=\"d2-path\">supply<\/span>\n        <span class=\"d2-edesc\">P\u00e9nuries d&#8217;approvisionnement par principe actif<\/span>\n        <span class=\"d2-exclusive-tag\">exclusif drugshortage.ch<\/span>\n        <span class=\"d2-chevron\">\u25be<\/span>\n      <\/div>\n      <div class=\"d2-endpoint-body\">\n        <p style=\"font-size:13px;color:var(--muted);margin-bottom:12px;\">Principes actifs\/dosages dont 50\u2013100% des pr\u00e9parations ne sont pas livrables. Endpoint exclusif \u00e0 drugshortage.ch.<\/p>\n        <div class=\"d2-auth-box\">\n          <div class=\"d2-code-header\"><span class=\"d2-code-lang\">bash<\/span><\/div>\n          <pre class=\"d2-pre\">curl <span class=\"str\">\"...?endpoint=supply\"<\/span><\/pre>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- alternatives -->\n    <div class=\"d2-endpoint\">\n      <div class=\"d2-endpoint-header\" onclick=\"d2toggle(this)\">\n        <span class=\"d2-method d2-get\">GET<\/span>\n        <span class=\"d2-path\">alternatives?gtin=<\/span>\n        <span class=\"d2-edesc\">Alternatives disponibles pour un produit<\/span>\n        <span class=\"d2-chevron\">\u25be<\/span>\n      <\/div>\n      <div class=\"d2-endpoint-body\">\n        <p style=\"font-size:13px;color:var(--muted);margin-bottom:12px;\">Affiche uniquement les alternatives <strong>r\u00e9ellement disponibles<\/strong>. Sont exclues les pr\u00e9parations elles-m\u00eames en p\u00e9nurie, d\u00e9senregistr\u00e9es\/plus en vente, hors commerce (<code>Trade = AH<\/code>) ainsi que les produits hospitaliers\/d&#8217;importation. Avec <code>lang=fr<\/code>, les d\u00e9signations fran\u00e7aises (NomF) sont retourn\u00e9es.<\/p>\n        <div class=\"d2-auth-box\">\n          <div class=\"d2-code-header\"><span class=\"d2-code-lang\">bash<\/span><\/div>\n          <pre class=\"d2-pre\">curl <span class=\"str\">\"...?endpoint=alternatives&amp;gtin=7680654320016\"<\/span>\n\n<span class=\"cm\">{ \"gtin\": \"7680654320016\",\n  \"gleicheFirma\": [], \"coMarketing\": [...], \"alleAlternativen\": [...] }<\/span><\/pre>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- company -->\n    <div class=\"d2-endpoint\">\n      <div class=\"d2-endpoint-header\" onclick=\"d2toggle(this)\">\n        <span class=\"d2-method d2-get\">GET<\/span>\n        <span class=\"d2-path\">company\/{firma}<\/span>\n        <span class=\"d2-edesc\">Profil entreprise avec \u00e9valuation<\/span>\n        <span class=\"d2-chevron\">\u25be<\/span>\n      <\/div>\n      <div class=\"d2-endpoint-body\">\n        <div class=\"d2-auth-box\">\n          <div class=\"d2-code-header\"><span class=\"d2-code-lang\">bash<\/span><\/div>\n          <pre class=\"d2-pre\">curl <span class=\"str\">\"...?endpoint=company\/Sandoz%20Pharmaceuticals%20AG\"<\/span><\/pre>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- export\/csv -->\n    <div class=\"d2-endpoint\">\n      <div class=\"d2-endpoint-header\" onclick=\"d2toggle(this)\">\n        <span class=\"d2-method d2-get\">GET<\/span>\n        <span class=\"d2-path\">export\/csv<\/span>\n        <span class=\"d2-edesc\">Export CSV filtr\u00e9 (p\u00e9nuries actives)<\/span>\n        <span class=\"d2-pro-tag\">Pro+<\/span>\n        <span class=\"d2-chevron\">\u25be<\/span>\n      <\/div>\n      <div class=\"d2-endpoint-body\">\n        <p style=\"font-size:13px;color:var(--muted);margin-bottom:12px;\">L&#8217;export CSV fournit la vue active (sans les entr\u00e9es termin\u00e9es\/hors commerce). Pour l&#8217;ensemble complet des donn\u00e9es, utilisez l&#8217;endpoint <code>shortages<\/code>.<\/p>\n        <div class=\"d2-auth-box\">\n          <div class=\"d2-code-header\"><span class=\"d2-code-lang\">python<\/span><\/div>\n          <pre class=\"d2-pre\"><span class=\"kw\">import<\/span> pandas <span class=\"kw\">as<\/span> pd\ndf = pd.read_csv(<span class=\"str\">\"...?endpoint=export\/csv&amp;atc=N06\"<\/span>, encoding=<span class=\"str\">\"utf-8-sig\"<\/span>)<\/pre>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- health -->\n    <div class=\"d2-endpoint\">\n      <div class=\"d2-endpoint-header\" onclick=\"d2toggle(this)\">\n        <span class=\"d2-method d2-get\">GET<\/span>\n        <span class=\"d2-path\">health<\/span>\n        <span class=\"d2-edesc\">V\u00e9rification de l&#8217;\u00e9tat du syst\u00e8me<\/span>\n        <span class=\"d2-chevron\">\u25be<\/span>\n      <\/div>\n      <div class=\"d2-endpoint-body\">\n        <div class=\"d2-auth-box\">\n          <div class=\"d2-code-header\"><span class=\"d2-code-lang\">json<\/span><\/div>\n          <pre class=\"d2-pre\"><span class=\"cm\">{ \"status\": \"healthy\", \"database\": { \"healthy\": true, \"latencyMs\": 1.1 } }<\/span><\/pre>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"d2-divider\"><\/div>\n\n  <!-- Status Codes -->\n  <div class=\"d2-section\">\n    <div class=\"d2-section-head\">\n      <div class=\"d2-section-icon\">&#x1f3f7;&#xfe0f;<\/div>\n      <span class=\"d2-section-title\">Codes de statut<\/span>\n    <\/div>\n    <table class=\"d2-status\">\n      <thead><tr><th class=\"d2-status-code\">Code<\/th><th>Signification<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"d2-status-code\">1<\/td><td>actuellement pas de livraisons<\/td><\/tr>\n        <tr><td class=\"d2-status-code\">2<\/td><td>p\u00e9nurie annonc\u00e9e<\/td><\/tr>\n        <tr><td class=\"d2-status-code\">3<\/td><td>quota de livraisons<\/td><\/tr>\n        <tr><td class=\"d2-status-code\">4<\/td><td>livrable pour h\u00f4pitaux, pas pour retail<\/td><\/tr>\n        <tr><td class=\"d2-status-code\">5<\/td><td>livrable pour h\u00f4pitaux, quota pour retail<\/td><\/tr>\n        <tr><td class=\"d2-status-code\">6<\/td><td>quota pour h\u00f4pitaux, pas de livraisons en retail<\/td><\/tr>\n        <tr><td class=\"d2-status-code\">7<\/td><td>enregistr\u00e9 mais plus en vente<\/td><\/tr>\n        <tr><td class=\"d2-status-code\">8<\/td><td>hors commerce (\u00e9galement signal\u00e9 via <code>Trade = AH<\/code>)<\/td><\/tr>\n        <tr><td class=\"d2-status-code\">9<\/td><td>p\u00e9nurie termin\u00e9e<\/td><\/tr>\n        <tr><td class=\"d2-status-code\">10<\/td><td>approvisionnement par la r\u00e9serve obligatoire<\/td><\/tr>\n        <tr><td class=\"d2-status-code\">11<\/td><td>grossiste limit\u00e9, achat direct aupr\u00e8s de l&#8217;entreprise<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n    <div class=\"d2-note\">Le rapport de base <code>shortages<\/code> retourne par d\u00e9faut <strong>tous<\/strong> les statuts. Pour n&#8217;en obtenir qu&#8217;une partie, filtrez avec <code>status=<\/code> : p\u00e9nuries termin\u00e9es avec <code>status=9<\/code>, produits plus en vente avec <code>status=7<\/code>, hors commerce avec <code>status=8<\/code> (retourne aussi bien le statut 8 que <code>Trade = AH<\/code>, le marquage permanent ; le statut 8 n&#8217;est qu&#8217;une solution transitoire). L&#8217;\u00e9tat d&#8217;une entr\u00e9e individuelle se lit de mani\u00e8re fiable dans les champs <code>statusCode<\/code>, <code>isActive<\/code> et <code>isAusserHandel<\/code>.<\/div>\n  <\/div>\n\n  <div class=\"d2-divider\"><\/div>\n\n  <!-- HTTP Codes -->\n  <div class=\"d2-section\">\n    <div class=\"d2-section-head\">\n      <div class=\"d2-section-icon\">&#x1f4e1;<\/div>\n      <span class=\"d2-section-title\">Codes de statut HTTP<\/span>\n    <\/div>\n    <div class=\"d2-http-grid\">\n      <div class=\"d2-http-item d2-http-200\"><span class=\"d2-http-code\">200<\/span> Succ\u00e8s<\/div>\n      <div class=\"d2-http-item d2-http-400\"><span class=\"d2-http-code\">400<\/span> Param\u00e8tres invalides<\/div>\n      <div class=\"d2-http-item d2-http-401\"><span class=\"d2-http-code\">401<\/span> Cl\u00e9 API invalide<\/div>\n      <div class=\"d2-http-item d2-http-404\"><span class=\"d2-http-code\">404<\/span> Non trouv\u00e9<\/div>\n      <div class=\"d2-http-item d2-http-429\"><span class=\"d2-http-code\">429<\/span> Limite d\u00e9pass\u00e9e<\/div>\n      <div class=\"d2-http-item d2-http-500\"><span class=\"d2-http-code\">500<\/span> Erreur serveur<\/div>\n    <\/div>\n  <\/div>\n\n  <!-- CTA -->\n  <div class=\"d2-cta\">\n    <div>\n      <h3>Des questions sur l&#8217;API?<\/h3>\n      <p>Nous vous aidons volontiers pour l&#8217;int\u00e9gration.<\/p>\n    <\/div>\n    <a href=\"https:\/\/www.drugshortage.ch\/index.php\/kontakt\/\" class=\"d2-cta-btn\">Nous contacter \u2192<\/a>\n  <\/div>\n\n<\/div>\n\n<script>\nfunction d2toggleTos(cb) {\n  const btns = document.querySelectorAll('.d2-tier-btn-primary, .d2-tier-btn-secondary');\n  btns.forEach(b => b.disabled = !cb.checked);\n  document.getElementById('d2-tos-warn').style.display = 'none';\n}\n\nasync function d2kaufe(tier, priceId, price, btn) {\n  if (!document.getElementById('d2-tos').checked) {\n    document.getElementById('d2-tos-warn').style.display = 'block';\n    return;\n  }\n  btn.disabled = true;\n  btn.textContent = '&#x23f3; Redirection\u2026';\n  try {\n    const res = await fetch(\"https:\/\/www.drugshortage.ch\/ds.php?a=checkout\" + String.fromCharCode(38) + \"action=create\", {\n      method:\"POST\", headers:{\"Content-Type\":\"application\/json\",\"X-Requested-With\":\"XMLHttpRequest\"},\n      body: JSON.stringify({priceId, tier, lang: 'fr'})\n    });\n    const d = await res.json();\n    if (d.url) { window.location.href = d.url; }\n    else { alert(d.error || 'Erreur'); btn.disabled=false; btn.textContent = 'S\\'abonner \u00e0 '+tier.charAt(0).toUpperCase()+tier.slice(1)+' \u2013 CHF '+price+'\/mois'; }\n  } catch(e) { alert('Erreur: '+e); btn.disabled=false; }\n}\n\nfunction d2toggle(header) {\n  const body    = header.nextElementSibling;\n  const chevron = header.querySelector('.d2-chevron');\n  body.classList.toggle('open');\n  chevron.classList.toggle('open');\n}\nfunction d2kopiere(btn) {\n  const pre = btn.closest('.d2-auth-box').querySelector('pre');\n  navigator.clipboard.writeText(pre.textContent).then(() => {\n    btn.textContent = '\u2713 copi\u00e9';\n    setTimeout(() => btn.textContent = 'copier', 2000);\n  });\n}\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>API v1 \u00b7 public drugshortage.ch API Acc\u00e8s direct et structur\u00e9 \u00e0 toutes les p\u00e9nuries de m\u00e9dicaments en Suisse. Donn\u00e9es r\u00e9elles, mises \u00e0 jour quotidiennement, bilingue DE\/FR. Pas de scraping \u2013 API REST propre avec rate limiting. BASE URL drugshortage.ch\/api\/v1\/drugshortage.php?endpoint= &#x1f4b0; Acc\u00e8s &amp; Tarifs J&#8217;ai lu les conditions d&#8217;utilisation et je les accepte. &#x26a0;&#xfe0f; Veuillez accepter&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":"","_members_access_role":[],"_members_access_error":""},"class_list":["post-21589","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21589","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/comments?post=21589"}],"version-history":[{"count":15,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21589\/revisions"}],"predecessor-version":[{"id":21810,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21589\/revisions\/21810"}],"wp:attachment":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/media?parent=21589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}