KYC tracking
casinocrm.io podporuje čtyři KYC ownership modely — vyberte jednou per tenant, override per-player podle potřeby.
Modely
kyc_model | Kdo iniciuje | Kdo rozhoduje | Webhooks akceptované |
|---|---|---|---|
platform_owns | Casino platforma | Platforma | Ano — kyc.* lifecycle webhooky aktualizují CRM state |
crm_owns | CRM admin (POST /v1/players/:id/kyc/request) | CRM admin (POST .../approve) | Ne — casinocrm.io odmítá inbound kyc.* webhooky (403) |
dual | Kterákoli strana | Kterákoli strana (split podle KYC level — basic přes platformu, source-of-funds přes CRM) | Ano |
none | Nikdo (jen test envs) | — | Ne |
State machine
none → pending → verified
→ rejected
verified → expired (TTL refresh)
verified → pending (level upgrade)
rejected → pending (resubmit)
expired → pending (re-verify)
Forward-only. Žádné verified → rejected (admin používá POST .../revoke, který přejde na expired).
Levels
Operator-defined integer 0..10:
0— žádné KYC1— basic ID (passport / driver's license)2— address verification (utility bill)3— source of funds4+— operator-specific (enhanced due diligence, atd.)
Storage
players.kyc_status, players.kyc_level, players.kyc_history (append-only JSONB), players.kyc_last_event_at, players.kyc_expires_at (TTL pro verified KYC).
Admin akce
POST /v1/players/:id/kyc/request — dostupné pouze když tenant.kyc_model in {crm_owns, dual} AND adapter podporuje kyc.initiate. Přejde none → pending.
POST /v1/players/:id/kyc/approve — dostupné pouze když tenant.kyc_model in {crm_owns, dual} AND adapter podporuje kyc.update. Přejde pending → verified. Volitelný expires_at pro TTL.
POST /v1/players/:id/kyc/revoke — vždy dostupné (admin override). Přejde current → expired.
Webhook události
| Event | from → to |
|---|---|
kyc.submitted | none/rejected/expired → pending |
kyc.approved | pending → verified |
kyc.rejected | pending → rejected |
kyc.expired | verified → expired |
kyc.level_upgraded | verified → pending (nová vyšší level submission) |
History entry shape:
{
"ts": "2026-05-08T12:00:00Z",
"from": "pending",
"to": "verified",
"level": 1,
"actor_kind": "platform" | "crm" | "admin",
"actor_id": "user_abc",
"reason": "documents accepted",
"data": { "provider_ref": "..." }
}
Capability mismatch
Pokud váš tenant pickne crm_owns, ale adapter nepodporuje kyc.update, admin UI zobrazí varování + zakáže Approve tlačítko. Operátoři uvidí trade-off + buď změní adapter nebo přepnou na platform_owns.