Responsible Gaming

The RGS provides a set of responsible-gaming (RG) controls that operators can configure per market: reality checks, session time limits, bet limits, and self-exclusion enforcement. All RG events are audited and available in reporting.

The RGS is the enforcement point, not the system of record for player limits. You own the player relationship and decide who is excluded and what limits apply per jurisdiction; the RGS enforces those decisions at launch and during play, and records an audit trail.

Reality Checks

Periodic prompts showing session duration and net win/loss that the player must acknowledge.

Session Limits

A maximum continuous play-session length, after which the session is terminated gracefully.

Self-Exclusion

Excluded players are refused at launch based on a flag from your authenticate callback.

Per-Jurisdiction Configuration

Reality-check intervals and session time limits are configured per operator and per jurisdiction. The jurisdiction is the countryCode supplied at launch (ISO 3166-1 alpha-2, or an ISO 3166-2 region such as CA-ON).

Configuration is a map keyed by jurisdiction code, with a * entry as the default for any jurisdiction without an explicit entry:

{
  "responsibleGaming": {
    "GB": { "realityCheckMinutes": 60, "realityCheckEnforced": true, "sessionLimitMinutes": 180, "maxBetUsd": "50" },
    "MT": { "realityCheckMinutes": 60, "realityCheckEnforced": true, "sessionLimitMinutes": 0 },
    "*":  { "realityCheckMinutes": 30, "sessionLimitMinutes": 0 }
  }
}
Field Type Description
realityCheckMinutes integer Reality-check interval in minutes. 0 disables reality checks.
realityCheckEnforced boolean When true, a due reality check is enforced server-side (a new round is refused until acknowledged). When false (default) the check is advisory and the client enforces it. Ignored when realityCheckMinutes is 0.
sessionLimitMinutes integer Maximum continuous play-session length in minutes. 0 disables the limit.
maxBetUsd string Per-jurisdiction cap on a round's worst-case payout, in USD (decimal string). Only ever tightens the operator/session bet limit. 0 (or omitted) disables the per-jurisdiction cap.

Resolution is: exact jurisdiction match → * default → disabled. A jurisdiction with no entry and no * default has all RG controls disabled.

RG configuration is set during onboarding or via the backoffice operator settings. Contact us to configure it for your markets.

Self-Exclusion

To refuse launches for a self-excluded player, return excluded: true from your /callback/authenticate response. The RGS then rejects POST /operator/launch with HTTP 403 and error code player_self_excluded, and records a self_exclusion_blocked audit event. No session is created.

Field Type Required Description
excluded boolean No true if the player is self-excluded. The launch is refused.
excludedUntil string No Optional exclusion end date (YYYY-MM-DD), recorded for auditing.
{
  "requestId": "unique-request-id",
  "status": "OK",
  "balance": "100.00",
  "excluded": true,
  "excludedUntil": "2026-12-31"
}

excluded is distinct from the ERROR_PLAYER_DISABLED status. Use ERROR_PLAYER_DISABLED for a generally locked or disabled account, and excluded specifically for self-exclusion so it is accounted for separately in RG reporting.

Bet Limits

Bet limits cap the worst-case payout (exposure) of a bet. They are enforced on every POST /game/play and come from three sources, applied so each only ever tightens the limit:

  • Operator exposure limits — the maxExposure map on your operator config sets a per-game (and per-side-bet) cap in USD. Configured via onboarding or backoffice.
  • Per-session overrides — an optional betLimits object on POST /operator/launch narrows the limits for a single session.
  • Per-jurisdiction capmaxBetUsd in the responsible-gaming config caps the worst-case payout for a market. When it is the most restrictive of the three, it is the binding limit and rejections are audited with limitSource: "jurisdiction".
{
  "playerId": "player-1",
  "currency": "USD",
  "gameCode": "dice-alpha",
  "countryCode": "GB",
  "betLimits": { "minBet": "1", "maxWin": "200" }
}
Field Type Description
minBet string Minimum bet amount per spin, in USD (decimal string).
maxWin string Maximum worst-case payout per round, in USD (decimal string).

