Slot games for your app. Your coins, your players.

Add a catalog of slots to your live or social app with one server call. Players bet your app's virtual coins. The balance never leaves your server.

Virtual currency onlySeamless walletRTP set per game and per appWebview and iframe

How it works

You keep the player and the coins. We run the game and decide each result on our server. Every bet and every win goes through your wallet endpoint.

Your server ── createGameSession(player) ──▶ Opera Games ──▶ launchUrl Your app opens launchUrl in a webview Each spin Opera Games ── debit(bet) ──▶ your wallet ◀── ok, balance Opera Games draws the result on the server Opera Games ── credit(win) ──▶ your wallet ◀── ok, balance (winning rounds only) Your app receives "opera-games:round" { bet, win, balance } to update its own screen

The balance stays with you

We never hold coins. Calls are signed with your app secret and deduped by transaction id.

Never charged for nothing

If anything fails after a bet is taken, we send a rollback and the round does not happen.

Controlled RTP

Each game runs with a return-to-player target, set per game and adjustable per app.

Your numbers, live

The panel shows rounds, bets, payouts, RTP and the house result per game and per day.

Games

Ways, free spins, cascades, cluster pays, megaways and a multiplier reel. Pick the ones your app shows in the panel.

Integrate in an afternoon

One call from your server to open a game, and one endpoint on your server for the wallet.

1

Create your account

You get a test app with its key and secret right away.

2

Point us to your wallet

One https endpoint that answers balance, debit, credit and rollback.

3

Open a game

Sign createGameSession on your server and open the launchUrl.

// your server
const timestamp = String(Date.now())
const signature = 'sha256=' + hmac(APP_SECRET,
  `${timestamp}.${APP_KEY}.${user.id}.rise-of-zeus`)

const { launchUrl } = await createGameSession({
  appKey: APP_KEY, timestamp, signature,
  playerId: user.id, playerName: user.name,
  gameSlug: 'rise-of-zeus',
})

// your wallet endpoint (we call it)
POST /opera-games/wallet
{ "action": "debit", "txRef": "rnd_…:debit",
  "playerId": "user-123", "amount": 100 }
→ { "status": "ok", "balance": 4900 }

Read the full contract →

Talk to us

Tell us about your app. We answer by email.

Opera Games is for apps that use their own virtual coins. We do not offer real-money gaming.