FusionGamingOperator API

Request access

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/json and Accept: 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