Operator API Documentation
One integration unlocks the full FusionGaming catalog — 3,000+ premium casino games across slots, crash and live — plus wallet, player and launch management. This document covers everything an operator needs to go live.
Fundamentals
- Base URL:
https://backoffice.fusiongaming.fun/api/op/v1 - Authentication: every request carries
Authorization: Bearer <API_TOKEN>. Tokens are issued by your FusionGaming account manager and can be rotated at any time. - Format: JSON only — send
Content-Type: application/jsonandAccept: application/json. - Envelope: all responses use
{ "success": boolean, "message": string, "data": … }. - Currency: an operator holds one wallet per settlement currency — run BRL and EUR on a single account. Each player is denominated in one of them, and balances are never converted or summed across currencies.
- Wallet modes: TRANSFER — FusionGaming holds player balances; you move funds via the wallet endpoints. SEAMLESS — you hold player balances; FusionGaming calls your callback URL for every wallet operation (spec below).
Endpoints
Operator Info
GET/api/op/v1/operator/info
Your account overview. wallets is one independent balance per settlement currency — they are never summed or converted. currency is your default denomination, which new players inherit; balance is that wallet's figure, kept for older integrations.
curl https://backoffice.fusiongaming.fun/api/op/v1/operator/info \
-H "Authorization: Bearer YOUR_TOKEN"
{ "success": true, "message": "OK", "data": {
"name": "Operator Ltd.", "code": "operator-ltd",
"currency": "USD",
"wallets": [
{ "currency": "USD", "balance": 50000 },
{ "currency": "BRL", "balance": 12000 }
],
"balance": 50000,
"walletMode": "TRANSFER", "callbackUrl": null, "players": 1204 } }Currency List
GET/api/op/v1/currency/list
Every settlement currency the platform supports.
{ "success": true, "message": "OK", "data": [
{ "code": "USD", "name": "US Dollar", "symbol": "$" },
{ "code": "BRL", "name": "Brazilian Real", "symbol": "R$" } ] }Provider List
GET/api/op/v1/provider/list
The studios granted to your account. currencies tells you which denominations a studio can be played in — filter on it rather than discovering a mismatch as a failed launch.
Add ?merge=1 to receive one entry per studio with the union of its currencies, instead of one entry per platform account. The returned providerId works for every currency listed.
{ "success": true, "message": "OK", "data": [
{ "providerId": "cmxk…", "providerName": "Pragmatic Play",
"logo": "https://…", "games": 240,
"currencies": ["BRL", "EUR", "USD"],
"languages": ["en", "pt", "es"],
"status": 1 } ] }Game List
GET/api/op/v1/game/list/:providerId
Active games for one studio. gameId is what you pass to /game/launch. Add ?merge=1 to get the studio's catalogue across every account you hold, de-duplicated by title.
{ "success": true, "message": "OK", "data": [
{ "gameId": "cmxg…", "gameCode": "vswaysdogs",
"gameName": "The Dog House Megaways", "gameImage": "https://…",
"category": "SLOT", "rtp": 96.5, "inMaintenance": false } ] }Create Player
POST/api/op/v1/player/create
Registers a player under your account (idempotent — safe to call repeatedly). Required before wallet operations or launches.
POST /player/create
{ "playerExternalId": "player-123" }
{ "success": true, "message": "Player ready", "data": {
"playerExternalId": "player-123", "currency": "USD", "balance": 0 } }Player Info
GET/api/op/v1/player/info
Query param ?playerExternalId=player-123. Returns balance, status and last-login.
Wallet Deposit (TRANSFER mode)
POST/api/op/v1/player/wallet/deposit
Moves funds to the player from your wallet in the player's own currency — a BRL player is funded from your BRL float, never from another denomination at an implied rate. Fails with 422 in SEAMLESS mode, or if that wallet is short.
POST /player/wallet/deposit
{ "playerExternalId": "player-123", "amount": 100.50 }
{ "success": true, "message": "OK", "data": {
"playerExternalId": "player-123", "depositAmount": 100.5,
"balance": 100.5, "operatorBalance": 49899.5 } }Wallet Withdraw (TRANSFER mode)
POST/api/op/v1/player/wallet/withdraw
Moves funds from the player back to your operator balance.
Launch Game
POST/api/op/v1/game/launch
Returns a ready-to-open gameUrl for the player. Embed it in an iframe or redirect. The player must exist (/player/create) and — in TRANSFER mode — should have balance to play.
Currency is resolved for you. A studio exists once per platform account and most accounts settle a single currency. If the gameId you send belongs to an account that cannot serve your player's currency, we launch the same title from the same studio on an account that can — you never need to track one id per currency. A different game is never substituted, and if no account can serve that currency the launch is refused with 422.
Leave currency unset: it defaults to the player's wallet. Passing one that differs is refused, because a session denominated differently from the balance behind it would put every bet and win in the wrong currency.
POST /game/launch
{ "playerExternalId": "player-123",
"gameId": "cmxg…",
"language": "en",
"returnUrl": "https://your-casino.com/lobby" }
{ "success": true, "message": "OK",
"data": { "gameUrl": "https://…/playGame.do?…" } }Seamless Wallet Callbacks
In SEAMLESS mode, FusionGaming POSTs every wallet operation to your registered callback URL. All four commands hit the same URL — distinguish them by the command field.
Security — X-Request-Signature
Every callback carries an X-Request-Signature header. Verify it before processing:
1. take all keys of the flat JSON body, sorted alphabetically
2. join their VALUES with ","
3. signature = Base64( HMAC-SHA512( joined, YOUR_API_TOKEN ) )
4. compare with the header (constant-time)Commands
Respond HTTP 200 always — success or business error travels in statusCode. Answer within 3 seconds.bet, win and cancel are idempotent by transactionId — a repeated id must be applied only once.
// balance
{ "command": "balance", "playerId": "player-123",
"currency": "USD", "timestamp": 1770000000000 }
→ { "balance": 1250.00, "statusCode": "OK" }
// bet (also: win — credit instead of debit)
{ "command": "bet", "transactionId": "t-9912", "playerId": "player-123",
"roundId": "r-5521", "providerId": 1, "providerName": "Pragmatic Play",
"gameCode": "vswaysdogs", "gameName": "The Dog House Megaways",
"currency": "USD", "amount": 2.50, "isRoundFinished": false,
"isCall": false, "timestamp": 1770000000000 }
→ { "balance": 1247.50, "statusCode": "OK" }
// cancel — referenceId names the bet transaction to reverse
{ "command": "cancel", "transactionId": "t-9944", "referenceId": "t-9912",
"playerId": "player-123", "roundId": "r-5521", … }
→ { "balance": 1250.00, "statusCode": "OK" }Status codes
OK success
ERR_INVALID_PLAYER_ID unknown player
ERR_INVALID_ACCOUNT currency mismatch
ERR_NOT_AUTHENTICATED player blocked / not logged in
ERR_NOT_ENOUGH_MONEY insufficient funds (bet)
ERR_TRANSACTION_DOES_NOT_EXIST cancel: unknown referenceId
ERR_TRANSACTION_ROLLED_BACK cancel: already reversed
ERR_INTEGRITY_CHECK_FAILED signature verification failed
ERR_UNKNOWN internal error