Troubleshooting
Debugging stuck rounds, common errors, and how to escalate
When something goes wrong in production, the answer is almost always faster if you have the right identifiers ready. This page tells you what to capture and where to send it.
What to capture before contacting support
Always include all of these:
sessionid— our session identifier, returned from/gamelauncher/playexternalsessionid— your session identifierroundid— the affected round (from your wallet'sdebitcall)operatorandbrandplayerid- Approximate timestamp (UTC) of the issue, with a 5-minute window
mode—REALorDEMO- What you observed — what the player saw, what your wallet recorded, what events fired (or didn't)
For frontend issues, also capture:
- Browser / webview type and version
- Console errors from the iframe (if your container exposes them)
- Network log of requests to our hosts
Common situations
"The round seems stuck. The player bought cards but no win was credited."
Most likely causes, in order:
- The round genuinely had no win. A round can settle to zero. Direct
integrators receive
creditwithcreditamount: 0androundended: truein this case — that's the round closing. Aggregator-path casinos see this as a settled round in the aggregator's reporting. - The wallet
creditwas sent but failed on your side. Check your wallet logs for the round'sroundid. We retrycrediton 5xx with exponential backoff (3 attempts, ~3s span). If all retries fail, we log and alert; contact support with theroundid. - The player closed the iframe before the round settled. The round still settled on our side and the wallet was credited. The player will see the updated balance next time they launch the game.
"How does the player exit the game?"
The iframe doesn't currently signal "player exited" to your parent page. Provide a close button on your iframe wrapper (outside the iframe itself) so the player can return to your lobby. The game's internal exit flow ends the player's view of the game inside the iframe but does not post a message to your parent window.
"How do I detect that a session has expired?"
The session has an absolute lifetime (24 hours by default). We don't
currently emit a session-expired signal. If a player tries to play after
expiry, the iframe will fail to load the game cleanly. To launch them
again, call /gamelauncher/play with a new externalsessionid — the
old session is dead, so reusing the same externalsessionid would just
return the dead session.
"Are there rate limits on /gamelauncher/play?"
We don't enforce a per-operator throttle today. If you anticipate sustained traffic above ~20 requests per second per operator, talk to us before go-live so we can provision a dedicated usage plan. See Rate limits.
"Direct integration: we're seeing CURRENCY_MISMATCH."
The session was launched with a currency that doesn't match what your wallet
holds for that player. Either pick a supported currency in /gamelauncher/play
or operate per-currency sub-wallets on your side. We do not convert between
currencies. See
Currency mismatch.
"Direct integration: we received a debit for a player who isn't in our system."
Return SESSION_NOT_FOUND (the wallet client treats this as session-expired
and surfaces a clear error to the player). Most often this is an
authentication bug on the casino side (wrong operator or token reused
across environments).
How we'll respond
For production incidents, we monitor session create rate, debit/credit success rate, and round settlement latency on our side. If you flag a stuck round with the identifiers above, expect:
- Acknowledgement within the SLA you signed at onboarding
- Replay link or transaction-log dump for the round
- A clear answer on whether money moved and where it landed
When in doubt, the wallet's credit call is the source of truth. If your
wallet log shows it landed, the player got paid — even if your frontend
didn't render it.