Casino Api Pro

Integrate

Promotions and tournaments

Free bets, rain, cashback, referrals and tournaments — and why they all pay in free bets.

Free bets, cashback, referrals and tournaments. All four are configured from the dashboard and all four are driven by the same rule, which is worth stating once at the top.

iEvery promotion pays in free bets, never in cash

We do not hold your float. A cash credit issued by us would be money promised on your behalf with nothing behind it, so promotions grant free bets instead — already backed, already expiring, and already reported separately so you can see what a campaign cost. Every computed amount is also exposed, so if you would rather pay cash you can read the figure and pay it through your own wallet.

Free bets

A grant is a number of bets at a fixed stake, optionally scoped to one game and optionally expiring. The player sees them in the game menu and picks one before staking; the stake is then the grant's, not the stepper's.

  • A grant scoped to a game cannot be spent at another table. This is enforced when it is listed and again when it is spent.
  • Spending is a conditional update, so two tabs cannot spend the same bet twice.
  • total_win on the grant is what the promotion has paid out — the cost of the campaign, separate from your ordinary GGR.

Rain

A burst of free bets dropped into a game's chat room for anyone watching to claim, first come first served. Claiming is a unique index plus a conditional decrement inside one transaction, so a drop of ten is claimed by exactly ten people however many tap at once.

Cashback

A standing rule that returns part of a player's net loss over a period. Set the percentage, the period, a minimum loss to qualify and a cap per player.

percent
decimal
Share of net loss returned. Rounded down to two places — a promotion should never pay more than it advertises.
period
DAILY | WEEKLY | MONTHLY
Weeks are anchored to Monday 00:00 UTC, not "seven days ago".
min_loss
decimal
Below this, nothing is awarded. Stops a rule issuing thousands of one-cent grants that cost more to process than they are worth.
max_award
decimal
The most one player can receive from one run. This is what bounds a bad week.

!Running a period twice pays nobody twice

A run claims its window before it computes anything, so a duplicate cron, a second node, or somebody pressing Run now twice reports already_run and awards nothing. Weekly windows anchor to a fixed weekday for the same reason: a sliding window makes Tuesday's run and Wednesday's run two different windows that overlap, and both would pay for the days in the overlap.

Referrals

A player shares a code; when the player who used it has staked the qualifying turnover, both sides are paid.

!Nothing is paid on signup, and a zero threshold is refused

A referral bonus that pays for an account existing is a bounty on account creation, and it is farmed within days of launch. The reward needs turnover the referred player actually staked. max_per_referrer bounds what one person with a bot farm can take.

Tournaments

A scheduled window, a scoring rule and a prize table. Leaderboards update as rounds settle and prizes are awarded automatically when the window closes.

TOTAL_WAGERED
scoring
Rewards volume. Your biggest players will win it.
NET_WIN
scoring
Wins minus stakes. Rewards being ahead, and can go negative.
BIGGEST_MULTIPLIER
scoring
The single best payout-to-stake ratio. One lucky round can win it, so a small player has a real chance.
WIN_COUNT
scoring
Counts winning rounds. Favours low-risk, high-frequency play.

These are not interchangeable — a wagering contest and a biggest-multiplier contest produce completely different behaviour from the same players.

!Set a minimum stake, or the leaderboard is a scripting contest

Without one, a wagering tournament is won by whoever automates the most one-cent rounds. Rounds under min_stake do not score at all.

Prizes are frozen at creation: they cannot change while players are competing for them. Ties break on fewest rounds, then who entered first, so the result is deterministic rather than whatever order the database happened to return.

What the player's client sees

GET/v1/game/tournamentsgame-launcher

Live tournaments covering the game the player is sitting at, their own score and rank, and the top of the leaderboard with names masked the same way every other player-visible name on the platform is.

json
{
  "data": [{
    "name": "Weekend Cup",
    "scoring": "TOTAL_WAGERED",
    "ends_at": "2026-09-07T00:00:00.000Z",
    "min_stake": "1.00",
    "prizes": [{ "rank": 1, "amount": "100.00" }],
    "me": { "score": "16.00", "rounds": 8, "rank": 1 },
    "leaderboard": [{ "rank": 1, "player": "d***3", "score": "16.00", "is_me": true }]
  }]
}

A player outside the top ten sees their score and no rank. Computing an exact position would be a count over every entry on every poll, which is not worth it for a number nobody acts on.

Costs land in your ordinary reporting — see the reporting API.