Перейти до основного вмісту

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.