Skip to content

Launching Games

When a player clicks a game tile, the frontend requests a secure launchUrl from the platform; the platform establishes a session with the provider and returns a URL to load in an <iframe>.

Public surface

MemberReturnsAuthDescription
launchGame(gameId, mode)Promise<GameSession>required (REAL)Start a game session and get the launch URL

Launch modes

ModeAuthMoneyNotes
REALRequired; an authenticated session with a walletPlays with real money; the provider reads and updates the wallet balance through the platformLogin required before launching
DEMOPublicFree play, no funds, no walletOnly offered when game.hasDemo is true

Rules

text
GIVEN an authenticated player with a wallet
WHEN launchGame(gameId, 'REAL') is called for an existing game
THEN a provider session is established and a GameSession is returned
     with a launchUrl to embed in an iframe.

GIVEN no authenticated session (or an expired one)
WHEN launchGame(gameId, 'REAL') is called
THEN the call rejects with the common UNAUTHORIZED error;
     route the player to login.

GIVEN a game whose hasDemo is false
WHEN launchGame(gameId, 'DEMO') is called
THEN the call rejects with GAME_DEMO_UNAVAILABLE;
     show "this game does not support free play."

GIVEN an unknown gameId
WHEN launchGame is called in any mode
THEN the call rejects with GAME_NOT_FOUND.

If the access token has expired, the SDK silently refreshes and retries once before surfacing an error (see State & Security). REAL launches are blocked during an active self-exclusion (RG_SELF_EXCLUDED; see Self-Exclusion & Reality Checks).

javascript
try {
  const session = await sdk.games.launchGame('game_sweet_bonanza', 'REAL');
  document.getElementById('game-iframe').src = session.launchUrl;
} catch (error) {
  // Branch on error.code; never on message text (see Error Reference)
}

GameSession

Launching is stateless for 1.0.x: the session is the launch URL plus its mode; load it in an iframe and manage the frame's lifecycle yourself. Session teardown/close events are a future capability.

typescript
type GameLaunchMode = 'REAL' | 'DEMO';

interface GameSession {
  sessionId: string;  // opaque; quote it in support tickets
  launchUrl: string;  // embed in an <iframe>
  mode: GameLaunchMode;
}

Error contract

CodeError classHTTP statusTrigger conditionRetryable
GAME_NOT_FOUNDGameNotFoundError404Unknown gameIdNo
GAME_DEMO_UNAVAILABLEDemoUnavailableError409DEMO mode on a game with hasDemo: falseNo (launch REAL instead)
GAME_LAUNCH_FAILEDGameLaunchFailedError502The provider rejected or failed the session handshakeYes (retry the launch)

Common errors (UNAUTHORIZED, NETWORK_ERROR, …) are defined once in the Error Reference.

Sandbox

All catalog games launch with a mock provider URL. REAL launches enforce the authenticated session exactly as production (the 401 gate); DEMO launches are public. Games without demo support (e.g. the seeded live-casino title) reject DEMO with GAME_DEMO_UNAVAILABLE.

Divergence flag: sandbox launch URLs point at a mock provider page, not a real provider; in-game balance movement is simulated only through the sandbox round controls (see Round History).