Appearance
Environments & Sandbox Data
The Innovede SDK ships with one set of documentation for all environments: every method, flow and behavior described in these docs works identically in sandbox, staging and production. The only difference is where the data comes from:
| Environment | Data source | Use case |
|---|---|---|
sandbox | Built-in realistic default data | Frontend development & testing |
staging | Staging backend | QA / integration |
production | Live backend | Real players |
javascript
const sdk = new PlatformSDK({
apiKey: 'your-platform-api-key',
environment: 'sandbox', // 'sandbox' | 'staging' | 'production'
baseUrl: 'https://api.mycasino.com' // optional override (staging/production)
});Sandbox: Ready-Made Data for Every Module
Sandbox ships with realistic data seeded for every module, so you can build and test complete flows from the first minute. All of it behaves exactly like live data, with the same shapes, state machines, and error contracts.
Sandbox data rules
All sandbox stores follow these rules:
- Persisted: state survives page refresh in
localStorage. - Per-user bound: each authenticated sandbox user has their own wallets, ledger, KYC state, etc.
- Auth-enforced: anonymous calls fail with the same typed auth errors as production.
- Environment-namespaced: sandbox storage never collides with other environments on the same origin.
Sandbox control surface
Sandbox-only simulation controls are registered on one page: Sandbox Controls. Highlights: sdk.auth.sandbox (KYC approve/reject), sdk.wallet.sandbox (withdrawal approve/reject, wallet status, QR deposit outcomes), and sdk.engagement.sandbox.simulateWager (the wagering feed).
Auth Accounts (seeded)
| Username | Password | State | Try it for |
|---|---|---|---|
VIPDana | VipPass123! | KYC VERIFIED, 2FA enabled | 2FA challenge flow |
MaxNewbie | MaxPass123! | KYC UNVERIFIED | Login → KYC submission |
LiaSocial | None (Google-linked) | KYC VERIFIED | Social login (find-or-create) |
- Registration works too: new users are persisted across page refreshes.
- Sessions persist across refreshes; the SDK auto-restores them on load (see Authentication Overview).
- Invalid registrations return real validation errors (email format, password strength, duplicates).
- The 2FA challenge accepts any 6-digit code (the mock doesn't validate TOTP math).
- Social login uses
PROVIDER:externalIdtokens:GOOGLE:google_lia_123logs in asLiaSocial.
Engagement Engines (seeded)
| Engine | Seeded data | Detail |
|---|---|---|
| Bonus | 5 templates (all bonus types) · bonuses at 0% / 40% / completed / forfeited, plus an expired-state seed | Bonus Engine |
| Loyalty | 5-tier VIP ladder · Gold player @ 6,000 XP / 7,000 points · tier maintenance active · 3 shop items | Loyalty Engine |
| Promotions | 3 active (1 claimed) · 1 scheduled · 1 expired | Promotions Engine |
| Tournaments | 1 active (opted-in) · 1 active (not opted-in) · 1 upcoming · 1 completed · 50-row leaderboards | Tournament Engine |
Other Modules (seeded)
| Module | Seeded data |
|---|---|
| Wallet | USD wallet seeded with $250 real + $75 bonus and a full 5-entry ledger (deposit, bet, win, withdrawal, rejected withdrawal) · EUR wallet · 4 payment methods (covering every deposit flow category) · QR deposits confirm automatically after ~3 seconds · withdrawals are held PENDING for back-office approval (the Sandbox Controls decide these outcomes) |
| Games | 4 games (Sweet Bonanza, Crazy Time, Starburst, plus a mock-provider title whose launches fail, making the launch-failure path reachable) with full image sets · 3 categories & 3 providers with assets · 6 rounds across COMPLETED/PENDING/FAILED · REAL launches require login (401 gate, production parity) · DEMO where supported |
| Content | theme + home_page namespaces · hero slider (JSON) + custom CSS blobs |
| Messaging | 3 inbox messages (unread included) · notification preferences |
| Responsible Gaming | Full RG config · limit cooling-off logic · reality-check stats |
| Support | Live chat enabled (CUSTOM provider) · agent auto-replies ~1.5s after each message |
| Analytics | Events are captured and inspectable via sdk.analytics.sandbox.getReceivedEvents() |
The Sandbox Wagering Feed
One extra control exists in sandbox only: the same wagering feed the production backend uses internally.
javascript
// Feeds ALL engines at once: bonus wagering progress + XP & points + tournament scores
await sdk.engagement.sandbox?.simulateWager(50, 'USD', 'game_sweet_bonanza');In staging/production this API is null: real wagers drive the engines.
What Behaves Identically Everywhere
- Token lifecycle: real 15-minute access tokens, silent refresh, and token rotation. Sandbox tokens expire just like production ones, so your session-handling code is proven before launch (see State & Security).
- Error contracts: every error code, status and state machine in these docs is what production returns (see Error Reference).
- State machines: bonus wagering/completion, promotion scheduling, tournament opt-in gating, RG cooling-off, all enforced in sandbox exactly as in production.
- Auth enforcement: every module (wallet included) requires an authenticated session in every environment.
Sandbox Gotchas
- Data persists in
localStorage. Clear it (or callsdk.auth.logout()) for a fresh start. - Each browser profile keeps its own sandbox data.
- Don't ship
environment: 'sandbox'to real players.