[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fZG0p5DeLnahXl5SaeWWQSKF0bKEGDU3CEYMsinh9_mg":3,"$fG91H0FDD3CAFuK-YOL8kl5neaXL1I49nQHChF_QgrjE":14},{"slug":4,"locale":5,"title":6,"section":7,"orderIndex":8,"blocks":9,"seoTitle":7,"seoDescription":7,"updatedAt":13},"30-webhooks","de","30 — Webhook-Übersicht",null,30,[10],{"type":11,"value":12},"markdown","# 30 — Webhook-Übersicht\n\nPartnerDesk verarbeitet Sales-Events von externen Zahlungsanbietern über **Webhooks** — HTTP-Calls, die der Provider bei jedem Ereignis (Sale, Refund, Subscription-Update) an PartnerDesk schickt.\n\n## Unterstützte Provider\n\n| Provider | Webhook-URL | Authentifizierung | Doku |\n|----------|-------------|-------------------|------|\n| **Stripe** | `\u002Fapi\u002Fwebhooks\u002F{slug}\u002Fstripe` | HMAC-SHA256 (`Stripe-Signature`) | [31](31-stripe.md) |\n| **Digistore24** | `\u002Fapi\u002Fwebhooks\u002F{slug}\u002Fdigistore24` | HMAC-SHA512 | [32](32-digistore24.md) |\n| **CopeCart** | `\u002Fapi\u002Fwebhooks\u002F{slug}\u002Fcopecart` | HMAC-SHA256 (JSON oder Form) | [33](33-copecart.md) |\n| **Ablefy** | `\u002Fapi\u002Fwebhooks\u002F{slug}\u002Fablefy` | HMAC-SHA256, 3 mögliche Header | [34](34-ablefy.md) |\n| **easybill** | `\u002Fapi\u002Fwebhooks\u002F{slug}\u002Feasybill` | Token-basiert | [35](35-easybill.md) |\n| **lexoffice** | `\u002Fapi\u002Fwebhooks\u002F{slug}\u002Flexoffice` | Bearer-Token | [36](36-lexoffice.md) |\n| **Custom** (Zapier, Make, n8n, eigene Systeme) | `\u002Fapi\u002Fwebhooks\u002F{slug}\u002Fcustom` | HMAC-SHA256, eigenes JSON-Schema | [37](37-custom-webhook.md) |\n\n`{slug}` ist Ihr Tenant-Slug (z. B. `4leads`).\n\n## Setup-Workflow\n\nFür jeden Provider gleichermaßen:\n\n1. **PartnerDesk öffnen**: Admin → „Zahlungsanbieter\" → gewünschten Provider auswählen.\n2. **Webhook-URL kopieren** — PartnerDesk zeigt Ihnen die fertige URL für Ihren Tenant an.\n3. **Im Provider eintragen** — beim Provider unter „Webhooks\" \u002F „Notifications\" die URL hinzufügen.\n4. **Secret zurück nach PartnerDesk** — der Provider zeigt Ihnen ein Webhook-Secret. Tragen Sie es im Admin-Portal ein.\n5. **Speichern** → Status-Badge wechselt auf „Aktiv\".\n\nBei manchen Providern (lexoffice, easybill) brauchen Sie zusätzlich einen **API-Key** für ausgehende Calls (z. B. Gutschrift-Anlage). Siehe Provider-Doku.\n\n## Was passiert bei einem eingehenden Webhook?\n\n```\nProvider ─→ POST \u002Fapi\u002Fwebhooks\u002F{slug}\u002F{provider}\n              │\n              ▼\n       ┌─────────────────────────┐\n       │ 1. Tenant auflösen      │\n       │ 2. Provider-Config laden│\n       │ 3. Signatur prüfen      │\n       └────────────┬────────────┘\n                    │\n                    ▼\n       ┌─────────────────────────┐\n       │ 4. Provider-Handler     │\n       │   (Stripe\u002FDigistore\u002F...)│\n       └────────────┬────────────┘\n                    │\n                    ▼\n       ┌─────────────────────────┐\n       │ 5. Partner auflösen     │\n       │   (5-stufig)            │\n       └────────────┬────────────┘\n                    │\n                    ▼\n       ┌─────────────────────────┐\n       │ 6. Transaction anlegen  │\n       │   + MLM-Provisionen     │\n       └────────────┬────────────┘\n                    │\n                    ▼\n       ┌─────────────────────────┐\n       │ 7. WebhookEvent loggen  │\n       │   (für Audit)           │\n       └─────────────────────────┘\n```\n\n## Event-Typen (Übersicht)\n\nAlle Provider unterstützen ein ähnliches Set:\n\n| Event | Effekt |\n|-------|--------|\n| **Payment \u002F Sale** | Neue Transaktion + MLM-Provisionen |\n| **Rebill \u002F Subscription Charge** | Folge-Transaktion (`isRecurring=true`, `recurringNumber=N`) |\n| **Refund** | Bestehende Transaktion auf `refunded` |\n| **Chargeback** | Bestehende Transaktion auf `clawback` |\n\nProvider-spezifische Events werden in den einzelnen Doku-Kapiteln beschrieben.\n\n## Idempotenz\n\nPartnerDesk verarbeitet jeden Webhook **idempotent**: ein zweiter Webhook mit derselben `(provider, external_transaction_id)`-Kombination wird erkannt und übersprungen (`skipped`). Das ist wichtig, weil Provider bei vermeintlichen Timeouts den Webhook wiederholen.\n\n## Webhook-Event-Log\n\nJeder eingehende Webhook wird vollständig protokolliert:\n\n- **Payload** (Body).\n- **Signatur-Validität**.\n- **Verarbeitungszeit** in ms.\n- **Resultat** (`success`, `skipped`, `failure`, `invalid_signature`).\n\nAdmin-Portal → „Webhook-Log\" (tenant-scoped).\nPlattform-Admin sieht alle Tenants.\n\nDetails: **[112 — Webhook-Event-Log](112-webhook-event-log.md)**.\n\n## Replay\n\nBei `failure` oder `skipped`-Webhooks (z. B. Provider hatte fehlerhafte Daten gesendet, später korrigiert) kann der Webhook **manuell neu verarbeitet** werden — Klick auf „Replay\" im Detail-Modal. Signaturprüfung wird beim Replay übersprungen, aber ein neuer Audit-Eintrag mit Referenz zur ursprünglichen ID wird erstellt.\n\n## Rate-Limits\n\nPro Tenant + Provider: **120 Webhooks\u002FMinute** (sliding window). Schutz gegen Provider-Storms bei Migrations- oder Test-Szenarien.\n\nBei Überschreitung: HTTP 429 mit `Retry-After`-Header. Provider versuchen üblicherweise automatisch erneut.\n\n## Verwandte Kapitel\n\n- **[31](31-stripe.md)** bis **[37](37-custom-webhook.md)** — Provider-spezifische Setups.\n- **[50](50-tracking.md)** — Wie Tracking-Cookies die Partner-Auflösung beeinflussen.\n- **[112](112-webhook-event-log.md)** — Webhook-Event-Log inspizieren.\n\n---\n\n**Technische Tiefen-Doku**: [`..\u002F001-initial-setup.md`](..\u002F001-initial-setup.md) (Webhook-Subsystem), [`..\u002F025-webhook-audit-log.md`](..\u002F025-webhook-audit-log.md), [`..\u002F058-unified-tracking.md`](..\u002F058-unified-tracking.md) (PartnerResolver)\n","2026-06-01T21:39:08+02:00",{"data":15},[16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269],{"slug":17,"locale":5,"title":18,"section":7,"orderIndex":19},"01-ueberblick","01 — Kurzüberblick & Architektur",1,{"slug":21,"locale":5,"title":22,"section":7,"orderIndex":23},"02-schnellstart","02 — Schnellstart für neue Tenants",2,{"slug":25,"locale":5,"title":26,"section":7,"orderIndex":27},"03-rollen","03 — Rollen & Berechtigungen",3,{"slug":29,"locale":5,"title":30,"section":7,"orderIndex":31},"10-kampagnen","10 — Kampagnen verwalten",10,{"slug":33,"locale":5,"title":34,"section":7,"orderIndex":35},"11-provisionen","11 — Provisionsmodelle (Tiers & Gruppen)",11,{"slug":37,"locale":5,"title":38,"section":7,"orderIndex":39},"12-mlm","12 — MLM-Struktur & Downline",12,{"slug":41,"locale":5,"title":42,"section":7,"orderIndex":43},"13-bonus","13 — Bonusprogramme",13,{"slug":45,"locale":5,"title":46,"section":7,"orderIndex":47},"14-holdback-reserve","14 — Reifezeit & Reserve (Schutz vor Rückbuchungen)",14,{"slug":49,"locale":5,"title":50,"section":7,"orderIndex":51},"15-programm-bewertungen","15 — Programm-Bewertungen im Marktplatz",15,{"slug":53,"locale":5,"title":54,"section":7,"orderIndex":55},"16-externe-bewertungen","16 — Externe Bewertungen verbinden (Anbieter)",16,{"slug":57,"locale":5,"title":58,"section":7,"orderIndex":59},"17-joint-venture-partner","17 — Joint-Venture-Partner",17,{"slug":61,"locale":5,"title":62,"section":7,"orderIndex":63},"18-vertriebsmitarbeiter","18 — Vertriebsmitarbeiter (VM)",18,{"slug":65,"locale":5,"title":66,"section":7,"orderIndex":67},"19-profitabilitaet","19 — Profitabilität einer Kampagne",19,{"slug":69,"locale":5,"title":70,"section":7,"orderIndex":71},"20-partner-anlegen","20 — Partner anlegen",20,{"slug":73,"locale":5,"title":74,"section":7,"orderIndex":75},"21-partner-status","21 — Partner-Status & Lifecycle",21,{"slug":77,"locale":5,"title":78,"section":7,"orderIndex":79},"22-partner-profile","22 — Partner-Profile & Stammdaten",22,{"slug":81,"locale":5,"title":82,"section":7,"orderIndex":83},"23-customers","23 — Customers (Endkunden)",23,{"slug":85,"locale":5,"title":86,"section":7,"orderIndex":87},"24-partner-merge","24 — Doppelte Partner zusammenführen",24,{"slug":4,"locale":5,"title":6,"section":7,"orderIndex":8},{"slug":90,"locale":5,"title":91,"section":7,"orderIndex":92},"31-stripe","31 — Stripe-Integration",31,{"slug":94,"locale":5,"title":95,"section":7,"orderIndex":96},"32-digistore24","32 — Digistore24-Integration",32,{"slug":98,"locale":5,"title":99,"section":7,"orderIndex":100},"33-copecart","33 — CopeCart-Integration",33,{"slug":102,"locale":5,"title":103,"section":7,"orderIndex":104},"34-ablefy","34 — Ablefy-Integration (vormals elopage)",34,{"slug":106,"locale":5,"title":107,"section":7,"orderIndex":108},"35-easybill","35 — easybill-Integration",35,{"slug":110,"locale":5,"title":111,"section":7,"orderIndex":112},"36-lexoffice","36 — lexoffice-Integration",36,{"slug":114,"locale":5,"title":115,"section":7,"orderIndex":116},"37-custom-webhook","37 — Custom Webhook (Zapier, Make, n8n, eigene Systeme)",37,{"slug":118,"locale":5,"title":119,"section":7,"orderIndex":120},"40-auszahlungen","40 — Auszahlungs-Workflow",40,{"slug":122,"locale":5,"title":123,"section":7,"orderIndex":124},"41-gutschriften","41 — Gutschriften (§14 UStG)",41,{"slug":126,"locale":5,"title":127,"section":7,"orderIndex":128},"42-sepa","42 — SEPA-XML-Export",42,{"slug":130,"locale":5,"title":131,"section":7,"orderIndex":132},"43-stripe-connect","43 — Stripe Connect (Express-Auszahlungen)",43,{"slug":134,"locale":5,"title":135,"section":7,"orderIndex":136},"44-buchhaltung-sync","44 — Externe Buchhaltung-Sync (easybill \u002F lexoffice)",44,{"slug":138,"locale":5,"title":139,"section":7,"orderIndex":140},"50-tracking","50 — Tracking-Cookie & Klick-Erfassung",50,{"slug":142,"locale":5,"title":143,"section":7,"orderIndex":144},"51-attribution","51 — Attribution-Modelle",51,{"slug":146,"locale":5,"title":147,"section":7,"orderIndex":148},"52-utm-subid","52 — UTM, Sub-IDs & Fingerprint",52,{"slug":150,"locale":5,"title":151,"section":7,"orderIndex":152},"53-werbemittel","53 — Werbemittel: Banner & Coupons",53,{"slug":154,"locale":5,"title":155,"section":7,"orderIndex":156},"54-links-landingpages","54 — Short-Links & Landing-Pages",54,{"slug":158,"locale":5,"title":159,"section":7,"orderIndex":160},"60-marketing-site","60 — Marketing-Site (Apex-Domain)",60,{"slug":162,"locale":5,"title":163,"section":7,"orderIndex":164},"61-popup-widget","61 — Popup-Widget für Tenant-Sites",61,{"slug":166,"locale":5,"title":167,"section":7,"orderIndex":168},"62-cross-promotion","62 — PartnerDesk Cross-Promotion (PartnerDesk empfehlen)",62,{"slug":170,"locale":5,"title":171,"section":7,"orderIndex":172},"63-lead-aff","63 — Lead-Affiliate-Programm (Partner werben Partner)",63,{"slug":174,"locale":5,"title":175,"section":7,"orderIndex":176},"70-notifications","70 — Notification-System",70,{"slug":178,"locale":5,"title":179,"section":7,"orderIndex":180},"71-email-whitelabel","71 — Email-Whitelabel",71,{"slug":182,"locale":5,"title":183,"section":7,"orderIndex":184},"72-email-templates","72 — Email-Templates",72,{"slug":186,"locale":5,"title":187,"section":7,"orderIndex":188},"73-lifecycle-mails","73 — Lifecycle-Mails",73,{"slug":190,"locale":5,"title":191,"section":7,"orderIndex":192},"80-akademie","80 — Akademie: Kurse & Lektionen",80,{"slug":194,"locale":5,"title":195,"section":7,"orderIndex":196},"81-quiz","81 — Quiz-System",81,{"slug":198,"locale":5,"title":199,"section":7,"orderIndex":200},"82-zertifikate","82 — Zertifikate nach Kurs-Komplettierung",82,{"slug":202,"locale":5,"title":203,"section":7,"orderIndex":204},"90-2fa","90 — Two-Factor-Authentication (2FA)",90,{"slug":206,"locale":5,"title":207,"section":7,"orderIndex":208},"91-rate-limiting","91 — Rate-Limiting",91,{"slug":210,"locale":5,"title":211,"section":7,"orderIndex":212},"92-audit-log","92 — Audit-Log",92,{"slug":214,"locale":5,"title":215,"section":7,"orderIndex":216},"93-dsgvo","93 — DSGVO-Tools",93,{"slug":218,"locale":5,"title":219,"section":7,"orderIndex":220},"94-legal","94 — Legal-Pages",94,{"slug":222,"locale":5,"title":223,"section":7,"orderIndex":224},"95-cookie-consent","95 — Cookie-Consent",95,{"slug":226,"locale":5,"title":227,"section":7,"orderIndex":228},"100-billing-plaene","100 — Stripe-Billing-Pläne",100,{"slug":230,"locale":5,"title":231,"section":7,"orderIndex":232},"101-trial","101 — Trial & Subscription-Status",101,{"slug":234,"locale":5,"title":235,"section":7,"orderIndex":236},"102-customer-portal","102 — Stripe Customer-Portal",102,{"slug":238,"locale":5,"title":239,"section":7,"orderIndex":240},"110-superadmin","110 — Plattform-Admin (Superadmin)",110,{"slug":242,"locale":5,"title":243,"section":7,"orderIndex":244},"111-health","111 — Health-Endpoints",111,{"slug":246,"locale":5,"title":247,"section":7,"orderIndex":248},"112-webhook-event-log","112 — Webhook-Event-Log",112,{"slug":250,"locale":5,"title":251,"section":7,"orderIndex":252},"113-failed-messages","113 — Failed-Messages",113,{"slug":254,"locale":5,"title":255,"section":7,"orderIndex":256},"120-pwa-partner","120 — PWA Partner-Portal",120,{"slug":258,"locale":5,"title":259,"section":7,"orderIndex":260},"121-cross-tenant-hub","121 — Cross-Tenant-Hub",121,{"slug":262,"locale":5,"title":263,"section":7,"orderIndex":264},"130-public-api","130 — Public-API (für Tenant-Integratoren)",130,{"slug":266,"locale":5,"title":267,"section":7,"orderIndex":268},"131-outgoing-webhooks","131 — Outgoing-Webhooks",131,{"slug":270,"locale":5,"title":271,"section":7,"orderIndex":272},"132-exports","132 — Datenexporte (CSV, PDF-Report)",132]