Integrate
Rounds & history
Your rounds, movements, sessions, players and free bets — listed, for your servers.
Your own rounds, players, sessions, movements and free bets, listed — the same records the dashboard shows, for your servers rather than a person in a browser. Everything here is read with your API credentials and scoped to the calling key's environment.
iAnything you can read here, you can automate
GET /v1/rounds answered 404 to operators building reconcilers against their own data. If something is still missing, tell us; the gap is an accident, not a policy.Paging and windows
Every list here takes limit (1–200, default 50) and cursor, and returns data, next_cursor and has_more. Follow next_cursor while has_more is true. Most also take from and to, inclusive and UTC.
There is no environment parameter, deliberately: a credential belongs to one environment and the history you get is its own. A test key cannot read live records.
Rounds
/v1/roundsoperator-apiQuery
player_idstring | Your own player id. |
gamestring | Game slug, e.g. mines. |
statusstring | OPEN, SETTLED or VOIDED. |
free_bettrue | false | Rounds funded by a free bet — the ones that raise no wallet call. |
from / toISO 8601 | On the round start time. |
{
"round_id": "rnd_45vq2tibskftpz9f6xto",
"wallet_round_id": "4316deee-b478-434d-a5a7-51a4a6523c37",
"wallet_game_id": "deef2e01-f65d-4dad-8cc4-5eeebf75b77b",
"external_round_id": null,
"player_id": "your_player_42",
"game": "spin-bottle",
"game_name": "Spin da' Bottle",
"status": "SETTLED",
"stake": "1.00",
"total_bet": "1.00",
"total_win": "2.00",
"currency": "GHS",
"free_bet": false,
"outcome": { "angle": "223.9624", "status": "won", "outcome": "up" },
"fairness": {
"server_seed_hash": "a02540d7…",
"client_seed": null,
"nonce": 1
},
"started_at": "2026-09-02T21:15:10.341Z",
"completed_at": "2026-09-02T21:15:10.439Z"
}Two fields worth reading twice
stake vs total_betthey differ | stake is what was staked. total_bet is summed from settled BET rows, so it is "0.00" on a free bet — no debit was raised. Reconcile against stake. |
free_betboolean | True means no wallet call exists for this round's stake. A losing free bet has no wallet call at all — see webhooks. |
One round, and what it moved
/v1/rounds/{roundId}operator-apiAccepts any of the three identifiers for a round — the rnd_… handle events carry, the uuid wallet calls carry, or your own external_round_id. Returns the object above plus the movements the round caused, so a reconciler settles it in one call:
"transactions": [
{ "type": "BET", "status": "SUCCESS", "amount": "1.00",
"transaction_id": "rnd_45vq2tibskftpz9f6xto.bet", "created_at": "…" },
{ "type": "WIN", "status": "SUCCESS", "amount": "2.00",
"transaction_id": "rnd_45vq2tibskftpz9f6xto.win", "created_at": "…" }
]·An empty list is not a fault
Voiding a stuck round
/v1/rounds/{roundId}/voidoperator-apiA round is created before its stake is taken, so if the debit fails the round can be left OPEN. A player may hold one open round per game — a round open in Mines never blocks Dice — so a stranded round locks them out of that one game until it is cleared. This releases it.
curl -X POST https://api.casinoapipro.com/v1/rounds/rnd_8mmde7j8/void -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json" -d '{"reason": "debit never completed"}'!Only for rounds that never took money
SUCCESS or PENDING movement against it is refused with 409. Those moved real money, or may have, and the answer is a refund or rollback — which reverses it on both sides — rather than a status change that would strand the difference. Movements that FAILED moved nothing and do not block a void.A round staked with a free bet is refused too: the free bet did leave the player, and the round is still in play — it settles on its own. Voiding moves no money in either direction. Once voided, the round is closed for good: a later bet or win naming the same round_id is refused with ROUND_ALREADY_SETTLED, because reporting leaves voided rounds out and money attached to one would show in no figure.
The same action is in the dashboard, under Activity → Rounds: open an OPEN round and it offers Void only where this endpoint would accept it. There a reason is required, and it is kept in the audit log with the name of whoever pressed it.
Movements
/v1/transactionsoperator-apiThe ledger, listed. Filter by type, status, player_id, round_id (either identifier) and a date window. Each row carries wallet_round_id, so movements join to rounds exactly rather than by timestamp and amount.
curl "https://api.casinoapipro.com/v1/transactions?type=WIN&from=2026-09-01" \
-H "Authorization: Bearer $ACCESS_TOKEN"Sessions
/v1/sessionsoperator-apiFilter by player_id, status (ACTIVE, EXPIRED, CLOSED, REVOKED) and a window. Creating one is on sessions and launch.
Players
/v1/playersoperator-api/v1/players/{playerId}operator-apiPlayers we have seen on your account, addressed by your own id. q substring matches. For a player's money position rather than their record, see the reporting API.
player_name is the display name we hold for them — whatever you last sent on a session, or null if you have never sent one. It is here so you can read back what we store rather than infer it from what you sent.
Free bets
/v1/freebetsoperator-apiGrants held on your account, with remaining against quantity and the total_win they have produced — which is the entire cost of a free bet to you, since no debit is ever raised. Filter by player_id and status (ACTIVE, SPENT, EXPIRED, REVOKED).
/v1/freebets/{grantId}/revokeoperator-apiWithdraws whatever is left of a grant and answers with unspent, the number of bets that will now never be played. Only an ACTIVE grant can be revoked; one already spent, expired or revoked is refused rather than quietly accepted.
iOnly the unplayed part
What is still dashboard-only, and why
A few things are deliberately not reachable with an API key, because a key that can do them is a key worth stealing:
- Issuing and revoking credentials. A key that can mint keys turns one leak into permanent access.
- Webhook endpoints. No machine credential should be able to redirect where your events are delivered.
- Wallet configuration. Same argument, with money on the other end of it.
- Team, businesses and billing. These are about people and contracts rather than traffic.
Everything else is either here already or a gap worth reporting. We would rather add an endpoint than have you drive a browser.