All articles

Testing Game Provider Integration: What QA Needs to Know

  • qa
  • gambling
  • game-providers
  • integration
  • backend

When a new game provider gets integrated — NetEnt, Pragmatic Play, Evolution, whoever — it can feel like a small scoped task: check that the game opens, a bet works, a win pays out. In practice this is one of the most technically dense areas in casino platform QA.

Game provider integration is a handshake between two separate systems: the operator manages the balance and session, the provider manages the game. Between them sits an API protocol — usually Seamless Wallet or Transfer Wallet. Any failure at that boundary leads to lost user funds, a game stuck in an unfinished round, or a balance desync. The provider doesn't test your side. You don't control theirs. The only protection is a test plan that covers the boundaries.


Testing Game Launch: Session and Authorization

Everything starts with how the provider receives the session token — and how that token lives.

A successful launch isn't one test case. It's a launch from desktop browser, from mobile, in different locales, with different user types: new, verified, user with a bonus, user with self-exclusion restrictions. Each context can affect the parameters passed to the provider.

Expired token — user opened the game, left the tab for an hour, came back. There should be a redirect or a clear message, not a blank page with a network error. This is the most common thing to fail if not explicitly tested.

Two simultaneous requests to open the same game from the same account — one should succeed, the other should error or close the first session. Which exactly depends on the business requirement, but the behavior must be deterministic, not random.

Session token should not appear in the URL in plain text. This sounds basic, but it happens — and it's a vulnerability: anyone who sees the URL in browser history or server logs gets an active session token.

Jurisdictional restrictions are their own layer. A game blocked for a specific country should not launch even when the API is called directly, bypassing the frontend. Age restrictions, game category restrictions for specific markets — all of this must be enforced at the backend level, not just UI.


Balance Sync: The Core of the Integration

This is the heart of game provider integration QA. Every bet and every win is a request from the provider to the operator to change the balance. If something goes wrong, the user either loses money or plays on funds that don't exist.

Seamless Wallet — the provider requests balance and sends transactions in real time through the operator's API. Faster and more complex from a testing standpoint.

What to check: the provider requests balance before each round — the response must be current, not cached. Debit request (bet deduction) must be processed exactly once. Credit request (win payout) must be processed exactly once. A duplicate request with the same transaction ID must receive an idempotent response: not an error, not a repeat deduction, but a repeat 200 OK with the same result.

Credit request with an unknown transaction ID — this is an abnormal situation that arises during failures. The system must handle it: credit the win and return a correct response, or flag the anomaly and notify the team.

Transfer Wallet — the operator moves part of the balance into the provider's wallet before the game, the remainder returns after the session closes. Simpler transactionally, but with its own edge cases: what if the user closed the game without an explicit session close? Is the remainder stuck in the provider's wallet? Is there an automatic return timeout?


Round Completion and Crash Recovery

This is the most interesting area of game provider QA.

Normal completion looks straightforward: round finished, balance updated. But test the edge case — large win, jackpot. The system must handle amounts several orders of magnitude larger than usual correctly. It's common for standard bets to work fine, and then a ×500 multiplier causes an integer overflow.

Connection drop during a round — the user is in a slot game, the connection breaks. The provider stores the state of the unfinished round. User reopens the game — they must see the correct result, not a blank screen and a lost bet. How long does the provider store an unfinished round? That's usually documented in the integration spec. Verify that the operator correctly handles the credit that arrives after the timeout.

Errors on the operator side — this is what the provider won't test, and you must. Operator service doesn't respond to the debit request within timeout: the provider must not silently deduct the bet and start the round — it should return an error. Service returned 500 on a credit request: the provider retries, idempotency prevents double crediting. Operator responds to balance but not to debit: what happens to the round? Game hangs? User sees an error? Bet not deducted?


Bonus Rounds, Free Spins, and Special Transaction Types

This layer often gets skipped when teams only test the basic paid spin.

Free spin — the bet is zero, but the round still happens. A credit may arrive. How is a zero bet handled? Is a debit request with amount 0 valid or an error?

Bonus round inside a slot — not a separate game, but a series of transactions, often with a multiplier. Verify that each transaction in the series is processed correctly and that the final balance adds up.

Jackpot — a separate large-amount credit on top of the regular win. Both credits must arrive and be processed. Sometimes the jackpot pays through a separate service — make sure both paths are covered.

Refund round — the provider may return the bet if their round completed incorrectly. This is a specific transaction type: the balance should increase by exactly the bet amount, not the win amount.


RTP and Fairness Verification

Statistically testing RTP (Return to Player) at the QA level isn't realistic — you'd need millions of rounds. But fairness isn't entirely outside QA scope.

What's actually checkable: the provider supplies an RTP certificate for each game — it exists, is current, and refers to the specific version of the game being run. For Provably Fair games — the verification algorithm works, the user can independently verify their round result. Round history is accessible to the user through their account — every bet, every result, every timestamp.

For live games separately: video recording of the round must be available through support in case of a dispute. This is a requirement of most licensing jurisdictions, and it's better to verify it before the first disputed round arrives.


SDK Updates and Backward Compatibility

Providers update their protocol and SDK regularly. This requires regression testing, and it's worth planning for.

New SDK version: backward compatibility with already-stored transactions. Unfinished rounds created on the old version must close correctly on the new one.

New fields in provider requests — the operator's system must not crash when encountering unknown fields. Graceful degradation: ignore what's unfamiliar, process what's known.

Deprecated fields in operator responses — the provider may stop sending them. Verify their absence doesn't break logic on the provider side.

New transaction type (e.g., provider introduces a new free spin format) — the system either handles it correctly or logs it and flags for manual review. Silent data loss is not acceptable.


Game provider integration testing is largely testing someone else's code on your interface — and theirs on yours. That's exactly why a thorough test plan matters: document the boundary states, align with the provider's team on test scenarios, and don't assume they tested your side.

For other areas of gambling QA: critical payment bugs and the casino payment checklist.