{"components":{"securitySchemes":{"ApiKeyAuth":{"bearerFormat":"tgm_api_key","scheme":"bearer","type":"http"},"MegaAdminToken":{"in":"header","name":"X-MegaAdmin-Token","type":"apiKey"}}},"info":{"title":"trinkgeldMeister API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/api/v1/employees":{"get":{"description":"Listet Mitarbeiter des API-Key-Mandanten.","operationId":"get-api-v1-employees","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Mitarbeiter listen","x-tgm-scope":"employee.read"},"post":{"description":"Legt einen Mitarbeiter inklusive Operator-ID, Handy und Auszahlungskonto an.","operationId":"post-api-v1-employees","requestBody":{"content":{"application/json":{"example":{"account_holder":"API Mitarbeiter","iban":"DE89370400440532013000","name":"API Mitarbeiter","operator_id":"99","phone":"0170 1234567","status":"active"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Mitarbeiter anlegen","x-tgm-scope":"employee.write"}},"/api/v1/employees/import":{"post":{"description":"Importiert oder aktualisiert Mitarbeiter per CSV mit Operator-ID oder Mitarbeiter-Referenz.","operationId":"post-api-v1-employees-import","requestBody":{"content":{"application/json":{"example":{"csv":"operator_id,name,email,phone,status,iban,account_holder\n77,API Import,api-import@example.test,0170 1234567,active,DE89370400440532013000,API Import\n"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Mitarbeiter importieren","x-tgm-scope":"employee.write"}},"/api/v1/employees/{id}":{"delete":{"description":"Setzt einen Mitarbeiter innerhalb des Mandanten auf deleted.","operationId":"delete-api-v1-employees-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Mitarbeiter löschen","x-tgm-scope":"employee.write"},"get":{"description":"Liest einen Mitarbeiter innerhalb des API-Key-Mandanten.","operationId":"get-api-v1-employees-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Mitarbeiter lesen","x-tgm-scope":"employee.read"},"patch":{"description":"Aktualisiert einen Mitarbeiter innerhalb des Mandanten.","operationId":"patch-api-v1-employees-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"location":"Bar","phone":"0170 7654321","status":"active"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Mitarbeiter ändern","x-tgm-scope":"employee.write"}},"/api/v1/imports":{"post":{"description":"Parst eine CSV-Zahlungsliste mit optionalem Spaltenmapping und erzeugt einen geprüften Auszahlungslauf.","operationId":"post-api-v1-imports","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"csv":"Bediener Nr,Trinkgeld EUR,Zweck\n17,51.25,Trinkgeld Mai\n","mapping":{"amount":"Trinkgeld EUR","operator_id":"Bediener Nr","transfer_text":"Zweck"},"name":"Mai Trinkgeld"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Import erstellen","x-tgm-scope":"import.write"}},"/api/v1/imports/{id}":{"get":{"description":"Liest Importstatus und den verknüpften Auszahlungslauf.","operationId":"get-api-v1-imports-imp-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"example":"imp_1","type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Import lesen","x-tgm-scope":"payout.read"}},"/api/v1/imports/{id}/rows":{"get":{"description":"Listet die normalisierten Importzeilen aus den gespeicherten Auszahlungspositionen.","operationId":"get-api-v1-imports-imp-1-rows","parameters":[{"in":"path","name":"id","required":true,"schema":{"example":"imp_1","type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Import-Zeilen lesen","x-tgm-scope":"payout.read"}},"/api/v1/imports/{id}/validate":{"post":{"description":"Gibt den aktuellen Validierungsstatus des Imports zurück.","operationId":"post-api-v1-imports-imp-1-validate","parameters":[{"in":"path","name":"id","required":true,"schema":{"example":"imp_1","type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Import validieren","x-tgm-scope":"import.write"}},"/api/v1/journal":{"get":{"description":"Listet Journalbewegungen und Provider-Referenzen.","operationId":"get-api-v1-journal","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Journal lesen","x-tgm-scope":"payout.read"}},"/api/v1/payout-items/{id}/retry":{"post":{"description":"Erstellt für eine fehlgeschlagene Auszahlungsposition idempotent einen neuen Provider-Versuch und schreibt das Journal.","operationId":"post-api-v1-payout-items-1-retry","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Auszahlungsposition erneut versuchen","x-tgm-scope":"payout.execute"}},"/api/v1/payout-runs":{"get":{"description":"Listet Auszahlungsläufe des Mandanten.","operationId":"get-api-v1-payout-runs","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Auszahlungsläufe listen","x-tgm-scope":"payout.read"},"post":{"description":"Erzeugt einen Lauf aus JSON-Positionen.","operationId":"post-api-v1-payout-runs","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"items":[{"amount":5125,"currency":"EUR","operator_id":"17"}],"name":"Mai Trinkgeld"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Auszahlungslauf erstellen","x-tgm-scope":"payout.write"}},"/api/v1/payout-runs/{id}":{"get":{"description":"Liest Detailstatus und Positionen eines Laufs.","operationId":"get-api-v1-payout-runs-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Auszahlungslauf lesen","x-tgm-scope":"payout.read"}},"/api/v1/payout-runs/{id}/approve":{"post":{"description":"Setzt den Lauf auf freigegeben.","operationId":"post-api-v1-payout-runs-1-approve","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Auszahlungslauf freigeben","x-tgm-scope":"payout.write"}},"/api/v1/payout-runs/{id}/cancel":{"post":{"description":"Setzt einen Lauf auf canceled, bevor eine Live-Ausführung erfolgt.","operationId":"post-api-v1-payout-runs-1-cancel","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Auszahlungslauf abbrechen","x-tgm-scope":"payout.write"}},"/api/v1/payout-runs/{id}/dry-run":{"post":{"description":"Führt den technischen Probelauf ohne Geldbewegung aus.","operationId":"post-api-v1-payout-runs-1-dry-run","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Dry Run starten","x-tgm-scope":"payout.write"}},"/api/v1/payout-runs/{id}/execute":{"post":{"description":"Führt einen freigegebenen Lauf aus, sofern Abo und Feature Flags passen.","operationId":"post-api-v1-payout-runs-1-execute","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Auszahlungslauf ausführen","x-tgm-scope":"payout.execute"}},"/api/v1/providers":{"get":{"description":"Listet konfigurierte Provider-Verbindungen.","operationId":"get-api-v1-providers","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Provider listen","x-tgm-scope":"provider.read"},"post":{"description":"Legt eine Provider-Verbindung mit Secret-Referenzen an.","operationId":"post-api-v1-providers","requestBody":{"content":{"application/json":{"example":{"active":false,"credential_ref":"env:STRIPE_SECRET_KEY","display_name":"Stripe Sandbox","financial_account_ref":"fa_test","mode":"sandbox","provider":"stripe_global_payouts","webhook_secret_ref":"env:STRIPE_GLOBAL_PAYOUTS_WEBHOOK_SECRET"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Provider anlegen","x-tgm-scope":"provider.write"}},"/api/v1/providers/{id}":{"delete":{"description":"Deaktiviert eine Provider-Verbindung fachlich und erzeugt ein `provider.disabled` Event.","operationId":"delete-api-v1-providers-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Provider deaktivieren","x-tgm-scope":"provider.write"},"patch":{"description":"Aktualisiert Anzeigename, Status, Modus oder Secret-Referenzen einer Provider-Verbindung.","operationId":"patch-api-v1-providers-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"active":true,"display_name":"Stripe Sandbox Updated"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Provider ändern","x-tgm-scope":"provider.write"}},"/api/v1/providers/{id}/rotate-secret-ref":{"post":{"description":"Ersetzt Credential-, Webhook- oder Funding-Referenzen, ohne Secret-Werte offenzulegen.","operationId":"post-api-v1-providers-1-rotate-secret-ref","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"credential_ref":"env:STRIPE_SECRET_KEY_NEXT"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Provider Secret-Ref rotieren","x-tgm-scope":"provider.write"}},"/api/v1/providers/{id}/test":{"post":{"description":"Prüft Key-, Modus-, Webhook- und Funding-Kontext der Provider-Verbindung.","operationId":"post-api-v1-providers-1-test","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Provider testen","x-tgm-scope":"provider.write"}},"/api/v1/reports/payout-runs/{id}.csv":{"get":{"description":"Lädt den CSV-Report für einen Auszahlungslauf des API-Key-Mandanten.","operationId":"get-api-v1-reports-payout-runs-1-csv","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"CSV Report","x-tgm-scope":"report.read"}},"/api/v1/reports/payout-runs/{id}.json":{"get":{"description":"Lädt den maschinenlesbaren JSON-Report für einen Auszahlungslauf des API-Key-Mandanten.","operationId":"get-api-v1-reports-payout-runs-1-json","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"JSON Report","x-tgm-scope":"report.read"}},"/api/v1/reports/payout-runs/{id}.pdf":{"get":{"description":"Lädt den PDF-Report für einen Auszahlungslauf des API-Key-Mandanten.","operationId":"get-api-v1-reports-payout-runs-1-pdf","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"PDF Report","x-tgm-scope":"report.read"}},"/api/v1/superadmin/api-keys":{"get":{"description":"Listet API Keys ohne Hash oder Klartext-Key für `tenant_id`.","operationId":"get-api-v1-superadmin-api-keys","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin API Keys listen","x-tgm-scope":"megaadmin"},"post":{"description":"Legt einen API Key an und gibt nur Metadaten zurück, nicht den Klartext-Key.","operationId":"post-api-v1-superadmin-api-keys","requestBody":{"content":{"application/json":{"example":{"name":"API Managed Key","scopes":"tenant.read employee.read","tenant_id":1},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin API Key anlegen","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/api-keys/{id}":{"delete":{"description":"Sperrt einen API Key.","operationId":"delete-api-v1-superadmin-api-keys-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin API Key sperren","x-tgm-scope":"megaadmin"},"patch":{"description":"Aktualisiert Name, Scopes oder Status eines API Keys ohne Hash oder Klartext-Key offenzulegen.","operationId":"patch-api-v1-superadmin-api-keys-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"name":"API Managed Key Updated","scopes":"tenant.read employee.read payout.read","status":"active"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin API Key ändern","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/employees":{"get":{"description":"Listet Mitarbeiter für `tenant_id` oder den ersten Mandanten.","operationId":"get-api-v1-superadmin-employees","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Mitarbeiter listen","x-tgm-scope":"megaadmin"},"post":{"description":"Legt einen Mitarbeiter inklusive Operator-ID und maskierter IBAN an.","operationId":"post-api-v1-superadmin-employees","requestBody":{"content":{"application/json":{"example":{"account_holder":"API Employee","iban":"DE89370400440532013000","name":"API Employee","operator_id":"901","tenant_id":1},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Mitarbeiter anlegen","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/employees/{id}":{"delete":{"description":"Setzt einen Mitarbeiter auf deleted.","operationId":"delete-api-v1-superadmin-employees-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Mitarbeiter löschen","x-tgm-scope":"megaadmin"},"patch":{"description":"Aktualisiert Mitarbeiterstamm, Handy und Kontodaten.","operationId":"patch-api-v1-superadmin-employees-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"location":"API Bar","phone":"0170 7654321"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Mitarbeiter ändern","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/payout-runs":{"get":{"description":"Listet Auszahlungsläufe für `tenant_id` oder den ersten Mandanten.","operationId":"get-api-v1-superadmin-payout-runs","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Auszahlungsläufe listen","x-tgm-scope":"megaadmin"},"post":{"description":"Erzeugt einen Auszahlungslauf für einen Mandanten aus JSON-Positionen.","operationId":"post-api-v1-superadmin-payout-runs","requestBody":{"content":{"application/json":{"example":{"items":[{"amount":5125,"currency":"EUR","operator_id":"17"}],"name":"SuperAdmin Run","tenant_id":1},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Auszahlungslauf anlegen","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/payout-runs/{id}":{"delete":{"description":"Setzt einen Auszahlungslauf auf canceled.","operationId":"delete-api-v1-superadmin-payout-runs-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Auszahlungslauf löschen","x-tgm-scope":"megaadmin"},"get":{"description":"Liest einen Auszahlungslauf inklusive Positionen.","operationId":"get-api-v1-superadmin-payout-runs-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Auszahlungslauf lesen","x-tgm-scope":"megaadmin"},"patch":{"description":"Ändert den Status eines Auszahlungslaufs.","operationId":"patch-api-v1-superadmin-payout-runs-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"status":"approved"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Auszahlungslauf ändern","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/pricing-plans":{"get":{"description":"Listet Preisplaene.","operationId":"get-api-v1-superadmin-pricing-plans","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Pläne listen","x-tgm-scope":"megaadmin"},"post":{"description":"Legt einen Preisplan an oder aktualisiert ihn per Key.","operationId":"post-api-v1-superadmin-pricing-plans","requestBody":{"content":{"application/json":{"example":{"employees_monthly":25,"key":"api-plan","monthly_price":4900,"name":"API Plan","payout_amount_monthly":500000,"payout_runs_monthly":6,"status":"active"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Plan anlegen","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/pricing-plans/{id}":{"delete":{"description":"Setzt einen Preisplan auf inactive.","operationId":"delete-api-v1-superadmin-pricing-plans-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Plan löschen","x-tgm-scope":"megaadmin"},"get":{"description":"Liest einen Preisplan.","operationId":"get-api-v1-superadmin-pricing-plans-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Plan lesen","x-tgm-scope":"megaadmin"},"patch":{"description":"Aktualisiert einen Preisplan inklusive Null-Werten für Preis oder Limits.","operationId":"patch-api-v1-superadmin-pricing-plans-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"monthly_price":0,"name":"Starter Updated"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Plan ändern","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/providers":{"get":{"description":"Listet Provider-Verbindungen für `tenant_id` oder den ersten Mandanten.","operationId":"get-api-v1-superadmin-providers","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Provider listen","x-tgm-scope":"megaadmin"},"post":{"description":"Legt eine Provider-Verbindung mit Secret-Referenzen an und kann die Konfiguration testen.","operationId":"post-api-v1-superadmin-providers","requestBody":{"content":{"application/json":{"example":{"active":true,"credential_ref":"env:STRIPE_SECRET_KEY","display_name":"API Stripe","financial_account_ref":"fa_test","mode":"sandbox","provider":"stripe_global_payouts","tenant_id":1,"test":true,"webhook_secret_ref":"env:STRIPE_GLOBAL_PAYOUTS_WEBHOOK_SECRET"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Provider anlegen","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/providers/{id}":{"delete":{"description":"Deaktiviert eine Provider-Verbindung.","operationId":"delete-api-v1-superadmin-providers-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Provider löschen","x-tgm-scope":"megaadmin"},"patch":{"description":"Aktualisiert Provider-Status, Modus oder Secret-Referenzen.","operationId":"patch-api-v1-superadmin-providers-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"display_name":"Stripe Sandbox Updated","status":"active"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Provider ändern","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/settings":{"get":{"description":"Liest Landing- und SMS-Gateway-Konfiguration ohne Klartext-Secrets.","operationId":"get-api-v1-superadmin-settings","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Settings lesen","x-tgm-scope":"megaadmin"},"patch":{"description":"Aktualisiert Landing-Texte oder SMS-Gateway-Secret-Referenzen.","operationId":"patch-api-v1-superadmin-settings","requestBody":{"content":{"application/json":{"example":{"landing":{"hero_title":"API Landing"},"sms_gateway":{"dry_run":true,"sender":"TGM"}},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Settings ändern","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/tenants":{"get":{"description":"Listet alle Mandanten. Authentifizierung über X-MegaAdmin-Token oder Bearer MegaAdmin Token.","operationId":"get-api-v1-superadmin-tenants","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Mandanten listen","x-tgm-scope":"megaadmin"},"post":{"description":"Legt einen Mandanten an.","operationId":"post-api-v1-superadmin-tenants","requestBody":{"content":{"application/json":{"example":{"key":"api-tenant","name":"API Tenant","report_email":"api@example.test","status":"active"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Mandant anlegen","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/tenants/{id}":{"delete":{"description":"Setzt einen Mandanten auf deleted.","operationId":"delete-api-v1-superadmin-tenants-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Mandant löschen","x-tgm-scope":"megaadmin"},"get":{"description":"Liest einen Mandanten.","operationId":"get-api-v1-superadmin-tenants-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Mandant lesen","x-tgm-scope":"megaadmin"},"patch":{"description":"Aktualisiert Mandantenstammdaten.","operationId":"patch-api-v1-superadmin-tenants-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"name":"API Tenant Updated","plan_key":"team"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Mandant ändern","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/users":{"get":{"description":"Listet User/Rollen für `tenant_id` oder den ersten Mandanten.","operationId":"get-api-v1-superadmin-users","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin User listen","x-tgm-scope":"megaadmin"},"post":{"description":"Legt einen Tenant-User mit Rolle an.","operationId":"post-api-v1-superadmin-users","requestBody":{"content":{"application/json":{"example":{"email":"owner@example.test","name":"API Owner","phone":"+491701234567","phone_verified":true,"role":"owner","tenant_id":1},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin User anlegen","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/users/{id}":{"delete":{"description":"Setzt einen Tenant-User auf deleted.","operationId":"delete-api-v1-superadmin-users-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin User löschen","x-tgm-scope":"megaadmin"},"patch":{"description":"Aktualisiert Rolle, Status oder Kontaktdaten eines Tenant-Users.","operationId":"patch-api-v1-superadmin-users-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"role":"finance","status":"active"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin User ändern","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/webhooks":{"get":{"description":"Listet Webhook-Endpunkte je Mandant.","operationId":"get-api-v1-superadmin-webhooks","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Webhooks listen","x-tgm-scope":"megaadmin"},"post":{"description":"Legt einen Kunden-Webhook für einen Mandanten an.","operationId":"post-api-v1-superadmin-webhooks","requestBody":{"content":{"application/json":{"example":{"events":"payout.*","name":"API Webhook","tenant_id":1,"url":"https://example.test/tgm"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Webhook anlegen","x-tgm-scope":"megaadmin"}},"/api/v1/superadmin/webhooks/{id}":{"delete":{"description":"Deaktiviert einen Kunden-Webhook.","operationId":"delete-api-v1-superadmin-webhooks-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Webhook deaktivieren","x-tgm-scope":"megaadmin"},"patch":{"description":"Aktualisiert Name, URL, Events, Secret-Referenz oder Status eines Kunden-Webhooks.","operationId":"patch-api-v1-superadmin-webhooks-1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"example":{"events":"payout.*,billing.*","name":"API Webhook Updated","secret_ref":"env:TGM_WEBHOOK_SECRET","status":"active","url":"https://example.test/tgm-updated"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"MegaAdminToken":[]}],"summary":"SuperAdmin Webhook ändern","x-tgm-scope":"megaadmin"}},"/api/v1/tenant":{"get":{"description":"Liest Stammdaten, Plan und Transfertext des aktuellen Mandanten.","operationId":"get-api-v1-tenant","responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Mandant lesen","x-tgm-scope":"tenant.read"},"patch":{"description":"Aktualisiert Report-Email oder Überweisungstext-Vorlage.","operationId":"patch-api-v1-tenant","requestBody":{"content":{"application/json":{"example":{"report_email":"finance@example.test","transfer_text_template":"Trinkgeld {{tenant_name}} {{date}}"},"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Scope denied"}},"security":[{"ApiKeyAuth":[]}],"summary":"Mandant ändern","x-tgm-scope":"tenant.write"}}},"servers":[{"url":"https://trinkgeldmeister.com"}]}
