Game list
API · Operator → Boss HubReturns the games that can be opened on the selected site right now. The list goes through the same gate as launch: provider access, availability rules, market rules, maintenance, operator and site status. Lobby categories and ordering are included. Requires the games.read scope.
Headers
| Header | Description |
|---|---|
| X-Operator-Id | Your operator ID |
| X-Timestamp | Unix seconds. Rejected outside ±30 s |
| X-Signature | hex(HMAC_SHA256(secret, ts + "." + METHOD + "." + path?query + "." + body)) |
| X-Api-Key | Optional. Selects the right secret when you have several keys |
Game detail
GET /v1/games/{game_id} returns a single game with the same Game schema. It returns the game even if it is closed on your site right now; launch tells whether it opens. If the game does not exist, is retired, you have no access to its provider, or it is not in your selected game list, you get 404 NOT_FOUND.
{
"games": [
{
"id": "sultans-ember",
"name": "Sultan’s Ember",
"description": "6×5 ızgarada kademeli çarpanlar.",
"provider": "boss-originals",
"rtp_variants": ["v96", "v94", "v92"],
"volatility": "high",
"max_win_x": 5000,
"features": {
"bonus_buy": true,
"ante_bet": true,
"autoplay": false,
"turbo": false,
"gamble": false
},
"limits": {
"currency": "USD",
"min_bet": 0.20,
"max_bet": 100.00,
"default_bet": 1.00,
"source": { "min_bet": "platform", "max_bet": "site" }
},
"tags": ["new", "jackpot"],
"categories": ["featured"],
"sort": 1,
"assets": {
"tile": "https://api.example.com/files/fil_01HF2Z…?exp=1762430400&sig=…",
"portrait": "https://api.example.com/files/fil_01HF30…?exp=1762430400&sig=…"
},
"currencies": ["USD", "EUR", "TRY"],
"release_at": "2026-10-14",
"retire_at": null,
"updated_at": "2026-11-05T14:30:00.000Z",
"blocked_countries": []
}
],
"categories": [
{
"key": "featured",
"name": { "tr": "Öne çıkanlar", "en": "Featured" },
"mode": "manual",
"auto_rule": null,
"games": ["sultans-ember"]
}
]
}{
"code": "NOT_FOUND",
"message": "Record not found.",
"request_id": "req_01HF3Q2N"
}Game fields
| Field | Type | Description |
|---|---|---|
| id | string | Game code. Used as game_id in launch and callbacks. |
| name | string | The game’s name. |
| description | string | null | Game description in the lang language. |
| provider | string | Provider code. |
| rtp_variants | string[] | RTP variants on offer: v96, v94, v92. |
| volatility | string | low, medium, high, very_high. |
| max_win_x | integer | Maximum win as a multiple of the bet. |
| features | object | Feature flags: bonus_buy, ante_bet, autoplay, turbo, gamble. |
| limits | object | null | Effective bet limits, see below. null when no limit is defined in this currency; such a game cannot be opened. |
| tags | string[] | Tags, e.g. new, jackpot. |
| categories | string[] | Lobby categories the game belongs to. |
| sort | integer | Position in the lobby; 999999 when none is set. With category, the position in that category (from 1). |
| assets | object | Images: tile, portrait. Signed addresses valid for 24 hours; do not store them, refresh on every sync. {} when there are no images. |
| currencies | string[] | Currencies the game supports: USD, EUR, TRY. An empty array means no restriction. |
| release_at | date | null | First release day. |
| retire_at | date | null | Planned retirement day. On that day the game closes to new sessions; open rounds complete. null when no plan exists. |
| updated_at | date-time | When the game record last changed; updated_since reads this. |
| blocked_countries | string[] | Blocked countries (ISO alpha-2): the provider’s and the game’s lists merged and sorted. Launch from these countries gets 403 COUNTRY_BLOCKED; updated_at moves when the list changes. |
limits fields
| Field | Type | Description |
|---|---|---|
| currency | ISO 4217 | Currency of the limits. |
| min_bet | decimal(18,2) | Lowest bet. |
| max_bet | decimal(18,2) | Highest bet. |
| default_bet | decimal(18,2) | Default bet. |
| source | object | The layer that min_bet and max_bet come from: platform, provider, operator, game, site, market_rule, player_restriction. |
categories fields
| Field | Type | Description |
|---|---|---|
| key | string | Category key, e.g. featured. |
| name | object | Category name: tr, en. |
| mode | string | manual or auto. |
| auto_rule | string | null | Rule of an automatic category: new_30d, popular_7d, jackpot. |
| games | string[] | Game codes in the category, in order. |
Release and retirement calendar
GET /v1/releases (marketing.read) returns upcoming releases and the planned retirements of games in your library, in date order. kind tells the row type: a release row carries release_at, markets, status; a retirement row carries retire_at and note. A retirement is planned at least 7 days ahead and reminded 7 days before.
GET /v1/releases
[
{
"kind": "release",
"game_id": "cyber-djinn",
"name": "Cyber Djinn",
"provider": "boss-originals",
"release_at": "2026-11-20",
"markets": ["[Pazar A]", "[Pazar B]"],
"status": "staging"
},
{
"kind": "retirement",
"game_id": "pharaoh-circuit",
"name": "Pharaoh Circuit",
"provider": "boss-originals",
"retire_at": "2026-12-01",
"note": "Yerine Pharaoh Circuit 2 geliyor."
}
]Error codes
| Code | HTTP | Meaning |
|---|---|---|
| INVALID_SIGNATURE | 401 | Signature could not be verified |
| TIMESTAMP_SKEW | 401 | X-Timestamp is outside ±30 s |
| IP_NOT_ALLOWED | 403 | IP is not on the allowlist |
| SCOPE_MISSING | 403 | The games.read scope is missing |
| SCOPE_DENIED | 403 | site_id is not yours or is outside your key’s scope |
| COUNTRY_BLOCKED | 403 | The game blocks the country country (GET /v1/games/{game_id}) |
| NOT_FOUND | 404 | No such game, retired, or no access to its provider (GET /v1/games/{game_id}) |
| SITE_REQUIRED | 422 | Operator-wide key and several sites: send site_id |
| VALIDATION_ERROR | 422 | Invalid query parameter |
| RATE_LIMITED | 429 | Rate limit exceeded |