Changelog
Changes to the Operator API v1, newest first.
- AddedPOST /v1/sessions takes an optional player_name, up to 32 characters: the nickname other players see in multiplayer games (Callisto Minis). Never send a real name; without it the game shows its own pseudonym.
- AddedRATE_LIMITED answers carry Retry-After: whole seconds until the next calendar minute starts, from 1 to 60.
- ChangedA body that is not valid JSON, or a field or query parameter of the wrong JSON type, answers 422 VALIDATION_FAILED in the usual error body, with the field named in fields ("body" when the JSON does not parse). It used to be HTTP 400 in a different format.
- ChangedAn unexpected failure on our side answers HTTP 500 with UPSTREAM_UNAVAILABLE and retryable: true in the usual error body. Every refusal from /v1 now has the same shape.
- AddedGET /v1/bonus-campaigns?player_id= lists the campaigns of one player, newest first, at most 100 — for a support agent asking what a player has been given. Exactly one of reference and player_id; both or neither answers 422 VALIDATION_FAILED.
- AddedGET /v1/live-tables: Live Casino tables on your games as they stand now — open or closed, dealer, limits in the currency you ask for, players and seats, recent results. Pragmatic Play for now.
- AddedBonus campaigns: POST /v1/bonus-campaigns places free spins, a fortune wheel, a treasure chest or a golden dragon for your players, set off by first launch, bet amount, spin count or loss amount. GET /v1/bonus-campaigns/{id}, GET /v1/bonus-campaigns?reference= and GET /v1/bonus-campaigns/options?game_id=. New error BONUS_CAMPAIGN_REFUSED and sandbox value sandbox_player_bonus_refused.
- DocumentedPOST /v1/debug/signature answers key, timestamp, payload and signature blocks alongside the diagnosis; the OpenAPI file now describes them. The whole spec is checked against the live sandbox.
- Addedagg-wallet-suite.mjs runs the wallet test suite from your CI with a JUnit report and an exit code, and reference-wallet.mjs is a wallet that passes it. See Wallet test suite.
- AddedSandbox scenario values: a player_id, game_id or player_country that makes the sandbox answer PLAYER_BLOCKED, GAME_RESTRICTED_IN_COUNTRY, GAME_UNAVAILABLE, NO_DEMO, FREE_SPINS_REFUSED or UPSTREAM_UNAVAILABLE on demand. See Testing.
- AddedThe wallet test suite: POST /v1/test/wallet-validation and GET /v1/test/wallet-validation/{id} on the sandbox run the whole wallet contract against your wallet_url.
- AddedPOST /v1/debug/signature on the sandbox: every step of a signature check and the common mistake it matches. Also in the operator portal under Validation.
- DocumentedSignature test vectors.
- AddedAn address allowlist per operator, set under Credentials in the operator portal. A signed call from an address outside a non-empty list answers 403 ADDRESS_NOT_ALLOWED.
- AddedGET /v1/jackpots and GET /v1/jackpots/winners.
- DocumentedVALIDATION_FAILED answers HTTP 422; earlier versions of this guide said 400.
- DocumentedWallet game_id is the game provider code, not the catalogue id; the mapping goes through session_id.
- DocumentedThe complete wallet error contract, rate limits, and wins that arrive for a refused bet.
- DocumentedMoney fields that are JSON numbers today: jackpot amounts, invoice webhook figures, rates.
- Deprecatedstudio_code on games and providers and the studio_code query filter. Use provider_code.
- Addedsections, regulated and tier_mode in GET /v1/rates.
- Addedmarket and rates_by_market in GET /v1/rates.
- AddedInvoice webhook: invoice.issued and invoice.voided with the PDF inline.
- AddedOptional bonus_amount in the wallet answer to bet and win.
- AddedGET /v1/rates.
- ChangedGames are titles: id names the title, provider_code the brand.
- AddedGET /v1/providers; images on games (portrait, cover) and providers (symbol, horizontal); unsigned GET /v1/images/{id}.
- Addedcountry filter on GET /v1/games, restricted_countries on each game, GAME_RESTRICTED_IN_COUNTRY on sessions and demos.
- AddedPOST /v1/games/{id}/demo and NO_DEMO.
- AddedPOST /v1/free-spins, GET /v1/free-spins/{id}, GET /v1/free-spins?reference=, POST /v1/free-spins/{id}/cancel, GET /v1/free-spins/bet-options.
- Addedfree_spins_id on wallet bet and win calls.
- AddedGET /v1/ping.
- Addedplayer_country, player_ip, player_device and deposit_url on POST /v1/sessions.
- AddedPublic API on its own host: GET /v1/games, POST /v1/sessions, POST /v1/sessions/{id}/close, GET /v1/transactions/{id}, GET /v1/rounds/{id}.
Documented marks behaviour that already existed and was not written down before.