Session overrides must satisfy 0 <= minBet <= maxWin <= operator maxExposure for the game, otherwise the launch is rejected with invalid_bet_limits. Limits are stored in USD and converted to the session currency before enforcement. A bet whose worst-case payout exceeds the limit is rejected with bet_limit_exceeded and recorded as a bet_limit_rejected audit event; a bet below the session minimum is rejected with bet_below_min.

On session reuse — when an active session already exists for the same player and game — the original session's betLimits and countryCode are kept, and any newly supplied values are ignored. This means the reused session's original jurisdiction continues to determine which RG config applies.

Reality Checks & Session State

The game client reads the current RG state from POST /game/current, which includes a responsibleGaming block. This lets the client render the reality-check prompt (session duration and net win/loss) and any session-time warning.

{
  "balance": "98.50",
  "active": false,
  "responsibleGaming": {
    "realityCheckIntervalMinutes": 60,
    "realityCheckDue": true,
    "realityCheckEnforced": true,
    "sessionLimitMinutes": 180,
    "sessionElapsedSeconds": 3720,
    "sessionTimeRemainingSeconds": 7080,
    "netWager": "120.00",
    "netPayout": "95.00",
    "netWinLoss": "-25.00"
  }
}
Field Type Description
realityCheckIntervalMinutes integer Configured reality-check interval. 0 when disabled.
realityCheckDue boolean true when a reality check should be shown now.
realityCheckEnforced boolean true when the check is enforced server-side (play is refused until acknowledged); false when advisory.
sessionLimitMinutes integer Configured session time limit. 0 when disabled.
sessionElapsedSeconds integer Seconds of continuous play since the session started.
sessionTimeRemainingSeconds integer Seconds remaining before the session limit. 0 when disabled or reached.
netWager string Total wagered this play session, in the session currency.
netPayout string Total paid out this play session, in the session currency.
netWinLoss string Net result (netPayout − netWager) this play session, in the session currency.

The play session is a continuous unit of play. It survives session-token refresh, so reality-check intervals, the session limit, and net win/loss are measured across the whole play session rather than resetting on each token rotation.

Acknowledging a Reality Check

When the player acknowledges the reality-check prompt, the client calls POST /session/acknowledge-reality-check. This resets the interval (the next reality check is measured from the acknowledgement), records a reality_check_acknowledged audit event, and returns a refreshed responsibleGaming snapshot.

Advisory vs enforced. By default a due reality check is advisory: the RGS surfaces realityCheckDue and the client is responsible for showing the prompt and suspending play. When realityCheckEnforced is set for the jurisdiction, the RGS enforces it: starting a new round is refused with HTTP 409 and error code reality_check_required until the player acknowledges (an in-progress round may still finish). The session is not terminated — play resumes immediately after acknowledgement. Choose enforced mode for markets whose regulators require the reality check to suspend play (e.g. MGA).

Session Time Limits

When a play session reaches its configured sessionLimitMinutes, the session is terminated gracefully:

  • An in-progress round (e.g. an open Blackjack or Mines round) may still be played to completion so its state is saved.
  • Starting a new round is refused with HTTP 409 and error code session_limit_reached, and the session is terminated. A session_limit_reached audit event is recorded.

The player must launch a new session to continue playing.

Audit & Reporting

Every RG action is recorded as an append-only audit event, available via the backoffice reporting endpoint GET /backoffice/operators/{operatorId}/rg-events (filterable by playerId, type, and date range, cursor-paginated).

Event type Recorded when
reality_check_acknowledged A player acknowledges a reality-check prompt.
reality_check_required A new round is refused because an enforced reality check is due.
session_limit_reached A session is terminated for exceeding its time limit.
self_exclusion_blocked A launch is refused because the player is self-excluded.
bet_limit_rejected A bet or mid-round action is rejected for exceeding a bet limit.

Error Codes

Code HTTP Meaning
player_self_excluded 403 Launch refused — the authenticate callback reported excluded: true.
session_limit_reached 409 A new round was refused because the session time limit was reached.
reality_check_required 409 A new round was refused because an enforced reality check is due; acknowledge it to continue.
bet_limit_exceeded 403 The bet's worst-case payout exceeds the applicable limit.
bet_below_min 403 The bet is below the session's minimum bet.
invalid_bet_limits 400 The betLimits supplied at launch are invalid.

Next Steps

Wallet Callbacks Authenticate callback fields, including self-exclusion