Read the table with your own code.

Everything on this page is open: no key, no sign-up, from any site or script. It only answers questions. Nothing here can place a bet or move money.

Past rounds

The newest rounds first, fifty a page. limit asks for 1 to 100; before gives the rounds below a round’s number, so pass the answer’s next to get the page after. next is null on the last page.

curl "https://roulana.com/api/rounds?limit=1"
{
  "rounds": [
    {"round":8748,"number":11,"color":"black","at":1791452177944,"proof":"773btGJe85sZrWS5SVNjjWaPQsf6SkzhqEATYCoe6rjY"}
  ],
  "next": 8748
}
round
The round’s number at this table. They count up by one.
number
The winning number, 0 to 36.
color
red, black or green.
at
When the round opened, in milliseconds since 1970 (UTC).
proof
The round’s own account on Solana, when there was money on the round. With it anyone can check the round. null for a round nobody bet on.

One round

Ask for a round by its number. The answer adds verify, the link that checks the round on Solana in one click.

curl https://roulana.com/api/rounds/8748
{
  "round": 8748,
  "number": 11,
  "color": "black",
  "at": 1791452177944,
  "proof": "773btGJe85sZrWS5SVNjjWaPQsf6SkzhqEATYCoe6rjY",
  "verify": "https://roulana.com/verify?round=773btGJe85sZrWS5SVNjjWaPQsf6SkzhqEATYCoe6rjY"
}

The live line

Connect once and the table tells you each result as it happens, so nothing has to ask in a loop. It is a plain event stream (Server-Sent Events): every browser and every language reads it.

const table = new EventSource("https://roulana.com/api/live");
table.addEventListener("result", (e) => {
  const r = JSON.parse(e.data);
  console.log(r.round, r.number, r.color);
});
curl -N https://roulana.com/api/live
now
Sent once as the line opens: the round that is running, its phase, and when the phase ends.
phase
Each time the table moves on: betting, closing (no more bets), spinning, result, and idle while the table waits for the next round. endsAt is the moment the phase ends, in milliseconds since 1970 (UTC), or null.
result
The winning number, the moment the ball rests: round, number, color, proof and the link that checks it.

If the line drops, connect again and read /api/rounds for anything you missed.

The table, the bank and the coin

/api/history
The rounds with money on them, newest first: each player’s bets and what they were paid. Add ?wallet=<address> for one wallet with its totals; before and limit (1 to 50) page through.
/api/stats
The table now (the round, its phase, who is there), the last twelve results, today’s totals and the biggest wins of the week.
/api/bank
The bank, read from Solana: its size, the value of a share, the limit a round may win, the fee paid so far and its history.
/api/coin
The $ROULANA coin: its address and live numbers. null until the coin is out.
/api/buyback
The buyback’s public record: what was bought, burned and sent to prizes. null until the first buy.
/api/prizes
The prizes’ public record: each day’s winners and the Hall of Fame. null until the first day.

Check a round yourself

Every round with money on it is drawn and paid on Solana, so its proof is all you need: check it in one click, run verify-round.py on your own computer (it talks only to Solana), or follow the formula by hand. The program’s source is on GitHub.

The rules of the feed