Skip to content

FAQ & Troubleshooting

Common questions and solutions for Slotty Labs operator integration.

Getting Started

How do I get API credentials?

Contact office@slottylabs.com with:

  • Your company name
  • Primary domain (e.g., yourcasino.com)
  • Desired jurisdiction(s)
  • Contact person email

We'll set up your sandbox account within 1 business day.

What languages/frameworks does the SDK support?

The @slottylabs/sdk npm package works with any JavaScript/TypeScript backend:

  • Node.js 18+ (Express, Fastify, NestJS, Hapi, etc.)
  • Deno (with npm compatibility)
  • Bun (full support)

For non-JavaScript backends (Python, PHP, Go, Java), use the REST API directly — no SDK required. The only SDK-specific features are convenience wrappers; all operations are available via HTTP.

Can I test without a live casino?

Yes! Use sandbox mode with sk_sandbox_ API keys. You can:

  • Create test players with any balance
  • Force specific game outcomes for testing
  • Play all games without real money
  • Receive webhook events in sandbox

See Sandbox Testing for details.

Game Integration

How do players launch games?

The flow is:

Your Backend → Create SSO Token (API call) → Get Launch URL → Embed iframe
  1. Player clicks "Play" on your casino lobby
  2. Your backend calls client.auth.createSSOToken() with the player's ID
  3. You get back a single-use launch token (30-second TTL)
  4. Generate the launch URL with client.games.getLaunchUrl(gameId, token)
  5. Load the URL in an iframe

Can I customize game appearance?

Yes, through white-label branding:

  • Custom casino name shown in the game UI
  • Custom logo
  • Primary color theme
  • Custom game names per operator

Configure these in the Operator Dashboard under Settings → Branding.

How do I handle mobile responsiveness?

The game iframe is fully responsive. Wrap it in a container with the correct aspect ratio:

html
<!-- Desktop: 16:9 -->
<div style="width: 100%; max-width: 1200px; aspect-ratio: 16/9;">
  <iframe src="{launchUrl}" style="width:100%;height:100%;border:none;" />
</div>

<!-- Mobile: use 100vh for fullscreen -->
<div style="width: 100vw; height: 100vh;">
  <iframe src="{launchUrl}" style="width:100%;height:100%;border:none;" />
</div>

The game auto-detects the channel (desktop/mobile) and adjusts UI accordingly.

Can players play multiple games simultaneously?

No. Each player can only have one active session at a time. Starting a new game session will end the previous one. This is an industry requirement for responsible gaming compliance.

Webhooks

My webhook endpoint isn't receiving events

Check these common issues:

  1. HTTPS required — Webhook endpoints must use HTTPS. HTTP endpoints are rejected.
  2. Firewall — Whitelist Slotty Labs IP ranges (provided during onboarding)
  3. Response time — Your endpoint must respond within 10 seconds or the delivery is marked as failed
  4. Status code — Return 200-299 to acknowledge receipt. Any other code triggers retries.

How do I debug webhook deliveries?

  1. Go to Settings → Webhooks in your operator dashboard
  2. View the Delivery History — shows all recent webhook attempts
  3. Click any delivery to see the request/response details
  4. Use the Retry button to re-send failed deliveries

Why am I receiving duplicate webhooks?

Slotty Labs uses at-least-once delivery. Duplicates can occur during retries. Always check the event id field to deduplicate:

typescript
if (await redis.get(`webhook:${event.id}`)) {
  return res.status(200).json({ received: true }); // Already processed
}
// Process event...
await redis.set(`webhook:${event.id}`, '1', 'EX', 604800); // TTL: 7 days

Financial

What currencies are supported?

  • Fiat: USD, EUR, GBP (settled as integer cents — 100 = $1.00)
  • Crypto: BTC, ETH, USDT (ERC-20), USDC (ERC-20), SOL, TRX

All financial amounts use integer representation (smallest unit) to avoid floating-point issues.

How does settlement work?

GGR (Gross Gaming Revenue) is calculated as:

GGR = Total Bets - Total Wins

Settlement reports are generated daily and available in the dashboard under Finance → Settlements. Revenue share is calculated per your contract terms.

How are player balances managed?

You choose one of two models:

  1. Slotty Labs wallet — We manage player balances. You deposit funds via API, players play against our ledger.
  2. Seamless wallet — Players play against YOUR balance system. We call your API for debit/credit on every bet/win (coming soon).

Security

How do I rotate API keys?

  1. Go to your operator dashboard
  2. Generate a new API key
  3. Update your backend to use the new key
  4. Revoke the old key

Both keys work simultaneously during the rotation window.

Is my data encrypted?

Yes:

  • In transit — All API calls use TLS 1.3
  • At rest — Database encryption with AES-256
  • Secrets — API keys and webhook secrets are hashed with bcrypt (only the prefix is shown in the dashboard)

Compliance

What jurisdictions are supported?

Slotty Labs provides game math and infrastructure compliant with:

  • Curacao (CW) — Default jurisdiction
  • Malta (MGA) — Available on request
  • UK (UKGC) — Available on request (additional requirements)
  • Sweden (SE) — Available on request

Each jurisdiction has pre-configured:

  • RTP minimums and maximums
  • Bet limits and session limits
  • Reality check intervals
  • Self-exclusion requirements
  • Reporting obligations

How does provably fair verification work?

Every game round generates a cryptographic proof:

  1. Before the round: server commits to a seed hash
  2. During the round: player provides their seed
  3. After the round: server reveals the seed
  4. Anyone can verify: SHA-256(serverSeed) === committedHash

See Provably Fair for the full protocol.