Zum Inhalt

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:

{ "wallet": "0x..." }

Response:

{ "token": "sumsub_access_token", "userId": "0x..." }

Externer API-Call:

POST https://api.sumsub.com/resources/accessTokens/sdk
Headers: HMAC-SHA256 Signatur

DB-Update: users.kyc_provider, users.kyc_applicant_id

POST /api/kyc/webhook

Signatur-Verifizierung:

Header: x-payload-digest
Expected: HMAC-SHA256(requestBody, secretKey)

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

none → pending → verified
                → rejected
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:

{
  "kycRequired": true,
  "kycStatus": "none",
  "threshold": 50000000
}


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