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.
| Piece | Who runs it |
|---|---|
| Player balance, KYC, limits | You |
| Arena, physics, matchmaking, anti-cheat | Slurp, server-authoritative at 30 ticks a second |
| Game client | Slurp, served at /embed inside your iframe |
| Currency | SOL, amounts in lamports (1 SOL = 1,000,000,000) |
Round flow
- Your backend calls
POST /v1/operator/sessionand gets a launch URL. - You open the launch URL in an iframe. The player picks a lobby and presses Play.
- We call your wallet:
debitfor the buy-in, plus the insurance premium if they took it. - The worm plays. Kills, orbs and cash-outs are settled inside the arena.
- When the worm cashes out or dies we call
creditwith 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.