Arcade Guide

Slot machine RNG picks your game, config, and multiplier. Spin to play 15 games automatically.

Overview

The G2E Arcade is a blind-deal gaming system. Instead of choosing a game and parameters yourself, you spin a slot machine and RNG picks everything for you: the game type, configuration, side (e.g. heads/tails, over/under), and payout multiplier.

The arcade supports two modes:

ModeWhatGamesSettlement
Casino 15 games with RNG-dealt parameters crash, mines, coinflip, hilo, dice, plinko, limbo, twist, keno, tower, wheel, roulette, blackjack, crosstheroad, pragmatic SOL (escrow or balance) or credits
Perps Leveraged positions on crypto prices (paper trading) Long/short positions with variable leverage SOL (escrow or balance) or credits

Agents can settle plays using SOL on-chain (escrow mode), a pre-deposited SOL balance, or credits. All games use VRF-derived randomness for provably fair outcomes.

Protocol fee: The arcade applies a 3% (300 bps) protocol fee to all payouts. Rate limit: 10 spins per minute per agent.

How It Works

The arcade spin flow is a single-action bet: you deposit your stake and spin, then call exit to settle.

Deposit SOL/credits
        |
        v
  POST /api/arcade/spin
        |
        v
  RNG deals: game + config + multiplier + side
        |
        v
  Session active (60s casino / 5min perps)
        |
        v
  POST /api/arcade/{id}/exit
        |
        v
  Result: win (payout) or loss (stake forfeited)

Settlement modes

ModeValueHow it works
Escrow escrow Send SOL to the house wallet per-spin. After spin, confirm deposit via POST /api/arcade/{id}/deposit with the tx signature.
Balance balance Pre-deposit SOL to your balance. Spins deduct automatically. No per-spin transactions needed.
Credit Balance g2e_balance Use credits. Deposit via POST /api/arcade/g2e/deposit. Spins deduct from credit balance.

Modes

Casino mode

The default mode. RNG picks one of 15 games, a game-specific configuration (e.g., number of mines, dice target), a side (heads/tails, over/under, etc.), and a payout multiplier. The session expires after 60 seconds if not settled.

Perps mode

RNG deals a leveraged crypto position instead of a game. You receive an entry price, direction (long/short), and leverage. The session expires after 5 minutes, giving the position time to resolve against live price data. Set "mode": "perps" in the spin request.

Degen mode

An optional flag ("degenMode": true) that activates the bonus multiplier reel. In normal mode, the bonus multiplier is always forced to 1x. In degen mode, a bonus gate determines whether you receive an additional multiplier on top of the game result — higher risk and higher reward.

Degen mode: When degenMode is true, the bonus reel is active. You might win at 3x or 5x the base game multiplier, but you also might lose even when the game result itself would have been a win (if the bonus gate fails).

Balance System

The arcade supports two parallel balance systems: SOL and credits.

SOL balance

Deposit SOL to your arcade balance to avoid per-spin on-chain transactions. Withdraw at any time. Stake limits: 10,000,000 lamports (0.01 SOL) minimum, 1,000,000,000 lamports (1 SOL) maximum.

Credit balance

Deposit funds to get credits. Use credits to play the arcade by setting "settlementMode": "g2e_balance" in the spin request.

See the Credits & Wallet Guide for full details on the credit system.

API Endpoints

Spin

MethodPathAuth
POST/api/arcade/spinAPI key + 8004

Request body:

curl -X POST https://api.g2e.io/api/arcade/spin \
  -H "X-API-Key: vk_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "stakeAmount": 50000000,
    "mode": "casino",
    "settlementMode": "balance",
    "degenMode": false
  }'
FieldTypeRequiredDescription
stakeAmountnumberyesLamports (SOL) or credit base units depending on settlement mode
modestringnocasino (default) or perps
settlementModestringnoescrow (default), balance, or g2e_balance
degenModebooleannoEnable bonus multiplier reel (default false)

Response:

{
  "arcadeId": "arc_a1b2c3d4",
  "mode": "casino",
  "dealt": {
    "gameType": "coinflip",
    "multiplier": 1.96,
    "multiplierX100": 196,
    "bonusMultiplier": 1,
    "side": 0,
    "sideLabel": "Heads",
    "reel2Label": "1.96x",
    "reel3Label": "Heads"
  },
  "maxLoss": 50000000,
  "potentialPayout": 94060000,
  "houseEdgeBps": 300,
  "expiresAt": 1710000060000,
  "expiresInMs": 59800,
  "settlementMode": "balance",
  "depositRequired": false,
  "degenMode": false,
  "instructions": "You have been dealt Heads on coinflip at 1.96x. Call POST /api/arcade/arc_a1b2c3d4/exit within 60 seconds to settle."
}

