Boss HubBoss HubDocs
ChangelogStatus
Provider API/Game launch

Game launch

API · Operator → Boss Hub
POST/v1/game/launch

Opens a real-money game session for a player. The returned launch_url is single-use and valid for expires_in seconds (60 s by default); redirect the player to it. The player record is created automatically on the first launch, per site and environment. Requires the game.launch scope.

Headers

HeaderDescription
X-Operator-IdYour operator ID
X-TimestampUnix seconds. Rejected outside ±30 s
X-Signaturehex(HMAC_SHA256(secret, ts + "." + METHOD + "." + path?query + "." + body))
X-Request-IdRequired, at most 128 characters. The same ID and body return the first response (4xx included); a different body gets a 409. See Idempotency
X-Api-KeyOptional. Selects the right secret when you have several keys

Body parameters

game_idstringrequired
Game code, e.g. sultans-ember.
player_idstringrequired
The player ID on the operator side. Returned as is in callbacks.
currencyISO 4217required
Session currency: USD, EUR, TRY. It must be supported by the site, the wallet settings and the game. A player’s currency is fixed by their first launch on a site; the same player_id in another currency gets 422 CURRENCY_NOT_SUPPORTED.
tokenstringrequired
Your player session token. Sent back to you in the authenticate callback.
site_idstring
Site code, e.g. site_mrd01. Inferred with a site-bound key; with an operator-wide key, inferred only if you have exactly one site, otherwise required.
languagestring
Game language: tr, en. Default tr.
rtp_variantstring
Requested RTP variant: v96, v94, v92. If it is not eligible, it changes by the rule below; no error.
lobby_urluri
Address for returning to the lobby, an absolute URL. Defaults to the Lobby URL of the wallet settings in effect for the site: the site’s own wallet settings if it has them (empty stays empty), otherwise the operator’s.
deposit_urluri
Deposit address, an absolute URL. Defaults to the Deposit URL of the wallet settings in effect for the site (same rule as the lobby address).
devicestring
Device: desktop, mobile. Default desktop.
player_refstring
External player reference, at most 100 characters, e.g. 7731-0042. Shown as the external ID in the portal.
player_usernamestring
The player’s username, at most 100 characters. Used for search in the portal.
device_fpstring
Device fingerprint, at most 128 characters. Input of the multi-account rule; if you do not send it, the rule stays silent.
recommendation_idstring
If the player opened the game from a recommendation, the ID from the recommendations response, at most 100 characters. Written to the session; 422 VALIDATION_ERROR (details.field) if its signature does not match.
countrystring
The player’s country, ISO 3166-1 alpha-2 (TR, DE); lowercase is uppercased. Written to the player and the session; if you do not send it, the player’s last known country is used. The tournament country filter and the country breakdown of reports read this value.
player_ipstring
The player’s IP address (IPv4 or IPv6). Written to the session; if you do not send it, the request’s address is written.
RTP: If your site has a market, the variant is chosen by the market rules. Boss Originals games need an approved certification for that market on the game’s live version. For games of external providers (e.g. EGT) certification is the provider’s responsibility; every variant counts as certified. The requested variant is used if eligible (certified and RTP ≥ the market’s minimum RTP); otherwise the lowest eligible variant applies (v92 → v94). If none is eligible: 403 MARKET_RESTRICTED. On a site without a market, the requested variant is used, otherwise the site and operator preference, otherwise the game’s default.
Credit limit: When the limit is exceeded, only new sessions are blocked. Open sessions keep playing.
Country restrictions: A provider or a game may block some countries; the list is blocked_countries in the GET /v1/games response. If the effective country is on the list, you get 403 COUNTRY_BLOCKED. If the list is not empty and the country is unknown (neither country was sent nor is it on the player record), you get 403 COUNTRY_REQUIRED. With an empty list the result does not change even if you send no country.
POST /v1/game/launch HTTP/1.1
Host: staging.example.com
Content-Type: application/json
X-Operator-Id: op_meridyen
X-Timestamp: 1762344000
X-Signature: 9f2c0b…e41a
X-Request-Id: req_01HF3K7A

{
  "game_id": "sultans-ember",
  "site_id": "site_mrd01",
  "player_id": "u_88213",
  "player_ref": "7731-0042",
  "player_username": "kral",
  "token": "tok_8f2a6c41",
  "currency": "USD",
  "language": "tr",
  "rtp_variant": "v96",
  "lobby_url": "https://casino.example/lobby",
  "deposit_url": "https://casino.example/deposit",
  "device": "mobile",
  "country": "TR",
  "player_ip": "203.0.113.24"
}
200Session opened
{
  "launch_url": "https://api.example.com/s/7Hq…",
  "session_id": "ses_01HF3K7M",
  "expires_in": 60,
  "limits": {
    "currency": "USD",
    "min_bet": 0.20,
    "max_bet": 100.00,
    "default_bet": 1.00,
    "source": { "min_bet": "platform", "max_bet": "site" }
  }
}
402Credit limit exceeded or operator suspended
{
  "code": "CREDIT_LIMIT",
  "message": "Credit limit exceeded; no new game can be opened.",
  "request_id": "req_01HF3Q2N",
  "details": { "source": "credit" }
}
403No RTP variant eligible under the market rules
{
  "code": "MARKET_RESTRICTED",
  "message": "A market rule does not allow this game.",
  "request_id": "req_01HF3Q2P",
  "details": { "source": "market_rule" }
}

