Skip to main content

Verticals

A vertical is a casino product category — casino, sportsbook, lottery, poker, esports, virtual_sports, bingo. Tenant config picks which verticals are active; effective capabilities intersect tenant config with adapter support.

Why verticals matter

Different verticals have:

  • Different canonical events. Casino settles instantly (bet_placed + bet_settled); sportsbook settles hours-to-days later (sport_bet_placedsport_bet_settled or sport_bet_voided or sport_cashout).
  • Different reporting axes. Sportsbook GGR pivots by sport + bet_type; casino pivots by game category.
  • Different player profiles. Some players are casino-only, some sportsbook-only, most are mixed.

Canonical events per vertical

Casino

bet_placed, bet_settled, bet_won, bet_lost

bet_settled is the canonical event we count for GGR + wagering progress; the others are auxiliary. properties.amount (stake), properties.payout (win), properties.game_id, properties.game_category (slots / live / table / crash / dice / sports / other).

Sportsbook

sport_bet_placed, sport_bet_settled, sport_bet_voided, sport_cashout

Two-phase lifecycle: sport_bet_placed then later one of sport_bet_settled / sport_bet_voided / sport_cashout. properties.sport (football / basketball / tennis / hockey / mma), properties.bet_type (single / accumulator / system), properties.odds (decimal), properties.event_ref (match identifier).

Player vertical activity

players.vertical_activity is a JSONB rollup keyed by vertical:

{
"casino": { "first_at": "2026-01-15T...", "last_at": "2026-05-08T...", "bet_count": 142 },
"sportsbook": { "first_at": "2026-03-02T...", "last_at": "2026-05-07T...", "bet_count": 18 }
}

Stream-processor maintains this on every bet_settled / sport_bet_settled. The admin UI uses key presence to render "casino-only / sportsbook-only / mixed" badges on the player row.

UI gating

The admin Sidebar receives tenant.verticals from the layout. Items with a requires predicate filter dynamically:

  • Sportsbook nav item appears only when tenant.verticals includes sportsbook.
  • Same pattern for future per-vertical reports / segments.

If you operate casino-only today + add sportsbook tomorrow, just open Settings → Tenant configuration + check the box. The sidebar updates immediately; existing journeys/segments untouched.