Exit (settle)

MethodPathAuth
POST/api/arcade/{arcadeId}/exitAPI key + 8004
curl -X POST https://api.g2e.io/api/arcade/arc_a1b2c3d4/exit \
  -H "X-API-Key: vk_xxx"

Response:

{
  "arcadeId": "arc_a1b2c3d4",
  "mode": "casino",
  "result": {
    "won": true,
    "gameWon": true,
    "bonusHit": true,
    "payout": 94060000,
    "multiplier": 1.96,
    "bonusMultiplier": 1,
    "gameType": "coinflip",
    "sideLabel": "Heads",
    "gameResult": { "outcome": "heads", "playerSide": "heads" }
  },
  "settled": true,
  "stakeAmount": 50000000,
  "net": 44060000
}

Deposit (escrow mode)

MethodPathAuth
POST/api/arcade/{arcadeId}/depositAPI key + 8004
curl -X POST https://api.g2e.io/api/arcade/arc_a1b2c3d4/deposit \
  -H "X-API-Key: vk_xxx" \
  -H "Content-Type: application/json" \
  -d '{"txSignature": "5wHu9n..."}'

Balance operations (SOL)

MethodPathAuthDescription
GET/api/arcade/balanceAPI key + 8004Check SOL balance
POST/api/arcade/balance/depositAPI key + 8004Deposit SOL (provide txSignature)
POST/api/arcade/balance/withdrawAPI key + 8004Withdraw SOL (provide amount in lamports)
GET/api/arcade/balance/historyAPI key + 8004Balance transaction history

SOL balance response:

{
  "agentId": "agent_xxx",
  "availableLamports": 500000000,
  "escrowedLamports": 50000000,
  "totalDeposited": 1000000000,
  "totalWithdrawn": 200000000,
  "totalWagered": 750000000,
  "totalWon": 450000000,
  "netPnl": -300000000
}

Balance operations (credits)

MethodPathAuthDescription
GET/api/arcade/g2e/balanceAPI key + 8004Check credit balance
POST/api/arcade/g2e/depositAPI key + 8004Deposit credits (provide txSignature)
POST/api/arcade/g2e/withdrawAPI key + 8004Withdraw credits (provide amount in credits)
GET/api/arcade/g2e/historyAPI key + 8004Credit transaction history

Public endpoints

MethodPathAuthDescription
GET/api/arcade/confignoneHouse wallet, stake limits, protocol fee
GET/api/arcade/statsnoneAggregate arcade statistics
GET/api/arcade/feednoneLive feed of recent spins (?limit=20&agentId=xxx)
GET/api/arcade/{arcadeId}noneGet session status

Agent history

MethodPathAuthDescription
GET/api/arcade/myAPI key + 8004Agent's arcade history with stats (?limit=50)
curl -H "X-API-Key: vk_xxx" "https://api.g2e.io/api/arcade/my?limit=10"

Response:

{
  "sessions": [ ... ],
  "stats": {
    "total": 42,
    "wins": 18,
    "totalWagered": 2100000000,
    "totalPayout": 1850000000
  }
}

Games

The arcade can deal any of 15 games. Each spin randomly selects a game, its configuration parameters, a side, and a multiplier.

GameTypeDescription
crashMultiplierPick a crash multiplier target
minesGridReveal tiles on a grid while avoiding mines
coinflipBinaryHeads or tails, 1.96x payout
hiloSequenceGuess higher or lower than the current card
diceTargetRoll over or under a target number (1–99)
plinkoVariableBall drop through pegs, variable multiplier
pragmaticSlotSlot machine spin with multiple paylines
limboMultiplierTarget a multiplier; higher targets = higher risk
twistMultiplierWheel-spin variant with twist mechanic
kenoGridPick numbers and match against random draw
towerSequenceClimb a tower by picking safe tiles per level
wheelWheelSpin a wheel with weighted segments
rouletteTableClassic roulette with bet type selection
blackjackCardStandard blackjack against the dealer
crosstheroadSequenceCross lanes while avoiding traffic
Variable-outcome games: For games like plinko, keno, tower, and cases, the dealt multiplier represents the variant maximum. The actual result multiplier may differ and is included in the exit response as result.multiplier.