Response fields

FieldTypeDescription
launch_urluriThe single-use address for the player to open.
session_idstringThe game session. Arrives as session_id in callbacks.
expires_inintegerHow long launch_url stays valid, in seconds.
limitsobjectEffective bet limits of this session. Fields: limits.

Opening launch_url

When the player’s browser opens launch_url, Boss Hub calls your authenticate callback, then redirects the player to the game client. The address opens once; if you use an iframe, allow the game addresses.

HTTPCodeMeaning
302Redirect to the game
410LAUNCH_TOKEN_EXPIREDThe address was already opened, has expired, or the sessions were ended. Request a new launch
404NOT_FOUNDUnknown address
403INVALID_TOKEN, PLAYER_BLOCKED, INTERNAL_ERRORYour authenticate reply rejected the player
503PROVIDER_UNAVAILABLEauthenticate did not answer or did not answer HTTP 200, or the game provider could not open the session (details.provider_code)
500INTERNAL_ERRORauthenticate answered HTTP 200 but the body is not JSON

Demo session

POST /v1/game/demo needs no signature and no X-Request-Id. It works only for publicly listed games that are live or ready for release. It is limited to 60 requests per minute per IP; it creates no player or ledger record.

game_idstringrequired
Game code, e.g. sultans-ember.
currencyISO 4217
USD (default), EUR, TRY.
languagestring
Game language: tr, en. Default tr.
countrystring
The player’s country. If you send it, the game’s country restrictions apply (403 COUNTRY_BLOCKED); if not, the demo opens.
POST /v1/game/demo HTTP/1.1
Host: staging.example.com
Content-Type: application/json

{
  "game_id": "sultans-ember",
  "currency": "USD",
  "language": "tr"
}
200Demo address
{
  "launch_url": "https://play.example.com/demo/…"
}

Error codes

CodeHTTPMeaning
INVALID_SIGNATURE401Signature headers missing, or the signature could not be verified
TIMESTAMP_SKEW401X-Timestamp is outside ±30 s
CREDIT_LIMIT402Credit limit exceeded; no new sessions (details.source: credit)
OPERATOR_SUSPENDED402Operator suspended, or no production approval on Live
IP_NOT_ALLOWED403IP is not on the allowlist
SCOPE_MISSING403The game.launch scope is missing
SCOPE_DENIED403site_id is unknown, not yours, or not the site of your site-bound key
MODULE_DISABLED403A game of an external provider and the providers module is off
GAME_DISABLED403The game cannot be opened on this site; the reason is in details.source (below)
SITE_DISABLED403The site is off, or a site called on Live is not in Live status
MARKET_RESTRICTED403No RTP variant is eligible under the market rules
PLAYER_BLOCKED403Player restricted, or the bet cap of a player restriction is below the game’s minimum bet (details.source: player_restriction)
COUNTRY_BLOCKED403The game or the provider blocks the player’s country (launch and demo)
COUNTRY_REQUIRED403The game has country restrictions and the player’s country is unknown: send country
NOT_FOUND404No game with this game_id; for demo, the game is not publicly listed
DEMO_NOT_AVAILABLE404Demo: the provider offers no demo for this game
REQUEST_ID_CONFLICT409Same X-Request-Id, different body
REQUEST_IN_PROGRESS409The same X-Request-Id is still being processed
SITE_REQUIRED422Operator-wide key and several sites: site_id is needed
VALIDATION_ERROR422Missing or invalid field (details.fields), missing X-Request-Id, or an invalid recommendation_id (details.field)
INVALID_JSON422The body could not be read as JSON
CURRENCY_NOT_SUPPORTED422The currency is not supported by the site, the wallet settings or the game, or the player has another currency
RATE_LIMITED429Rate limit exceeded
PROVIDER_NOT_CONNECTED503The provider is not connected in this environment
PROVIDER_UNAVAILABLE503Demo: the provider could not be reached
MAINTENANCE503Platform or provider maintenance (details.source: maintenance)
GAME_DISABLED details.sourceReason
platformThe game or provider is off on the platform
accessYou have no access to the provider, or the provider is not open in this environment (on Live it must have been taken live); or the game is not in your selected game list
gameThe game is retired, or has no live version and is not in early access
operator_ruleClosed by your operator-wide rule
site_ruleClosed by your site rule
limitsNo bet limits are defined in this currency

Order of checks: JSON parsing and body validation, timestamp, signature, IP, rate limit, X-Request-Id, scope; then game, site, maintenance, operator, site status, module, game access and rules, market, credit, country, provider connection, currency, limits and player. The code of the first closed step is returned.

← PreviousGame recommendationsNext →Round lookup & replay