LivePlay Bingo Integration Docs

Launcher API

The /gamelauncher/* endpoints we expose

These are the endpoints we expose. Aggregators and direct integrators both call the same surface. Authentication is HTTP Basic Auth on all endpoints.

POST /gamelauncher/play

Create a session and return a launch URL.

Request

{
  "operator": "casino_abc",
  "mode": "REAL",
  "gamecode": "live-bingo",
  "currency": "EUR",
  "language": "en",
  "externalsessionid": "sess_xyz_789",
  "playerid": "player_42",
  "brand": "brand_1",
  "channel": "web",
  "country": "MT",
  "ipaddress": "203.0.113.10",
  "testaccount": false
}

mode: "DEMO" uses the same shape — currency is still required. Note that DEMO doesn't change game behaviour today: the wallet is still called (see Mode).

Field reference

Required

FieldDescription
operatorYour operator identifier with us
modeDEMO or REAL. Stored with the session; see Mode
gamecodeWhich game to launch. We give you the value at onboarding. Slots don't have their own game code; they open inside the bingo game
currencyA currency code configured for this game, usually ISO 4217 (e.g. USD, EUR)
languageBCP 47 language tag (the IETF standard for language identifiers, e.g. en, en-GB). Today only en is supported — sending other tags is not guaranteed to work and is not recommended
externalsessionidYour session identifier. See Behaviour for repeat calls
FieldDescription
playeridYour stable identifier for the player
brandBrand within the operator. Set equal to operator if you don't run multiple brands
channelFree-form channel marker, stored with the session. The values listed in the allowed-values reference are guidance — we don't validate the field
countryISO 3166-1 alpha-2 player country. Stored for audit
ipaddressPlayer's IP address. Stored for audit. Note: the field is named ipaddress, not ip
testaccounttrue marks the session as internal/test. Stored with the session; it doesn't change game behaviour today

Optional (stored with the player session)

We accept and store these fields. Apart from displayname, the game doesn't use them yet.

FieldDescription
displaynameThe player's display name. We use it in our reporting
segmentationFree-form segment marker (VIP tier, marketing cohort, etc.)
exiturlURL to send the player back to on exit. Not used by the game yet
depositurlURL where the player can top up their wallet. Not used by the game yet
historyurlURL for transaction history. Not used by the game yet
jurisdictionThe regulatory jurisdiction for this session. Stored only; it doesn't change RTP or replay retention

Response

{
  "sessionid": "<our-session-id>",
  "launchurl": "https://bingo.lpmbackstagedevelop.com/?launchCode=<code>"
}

Each game has its own host, so the host in launchurl depends on the gamecode. Always use the URL exactly as we return it.

Behaviour

  • Repeat calls: while the last launch code is still valid (10 minutes), calling again with the same operator, externalsessionid and currency returns the same sessionid and the same launchurl. After the code expires, the same call creates a new session with a new sessionid.
  • Reusing an externalsessionid with a different gamecode while its launch code is valid is refused (see Errors).
  • launchCode expires after 10 minutes. Until then it can be exchanged more than once (the iframe may reload while starting).
  • The session record has a 24 hour absolute lifetime. It is not refreshed by activity; expiry is fixed at creation. The player token the iframe gets from the launch code lasts 1 hour; after that, a reload, a reconnect, or a slot spin needs a fresh launch URL.
  • country and ipaddress are persisted on the session for audit. We don't enforce geo-rules from these fields.
  • The currency you send must be in the configured currency list for that game instance. If it isn't, /gamelauncher/play returns HTTP 400 with errorcode: 101 and message "Currency does not match instance configuration". We give you the supported list at onboarding.

About /gamelauncher/resolve-launch-code

You may notice an unauthenticated POST /gamelauncher/resolve-launch-code endpoint in network traffic from the iframe. It is an internal frontend bootstrap call: the iframe exchanges its short-lived launchCode (which is itself the credential) for a session token before the game starts. Casinos do not call this endpoint and don't need to.

POST /gamelauncher/replay

Return a URL that renders a past round for player or regulator review.

Request

Only roundid is required. Other fields (language, timezone) are accepted but ignored today. Any finished round we sent to your wallet works, including slot spins (slots:<uuid>). A reversed round or a failed spin returns errorcode: 206.

{
  "roundid": "<round-id-we-issued>"
}

Response

{
  "launchurl": "https://replay.lpmbackstagedevelop.com/?launchCode=<code>"
}

The replay frontend exchanges the embedded launchCode for a session token internally; integrators do not need to interact with that exchange directly. From your side, simply embed the URL we return. Replay launch URLs expire after 10 minutes and must not be cached — request a fresh one for every viewing. See Replay for the full flow.

Game catalogue

We don't currently expose a programmatic /gamelist endpoint. The list of games available to your operator (along with stakes, currencies, languages, and which rooms offer slots) is provided in writing during onboarding and updated whenever it changes. If you need a programmatic feed for an internal admin panel, ask your account manager.

Errors

Launcher API errors use integer error codes, matching the standard seamless-wallet integration convention:

{ "errorcode": 101, "errormessage": "bad request" }
errorcodeHTTP statusMeaning
101400Bad request — missing or malformed field, or the game can't be launched (see messages below)
101500Server-side failure on /gamelauncher/play — distinguish from the 400 case by HTTP status
201401Access denied — bad or missing Basic Auth
206404Round not found, or not finished yet (replay only)
500500Internal server error on /gamelauncher/replay — safe to retry

errormessage values you may see with errorcode: 101 on /gamelauncher/play:

errormessageMeaning
<field> is requiredA required field is missing or empty
mode must be DEMO or REALmode has another value
Game not availableNo game for this operator and gamecode, or the game is switched off right now
<game> has no web client in this environmentThe game isn't offered in this environment
Game not available for this operatorThe game's room is reserved for another operator
Currency does not match instance configurationThe game doesn't run in this currency
Session already exists for a different gamecodeThe externalsessionid is already in use for another game. Use a new one

Classify by HTTP status, not just errorcode. The two endpoints handle internal errors slightly differently: replay returns errorcode: 500 with HTTP 500; play returns errorcode: 101 with HTTP 500.

Note: this is different from the wallet-side error envelope used in direct integration, where the codes you return to us are strings (NOT_SUFFICIENT_FUNDS, etc.). Two separate surfaces, two separate code conventions.

Rate limits

We don't currently enforce a per-operator throttle on the launcher API. The only effective ceiling is the AWS API Gateway account-level default. Talk to us before sending sustained traffic above ~20 requests per second per operator so we can provision a dedicated usage plan if needed.

Versioning

Versioning today: the launcher API is unversioned and shared across all integrators. Treat the current shape as v1. We will announce breaking changes in advance and version per integrator at that point — likely as /v1/gamelauncher/... or via per-operator subpaths.

On this page