This guide is for casinos and sportsbooks ("operators") that want to offer ZooZ Games titles to their players:
slots, crash, mines and dice. Every game uses one integration, the ZooZ Operator API v1.
Seamless wallet. The player's balance always stays with you. ZooZ never holds player funds. For every bet
and every payout, ZooZ calls your wallet, and your wallet is the system of record.
Server-authoritative games. All outcomes (RNG, wins, features, crash points) are computed on the ZooZ
Remote Game Server (RGS). The browser only displays them.
Signed in both directions. Every request and every response carries an HMAC-SHA256 signature over the
method, path, time, nonce and raw body. Replays are rejected. No long-lived token ever appears in a URL.
flowchart LR
P[Player browser] -- opens game --> O[Operator backend]
O -- "1. POST /api/v1/operator/sessions (signed)" --> Z[ZooZ RGS]
Z -- "gameUrl with 60 s one-time launch code (signed)" --> O
O -- "iframe src = gameUrl" --> P
P -- "2. game client exchanges the launch code" --> Z
Z -- "3. POST walletUrl/balance, debit, credit, rollback (signed)" --> O
Launch. Your backend opens a game session with one signed call and receives a gameUrl.
Play. You put the gameUrl in an iframe (or redirect to it). The game client exchanges the one-time code
for its own session. You do not need to do anything for this step.
Money. While the player plays, ZooZ calls your four wallet endpoints. Each call is signed, and each of
your answers must be signed too.
Sent in the X-ZooZ-Operator header of every signed request, in both directions
Operator keys: key id + secret
acme-op-2026-1
You sign your calls to ZooZ with this key. ZooZ signs its answers to those calls with this family
Wallet keys: key id + secret
acme-wallet-2026-1
ZooZ signs wallet calls to you with this key. You sign your wallet answers with this family
RGS base URL
https://rgs.<zooz-domain>
One URL for staging and one for production. The two use different keys
Game list
safari-king, sky-parrot, …
The game ids enabled for you. See GET /api/v1/games
Each secret is at least 32 random bytes, base64-encoded. The two families are separate, so a leaked wallet key
cannot be used to open sessions, and the reverse. ZooZ sends secrets over a secure channel, never by plain
email. Keep them in a vault or in environment variables, and never log them.
For example https://api.acme.example/zooz/wallet. ZooZ appends /balance, /debit, /credit and /rollback. It must use HTTPS (TLS 1.2+) in production and must not contain a query string
Currencies
The ISO 4217 codes you want (for example EUR, USD, TRY). ZooZ configures bet levels per currency
Limits (optional, per currency)
Minimum bet, maximum bet, maximum win per round and maximum stake. ZooZ refuses a bet outside them before it calls your wallet (INVALID_BET) and shows the game only the stakes that fit. The max win is checked against the game's largest possible payout: a stake whose best outcome could exceed it is not offered. The max stake is the largest single debit, for example a bonus buy (bet × price); it cannot be below your max bet, and without it a bonus buy is only limited by the bet rules
Languages
The UI languages you want (for example en, de, pt-BR) and a default. The language of each session is matched against this list
Source IP addresses (optional)
The addresses or CIDR ranges (IPv4 or IPv6) your backend calls ZooZ from, for example 203.0.113.7 or 203.0.113.0/24. ZooZ can restrict /api/v1/operator/* to them
Your outbound allowlist needs
If your wallet sits behind a firewall or WAF, ask ZooZ for the RGS egress IPs. ZooZ calls identify themselves with User-Agent: ZooZ-RGS/1.0 (+https://zoozgames.com)
Technical contact
For incidents, key rotation and reconciliation questions
Receive your staging operator id and both key families.
Run one of the samples, or your own code, against the test vectors.
Do not go further until your code reproduces them exactly.
Implement the four wallet endpoints according to the rules.
Give ZooZ your staging wallet URL.
Open a session with POST /api/v1/operator/sessions. Verify the response signature, then load the gameUrl
in an iframe.
Play every enabled game type (slot, crash, mines, dice, plinko, crossing). For every round, check that your ledger has
exactly one debit and then either one credit (including zero credits) or one rollback.
Run the wallet conformance test until it reports
failed: 0. It sends correct and deliberately wrong signed calls to your wallet and checks every answer.
Test the remaining failure cases in the go-live test plan: timeouts,
expired sessions and your own retries.
Amounts are JSON numbers in the currency's major unit (for example 1.5 = EUR 1.50). Parse them as
decimals, never as binary floating point. Every amount ZooZ sends is written with exactly the currency's decimal
places (EUR: 1.00, 2.50). See
API reference → Amounts.
Currencies are ISO 4217 codes in upper case.
Times in signature headers are Unix seconds. Times in JSON bodies are ISO 8601 date-times with an offset.
Contract changes. Adding fields is backward compatible, so ignore JSON fields you do not know. Removing a
field or changing its meaning requires a new version (v2), which is announced in advance.