13 - KYC & Compliance¶
Dokument: KYC-Integration & Responsible Gaming Stand: 28.02.2026 Scope: Sumsub-Integration, AML, Spielerschutz Status: Audit-ready
1. KYC-System¶
1.1 Provider: Sumsub¶
| Parameter | Beschreibung |
|---|---|
| Provider | Sumsub (WebSDK) |
| Integration | Token-basiert via API |
| Trigger | Bei Claim über KYC-Schwellenwert |
1.2 KYC-Flow¶
1. User will Gewinne claimen
2. Backend prüft: totalAmount > threshold?
→ Nein: Claim ohne KYC erlaubt
→ Ja: kycRequired: true in Payload
3. User startet KYC über Account-Seite
4. POST /api/kyc/token → Sumsub Access Token
5. Sumsub WebSDK öffnet sich
6. User durchläuft Verifizierung
7. Sumsub sendet Webhook → POST /api/kyc/webhook
8. Backend aktualisiert kyc_status
9. User kann Claim erneut versuchen
1.3 API-Endpoints¶
POST /api/kyc/token¶
Request:
Response:
Externer API-Call:
DB-Update: users.kyc_provider, users.kyc_applicant_id
POST /api/kyc/webhook¶
Signatur-Verifizierung:
Events:
| Event | KYC-Status | Beschreibung |
|---|---|---|
applicantReviewed (GREEN) |
verified |
Verifizierung erfolgreich |
applicantReviewed (RED) |
rejected |
Verifizierung abgelehnt |
applicantPending |
pending |
Review gestartet |
applicantOnHold |
pending |
Manuelle Prüfung |
1.4 KYC-Status-Lifecycle¶
| Status | Claim erlaubt | Beschreibung |
|---|---|---|
none |
Unter Schwelle | Noch keine Verifizierung |
pending |
Nein | Verifizierung läuft |
verified |
Ja | Identität bestätigt |
rejected |
Nein | Verifizierung fehlgeschlagen |
1.5 UI-Integration¶
Komponente: KycVerification.tsx
- Status-Anzeige im Account-Bereich
- Badge für KYC-Level
- Verifizierungs-Button (bei Bedarf)
- Ablehnungsgrund bei rejected
2. KYC-Schwellenwerte¶
| Konfiguration | Quelle | Beschreibung |
|---|---|---|
| Schwellenwert | bo_config (DB) |
Betrag ab dem KYC erforderlich |
| Prüfung | /api/claim/payload |
Vor Claim-Payload-Auslieferung |
Claim-Payload-Response bei KYC-Erfordernis:
3. Responsible Gaming¶
3.1 Spending Limits¶
| Limit | Feld | Prüfungspunkt |
|---|---|---|
| Tägliches Limit | dailyLimitUsdt |
/api/buy/intent |
| Wöchentliches Limit | weeklyLimitUsdt |
/api/buy/intent |
| Monatliches Limit | monthlyLimitUsdt |
/api/buy/intent |
Berechnung:
spentToday = SUM(ticket_cost) WHERE created_at >= today
spentThisWeek = SUM(ticket_cost) WHERE created_at >= monday
spentThisMonth = SUM(ticket_cost) WHERE created_at >= 1st of month
Limit-Überschreitung:
{
"error": "LIMIT_DAILY",
"message": "Daily spending limit exceeded",
"limit": 100000000,
"spent": 95000000,
"remaining": 5000000
}
3.2 Self-Exclusion¶
| Parameter | Beschreibung |
|---|---|
| Minimum | 24 Stunden |
| Maximum | 365 Tage |
| Verkürzung | NICHT möglich |
| Verlängerung | Möglich |
| Wirkung | Alle Käufe blockiert |
| Prüfung | /api/buy/intent → 403 |
Implementierung:
// POST /api/user/profile
if (selfExclusionUntil && currentExclusion) {
if (new Date(selfExclusionUntil) < new Date(currentExclusion)) {
return 400; // Verkürzung nicht erlaubt
}
}
3.3 Altersverifizierung¶
| Regel | Beschreibung |
|---|---|
| Mindestalter | 18 Jahre |
| Prüfung | Bei Profil-Erstellung/Änderung |
| Berechnung | dateOfBirth + 18 Jahre <= today |
| Fehler | 400: "Must be at least 18 years old" |
3.4 UI-Elemente¶
| Element | Ort | Beschreibung |
|---|---|---|
| 18+ Hinweis | Login-Seite | Alterswarnung |
| Limit-Fortschritt | Dashboard | Visuelle Balken |
| Limit-Einstellungen | Account | Konfiguration |
| Self-Exclusion | Account | Datumswähler |
| Ausgaben-Übersicht | Dashboard | Tages/Wochen/Monats-Statistiken |
4. Compliance-Übersicht¶
| Anforderung | Status | Implementierung |
|---|---|---|
| KYC bei großen Auszahlungen | Implementiert | Sumsub WebSDK |
| Altersverifizierung | Implementiert | Geburtsdatum-Prüfung |
| Spending Limits | Implementiert | 3-Stufen-Limits |
| Self-Exclusion | Implementiert | Nicht verkürzbar |
| Affiliate-Anti-Abuse | Implementiert | Aktivitäts-Check |
| Transaktions-Transparenz | Implementiert | On-Chain, Arbiscan |
| Error-Logging | Implementiert | Server-seitiges Logging |
Weiterführende Dokumente: - 10 - Sicherheit - 02 - Authentifizierung - 07 - API Referenz