Put a live PvP arena in your casino.

Your players join the same 24/7 arenas as everyone else. You keep their balance; we call your wallet to take the buy-in and pay the result. One iframe, three callbacks.

How it plugs in

Slurp uses the seamless wallet model most casino aggregators already run. Player funds never leave your platform. When a player spawns a worm we ask your wallet to debit the buy-in, and when the round ends we credit what they banked. If anything fails after a debit, we send a rollback.

Unlike slots there is no RNG and no house edge on the round: players win from other players. Your revenue is a share of the 10% fee charged on profitable cash-outs.

PieceWho runs it
Player balance, KYC, limitsYou
Arena, physics, matchmaking, anti-cheatSlurp, server-authoritative at 30 ticks a second
Game clientSlurp, served at /embed inside your iframe
CurrencySOL, amounts in lamports (1 SOL = 1,000,000,000)

Round flow

  1. Your backend calls POST /v1/operator/session and gets a launch URL.
  2. You open the launch URL in an iframe. The player picks a lobby and presses Play.
  3. We call your wallet: debit for the buy-in, plus the insurance premium if they took it.
  4. The worm plays. Kills, orbs and cash-outs are settled inside the arena.
  5. When the worm cashes out or dies we call credit with the payout. A worm that died uninsured credits 0, which closes the round.

Credits are retried every minute until your wallet accepts them. Each call carries a txId; treat repeats of the same txId as already processed.

Signing

Both directions use the same scheme. Every request carries three headers. The signature is an HMAC-SHA256, in hex, of the timestamp, a dot and the raw body, using the secret we issue you. Requests older than 5 minutes are rejected.

x-slurp-operator:  your-operator-id
x-slurp-timestamp: 1793120000000
x-slurp-signature: hex(hmac_sha256(secret, timestamp + "." + rawBody))

Launch a session

POST https://slurp-production.up.railway.app/v1/operator/session
{ "playerId": "u_82731", "nickname": "kraken" }

200 OK
{
  "token": "dHx7Im9wIjoi...",
  "launchUrl": "https://slurp.bet/embed?session=dHx7Im9wIjoi...",
  "expiresIn": 21600
}

Wallet callbacks

We POST to the wallet URL you give us. Answer 200 with { "ok": true } to accept. Anything else declines a debit, and the player sees that the buy-in was refused.

POST https://your-casino.example/slurp/wallet
{
  "action": "debit",            // "debit" | "credit" | "rollback"
  "playerId": "u_82731",
  "roundId": "6f1c0b9e-...",
  "txId": "6f1c0b9e-...:d",
  "amount": 275000000,          // lamports: 0.25 buy-in + 0.025 insurance
  "currency": "SOL",
  "game": "slurp",
  "tier": "mid"
}

200 OK
{ "ok": true, "balance": 4120000000 }

Embedding

<iframe
  src="https://slurp.bet/embed?session=TOKEN"
  allow="autoplay; fullscreen"
  style="width:100%;height:100%;border:0"
></iframe>

The frame posts events to the parent window so you can refresh balances without polling:

{ "type": "slurp:spawn", "tier": "mid", "buyIn": 250000000 }
{ "type": "slurp:round", "result": "cashed", "payout": 790000000, "aliveMs": 184000 }
{ "type": "slurp:round", "result": "dead", "payout": 0, "aliveMs": 41000 }

Settlement

Your players share arenas with everyone else, so money flows both ways. Pull a signed report for any period:

POST https://slurp-production.up.railway.app/v1/operator/report
{ "since": "2026-11-01T00:00:00Z" }

200 OK
{ "rounds": 1840, "debits": 512000000000, "credits": 498000000000, "netToOperator": -14000000000 }

A negative netToOperator means your players lost more than they won and you settle that to Slurp; positive means we settle to you. Settlement and revenue share are agreed per partner.

To get an operator id, secret and test wallet, reach out on X.