Canonical events
When you map your platform's events into UCRM's canonical names, every reporting / segmentation / journey path works automatically. Use custom_* prefix for platform-specific events that don't fit the canonical taxonomy.
Identity / session
| Event | Required properties |
|---|---|
signup | — |
login | — |
logout | — |
session_start | — |
session_end | — |
page_view | path |
click | target |
KYC
| Event | Required properties |
|---|---|
kyc_submitted | level, documents? |
kyc_approved | level, expires_at? |
kyc_rejected | level, reason |
kyc_expired | level |
kyc_level_upgraded | from_level, to_level |
Responsible gaming
| Event | Required properties |
|---|---|
self_exclusion_set | until?, reason? |
self_exclusion_lifted | reason |
deposit_limit_set | kind (daily/weekly/monthly), amount, currency |
deposit_limit_reached | kind, attempted_amount, currency |
loss_limit_set / loss_limit_reached | same shape |
session_limit_warning / session_limit_exceeded | minutes_used |
reality_check | triggered_at, acknowledged? |
cooldown_entered | duration_minutes |
Money in/out
| Event | Required properties |
|---|---|
deposit_initiated | amount, currency, transaction_id, payment_method? |
deposit_confirmed | amount, currency, transaction_id, payment_method? |
deposit_failed | transaction_id, reason |
withdrawal_requested | amount, currency, transaction_id |
withdrawal_confirmed | amount, currency, transaction_id |
withdrawal_failed | transaction_id, reason |
amount is in smallest currency unit (cents / sat) — see Multi-currency. UCRM will enrich with amount_base + base_currency + fx_rate_locked at ingestion.
Wagering — casino
| Event | Required properties |
|---|---|
bet_placed | amount, currency, bet_id, game_id, game_category |
bet_settled | amount, payout, currency, bet_id, game_id, game_category, outcome |
bet_won | (optional — bet_settled is the canonical settlement event) |
bet_lost | (optional) |
game_category ∈ slots | live | table | crash | dice | sports | other (we collapse anything else to other).
outcome ∈ won | lost.
Wagering — sportsbook
Two-phase lifecycle: a bet is placed, then later settled OR voided OR cashout (player early-settle).
| Event | Required properties |
|---|---|
sport_bet_placed | amount, currency, bet_id, sport, bet_type, odds, event_ref |
sport_bet_settled | amount, payout, currency, bet_id, outcome |
sport_bet_voided | bet_id, reason |
sport_cashout | amount, payout, currency, bet_id |
sport ∈ football | basketball | tennis | hockey | mma | … (operator-defined, but stick to common values for cross-tenant analytics).
bet_type ∈ single | accumulator | system.
event_ref is the match identifier (your platform's id; doesn't need to map to anything in UCRM).
Bonuses
UCRM tracks bonus state via webhooks (see Bonus flow), not these events. bonus_* events are for player-side signals (player claimed / bonus completed visible to player) — separate from the platform-side state machine.
| Event | Required properties |
|---|---|
bonus_claimed | bonus_id |
bonus_wagered | bonus_id, amount, currency |
bonus_completed | bonus_id |
bonus_expired | bonus_id |
Custom events
Anything not in the canonical list MUST be prefixed custom_:
{
"event": "custom_slot_jackpot_won",
"external_id": "...",
"properties": { "amount": 50000, "game_id": "starburst", "tier": "minor" }
}
UCRM accepts custom events but doesn't enforce a schema. Use them in segments (event aggregation: custom_slot_jackpot_won → count > 0).