Skip to content

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:

EnvironmentData sourceUse case
sandboxBuilt-in realistic default dataFrontend development & testing
stagingStaging backendQA / integration
productionLive backendReal 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)

UsernamePasswordStateTry it for
VIPDanaVipPass123!KYC VERIFIED, 2FA enabled2FA challenge flow
MaxNewbieMaxPass123!KYC UNVERIFIEDLogin → KYC submission
LiaSocialNone (Google-linked)KYC VERIFIEDSocial 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:externalId tokens: GOOGLE:google_lia_123 logs in as LiaSocial.

Engagement Engines (seeded)

EngineSeeded dataDetail
Bonus5 templates (all bonus types) · bonuses at 0% / 40% / completed / forfeited, plus an expired-state seedBonus Engine
Loyalty5-tier VIP ladder · Gold player @ 6,000 XP / 7,000 points · tier maintenance active · 3 shop itemsLoyalty Engine
Promotions3 active (1 claimed) · 1 scheduled · 1 expiredPromotions Engine
Tournaments1 active (opted-in) · 1 active (not opted-in) · 1 upcoming · 1 completed · 50-row leaderboardsTournament Engine

Other Modules (seeded)

ModuleSeeded data
WalletUSD 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)
Games4 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
Contenttheme + home_page namespaces · hero slider (JSON) + custom CSS blobs
Messaging3 inbox messages (unread included) · notification preferences
Responsible GamingFull RG config · limit cooling-off logic · reality-check stats
SupportLive chat enabled (CUSTOM provider) · agent auto-replies ~1.5s after each message
AnalyticsEvents 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 call sdk.auth.logout()) for a fresh start.
  • Each browser profile keeps its own sandbox data.
  • Don't ship environment: 'sandbox' to real players.