KYC flow
Translator note: machine-translated baseline. Needs human review by a native UK speaker. EN source is canonical.
KYC має чотири ownership моделі — оберіть один раз для tenant; модель визначає, які сторони контракту підтримуєте.
Модель: platform_owns
Найбільш поширена для казино. Платформа обробляє весь KYC; CRM віддзеркалює state через webhooks.
Ви реалізуєте: webhook senders для lifecycle нижче.
Ви НЕ реалізуєте: outbound KYC endpoints (CRM ніколи вам для KYC не дзвонить).
Webhook події
POST /v1/adapters/<slug>/webhooks/kyc-events
// kyc.submitted
{
"event": "kyc.submitted",
"event_id": "evt-uuid",
"ts": "2026-05-08T...",
"player_external_id": "casino_player_001",
"level": 1,
"data": { "documents": ["passport", "selfie"] }
}
// kyc.approved
{
"event": "kyc.approved",
"level": 2,
"data": { "expires_at": "2027-05-08T..." } // опційний TTL
}
// kyc.rejected
{
"event": "kyc.rejected",
"level": 1,
"data": { "reason": "document_expired" }
}
// kyc.expired
{ "event": "kyc.expired", "level": 2, "data": {} }
// kyc.level_upgraded — гравець почав submit на вищий level
{ "event": "kyc.level_upgraded", "level": 3, "data": {} }
State transitions enforce-ються server-side: none → pending → {verified, rejected}, verified → expired, тощо.
Модель: crm_owns
Менш поширена — типова для операторів з custom KYC workflow. CRM admin ініціює; платформа слухає вердикти.
Ви реалізуєте: outbound KYC endpoints.
Ви НЕ реалізуєте: webhook senders. casinocrm.io відмовляє inbound kyc.* webhooks з 403 для crm_owns tenants.
POST <your-base>/v1/kyc/initiate
{
"tenant_id": "...",
"player_external_id": "casino_player_001",
"level": 1,
"requirements": ["passport", "address_proof"]
}
Response: { ok: true, provider_ref?: "..." } або { ok: false, code, message }.
POST <your-base>/v1/kyc/update
CRM admin approves / rejects на CRM стороні; casinocrm.io інформує вашу платформу:
{
"tenant_id": "...",
"player_external_id": "casino_player_001",
"status": "verified", // або "rejected"
"level": 1,
"reason": "documents validated"
}
GET <your-base>/v1/kyc/:player_external_id
Reconciliation lookup:
{
"status": "verified",
"level": 2,
"last_updated": "..."
}
Модель: dual
Обидва flow одночасно — типово для MGA / UK, де:
- Платформа робить ID verification (
level 1,level 2) - CRM робить affordability checks (
level 3)
Ви реалізуєте І outbound endpoints І webhook senders. Кожен KYC level природно падає на один або інший бік; casinocrm.io не вимагає, який бік обробляє який level.
Модель: none
Жоден KYC не трекається для цього tenant. casinocrm.io відмовляє всі KYC webhooks І не показує KYC admin actions. Корисно тільки для нерегульованих test envs.
Зберігання state
Незалежно від моделі CRM зберігає:
players.kyc_status -- none | pending | verified | rejected | expired
players.kyc_level -- 0..10
players.kyc_history -- append-only audit JSONB
players.kyc_last_event_at
players.kyc_expires_at
Admin UI рендерить timeline безпосередньо з kyc_history.