Provider API/Game launch
Game launch
API · Operator → Boss HubOpens 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.
| Field | Type | Description |
|---|
| launch_url | uri | The single-use address for the player to open. |
| session_id | string | The game session. Arrives as session_id in callbacks. |
| expires_in | integer | How long launch_url stays valid, in seconds. |
| limits | object | Effective bet limits of this session. Fields: limits. |
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.
| HTTP | Code | Meaning |
|---|
| 302 | | Redirect to the game |
| 410 | LAUNCH_TOKEN_EXPIRED | The address was already opened, has expired, or the sessions were ended. Request a new launch |
| 404 | NOT_FOUND | Unknown address |
| 403 | INVALID_TOKEN, PLAYER_BLOCKED, INTERNAL_ERROR | Your authenticate reply rejected the player |
| 503 | PROVIDER_UNAVAILABLE | authenticate did not answer or did not answer HTTP 200, or the game provider could not open the session (details.provider_code) |
| 500 | INTERNAL_ERROR | authenticate answered HTTP 200 but the body is not JSON |
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/…"
}| Code | HTTP | Meaning |
|---|
| INVALID_SIGNATURE | 401 | Signature headers missing, or the signature could not be verified |
| TIMESTAMP_SKEW | 401 | X-Timestamp is outside ±30 s |
| CREDIT_LIMIT | 402 | Credit limit exceeded; no new sessions (details.source: credit) |
| OPERATOR_SUSPENDED | 402 | Operator suspended, or no production approval on Live |
| IP_NOT_ALLOWED | 403 | IP is not on the allowlist |
| SCOPE_MISSING | 403 | The game.launch scope is missing |
| SCOPE_DENIED | 403 | site_id is unknown, not yours, or not the site of your site-bound key |
| MODULE_DISABLED | 403 | A game of an external provider and the providers module is off |
| GAME_DISABLED | 403 | The game cannot be opened on this site; the reason is in details.source (below) |
| SITE_DISABLED | 403 | The site is off, or a site called on Live is not in Live status |
| MARKET_RESTRICTED | 403 | No RTP variant is eligible under the market rules |
| PLAYER_BLOCKED | 403 | Player restricted, or the bet cap of a player restriction is below the game’s minimum bet (details.source: player_restriction) |
| COUNTRY_BLOCKED | 403 | The game or the provider blocks the player’s country (launch and demo) |
| COUNTRY_REQUIRED | 403 | The game has country restrictions and the player’s country is unknown: send country |
| NOT_FOUND | 404 | No game with this game_id; for demo, the game is not publicly listed |
| DEMO_NOT_AVAILABLE | 404 | Demo: the provider offers no demo for this game |
| REQUEST_ID_CONFLICT | 409 | Same X-Request-Id, different body |
| REQUEST_IN_PROGRESS | 409 | The same X-Request-Id is still being processed |
| SITE_REQUIRED | 422 | Operator-wide key and several sites: site_id is needed |
| VALIDATION_ERROR | 422 | Missing or invalid field (details.fields), missing X-Request-Id, or an invalid recommendation_id (details.field) |
| INVALID_JSON | 422 | The body could not be read as JSON |
| CURRENCY_NOT_SUPPORTED | 422 | The currency is not supported by the site, the wallet settings or the game, or the player has another currency |
| RATE_LIMITED | 429 | Rate limit exceeded |
| PROVIDER_NOT_CONNECTED | 503 | The provider is not connected in this environment |
| PROVIDER_UNAVAILABLE | 503 | Demo: the provider could not be reached |
| MAINTENANCE | 503 | Platform or provider maintenance (details.source: maintenance) |
| GAME_DISABLED details.source | Reason |
|---|
| platform | The game or provider is off on the platform |
| access | You 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 |
| game | The game is retired, or has no live version and is not in early access |
| operator_rule | Closed by your operator-wide rule |
| site_rule | Closed by your site rule |
| limits | No 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.