Casino API + wallet callbacks. Hand this page to operators, or download the full catalog: OPERATOR_INTEGRATION.md
A. Casino API — your backend → platform: POST https://{api-domain}/api/casinoapi
B. Wallet API — platform → your backend (seamless only): POST {AgentEndPoint} with method=GetBalance / ChangeBalance
| Mode | Value | You implement |
|---|---|---|
| Seamless | 1 | GetBalance + ChangeBalance on your wallet URL |
| Transfer | 2 | Deposit / Withdraw / WithdrawAll on Casino API |
Every Casino API call sends JSON: method, token (agent token), agentCode. Success is status: 0.
{
"method": "GetGameUrl",
"token": "AGENT_TOKEN",
"agentCode": "AGENT001",
"userCode": "player1",
"vendorCode": "slot-pragmatic",
"gameCode": "vs20olympgate",
"currencyCode": "USD",
"language": "en",
"homeUrl": "https://casino.example/lobby",
"channel": "desktop"
}
Open the returned launchUrl in the player browser / WebView. Do not call Pragmatic gameService yourself.
| vendorCode | Brand |
|---|---|
| slot-pragmatic | Pragmatic Play |
| slot-hacksaw | Hacksaw |
| slot-egt | EGT |
| slot-egt-vip | EGT VIP |
| method | Purpose |
|---|---|
| CreateUser / GetUserInfo | Players |
| GetVendors / GetVendorGames | Lobby catalog |
| GetWagerInfo / ReportById / ReportByDate | Settled wagers |
| GetDetailUrl | Round detail UI |
| ApplyFreeRound / CancelFreeRound | Promo free spins |
| GetFreeRoundSupportMap | Which games accept promo FS |
| ChangeUserRtp | Session RTP band |
| Deposit / Withdraw / WithdrawAll | Transfer mode only |
One HTTPS URL. Authenticate token. Treat txnCode as idempotent. Always return post-txn balance.
{
"method": "GetBalance",
"token": "YOUR_WALLET_TOKEN",
"userCode": "player1",
"vendorCode": "slot-pragmatic",
"currencyCode": "USD"
}
| txnType | Meaning |
|---|---|
| 0 Debit | Bet / bonus buy cost |
| 1 Credit | Win (including feature total at the end of free spins) |
| 2 Cancel | Reverse a debit that could not complete |
Important fields: amount (signed), wagerId, gameCode, gameRoundId, isFreeRound, isFinished.
GetGameUrl. The client talks to the game host (playGame.do → html5Game.do → gameService).GetFreeRoundSupportMap first.{
"method": "ApplyFreeRound",
"token": "AGENT_TOKEN",
"agentCode": "AGENT001",
"userCode": "player1",
"vendorCode": "slot-pragmatic",
"gameCode": "vs20olympgate",
"currencyCode": "USD",
"betAmount": 0.20,
"spinCount": 10,
"expireHours": 24
}
Then GetGameUrl so the player opens the native free-spin dialog. Backoffice: Launch & free rounds.
| status | Meaning |
|---|---|
| 0 | Success |
| 3 | Invalid agent / token |
| 5 / 6 | Invalid / blocked user |
| 8 | Insufficient money |
| 12 | Invalid vendor |
| 13 | Invalid parameter |
| 21 | Duplicate request key |
| 23 | GetBalance failed (seamless launch) |
agentCode, token, ApiDomain, mode 1 or 2txnCode, 3s timeoutGetVendorGames lists the titles you will launchReportById| Menu | What it is for |
|---|---|
| API → API guide | This document (and the PDF tab) |
| API → API test | Seamless wallet callback smoke test (admin) |
| Game control → Launch & free rounds | Open a title, Apply / Cancel promo FS |
| Game control → Game list | Enable / route games per agent |
| Agent → Agent treeview | Create sub-agents, token, mode, wallet URL |
| User → User list | Players, balances, block |
| Report → By wager index | Settled rounds (same data as ReportById) |
| Profile | Password, API domain, seamless endpoint |
Seamless agents must set the wallet URL on the agent (Profile / treeview) before GetGameUrl will debit/credit.
{
"method": "ChangeBalance",
"token": "YOUR_WALLET_TOKEN",
"userCode": "player1",
"vendorCode": "slot-pragmatic",
"currencyCode": "USD",
"txnType": 0,
"txnCode": "slot-pragmatic_12345_987654_0_1710000000000",
"wagerId": 12345,
"gameCode": "vs20olympgate",
"amount": -1.0,
"isFreeRound": false,
"isFinished": false
}
Return { "status": 0, "balance": 1249.50 }. Treat duplicate txnCode as success with the same balance.