Integrate
Game catalogue
Listing the games enabled for your account, and what each field means.
The catalogue is what your account can launch — not everything we host. Enabling a game is a toggle in your dashboard; there is no new endpoint and no release on your side.
List games
/v1/gamesoperator-apiQuery
limitintegeroptional | Page size, 1–200. Defaults to 50. |
cursorstringoptional | The next_cursor from the previous page. |
categorystringoptional | Filter by category, e.g. INSTANT or CRASH. Case-insensitive. |
providerstringoptional | Filter by provider name. Case-insensitive, exact match. |
qstringoptional | Substring match on name or slug. |
enabled_onlytrue | falseoptional | Defaults to true: only games enabled for you, and active on the platform. Pass false to see the rest of your catalogue with enabled: false. |
curl https://api.casinoapipro.com/v1/games \
-H "Authorization: Bearer $ACCESS_TOKEN"{
"data": [
{
"id": "0f7c2a1e-5b3d-4c8a-9e11-6d2f8b40c7aa",
"slug": "mines",
"name": "Mines",
"provider": "Casino Api Pro",
"category": "INSTANT",
"thumbnail_url": "https://assets.casinoapipro.com/games/mines.80b81d64.svg",
"rtp": "97.000",
"volatility": "variable",
"min_bet": "0.10",
"max_bet": "50000.00",
"max_win": "500000.00",
"currencies": ["GHS"],
"enabled": true,
"status": "ACTIVE",
"is_multiplayer": false
}
],
"next_cursor": null,
"has_more": false
}·There is no count field
next_cursor while has_more is true; both are always present, and next_cursor is null on the last page. At the catalogue's current size one request is the whole of it, but do not build on that.Fields worth knowing
iduuid | Our identifier. This is what arrives as gameId in wallet calls, so store it if you key on it there. |
slugstring | Stable human-readable identifier. Use it as game_id when creating a session — that endpoint accepts either. |
rtpdecimal string | Theoretical return as a percentage, three decimals, without a percent sign — "97.000" means 97%. Derived from the release’s mathematics, never typed by hand. Null only if unset. |
min_bet / max_bet / max_windecimal string | Your account limits, already applied — not the platform-wide ones. These are the numbers your bets are actually validated against. |
enabledboolean | Whether you may launch it. Always true unless you asked for enabled_only=false. |
statusstring | The game’s platform-wide state, e.g. ACTIVE. A game can be enabled for you and still be down for maintenance. |
volatilitystring | Free text, not an enum, and lower case: today the values are low, medium, high, variable and player-chosen. Display it; do not switch on it. |
is_multiplayerboolean | True when one round settles many players at once, as in goal-jet. Shared among your players: each operator flies their own. Affects how rounds appear in reporting. |
thumbnail_urlstring | Content-hashed and safe to cache forever. The URL changes when the art does. Your own uploaded artwork wins over ours here. |
Currencies
Every game accepts every currency your account holds. There is no per-game currency list to be added to, and nothing to ask us for: add a currency under Settings → Business, or PATCH /v1/business, and every game accepts it on the next session.
The currencies field above is therefore your account’s list, not a property of the game — it answers “what can I open a session in”, which is what anyone reading it is asking. Codes are ISO 4217 and validated when you set them, so a typo is refused at that point rather than surfacing later as sessions failing in a currency that does not exist. GET /v1/public/currencies lists every code we accept, with its minor units.
iStake limits follow the currency
0.50 is about 140 rupees or 12,500 dong rather than half a paisa — roughly the same economic bet in every currency. Set your own per-currency limits and yours are used instead; they may narrow the platform’s figures, never widen them.Fetch one game
/v1/games/{gameId}operator-apiAccepts either the slug or the id, and returns exactly the object above — the same fields, no more. For the mathematics of a specific release, see provably fair.
curl https://api.casinoapipro.com/v1/games/mines \
-H "Authorization: Bearer $ACCESS_TOKEN"A slug that exists on the platform but is not in your catalogue returns 404 GAME_NOT_FOUND, the same as one that does not exist at all.
The public catalogue
There is also an unauthenticated version, used by our own marketing site. It shows games that are live on the platform, without account-specific limits, and is rate limited by IP.
curl https://api.casinoapipro.com/v1/public/games{
"count": 5,
"categories": ["CRASH", "INSTANT"],
"data": [
{
"slug": "goal-jet",
"name": "Goal Jet",
"provider": "Casino Api Pro",
"category": "CRASH",
"description": "A shared flight every player watches at once…",
"thumbnail_url": "https://assets.casinoapipro.com/games/goal-jet.613da995.svg",
"rtp": "97.00%",
"volatility": "high",
"min_bet": "0.50",
"max_bet": "50000.00",
"currencies": ["GHS", "NGN", "KES", "USD", "EUR"],
"is_multiplayer": true,
"tags": ["crash", "multiplayer", "popular"],
"version": "1.1.0"
}
]
}!It is a different shape, and not the one to integrate against
count, not a cursor page. Its rtp carries a percent sign ("97.00%") where the authenticated one does not ("97.000"). It adds description, tags and version, and omits id, max_win, enabled and status. Its limits are the platform defaults, not yours. Build against /v1/games.