[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fzUgiaFBGShqqQ2WdLTu_THEWkmIuUNng_5X15ZAu1yI":3,"$fG91H0FDD3CAFuK-YOL8kl5neaXL1I49nQHChF_QgrjE":14},{"slug":4,"locale":5,"title":6,"section":7,"orderIndex":8,"blocks":9,"seoTitle":7,"seoDescription":7,"updatedAt":13},"110-superadmin","de","110 — Plattform-Admin (Superadmin)",null,110,[10],{"type":11,"value":12},"markdown","# 110 — Plattform-Admin (Superadmin)\n\nDer Superadmin-Bereich ist die Kontrollebene für Plattform-Betreiber — die Personen, die PartnerDesk für alle Tenants administrieren. Tenant-Admins haben darauf **keinen** Zugriff.\n\n## Wer hat Zugriff?\n\n- **`ROLE_PLATFORM_OWNER`** — vollständige Kontrolle, kann auch andere Plattform-User anlegen.\n- **`ROLE_PLATFORM_ADMIN`** — operativ, kein User-Management auf Plattform-Ebene.\n\nLogin unter `admin.partnerdesk.io`.\n\n## Hauptfunktionen\n\n### Tenant-Verwaltung\n\nÜbersicht aller Tenants mit:\n\n- Slug, Name, Tier, Status (active\u002Fsuspended).\n- Aktuelle Subscription-Status (trialing\u002Factive\u002Fpast_due\u002Fcanceled).\n- Plattform-weite Stats: aktive Partner, Anzahl TX, Volumen.\n- **Filter** nach Status, Tier.\n- **Volltextsuche**.\n\nAktionen pro Tenant:\n\n| Aktion | Effekt |\n|--------|--------|\n| **Anzeigen** | Detail-View mit Stammdaten, Statistiken, Owner-User-Info |\n| **Tier ändern** | Plan-Wechsel (z. B. von Growth auf Pro) |\n| **Suspendieren** | Setzt `is_active=false`, alle Webhooks landen mit 403 — Tenant kann sich nicht mehr einloggen |\n| **Reaktivieren** | Aufhebung der Suspendierung |\n| **Owner-User-Daten** | Email, Last-Login |\n\nBei Suspendierung wird ein **Grund** abgefragt und im Audit-Log gespeichert.\n\n### Tenant-Provisionierung\n\nNeuer Tenant kann auch von hier aus manuell angelegt werden:\n\nPlattform-Admin → „Tenants\" → „Neu\" → Wizard.\n\nVorteile gegenüber Self-Service-Signup:\n\n- Tier kann sofort festgelegt werden (statt mit Starter zu beginnen).\n- Owner-Email kann unabhängig vom Onboarding-Mail-Verfahren gesetzt werden.\n- Initiale Trial-Verlängerung möglich.\n\n### Webhook-Event-Log (Cross-Tenant)\n\nPlattform-Admin sieht **alle Webhooks aller Tenants**:\n\n- Filter: Provider, Status, Tenant-Slug.\n- Pagination.\n- Detail-Modal mit vollständigem Payload.\n- **Replay-Button** bei `failure`\u002F`skipped`-Events.\n\nSinnvoll für: Provider-Probleme debuggen, Support-Anfragen beantworten.\n\n### Audit-Log (Cross-Tenant)\n\nAlle sicherheitsrelevanten Aktionen aller Tenants:\n\n- Login-Erfolge und -Fehlschläge.\n- Payout-Approvals.\n- Tenant-Provisionierungen und Suspendierungen.\n- Partner-Anonymisierungen.\n\nFilter: Aktion, Actor-Type, Zeitraum.\n\nPlus farbcodierte Actor-Badges (Plattform\u002FTenant\u002FPartner\u002FSystem) für schnelle Orientierung.\n\n### Failed-Messages\n\nGescheiterte Messenger-Jobs (z. B. Buchhaltungs-Sync, Notification-Versand):\n\n- Liste mit Klasse, Anzahl Versuche, letzter Error.\n- Detail-View mit Stack-Trace und Stamps.\n- **„Retry\"** verschiebt die Message zurück in den Original-Transport.\n- **„Verwerfen\"** löscht endgültig.\n\nDetails: **[113 — Failed-Messages](113-failed-messages.md)**.\n\n### Broadcast\n\nPlattform-weite Mail-Aussendung an Tenant-Owner:\n\n```\nPOST \u002Fapi\u002Fsuperadmin\u002Fbroadcast\n{ subject, body, targetTier?, targetStatus? }\n```\n\nFiltert nach Tier oder Subscription-Status. Versand in Chunks (50\u002FBatch).\n\nSinnvoll für: Wartungsfenster-Ankündigungen, neue Feature-Hinweise.\n\n### Plattform-Statistiken\n\nGlobale KPIs für 4leads\u002FPartnerDesk:\n\n- Anzahl aktiver Tenants pro Tier.\n- Gesamt-MRR (Monthly Recurring Revenue) aus Stripe-Subscriptions.\n- Plattform-weites TX-Volumen.\n- Top-Tenants nach Umsatz.\n\n## Sicherheits-Setup\n\nPlattform-Admin-Accounts sollten:\n\n- **Immer 2FA aktiviert haben**.\n- Mit starkem Passwort versehen sein (12+ Zeichen, mit Sonderzeichen).\n- Im Audit-Log überwacht werden — verdächtige Login-Patterns prüfen.\n\nCLI-Anlage:\n\n```\napp:platform-user:create \u003Cemail> \u003Cpassword> ROLE_PLATFORM_OWNER\n```\n\nEs gibt **kein** Self-Signup für diese Rolle. Bewusst.\n\n## API-Docs\n\nPlattform-Admin hat Zugriff auf `\u002Fapi\u002Fdoc` (in nicht-Production-Umgebungen) — Swagger-UI mit allen Endpoints, gefilterten nach Rolle.\n\n## Health-Endpoints\n\nPlattform-Admin überwacht die Systemgesundheit:\n\n- `\u002Fhealth\u002Flive` — Liveness (immer 200 wenn Prozess läuft).\n- `\u002Fhealth\u002Fready` — Readiness (DB + Cache Smoke-Test).\n\nBeide werden von Cloud-Run \u002F Docker-Compose Health-Check \u002F Monitoring-Tools (z. B. Uptime Robot) abgefragt.\n\nDetails: **[111 — Health-Endpoints](111-health.md)**.\n\n## Verwandte Kapitel\n\n- **[03 — Rollen & Berechtigungen](03-rollen.md)** — Was Plattform-Admins von Tenant-Admins unterscheidet\n- **[112 — Webhook-Event-Log](112-webhook-event-log.md)**\n- **[113 — Failed-Messages](113-failed-messages.md)**\n- **[92 — Audit-Log](92-audit-log.md)**\n\n---\n\n**Technische Tiefen-Doku**: [`..\u002F021-superadmin-cicd.md`](..\u002F021-superadmin-cicd.md), [`..\u002F022-superadmin-frontend-health.md`](..\u002F022-superadmin-frontend-health.md), [`..\u002F024-phpstan-failed-messages.md`](..\u002F024-phpstan-failed-messages.md), [`..\u002F025-webhook-audit-log.md`](..\u002F025-webhook-audit-log.md), [`..\u002F099-tenant-lifecycle-events.md`](..\u002F099-tenant-lifecycle-events.md) (Broadcast)\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,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,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":89,"locale":5,"title":90,"section":7,"orderIndex":91},"30-webhooks","30 — Webhook-Übersicht",30,{"slug":93,"locale":5,"title":94,"section":7,"orderIndex":95},"31-stripe","31 — Stripe-Integration",31,{"slug":97,"locale":5,"title":98,"section":7,"orderIndex":99},"32-digistore24","32 — Digistore24-Integration",32,{"slug":101,"locale":5,"title":102,"section":7,"orderIndex":103},"33-copecart","33 — CopeCart-Integration",33,{"slug":105,"locale":5,"title":106,"section":7,"orderIndex":107},"34-ablefy","34 — Ablefy-Integration (vormals elopage)",34,{"slug":109,"locale":5,"title":110,"section":7,"orderIndex":111},"35-easybill","35 — easybill-Integration",35,{"slug":113,"locale":5,"title":114,"section":7,"orderIndex":115},"36-lexoffice","36 — lexoffice-Integration",36,{"slug":117,"locale":5,"title":118,"section":7,"orderIndex":119},"37-custom-webhook","37 — Custom Webhook (Zapier, Make, n8n, eigene Systeme)",37,{"slug":121,"locale":5,"title":122,"section":7,"orderIndex":123},"40-auszahlungen","40 — Auszahlungs-Workflow",40,{"slug":125,"locale":5,"title":126,"section":7,"orderIndex":127},"41-gutschriften","41 — Gutschriften (§14 UStG)",41,{"slug":129,"locale":5,"title":130,"section":7,"orderIndex":131},"42-sepa","42 — SEPA-XML-Export",42,{"slug":133,"locale":5,"title":134,"section":7,"orderIndex":135},"43-stripe-connect","43 — Stripe Connect (Express-Auszahlungen)",43,{"slug":137,"locale":5,"title":138,"section":7,"orderIndex":139},"44-buchhaltung-sync","44 — Externe Buchhaltung-Sync (easybill \u002F lexoffice)",44,{"slug":141,"locale":5,"title":142,"section":7,"orderIndex":143},"50-tracking","50 — Tracking-Cookie & Klick-Erfassung",50,{"slug":145,"locale":5,"title":146,"section":7,"orderIndex":147},"51-attribution","51 — Attribution-Modelle",51,{"slug":149,"locale":5,"title":150,"section":7,"orderIndex":151},"52-utm-subid","52 — UTM, Sub-IDs & Fingerprint",52,{"slug":153,"locale":5,"title":154,"section":7,"orderIndex":155},"53-werbemittel","53 — Werbemittel: Banner & Coupons",53,{"slug":157,"locale":5,"title":158,"section":7,"orderIndex":159},"54-links-landingpages","54 — Short-Links & Landing-Pages",54,{"slug":161,"locale":5,"title":162,"section":7,"orderIndex":163},"60-marketing-site","60 — Marketing-Site (Apex-Domain)",60,{"slug":165,"locale":5,"title":166,"section":7,"orderIndex":167},"61-popup-widget","61 — Popup-Widget für Tenant-Sites",61,{"slug":169,"locale":5,"title":170,"section":7,"orderIndex":171},"62-cross-promotion","62 — PartnerDesk Cross-Promotion (PartnerDesk empfehlen)",62,{"slug":173,"locale":5,"title":174,"section":7,"orderIndex":175},"63-lead-aff","63 — Lead-Affiliate-Programm (Partner werben Partner)",63,{"slug":177,"locale":5,"title":178,"section":7,"orderIndex":179},"70-notifications","70 — Notification-System",70,{"slug":181,"locale":5,"title":182,"section":7,"orderIndex":183},"71-email-whitelabel","71 — Email-Whitelabel",71,{"slug":185,"locale":5,"title":186,"section":7,"orderIndex":187},"72-email-templates","72 — Email-Templates",72,{"slug":189,"locale":5,"title":190,"section":7,"orderIndex":191},"73-lifecycle-mails","73 — Lifecycle-Mails",73,{"slug":193,"locale":5,"title":194,"section":7,"orderIndex":195},"80-akademie","80 — Akademie: Kurse & Lektionen",80,{"slug":197,"locale":5,"title":198,"section":7,"orderIndex":199},"81-quiz","81 — Quiz-System",81,{"slug":201,"locale":5,"title":202,"section":7,"orderIndex":203},"82-zertifikate","82 — Zertifikate nach Kurs-Komplettierung",82,{"slug":205,"locale":5,"title":206,"section":7,"orderIndex":207},"90-2fa","90 — Two-Factor-Authentication (2FA)",90,{"slug":209,"locale":5,"title":210,"section":7,"orderIndex":211},"91-rate-limiting","91 — Rate-Limiting",91,{"slug":213,"locale":5,"title":214,"section":7,"orderIndex":215},"92-audit-log","92 — Audit-Log",92,{"slug":217,"locale":5,"title":218,"section":7,"orderIndex":219},"93-dsgvo","93 — DSGVO-Tools",93,{"slug":221,"locale":5,"title":222,"section":7,"orderIndex":223},"94-legal","94 — Legal-Pages",94,{"slug":225,"locale":5,"title":226,"section":7,"orderIndex":227},"95-cookie-consent","95 — Cookie-Consent",95,{"slug":229,"locale":5,"title":230,"section":7,"orderIndex":231},"100-billing-plaene","100 — Stripe-Billing-Pläne",100,{"slug":233,"locale":5,"title":234,"section":7,"orderIndex":235},"101-trial","101 — Trial & Subscription-Status",101,{"slug":237,"locale":5,"title":238,"section":7,"orderIndex":239},"102-customer-portal","102 — Stripe Customer-Portal",102,{"slug":4,"locale":5,"title":6,"section":7,"orderIndex":8},{"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]