Boss HubBoss HubDocs
ChangelogStatus
Provider API/Game list

Game list

API · Operator → Boss Hub
GET/v1/games

Returns 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

HeaderDescription
X-Operator-IdYour operator ID
X-TimestampUnix seconds. Rejected outside ±30 s
X-Signaturehex(HMAC_SHA256(secret, ts + "." + METHOD + "." + path?query + "." + body))
X-Api-KeyOptional. Selects the right secret when you have several keys

Query parameters

site_idstring
Site code, e.g. site_mrd01, at most 64 characters. The list is filtered by the rules of this site. Required with an operator-wide key and several sites.
currencyISO 4217
Currency of the limits field: USD (default), EUR, TRY. The list is not filtered by currency.
langstring
Content language: tr, en. The description field comes in this language; tr if omitted.
categorystring
Lobby category, e.g. featured. With it, sort is the position in that category.
providerstring
Provider code, e.g. egt.
updated_sincedate-time
Games changed at or after this moment (updated_at). RFC 3339 time or YYYY-MM-DD (start of the UTC day), e.g. 2026-11-01T00:00:00Z.
released_sincedate-time
Games released at or after this moment (release_at). Same format as updated_since.
countrystring
Player country, ISO 3166-1 alpha-2 (TR, DE); lowercase is uppercased. Games whose launch would be refused for this country are left out.
Incremental sync: Send your last sync time as updated_since; only games whose record changed come back (name, status, release or retirement date). The list holds only games that can be opened right now: a closed or retired game drops out, and during maintenance, an operator suspension or with the site off the list can be empty. Follow this by comparing with the full list or with the game.availability_changed and game.retiring webhooks. A listed game can still get CURRENCY_NOT_SUPPORTED (check its currencies field), COUNTRY_BLOCKED, or 402 CREDIT_LIMIT when the credit limit is exceeded, at launch.

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.

game_idstringrequired
Path parameter. Game code, e.g. sultans-ember, at most 120 characters.
site_idstring
Query parameter. Site code.
currencyISO 4217
Query parameter. Currency of the limits field.
langstring
Query parameter. Language of the description field: tr, en.
countrystring
Query parameter. Player country; 403 COUNTRY_BLOCKED if the game blocks this country.
GET /v1/games?site_id=site_mrd01&lang=tr HTTP/1.1
Host: staging.example.com
X-Operator-Id: op_meridyen
X-Timestamp: 1762344000
X-Signature: 8c020c…6906
200Game list
{
  "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"]
    }
  ]
}
404GET /v1/games/{game_id}: no such game
{
  "code": "NOT_FOUND",
  "message": "Record not found.",
  "request_id": "req_01HF3Q2N"
}

Game fields

FieldTypeDescription
idstringGame code. Used as game_id in launch and callbacks.
namestringThe game’s name.
descriptionstring | nullGame description in the lang language.
providerstringProvider code.
rtp_variantsstring[]RTP variants on offer: v96, v94, v92.
volatilitystringlow, medium, high, very_high.
max_win_xintegerMaximum win as a multiple of the bet.
featuresobjectFeature flags: bonus_buy, ante_bet, autoplay, turbo, gamble.
limitsobject | nullEffective bet limits, see below. null when no limit is defined in this currency; such a game cannot be opened.
tagsstring[]Tags, e.g. new, jackpot.
categoriesstring[]Lobby categories the game belongs to.
sortintegerPosition in the lobby; 999999 when none is set. With category, the position in that category (from 1).
assetsobjectImages: tile, portrait. Signed addresses valid for 24 hours; do not store them, refresh on every sync. {} when there are no images.
currenciesstring[]Currencies the game supports: USD, EUR, TRY. An empty array means no restriction.
release_atdate | nullFirst release day.
retire_atdate | nullPlanned retirement day. On that day the game closes to new sessions; open rounds complete. null when no plan exists.
updated_atdate-timeWhen the game record last changed; updated_since reads this.
blocked_countriesstring[]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

FieldTypeDescription
currencyISO 4217Currency of the limits.
min_betdecimal(18,2)Lowest bet.
max_betdecimal(18,2)Highest bet.
default_betdecimal(18,2)Default bet.
sourceobjectThe layer that min_bet and max_bet come from: platform, provider, operator, game, site, market_rule, player_restriction.

categories fields

FieldTypeDescription
keystringCategory key, e.g. featured.
nameobjectCategory name: tr, en.
modestringmanual or auto.
auto_rulestring | nullRule of an automatic category: new_30d, popular_7d, jackpot.
gamesstring[]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

CodeHTTPMeaning
INVALID_SIGNATURE401Signature could not be verified
TIMESTAMP_SKEW401X-Timestamp is outside ±30 s
IP_NOT_ALLOWED403IP is not on the allowlist
SCOPE_MISSING403The games.read scope is missing
SCOPE_DENIED403site_id is not yours or is outside your key’s scope
COUNTRY_BLOCKED403The game blocks the country country (GET /v1/games/{game_id})
NOT_FOUND404No such game, retired, or no access to its provider (GET /v1/games/{game_id})
SITE_REQUIRED422Operator-wide key and several sites: send site_id
VALIDATION_ERROR422Invalid query parameter
RATE_LIMITED429Rate limit exceeded
← PreviousrollbackNext →Game recommendations