Playtech Seamless API Integration

Version 1.0.60 (13 April 2026)

#Introduction

This document is a how-to guide for online gambling Operators wanting to offer Playtech games and Playtech bonuses to their players. Playtech is providing an out-of-the-box solution called GamesLink against which small to mid-size Operators can easily integrate and be part of Playtech’s offering.

# Quick Start

The Gameslink Integration Guide includes instructions on the development order, gameplay scenarios, regulatory requirements, bonus usage and game launch capabilities. This guide should be used along side the API Specification and Integration Testing Tool. It’s recommended to go over the development order and then proceed to using the testing tool for specific examples.

#Game Launcher

To launch Playtech games from their portal, Operators can use GamesLink Game Launcher. This a dedicated HTTP endpoint that redirects the player to the game if correct parameters are passed.

A very high-level game launch flow looks like this:

  • Player logs into the Operator’s portal;
  • Player clicks on a Playtech game banner;
  • Operator generates new or uses existing (temporary) external token meant for Playtech game(s);
  • Game Launcher URL is opened with the external token, player parameters, and game ID;
  • Game Launcher validates the external token and launches the game.

# Game History

Game History is included in Playtech’s gaming clients by default. For the quickest and most convenient solution, the built-in gaming history can be used. However, it is also possible for Operators to build their own history with the information they receive via the API.

Building the Game History view on the Operator’s side (optional)

When the player completes a game round, a GameRoundResult request is sent to the Operator’s Wallet. In addition to other information, a never-expiring URL to detailed game history is also provided to the Operator. The URL is without the domain part, just the path is provided. The URL domain of the game history details is provided during the integration process. It is not relevant for the Operator to interpret the URL content in any way, it should just be stored for later use.

The game history detailed URL is not sent at the end of side game rounds and when a player’s bet is refunded.

Building the Game History view on the Operator’s side enables the Operator to also offer Players a unified game history experience across games of different providers. A detailed game history URL can be incorporated into the listing so that the player can open it whenever they wish to.

There is no special authentication mechanism included in the detailed game history URL access, but the parameters are constructed in a way that makes it impossible to guess someone’s game round details.

It is recommended that the detailed game history URL is opened in a scalable way (scrollable) for the player. There are great variations in the size of the page itself, depending on the game round outcome and the game itself.

Example screenshot of a detailed game history:

#From Operator API

All "From Operator" API calls need to provide x-auth-kiosk-key header. Kindly obtain the kiosk key from technical support. This key allows the platform to identify that the request is coming from which operator.

POST /from-operator/endLoginSession

This endpoint is used by operator to end a player's game session.


POST /from-operator/endLoginSession HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: playtech.api
x-auth-kiosk-key: kiosk_key
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{  
   "requestId":"GBou01eoly",
   "username":"SomePlayer",
   "externalToken":"externaltoken"
}
							

Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{
  "code": 200,
  "message": "",
  "data": {
    "requestId": "12342121"
  },
  "timestamp": "2024-06-04T12:48:56+00:00"
}

							

 ### Error in case invalid player ###
{
	"code": 200,
    "message": "",
    "data": {
        "requestId":"e9ccd456-4c6a-47b3-922f-66a5e5e13513",
        "error":{  
            "description": "Unable to read player from database: player1",
            "code":"ERR_PLAYER_NOT_FOUND"
        }
    },
    "timestamp": "2024-06-04T12:42:57+00:00"
}

							
endLoginSession Request:
Parameter Location Type Description
x-auth-kiosk-key header string {{kiosk_key}}
requestId body string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
serverName body string The name of the game server. (Case Sensitive)
username body string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
  • minSize: 1
  • maxSize: 32
externalToken body string The external token to indicate a game session for a player. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}} (If provided, will end the specific session for the player associated with the external token. If not provided, will end all sessions for the player.)
endLoginSession Response:
Parameter Type Description
code integer The status code of the response.
message string Error descriptor. Only present when service failed to process request
data Data
timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
POST /from-operator/getGameLaunchUrl

This endpoint allows you to retrieve the game launch URL. After obtaining the game launch URL, operator can redirect player to the provided URL to start game.

Note: The game code is presented in a unique format for direct table. For a clear reference, please see Example 2 in the request section, which uses a direct table layout.

Example 1: Normal 
POST /from-operator/getGameLaunchUrl HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: operator.com
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{  
   "requestId":"71c8ebdd-5cbe-4294-bf40-ae12b93fdef9",
   "serverName":"PLAYTECHSERVER",
   "username":"MCCT_PLAYER001",
   "gameCodeName":"qbal",
   "clientPlatform":"web",
   "externalToken":"MCCT_TOKEN123456789",
   "language":"en",
   "playMode":1,
   "lobbyUrl":"https://www.lobby.com"

}

Example 2:Direct table
POST /from-operator/getGameLaunchUrl HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: operator.com
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{  
	"requestId":"71c8ebdd-5cbe-4294-bf40-ae12b93fdef9",
	"serverName":"PLAYTECHSERVER",
	"username":"MCCT_PLAYER001",
	"gameCodeName":"qbal;qbal_quantumbac",
	"clientPlatform":"web",
	"externalToken":"MCCT_TOKEN123456789",
	"language":"en",
	"playMode":1,
	"lobbyUrl":"https://www.lobby.com"

 }


							


Example 1: Normal Open game
Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{
  "code": 200,
  "message": "",
  "data": {
    "url": "https://gamelaunch.com/?gameCodeName=bib&username=MCCT_PLAYER001&externalToken=MCCT_TOKEN123456789&casino=PLAYTECHSERVER&clientPlatform=web&language=en&playMode=1&lobbyUrl=https%3A%2F%2Fwww.lobby.com"
  },
  "timestamp": "2024-05-01T03:09:18+00:00"
}




							

 ### Error in case incorrect token ###
{
    "code":422,
	"message":"The client platform field is required.",
	"data":null,"timestamp":"2025-06-04T03:42:06+00:00"
}
							
GameLaunchRequest:
Parameter Location Type Description
x-auth-kiosk-key header string {{kiosk_key}}
requestId body string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
serverName body string The name of the game server. (Case Sensitive)
username body string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}. Player username provided by the operator must be in uppercase.
  • minSize: 1
  • maxSize: 32
gameCodeName body string Identifies the Playtech game to be launched.
clientPlatform body string Client platform where the game is being launched.
    Options:
  • web
  • mobile
externalToken body string The external token to indicate a game session for a player. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
  • minSize: 11
  • maxSize: 255
language body string Language of the game client being launched. (ISO 639-1)
playMode body number The mode of play (0 for fun, 1 for real).
lobbyUrl body string URL to the lobby page. Used by Game Launcher to redirect to lobby when clicking on the Lobby button or in case of problems.
configurationKey body string To disable lobby in live games
  • value: nolobby
GameLaunchResponse:
Parameter Type Description
code integer The status code of the response.
message string Error descriptor. Only present when service failed to process request
data Data
timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
POST /from-operator/getPlayerBonusHistory

Returns a list of player's non-active bonuses that have been issued in the last year. Maximum number of bonuses returned is 500, ordered by removal date (descending).


POST /from-operator/getplayerbonushistory HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: playtech.api
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{  
   "requestId":"5ZT1pKr68O",
   "serverName":"PLAYTECHSERVER",
   "username":"SomePlayer"
}  

							

Example 1: Cancellled
Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: text/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{
  "code": 200,
  "message": "",
  "data": {
    "requestId": "123",
    "removedBonusInstances": [
      {
         "code": 5252469,
         "name": "Manual Golden Chips Testing",
         "type": "GOLDENCHIP",
         "givenAmount": "40",
         "removalDetails": {
         "removalDate": "2025-03-05 15:01:53.000",
         "removalReason": "declined_by_operator",
         "removedAmount": "40",
         "redeemedAmount": "0"
                },
         "remoteBonusCode": "000000",
         "givenGoldenChipCount": 20,
         "goldenChipValue": "2"
            }
        ]
    },
    "timestamp": "2025-07-01T09:59:20+00:00"
}
Example 2: Accepted
{
  "code": 200,
  "message": "",
  "data": {
  "requestId": "123",
  "removedBonusInstances": [
   {
    	"code": 5423095,
        "name": "Free Spins 2",
        "type": "FREESPIN2",
        "acceptDate": "2025-06-06 09:03:17.000",
        "givenAmount": "5",
        "givenFreespinCount": 5,
        "removalDetails": {
            "removalDate": "2025-07-01 08:01:39.000",
            "removalReason": "redeemed_by_wagering",
        	"removedAmount": "0",
            "removedFreespinCount": 0,
            "redeemedAmount": "1.3"
            },
        "remoteBonusCode": "3243432",
        "freeSpinBetValue": "1"
            }
    },
    "timestamp": "2025-07-01T10:01:28+00:00"
}
Example 3: Declined
{
  "code": 200,
  "message": "",
  "data": {
  "requestId": "123",
  "removedBonusInstances": [
   {
    	"code": 5252521,
        "name": "Manual Golden Chips Testing",
        "type": "GOLDENCHIP",
        "givenAmount": "40",
        "removalDetails": {
            "removalDate": "2025-03-05 15:07:07.000",
            "removalReason": "declined_by_operator",
            "removedAmount": "40",
            "redeemedAmount": "0"
             },
        "remoteBonusCode": "ASQ2",
        "givenGoldenChipCount": 20,
        "goldenChipValue": "2"
            },
    },
    "timestamp": "2025-07-01T10:01:28+00:00"
}
							

### Example 1 - Player not found ###
{
    "code": 200,
    "message": "",
    "data": {
        "requestId": "123",
        "error": {
            "description": "Unable to read player from database: CRXTESTDEV2_Player13122-ptstaging3.210",
            "code": "ERR_PLAYER_NOT_FOUND"
        }
    },
    "timestamp": "2025-07-04T07:11:28+00:00"
}
							  
### Example 2 - Too long username ###
{
	"requestId": "100001232",
	"error": {
		"description": "Invalid string length: objectIdentity.username=111111111111111111111111111111111111111111111. Max is 32.",
		"code": "CONSTRAINT_VIOLATION"
	}
}
							
GetPlayerBonusHistoryRequest:
Parameter Location Type Description
x-auth-kiosk-key header string {{kiosk_key}}
requestId body string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
serverName body string The name of the game server. (Case Sensitive)
username body string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
  • minSize: 1
  • maxSize: 32
removalType body string Filters bonus instances based on matching removal reason. If not provided, all types are returned.
    Enum:
  • REDEEMED : Bonus instance was removed by redemption.
  • CANCELLED : Bonus instance was removed by cancellation.
  • DECLINED : Bonus instance was declined (cancelled while still in waiting status).
GetPlayerBonusHistoryResponse:
Parameter Type Description
code integer The status code of the response.
message string Error descriptor. Only present when service failed to process request
data Data
timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
POST /from-operator/getPlayerActiveBonuses

Returns a list of player's active bonuses. It includes the bonus name, the remaining amount or count depending on the bonus type, the remaining wagering requirements and bonus balance.


POST /from-operator/getplayeractivebonuses HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: playtech.api
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{  
   "requestId":"5ZT1pKr68O",
   "serverName":"PLAYTECHSERVER",
   "username":"SomePlayer"
}  

							

### Example 1 - Golden Chip ###
Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: text/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{
    "code": 200,
    "message": "",
    "data": {
        "requestId": "123",
        "bonusInstances": [
            {
                "code": 5262592,
                "name": "Manual Golden Chips Testing",
                "type": "GOLDENCHIP",
                "acceptDate": "2025-05-08 11:10:25.000",
                "givenAmount": "2",
                "gameCodeNames": [
                    "gpas_frr_g_pop",
                    "3brgl",
                    "fbrolx",
                    "ccro",
                    "gpas_kickitmp_pop",
                    "baws",
                    "dbro",
                    "rol_doxx1_ldcs01",
                    "gpas_sem_pop",
                    "vbjl",
                    "gpas_cplanesmp_pop",
                    "fbbjl",
                    "sbs_dtl",
                    "qbal",
                    "rofljpt1",
                    "tgcsl"
                ],
                "bonusBalance": "2",
                "remoteBonusCode": "123177",
                "givenGoldenChipCount": 1,
                "remainingGoldenChipCount": 1,
                "goldenChipValue": "2"
            }
        ]
    },
    "timestamp": "2025-07-01T10:21:59+00:00"
}

### Example 2 - FreeSpin1 ###
{
  "code": 200,
  "message": "",
  "data": {
    "requestId": "AAVVA",
    "bonusInstances": [
      {
        "code": 5530754,
        "name": "Free Spins",
        "type": "FREESPIN",
        "acceptDate": "2025-12-10 08:25:53.000",
        "givenFreespinCount": 5,
        "remainingFreespinCount": 4,
        "gameCodeNames": [
          "pop_fe5b5bb8_rbp",
          "pop_b0067ed7_rbp",
          "gpas_gdhvns_pop",
          "pop_10f85cb5_qsp",
          "gpas_drise_pop",
          "pop_9d921557_qsp",
          "gpas_bwizard_pop",
          "pop_eacf1531_rbp",
          "pop_208f7707_rbp",
          "gpas_lbmcc_pop",
          "pop_winsfortune_qsp",
          "gpas_aluck_pop",
          "gpas_ccsahara_pop",
          "gpas_ccluck_pop",
          "pop_f6d36d30_qsp",
          "gpas_gwish_pop",
          "gpas_ffighter_pop",
          "gpas_gmacaque_pop",
          "gpas_gwizard_pop"
        ],
        "bonusBalance": "0.0",
        "remoteBonusCode": "TESTINGTESTINGFS1"
      }
    ]
  },
  "timestamp": "2025-12-10T08:26:30+00:00"
}

### Example 3 - FreeSpin2 ###
{
  "code": 200,
  "message": "",
  "data": {
    "requestId": "AGAAGA",
    "bonusInstances": [
      {
        "code": 5530741,
        "name": "Free Spins",
        "type": "FREESPIN2",
        "acceptDate": "2025-12-10 08:13:56.000",
        "givenAmount": "12", 
        "givenFreespinCount": 4,
        "remainingFreespinCount": 3, 
        "gameCodeNames": [
          "gpas_gdhvns_pop",
          "gpas_drise_pop",
          "gpas_bwizard_pop",
          "gpas_lbmcc_pop",
          "gpas_aluck_pop",
          "gpas_ccsahara_pop",
          "gpas_ccluck_pop",
          "gpas_gwish_pop",
          "gpas_ffighter_pop",
          "gpas_gmacaque_pop",
          "gpas_gwizard_pop",
          "gpas_rwizard_pop",
          "gpas_cish_pop",
          "gpas_rrlustforg_pop",
          "gpas_loluck_pop",
          "gpas_fgift_pop",
          "gpas_aoggstorm_pop",
          "gpas_mgaogkol_pop",
          "gpas_aogcc_pop",
          "gpas_gstorm2_pop"
        ],
        "bonusBalance": "9.00",
        "remoteBonusCode": "141feege",
        "freeSpinBetValue": "3" 
      }
    ]
  },
  "timestamp": "2025-12-10T08:19:19+00:00"
}
							

### Example 1 - Player not found ###
{
	"message": "Unable to read player from database: arvik-ptstaging3.33",
    "errors": {
		"code": "ERR_PLAYER_NOT_FOUND"
	}
}
							  
### Example 2 - Too long username ###
{
	"message": "Invalid string length: objectIdentity.username=111111111111111111111111111111111111111111111. Max is 32.",
    "errors": {
		"code": "CONSTRAINT_VIOLATION"
	}	
}
							
GetPlayerActiveBonusesRequest:
Parameter Location Type Description
x-auth-kiosk-key header string {{kiosk_key}}
requestId body string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
serverName body string The name of the game server. (Case Sensitive)
username body string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
  • minSize: 1
  • maxSize: 32
GetPlayerActiveBonusesResponse:
Parameter Type Description
code integer The status code of the response.
message string Error descriptor. Only present when service failed to process request
data Data
timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
POST /from-operator/getSupportedFreeSpinBetValues

Used for retrieving the list of supported Free Spin bet values for a game or set of games. If multiple games are provided, then a list of common bet values across specified games is returned. Returned bet values are used to issue a Free Spin bonus to the player - at least one or more values must be provided.


### Example 1 - Requesting supported free spin bet values for certain games only ###
POST /from-operator/getsupportedfreespinbetvalues HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host:playtech.api
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{
	"requestId": "2621194953084395995",
	"serverName":"PLAYTECHSERVER",
	"currencyCode": "EUR",
	"gameCodeNames": ["gpas_tttotems_pop", "whk", "gpas_engage_pop"]
}
							

### Supported free spin bet values returned ###
Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{
	"code": 200,
    "message": "",
    "data": {
        "requestId": "123",
        "betValues": [
            "0.40",
            "0.80",
            "2.00",
            "4.00",
            "6.40",
            "10.00",
            "12.80",
            "16.00",
            "20.00",
            "32.00",
            "40.00",
            "50.00"
        ]
    },
    "timestamp": "2025-07-01T11:04:33+00:00"
}
							

{
    "code": 422,
    "message": "The request id field is required. (and 3 more errors)",
    "data": null,
    "timestamp": "2025-07-01T06:22:59+00:00"
}
							
GetSupportedFreeSpinBetValuesRequest:
Parameter Location Type Description
x-auth-kiosk-key header string {{kiosk_key}}
requestId body string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
serverName body string The name of the game server. (Case Sensitive)
currencyCode body string The currency for which to return possible Free Spin bet values.
gameCodeNames body array of string A list of games for which to return possible Free Spin bet values.
  • minSize: 1
  • maxSize: 2147483647
GetSupportedFreeSpinBetValuesResponse:
Parameter Type Description
code integer The status code of the response.
message string Error descriptor. Only present when service failed to process request
data Data
timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
POST /from-operator/giveFreeSpins

Used for giving players free spins based on a bonus template configured on the Playtech side. It is possible to define the free spin count and the list of games in which it is usable together with the win wagering multiplier (if the correct bonus template is used). This request also creates a player record on the Playtech side on-demand, meaning that the Operator must pass a couple of player related parameters. If the Operator is sure of having created the player record already on the Playtech side (e.g. has successfully issued player a bonus at least one time), it can leave the player-specific fields empty.


### Example 1 - Giving a FREESPIN1 bonus with value for certain games only ###
POST /from-operator/giveFreeSpins HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host:playtech.api
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{  
    "requestId":"Mid4giMuud",
	"serverName":"PLAYTECHSERVER",
    "username":"SomePlayer",
    "templateCode":"67183",
    "count":2,
    "remoteBonusCode":"2MPNP309ZH",
    "remoteBonusDate":"2021-03-13 12:34:56.789",
    "playerData":{  
    	"currencyCode":"EUR",
    	"countryCode":"EE"
    }
}

### Example 2 - Giving a FREESPIN2 bonus with value for certain games only ###
POST /from-operator/giveFreeSpins HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: operator.com | playtech.api
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{
    "requestId": "123",
    "serverName": "AGCASTG",
    "username": "K1_MOCKPLAYER2",
    "templateCode": "63823",
    "playerData":{"currencyCode":"MYR","countryCode":"MY"},
    "amount": 20,
    "betValues": [0.40, 0.80],
    "remoteBonusCode": "000000",
    "remoteBonusDate": "2025-02-26 08:40:00.000"
}

							

### Bonus given to player ###
Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{
    "code": 200,
    "message": "",
    "data": {
        "requestId": "123",
        "bonusInstanceCode": 5426517
    },
    "timestamp": "2025-07-01T10:39:25+00:00"
}
							

### Example 1 - Constraint violation ###
{
	"requestId":"19860313-4rv1-1337-h4xr-123419860313",
	"error":{
		"description":"Invalid string length: objectIdentity.username=guid_79edb7bc-073c-4625-b8b7-051742566cd9. Max is 32.",
		"code":"CONSTRAINT_VIOLATION"
	}
}
							  
### Example 2 - Invalid template code format, only INT is supported ###
{
	"requestId":"100001193",
	"error":{
		"description":"Invalid number : asdf",
		"code":"INTERNAL_ERROR"
	}
}
							  
### Example 3 - Incorrect template code ###
{
	"requestId": "100001222",
	"error": {
		"description": "Giving bonus failed: Template does not exist or currency is not supported by selected template casino",
		"code": "ERR_BONUS_TEMPLATE_NOT_FOUND"
	}
}
							  
### Example 4 - Invalid free spin bet value ###
{
	"requestId":"8172227904659636303",
	"error":{
		"description":"One or more of selected bet values is not allowed for selected games: allowedBetValues=[0.25, 0.50, 0.75, 1.00, 1.25, 1.50, 2.00, 2.50, 5.00, 6.25, 7.50, 10.00, 12.50, 18.75, 25.00, 50.00, 125.00, 250.00], selectedBetValues=[3USD]",
		"code":"ERR_INVALID_FREESPIN_BET_VALUE"
	}
}
							  
### Example 5 - Count and Amount cant be used together in the same request ###
{
	"requestId": "eiAIESpYzA",
	"error": {
		"description": "Assigning Free Spin count to a bonus with specific amount is not supported.",
		"code": "CONSTRAINT_VIOLATION"
	}
}

							
GiveFreeSpinsRequest:
Parameter Location Type Description
x-auth-kiosk-key header string {{kiosk_key}}
requestId body string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
serverName body string The name of the game server. (Case Sensitive)
username body string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
  • minSize: 1
  • maxSize: 32
templateCode body string Playtech side bonus template code that is being used for giving bonus.
  • minSize: 1
  • maxSize: 32
remoteBonusCode body string Identifies the bonus instance on Operator side. Max length: 128 chars.
  • minSize: 1
  • maxSize: 128
remoteBonusDate body string Bonus instance issue time on Operator side. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
gameCodeNames body array of string Optional list of games in which the bonus is usable. Overrides game list configured to bonus template gaming context.
  • If provided, only the games listed in gameCodeNames are eligible to use the bonus.
  • If not provided, all games included in the templateCode configuration are eligible by default.
playerData body PlayerData Additional player data including currency code and country code.
expirationDate body string The date and time of the bonus expiration. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT time zone.
amount body decimal The total monetary amount of the Free Spin bonus. If provided, requires also bet value(s) to be provided.
  • decimalPrecision: 22
  • decimalScale: 2
betValues body array of decimal Array of betValues for the free spin. Use "Get supported free spin bet values" API to get possible values. Must be present together with amount field.
count body int The number of free spins to be given. Can only be used if betValues & amount is not provided.
GiveFreeSpinsResponse:
Parameter Type Description
code integer The status code of the response.
message string Error descriptor. Only present when service failed to process request
data Data
timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
POST /from-operator/giveGoldenChips

Used for giving player golden chips based on a bonus template configured on Playtech side. It is possible to define the golden chips count, chip value and list of games in which it is usable. This request also creates a player record on the Playtech side on-demand, meaning that the Operator must pass a couple of player related parameters. If the Operator is sure of having created the player record already on the Playtech side (e.g. has successfully issued player a bonus at least one time), it can leave the player-specific fields empty.



POST /from-operator/givegoldenchips HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host:playtech.api
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{
    "requestId": "123",
    "serverName": "AGCASTG",
    "username": "K1_MOCKPLAYER1",
    "templateCode": "66983",
    "count": 5,
    "value": 10,
    "playerData":{"currencyCode":"MYR","countryCode":"MY"},
    "gameCodeNames":[ 
        "ba"
    ],
    "remoteBonusCode": "BONUS1",
    "remoteBonusDate": "2025-02-26 08:40:00.000",
    "expirationDate": "2025-03-27 00:00:00.000"
}



							

Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{
	"requestId": "91c5a0cc-042e-410d-8328-5a5163e32e4b",
	"bonusInstanceCode": 4930668
}
							

### Example 1 - Constraint violation ###
{
	"requestId":"19860313-4rv1-1337-h4xr-123419860313",
	"error":{
		"description":"Invalid string length: objectIdentity.username=guid_79edb7bc-073c-4625-b8b7-051742566cd9. Max is 32.",
		"code":"CONSTRAINT_VIOLATION"
	}
}
							  
### Example 2 - Invalid template code format, only INT is supported ###
{
	"requestId":"100001193",
	"error":{
		"description":"Invalid number : asdf",
		"code":"INTERNAL_ERROR"
	}
}
							  
### Example 3 - Incorrect template code ###
{
	"requestId": "100001222",
	"error": {
		"description": "Giving bonus failed: Template does not exist or currency is not supported by selected template casino",
		"code": "ERR_BONUS_TEMPLATE_NOT_FOUND"
	}
}
							  					  
### Example 4 - Incorrect player data ###
{
	"requestId":"100001223",
	"error":{
		"description":"Failed to process playerData.",
		"code":"INTERNAL_ERROR"
	}
}
							
GiveGoldenChipsRequest:
Parameter Location Type Description
x-auth-kiosk-key header string {{kiosk_key}}
requestId body string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
serverName body string The name of the game server. (Case Sensitive)
username body string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
  • minSize: 1
  • maxSize: 32
templateCode body string Playtech side bonus template code that is being used for giving bonus.
count body long Number of golden chips to issue to the player.
value body decimal Value of a single golden chip. Possible values: 0.01, 0.05, 0.1, 0.2, 0.25, 0.5, 1, 2, 5, 10, 20, 50, 100, 150, 200, 300, 500, 1000, 1250, 1500, 3000, 5000, 10000, 15000, 30000, 50000, 100000, 150000, 500000, 750000
  • decimalPrecision: 22
  • decimalScale: 2
remoteBonusCode body string Identifies the bonus instance on Operator side. Max length: 128 chars.
  • minSize: 1
  • maxSize: 128
remoteBonusDate body string Bonus instance issue time on Operator side. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
playerData body PlayerData Limited amount of player data needed to create player record on Playtech side. Should be sent with each request to avoid situations where bonus needs to be issued but player doesn't exist on Playtech side.
gameCodeNames body array of string Optional list of games in which the bonus is usable. Overrides game list configured to bonus template gaming context.
expirationDate body string The date and time of the bonus expiration. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT time zone.
GiveGoldenChipsResponse:
Parameter Type Description
code integer The status code of the response.
message string Error descriptor. Only present when service failed to process request
data Data
timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
POST /from-operator/notifyBalanceChange

Used for notifying Playtech system that the balance on external wallet side has changed and fresh balance should be requested.


POST /from-operator/notifyBalanceChange HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host:playtech.api
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{  
    "requestId": "123",
    "serverName": "AGCASTG",
    "username": "TIK1_MOCKPLAYER1",
    "timestamp": "2025-02-26 08:40:00.000"
}
  

							

Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{
    "code": 200,
    "message": "",
    "data": {
        "requestId": "123"
    },
    "timestamp": "2025-07-01T11:43:46+00:00"
}
							


{
    "code": 200,
    "message": "",
    "data": {
        "requestId": "123",
        "error": {
            "description": "Unable to read player from database: TIK1_MOCKPLAYER235252-ptstaging3.210",
            "code": "ERR_PLAYER_NOT_FOUND"
        }
    },
    "timestamp": "2025-06-26T11:03:59+00:00"
}						
NotifyBalanceChangeRequest:
Parameter Location Type Description
x-auth-kiosk-key header string {{kiosk_key}}
requestId body string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
serverName body string The name of the game server. (Case Sensitive)
username body string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
  • minSize: 1
  • maxSize: 32
timestamp body string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
NotifyBalanceChangeResponse:
Parameter Type Description
code integer The status code of the response.
message string Error descriptor. Only present when service failed to process request
data Data
timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
POST /from-operator/setPlayerTags

This endpoint allows the operator to set tags for a specific player. The tags must be a valid tag provided by Midway customer service.


POST /setPlayerTags
Content-Type: application/json; charset=UTF-8
Host: playtech.api
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_282)
Accept-Encoding: gzip,deflate
{
	"requestId": "1234",
	"serverName": "AGCASTG",
	"username": "K1_MOCKPLAYER1",
	"tags": [
				"risk/multitagtest01",
				"risk/multitagtest02"
			]
}

							

Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{
	"code": 200,
	"message": "",
	"data": {
		"messageId": "7332011338",
		"errorCode": "0",
		"timingInformation": {
			"timingsList": {
			"requestReceivedByIMS": "2025-03-07 09:06:03.450",
			"responseSentByIMS": "2025-03-07 09:06:03.460"
				}
			},
	 "tags": {
		"playerTagEntry": [
		  {
			"name": "risk/multitagtest01"
		  },
		  {
			"name": "risk/multitagtest02"
		  }
		]
	  },
	"requestId": "1234"
		},
	"timestamp": "2025-03-07T09:06:03+00:00"
}
							

 ### Error-Invalid Player Username###
 {
	"code": 500,
	"message": "UMS-107 - Unable to read player from database: K1_MOCKPLAYER111-ptstaging3.210",
	"data": {
	  "requestId": "1234"
	},
	"timestamp": "2025-03-07T08:42:28+00:00"
  }
### Error- Unsupported Tag ###
{
	"code": 500,
	"message": "UMS-7 - Permission denied",
	"data": {
	  "requestId": "1234"
	},
	"timestamp": "2025-03-07T08:41:54+00:00"
}

							
setPlayerTags Request:
Parameter Location Type Description
x-auth-kiosk-key header string {{kiosk_key}}
requestId body string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
serverName body string The name of the game server. (Case Sensitive)
username body string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
  • minSize: 1
  • maxSize: 32
tags body array of string The value of the player tag
SetPlayerTag response:
Parameter Type Description
code integer The status code of the response.
message string Error descriptor. Only present when service failed to process request
data Data
timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
POST /from-operator/removeBonus

Used for removing a bonus instance that has been given to the player. Requires the bonus instance code on the Playtech side to be passed.


POST /from-operator/removebonus HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: playtech.api
Connection: Keep-Alive
x-auth-kiosk-key: kiosk_key
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{  
   "requestId":"Qdy6AaLTUg",
   "serverName":"PLAYTECHSERVER",
   "username":"SomePlayer",
   "bonusInstanceCode":615842
}
  

							

### Response for free spin bonus removal ### 
Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{
  "code": 200,
  "message": "",
  "data": {
    "requestId": "1234"
	"removedFreespinCount": 5
  },
  "timestamp": "2025-03-07T09:04:21+00:00"
}
### Response for golden chip removal ###
{
  "code": 200,
  "message": "",
  "data": {
    "requestId": "hfjf",
    "removedGoldenChipCount": 1,
    "removedGoldenChipsValue": "1"
  },
  "timestamp": "2025-07-02T07:37:39+00:00"
}


					

### Error when trying to remove bonus with incorrect bonusInstanceCode ###
{
	"requestId":"100001048",
	"error":{
		"description":"Bonus with bonusId: BonusIdentityByCode [code=4980862] could not be found.",
		"code":"ERR_BONUS_INSTANCE_NOT_FOUND"
	}
}
							
RemoveBonusRequest:
Parameter Location Type Description
x-auth-kiosk-key header string {{kiosk_key}}
requestId body string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
serverName body string The name of the game server. (Case Sensitive)
username body string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
  • minSize: 1
  • maxSize: 32
bonusInstanceCode body long Unique identifier of the bonus instance to be removed from player.
RemoveBonusResponse:
Parameter Type Description
code integer The status code of the response.
message string Error descriptor. Only present when service failed to process request
data Data
timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)

#To Operator API

To Operator API is a set of requests sent towards Operator Wallet before, during, and after the gameplay. The API specification is defined by Playtech as part of the GamesLink solution. It is up to Operator to support specified requests by implementing the GamesLink adapter on top of their wallet solution.

The API specification supports player external token authentication and logout, bet/win/refund/lose transactions, and funds transfer outside the gameplay (wagered bonuses).

The API calls are regular HTTP POST requests with JSON formatted content in the body which use industry-standard Content-Type: application/json for both directions.

Previously Content-Type: text/json was used by Playtech for sending requests towards the External Wallet. Some staging environments may find that they are now receiving Content-Type: application/json instead. This change can not be revert due to the shared nature of these environments on Playtech side. In order to keep staging environments working, External Wallets need to add support for Content-Type: application/json. Production environments will not be impacted by this change unless specifically requested by the licensee. Requests sent by the External Wallet towards Playtech have always had to use Content-Type: application/json.

In addition to this document, JSON schema is available for download, to ease the integration effort.

It is expected that Operator always returns HTTP code 200, even for error scenarios.

Security

All the API calls are done over HTTPS protocol and secured by SSL/TLS client certificates. Most of the requests also incorporate an external token, provided to Playtech during the game launch process (see Game Launcher chapter for more details).

Forward Compatibility

To Operator API implemented by the Operator must be forward compatible. This means that the API endpoint must:

  • ignore all unknown parameters in the request body
  • ignore all unknown elements in list type parameters

Common Parameters

There are few parameters that are common to all the requests and responses.

Every request sent towards Operator wallet includes a unique requestId. The operator must echo this parameter back in the (success and error) response. This helps with troubleshooting the integration problems between Playtech’s and Operators systems.

The Operator has also an option to return one playerMessage in the (success and error) response of gameplay requests. If this request takes place during active gameplay (not retry), the message is presented to the player. The message must be in the player’s language. With some requests (Bet) it is possible to display (reality check) dialog to the player instead of the player message. In this case, the player message is included inside the dialog.

The operator should provide a player message in case of generic errors (e.g. ERR_REGULATORY_GENERAL) because Playtech cannot map the error code against some specific local player message in that case without knowing the root cause of the error.

General Error Response

If an error occurs and it can’t be mapped to any specific request, a GeneralError must be returned.

It is expected that Operator always returns HTTP code 200, even for error scenarios.

Retry Mechanism

If transactional request (Bet, GameRoundResult) times out or a retry-able error code is returned, Playtech will carry out retry requests until a successful response or a final error is received.

General errors INVALID_REQUEST_PAYLOAD and CONSTRAINT_VIOLATION are retry-able only in case of money out requests (GameRoundResult). General error INTERNAL_ERROR is retry-able in addition to GameRoundResult also in case of Bet requests. For all other requests, general errors are never retried.

Operator Wallet must guarantee idempotency in case of transactional requests for retry purposes. The operator can reject the Bet request with an expired external token if the transaction does not exist on their side. Bet request must succeed with an expired token if the transaction exists on the Operator side. GameRoundResult requests must always succeed, even in the case of an expired external token.

The retrying takes place with an exponential back-off, meaning that requests are retried, for example after 1, 2, 4, 8, 16, 32, etc. minutes (with the minimum frequency being once per day).

Automatic Session Closure

There are scenarios where game rounds might stay open due to (lack of) player activity or because of some technical issue. If player resumes the unfinished game, then the round gets closed. If the player doesn't resume the game or if technical issues occur, Playtech will automatically close any brokengame rounds that have remained open for between 24 hours to 48 hours. At that point, GameRoundResult request is sent to the main wallet.

POST /authenticate

An authenticate request is needed for validating the external token passed to Playtech during the game launch flow. For extra security, the Operator has an option to return a permanent external token in the response to be used for wallet communication and treat the external token passed during the game launch as a temporary one. The authenticate request response must return also some player specific parameters, like currency and country, for Playtech to be able to create the player record on their side on the fly, in case it doesn't exist already. Under normal circumstances the Authenticate request is made only once per one game launch.


POST /authenticate HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: operator.com 
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{  
   "requestId":"e9ccd456-4c6a-47b3-922f-66a5e5e13513",
   "username":"MCCT_PLAYER001",
   "externalToken":"MCCT_TOKEN123456789"
}
							

Cache-Control: no-cache, no-store
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
Date: Fri, 13 Apr 2018 10:36:15 GMT
{  
   "requestId":"e9ccd456-4c6a-47b3-922f-66a5e5e13513",
   "username":"MCCT_PLAYER001",
   "permanentExternalToken":"MCCT_TOKEN88888888",
   "currencyCode":"EUR",
   "countryCode":"EE",
   "subBrand":"vipLevel2"
}
							

### Example 1 - Failure to authenticate the player. Non retriable ###
{  
	"requestId":"e9ccd456-4c6a-47b3-922f-66a5e5e13513",
    "error":{  
    "code":"ERR_AUTHENTICATION_FAILED"
    }
}

### Example 2 - General internal system error. Non retriable in case of authenticate request ###
{  
	"requestId":"616a5a0b-31fe-47b7-ac39-10fd96d82415",
	"error":{  
	"code":"INTERNAL_ERROR"
    }
}

							
AuthenticateRequest:
Parameter Type Description
requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
  • minSize: 11
  • maxSize: 255
username string Player's username. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}. All usernames provided by the operator must be in uppercase.
  • minSize: 1
  • maxSize: 32
externalToken string Provided by the Operator to be used by Playtech for external wallet communication during gameplay.
  • minSize: 11
  • maxSize: 255
AuthenticateResponse:
Parameter Type Description
requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
username string The player's username. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
  • minSize: 1
  • maxSize: 32
currencyCode string The player's currency code (ISO 4217).
countryCode string The player's country code (ISO 3166-1 alpha-2).
permanentExternalToken string If the permanent external token is not returned, the regular external token passed during the game launch will be used for wallet communication. Otherwise, the permanent external token is used.
  • minSize: 11
  • maxSize: 255
subBrand string Optional.
  • Use this to set player VIP level. Supported values are between vipLevel1 - vipLevel40. Please check with customer service before using this field.
  • Once a player VIP level is set, every subsequent Authenticate response needs to incldue the same VIP level, else it will be reset back to VIP Level 1
error AuthenticateError Error descriptor. Only present when service failed to process request
playerMessage string The (error) message to be displayed to the player in the player's language.
loginDate string The start date and time of the player's root login session (in the Operator's portal). Required in certain regulations where the game client needs to show the duration of the player's login session (Sweden). Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT time zone.
regulation string The Operator's regulation. Required if Playtech needs to receive regulation-specific player data. Possible values: FRANCE.
playerData PlayerData Optional player data that the Operator can pass to Playtech. The required properties are agreed on per integration project, depending on the functionalities used on Playtech's side.
POST /bet

This request is used for placing a bet during the gameplay. It has a mandatory parameter to identify the game round, by which the Operator's wallet must decide whether to start a new game session or use an existing one. In case of bonus rounds, it has got reference to the parent game round. Bet amount defines the amount of money to be requested from the Operator's wallet. In case of free spins, it is 0. If free spins are used, Playtech's wallet bonus fund changes are described in the internal fund changes list.

Important: Playtech Seamless operates on a Pay-first method. Hence, we recommend all operators use the 'transactionDate' timestamp for each transaction/spin as the report index. This is particularly crucial for pending games (unfinished rounds with free games).

### NORMAL BET ###
POST /bet HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: operator.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{
  "requestId":"c758f1d3-c941-4a19-b232-49af4a009879",
  "username":"SomePlayer6715",
  "externalToken":"25323079",
  "gameRoundCode":"39175543#3602117",
  "transactionCode":"61003870",
  "transactionDate":"2018-04-13 10:55:40.000",
  "amount":"25",
  "internalFundChanges":[
							],
  "gameCodeName":"bj"
}

### NORMAL BET + GC BONUS ###
POST /bet HTTP/1.1
Host: operator.com
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate

{
  "requestId": "0ccf03a0-7d5f-4498-be9d-6929023b07e9",
  "username": "MOCK__Raigo",
  "externalToken": "st-32-c7b***655",
  "gameRoundCode": "live_87612851015#523525221",
  "transactionCode": "65690322",
  "transactionDate": "2022-04-01 11:49:18.000",
  "amount": "5",
  "internalFundChanges": [
    {
      "type": "BONUS",
      "amount": "-2"
    }
  ],
  "gameCodeName": "rofl",
  "betDetails": {
    "tableCoverage": 5
  },
  "liveTableDetails": {
    "launchAlias": "rofl_loungerol",
    "tableId": "1304",
    "tableName": "UAT French Roulette"
  },
  "bonusChanges": [
    {
      "bonusInstanceCode": "5015521",
      "goldenChipsChange": {
        "count": -1,
        "value": "2"
      },
      "bonusTemplateId": "43885",
      "remoteFreeSpin": false
    }
  ]
}

### Golden Chip BET ###
POST /bet HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: operator.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{
    "requestId": "471b96fc-0558-476d-9917-fbc6d7c111d4",
    "username": "CRXD_EUGENE2",
    "externalToken": "CRXD_TOKEN4063424275",
    "gameRoundCode": "live_87617200403#bc79f9d3",
    "transactionCode": "89118609",
    "transactionDate": "2025-08-19 13:37:36.000",
    "amount": "0",
    "internalFundChanges": [
        {
            "type": "BONUS",
            "amount": "-6"
        }
    ],
    "gameCodeName": "bjl",
    "betDetails": {
        "betType": "MAIN_BET"
    },
    "liveTableDetails": {
        "launchAlias": "blj_blackjack8",
        "tableId": "1793",
        "tableName": "UAT Blackjack 8"
    },
    "bonusChanges": [
        {
            "remoteBonusCode": "000000",
            "bonusInstanceCode": "5426661",
            "goldenChipsChange": {
                "count": -3,
                "value": "2"
            },
            "bonusTemplateId": "66983",
            "remoteFreeSpin": false
        }
    ]
}

### FREE SPIN BONUS BET ###
POST /bet HTTP/1.1
Host: operator.com
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{
  "requestId": "69d93f51-2b10-472b-9635-147ced5acb78",
  "username": "SomePayer1234",
  "externalToken": "432xyz25323079abca123",
  "gameRoundCode": "27288#749",
  "transactionCode": "34645716",
  "transactionDate": "2020-06-25 08:26:47.000",
  "amount": "0",
  "internalFundChanges": [
    {
      "type": "BONUS",
      "amount": "-0.4"
    }
  ],
  "gameCodeName": "bfb",
  "remoteBonusCode": "2MPNP3ASZHTGAA123",
  "bonusChanges": [
    {
      "remoteBonusCode": "2MPNP3ASZHTGAA123",
      "bonusInstanceCode": "4940569",
      "freeSpinChange": {
        "count": -1,
        "value": "0.4"
      }
    }
  ]
}

### MAIN BET WITH SIDE BET IN LIVE GAME ###
POST /bet HTTP/1.1
Host: operator.com
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{
    "requestId": "f3fa5fd9-c561-4587-a03f-b08aed0b2b01",
    "username": "CRXD_EUGENE2",
    "externalToken": "CRXD_TOKEN1859843974",
    "gameRoundCode": "live_87617298272#7991281e",
    "transactionCode": "89517982",
    "transactionDate": "2025-08-26 15:22:18.000",
    "amount": "0.5",
    "internalFundChanges": [],
    "gameCodeName": "smplrol",
    "betDetails": {
        "tableCoverage": 59,
        "betType": "MAIN_BET"
    },
    "liveTableDetails": {
        "launchAlias": "smplrol_kpoprol",
        "tableId": "7387",
        "tableName": "UAT K-Pop Roulette Live"
    }
}

POST /bet HTTP/1.1
Host: operator.com
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate	
{
    "requestId": "7bb7666f-2dc6-4f02-bf7f-16a51271aad6",
    "username": "CRXD_EUGENE2",
    "externalToken": "CRXD_TOKEN1859843974",
    "gameRoundCode": "live_87617298272#7991281e",
    "transactionCode": "89517978",
    "transactionDate": "2025-08-26 15:22:17.000",
    "amount": "0.5",
    "internalFundChanges": [],
    "gameCodeName": "smplrol",
    "betDetails": {
        "tableCoverage": 59,
        "betType": "SIDE_BET"
    },
    "liveTableDetails": {
        "launchAlias": "smplrol_kpoprol",
        "tableId": "7387",
        "tableName": "UAT K-Pop Roulette Live"
    }
}

### BET MADE FROM RINGFENCED BALANCE (HELD FREE SPIN) ###
POST /bet HTTP/1.1
Host: operator.com
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
Accept-Encoding: gzip,deflate
{
  "requestId": "76b76ee6-d97c-49a9-9367-8a3c49cb97ff",
  "username": "MOCK__Raigo",
  "externalToken": "st-32-c7b***655",
  "gameRoundCode": "live_876151#70207",
  "transactionCode": "72541568",
  "transactionDate": "2024-01-10 10:40:26.000",
  "amount": "0.5",
  "internalFundChanges": [],
  "gameCodeName": "abjl",
  "betDetails": {
    "betType": "MAIN_BET"
  },
  "liveTableDetails": {
    "launchAlias": "abjl_allbetsblackjack2",
    "tableId": "1587",
    "tableName": "UAT All Bets Blackjack"
  }
}



							

								Cache-Control: no-cache, no-store
								Connection: Keep-Alive
								Content-Type: application/json; charset=UTF-8
								Date: Fri, 13 Apr 2018 10:36:15 GMT
								{  
								   "requestId":"c758f1d3-c941-4a19-b232-49af4a009879",
								   "externalTransactionCode":"24941974",
								   "externalTransactionDate":"2018-04-13 13:55:40.825",
								   "balance":{  
									  "real":"100",
									  "timestamp":"2018-04-13 13:55:40.826"
								   }
								}
							

### Example 1 - Insufficient funds. Playtech default messages shown to player ###
{
  "requestId": "3671ee87-57d1-4d2d-a7a5-9b853487c6d9",
  "error": {
    "code": "ERR_INSUFFICIENT_FUNDS"
  }
}

### Example 2 - Transaction is declined for x reason. Will not be retried ###
{
  "requestId": "f3747520-2134-4f27-8a55-d9d7c779eb03",
  "error": {
    "description": "Reason for declining, Visible for debugging only. Not shown to the player",
    "code": "ERR_TRANSACTION_DECLINED"
  }
}

### Example 3 - Player's reality check has expired ###
{
  "requestId": "c758f1d3-c941-4a19-b232-49af4a009879",
  "playerDialog": {
    "dialogId": "56236263",
    "type": "REALITYCHECK",
    "playerMessage": "Reality check timer expired."
  },
  "error": {
    "description": "Reality check timer expired.",
    "code": "ERR_REGULATORY_REALITYCHECK"
  }
}

### Example 4 - General system error - Request will be retried until accepted or final error returned ###
{
  "requestId": "19082404-c08b-4a6e-b192-1e54c55601d8",
  "error": {
    "description": "Reason of the error described here. Visible for debugging only. Not shown to the player",
    "code": "INTERNAL_ERROR"
  }
}

### Example 5 - General regulatory error - Request will not be retried. playerMessage shown to the player ###
{
  "requestId": "19082404-c08b-4a6e-b192-1e54c55601d8",
  "error": {
    "description": "Reason of the error described here. Visible for debugging only. Not shown to a player",
    "code": "ERR_REGULATORY_GENERAL"
  },
  "playerMessage": "Limit exceeded!"
}

							
BetRequest:
Parameter Type Description
requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
username string Player's username. Must be unique.
externalToken string Provided by operator to be used by Playtech for wallet communication.
  • minSize: 11
  • maxSize: 255
gameRoundCode string References game round, where monetary transaction is made. In case of first transaction, game round should be started automatically. Might include special symbol hash "#".
  • minSize: 1
  • maxSize: 128
transactionCode string Identifies bet transaction. Transaction code in game server.
  • minSize: 1
  • maxSize: 20
  • transactionDate string Bet transaction start time in game server. Format: \"yyyy-mm-dd hh24:mi:ss.SSS\", GMT timezone.
    amount string Bet amount in player's currency requested from operator's wallet. Zero if no funds requested (can happen in case Playtech bonus funds are being used).
    • decimalPrecision: 22
    • decimalScale: 2
    gameCodeName string Code name of the game played.
    internalFundChanges array of FundChange The change in funds within the Playtech wallet during this transaction.
    betDetails Bet Details Additional details about the game bet.
    liveTableDetails LiveTableDetails Additional information about the live game table where the game round took place.
    bonusChanges array of BonusChanges Bonuses DEDUCTED from player's balance with current bet.
    gameMetadata GameMetaData Additional details about the game that is being played.
    remoteBonusCode string Identifies the bonus instance on Operator side that was used for current free spin bet.This field is deprecated and will be removed, please do not use for future integrations. The bonusChanges parameter should be used instead.
    • minSize: 0
    • maxSize: 128
    jackpotContributions array of jackpotContributions Information about jackpot contributions for multiple jackpots.
    BetResponse:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    externalTransactionCode string Transaction code in operator wallet.
    • minSize: 0
    • maxSize: 128
    externalTransactionDate string Transaction time in operator wallet. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    balance Balance Balance details after the transaction.
    playerDialog PlayerDialog Data related to the dialog to be shown to player.
    error BetError Error descriptor. Only present when service failed to process request
    playerMessage string (Error) message to be displayed to player in player's language.
    POST /gameRoundResult

    This request is used for reporting game round result(s). It may or may not close the game round. Multiple GameRoundResults can be sent during one game round. A game round can result in lose, win or refund. In case of player losing, no transactional data is sent. Otherwise the pay amount is defined.

    Important: Playtech Seamless operates on a Pay-first method. Hence, we recommend all operators use the 'transactionDate' timestamp for each transaction/spin as the report index. This is particularly crucial for pending games (unfinished rounds with free games).

    Reminder : jackpotwin is included in the amount of pay.

    
    ### NO WIN ###
    POST /gameRoundResult HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate
    {
      "requestId": "b0f09415-8eec-493d-8e70-c0659b972653",
      "username": "SomePlayer1234",
      "externalToken": "3c22364b0e893fc77b6d0bce7f8e4c59",
      "gameRoundCode": "27281386#8436983",
      "jackpot": {
        "contributionAmount": "0.0123456789123456",
        "winAmount": "0",
        "jackpotId": "mrj_830_840_850_860_306"
      },
      "gameRoundClose": {
        "date": "2020-06-25 05:59:08.107",
        "rngGeneratorId": "Casino Protego SG100",
        "rngSoftwareId": "Casino CaGS 20.6.2.0"
      },
      "gameCodeName": "aogs",
      "gameHistoryUrl": "getgamehistoryurl.php?casino=ptstaging3.33&username=SomePlayer1234&ngscode=7559924&remotesessionenddate=2020-06-25+05%3A59%3A08&token=3c22364b0e893fc77b6d0bce7f8e4c595bb8eaa4514d446f1dd13b6b1dd4cea1&language=EN&showFullHistoryPerBet=false"
    }
    
    ### WIN ###
    POST /gameRoundResult HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate
    {
      "requestId": "b0f09415-8eec-493d-8e70-c0659b972653",
      "username": "SomePlayer1234",
      "externalToken": "3c22364b0e893fc77b6d0bce7f8e4c59",
      "gameRoundCode": "27281386#647978",
      "pay": {
        "transactionCode": "8366794157",
        "transactionDate": "2020-06-25 05:59:08.000",
        "amount": "10",
        "type": "WIN",
        "internalFundChanges": []
      },
      "jackpot": {
        "contributionAmount": "0.0123456789123456",
        "winAmount": "0",
        "jackpotId": "mrj_830_840_850_860_306"
      },
      "gameRoundClose": {
        "date": "2020-06-25 05:59:08.107",
        "rngGeneratorId": "Casino Protego SG100",
        "rngSoftwareId": "Casino CaGS 20.6.2.0"
      },
      "gameCodeName": "aogs",
      "gameHistoryUrl": "getgamehistoryurl.php?casino=ptstaging3.33&username=SomePlayer1234&ngscode=7559924&remotesessionenddate=2020-06-25+05%3A59%3A08&token=3c22364b0e893fc77b6d0bce7f8e4c595bb8eaa4514d446f1dd13b6b1dd4cea1&language=EN&showFullHistoryPerBet=false"
    }
    
    ### WIN W/ JACKPOT ###
    POST /gameRoundResult HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate
    {
      "requestId": "3a01c3fd-8193-423d-9bf0-92e9dd7c8f32",
      "username": "SomePlayer1234",
      "externalToken": "3c22364b0e893fc77b6d0bce7f8e4c59",
      "gameRoundCode": "53151143#1221521",
      "pay": {
        "transactionCode": "65008230",
        "transactionDate": "2021-12-27 11:22:05.000",
        "amount": "60",
        "type": "WIN",
        "internalFundChanges": []
      },
      "jackpot": {
        "contributionAmount": "0.99",
        "winAmount": "50",
        "jackpotId": "mrj_830_840_850_860_306",
        "jackpotContributions": [
          {
            "amount": "0.99",
            "jackpotId": "mrj_830_840_850_860_306",
            "subJackpotInfo": [
              {
                "amount": "0.329999999967",
                "jackpotId": "mrj_830_306"
              },
              {
                "amount": "0.329999999967",
                "jackpotId": "mrj_840_306"
              },
              {
                "amount": "0.219999999978",
                "jackpotId": "mrj_850_306"
              },
              {
                "amount": "0.109999999989",
                "jackpotId": "mrj_860_306"
              }
            ]
          }
        ]
      },
      "gameRoundClose": {
        "date": "2025-06-04 06:33:02.000",
        "rngGeneratorId": "SecureRandom",
        "rngSoftwareId": "Casino CaGS 25.1.4.0"
      },
      "gameCodeName": "aogs",
      "gameHistoryUrl": "https://cashier.nptgp.com/getgamehistoryurl.php?casino=agcasino&username=GKSK_23479821&ngscode=6439022016&remotesessionenddate=2025-06-04+06:33:02&token=15701b174759f11abb557fe8b37c27d91a07c47020ad13f03449d90d922d5562&language=EN&showFullHistoryPerBet=false"
    }
    
    ### Win W/ GOLDEN CHIP ###
    POST /gameRoundResult HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate
    {
        "requestId": "12992039-1c23-4594-b0e5-eae48ecc3e00",
        "username": "CRXD_EUGENE",
        "externalToken": "CRXD_TOKEN2164508585",
        "gameRoundCode": "live_87617622090#54c7b15d",
        "pay": {
            "transactionCode": "94340684",
            "transactionDate": "2025-12-09 11:03:37.000",
            "amount": "4",
            "type": "WIN",
            "betType": "MAIN_BET",
            "internalFundChanges": [],
            "bonusChanges": [],
            "bonusWinningsInfo": {
                "goldenChipWinnings": [
                    {
                        "remoteBonusCode": "1313141",
                        "bonusInstanceCode": "5457415",
                        "amount": "4",
                        "count": 2,
                        "bonusTemplateId": "68424"
                    }
                ]
            }
        },
        "jackpot": {
            "contributionAmount": "0",
            "winAmount": "0"
        },
        "gameRoundClose": {
            "date": "2025-12-09 11:03:37.000",
            "rngGeneratorId": "LIVE",
            "rngSoftwareId": "LIVE"
        },
        "gameCodeName": "ubal",
        "gameHistoryUrl": "https://extstg3-cashier01.ptstaging.eu/getgamehistoryurl.php?casino=ptstaging3.210&username=CRXD_EUGENE&ngscode=30335648&remotesessionenddate=2025-12-09+11%3A03%3A37&token=291cadde9ddb49ca88f37fd1cb2052606894d53f7a13d88b28cdf3de1effb2c5&language=EN&showFullHistoryPerBet=false",
        "liveTableDetails": {
            "launchAlias": "bal_minibaccarat",
            "tableId": "9486",
            "tableName": "UAT Speed Baccarat"
        },
        "gamingDetails": {
            "betSelections": [
                {
                    "type": "BAC_PLAYER",
                    "betAmount": "4",
                    "winAmount": "4",
                    "payout": "1.00",
                    "sideBet": false
                }
            ]
        }
    }
    
    ### Dealer push W/ spend GC ###
    POST /gameRoundResult HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate
    {
      "requestId": "f3dc142b-68e5-4e58-93a5-a69c93b7fee3",
      "username": "SomePlayer1234",
      "externalToken": "3c22364b0e893fc77b6d0bce7f8e4c59",
      "gameRoundCode": "27281#386",
      "pay": {
        "transactionCode": "8366794157",
        "transactionDate": "2023-10-11 07:56:18.248",
        "amount": "0",
        "type": "WIN",
        "internalFundChanges": [
          {
            "type": "BONUS",
            "amount": "5"
          }
        ],
        "bonusChanges": [
          {
            "remoteBonusCode": "5599668819",
            "bonusInstanceCode": "5037180",
            "goldenChipsChange": {
              "count": 1,
              "value": "5"
            }
          }
        ]
      },
      "jackpot": {
        "contributionAmount": "0",
        "winAmount": "0"
      },
      "gameRoundClose": {
        "date": "2023-10-11 07:56:18.248"
      },
      "gameCodeName": "abjl_allbetsblackjack",
      "gameHistoryUrl": "https://extstg3-cashier01.ptstaging.eu/getgamehistoryurl.php?casino=ptstaging3.33&username=MOCK__test2&ngscode=18427949&remotesessionenddate=2022-10-11+15:05:31&token=4e94c9e298328f26adf9b8a107bf45f2079bb455bd9f503f8c71dd096d97518f&language=EN&showFullHistoryPerBet=false",
      "liveTableDetails": {
        "launchAlias": "abjl_allbetsblackjack",
        "tableId": "1234",
        "tableName": "Integration Test"
      }
    }
    
    ### GOLDEN CHIP REFUND ###
    POST /gameRoundResult HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate
    {
      "requestId": "0c0abcbe-3093-4179-8e2c-4cde729625ee",
      "username": "MOCK__Lisa",
      "externalToken": "st-32-c7b***655",
      "gameRoundCode": "live_1111#123131",
      "pay": {
        "transactionCode": "111111",
        "transactionDate": "2022-06-11 14:58:50.000",
        "amount": "0",
        "type": "REFUND",
        "internalFundChanges": [
          {
            "type": "BONUS",
            "amount": "5"
          }
        ],
        "relatedTransactionCode": "123456",
        "bonusChanges": [
          {
            "bonusInstanceCode": "5051577",
            "goldenChipsChange": {
              "count": 1,
              "value": "5"
            },
            "bonusTemplateId": "43885",
            "remoteFreeSpin": false
          }
        ]
      },
      "jackpot": {
        "contributionAmount": "0",
        "winAmount": "0"
      },
      "gameRoundClose": {
        "date": "2023-06-11 14:58:50.666",
        "rngGeneratorId": "LIVE",
        "rngSoftwareId": "LIVE"
      },
      "gameCodeName": "bjl",
      "liveTableDetails": {
        "launchAlias": "bjl_testbj",
        "tableId": "1795",
        "tableName": "UAT BlackJack Cancel"
      }
    }
    
    ### GOLDEN CHIP JACKPOT WIN ###
    POST /gameRoundResult HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate
    {
      "requestId": "12c60f15-eb89-47ef-8d73-bffef3a2677b",
      "username": "MOCK__Lisa",
      "externalToken": "st-32-c7b***655",
      "gameRoundCode": "live_876147#96542",
      "pay": {
        "transactionCode": "70867712",
        "transactionDate": "2023-08-01 13:17:20.000",
        "amount": "200",
        "type": "WIN",
        "internalFundChanges": []
      },
      "jackpot": {
        "contributionAmount": "0.0495",
        "winAmount": "200",
        "jackpotId": "mrj_197040_197050_197060_197070_306",
        "jackpotBalanceBeforeWin": "200",
        "jackpotBalanceAfterWin": "200",
        "jackpotContributions": [
          {
            "amount": "0.0495",
            "jackpotId": "mrj_197040_197050_197060_197070_306",
            "subJackpotInfo": [
              {
                "amount": "0.01649999999835",
                "jackpotId": "mrj_197040_306"
              },
              {
                "amount": "0.01649999999835",
                "jackpotId": "mrj_197050_306"
              },
              {
                "amount": "0.0109999999989",
                "jackpotId": "mrj_197060_306"
              },
              {
                "amount": "0.00549999999945",
                "jackpotId": "mrj_197070_306"
              }
            ]
          }
        ],
        "jackpotWinnings": [
          {
            "amount": "200",
            "jackpotId": "mrj_197040_197050_197060_197070_306",
            "jackpotBalanceBeforeWin": "200",
            "jackpotBalanceAfterWin": "200",
            "subJackpotInfo": [
              {
                "amount": "200",
                "jackpotId": "mrj_197040_306"
              }
            ]
          }
        ]
      },
      "gameRoundClose": {
        "date": "2023-08-01 13:17:20.345",
        "rngGeneratorId": "Casino Protego SG100",
        "rngSoftwareId": "Live2 GS 23.7.live.26261"
      },
      "gameCodeName": "aogjbrol",
      "gameHistoryUrl": "https://extstg3-cashier01.ptstaging.eu/getgamehistoryurl.php?casino=ptstaging3.33&username=MOCK__Lisa&ngscode=19576956&remotesessionenddate=2023-08-01+13:17:20&token=064978e4418003cdd630249542d8a00e384205902e584d9446d0fa90e8a66fa0&language=EN&showFullHistoryPerBet=false",
      "liveTableDetails": {
        "launchAlias": "rol_aogroulette",
        "tableId": "1766",
        "tableName": "UAT Age Of The Gods Bonus Roulette"
      }
    }
    
    ### FREE SPIN BET WITH WIN AND JACKPOT CONTRIBUTION ###
    POST /gameRoundResult HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate
    {
      "requestId": "ad3dda34-3a83-4524-95e2-adf391674233",
      "username": "MOCK__test1",
      "externalToken": "st-32-c7b***655",
      "gameRoundCode": "56303090#123141",
      "pay": {
        "transactionCode": "71623131",
        "transactionDate": "2023-10-11 13:53:01.000",
        "amount": "0.75",
        "type": "WIN",
        "internalFundChanges": [],
        "bonusChanges": [],
        "bonusWinningsInfo": {
          "freeSpinWinning": {
            "bonusInstanceCode": "5105098",
            "amount": "0.75",
            "bonusTemplateId": "44166"
          },
          "goldenChipWinnings": []
        }
      },
      "jackpot": {
        "contributionAmount": "0.001979999999802",
        "winAmount": "0",
        "jackpotId": "mrj_197040_197050_197060_197070_306",
        "jackpotContributions": [
          {
            "amount": "0.001979999999802",
            "jackpotId": "mrj_197040_197050_197060_197070_306",
            "subJackpotInfo": [
              {
                "amount": "0.000659999999934",
                "jackpotId": "mrj_197040_306"
              },
              {
                "amount": "0.000659999999934",
                "jackpotId": "mrj_197050_306"
              },
              {
                "amount": "0.000439999999956",
                "jackpotId": "mrj_197060_306"
              },
              {
                "amount": "0.000219999999978",
                "jackpotId": "mrj_197070_306"
              }
            ]
          }
        ]
      },
      "gameRoundClose": {
        "date": "2023-10-11 13:53:01.687",
        "rngGeneratorId": "SecureRandom",
        "rngSoftwareId": "Casino CaGS 23.10.1.3"
      },
      "gameCodeName": "aogs",
      "gameHistoryUrl": "https://extstg3-cashier01.ptstaging.eu/getgamehistoryurl.php?casino=ptstaging3.33&username=MOCK__test1&ngscode=19877486&remotesessionenddate=2023-10-11+13:53:01&token=637e1bac3450422b595e1bc1a81bd6015b89992e8a41088785437c4a6749207c&language=EN&showFullHistoryPerBet=false"
    }
    
    ### GOLDEN CHIP AND CASH VALUE REFUND ###
    POST /gameRoundResult HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate			
    {
      "requestId": "59439668-59d3-40a2-8fa5-25854e461c07",
      "username": "CRXD_Test22",
      "externalToken": "CRXD_T1231231231",
      "gameRoundCode": "live_87616911107#856cc048",
      "pay": {
        "transactionCode": "87939587",
        "transactionDate": "2025-07-28 06:50:24.000",
        "amount": "2",
        "type": "REFUND",
        "betType": "MAIN_BET",
        "internalFundChanges": [
          {
            "type": "BONUS",
            "amount": "4"
          }
        ],
        "relatedTransactionCode": "87939586",
        "bonusChanges": [
          {
            "remoteBonusCode": "000000",
            "bonusInstanceCode": "5426661",
            "goldenChipsChange": {
              "count": 2,
              "value": "2"
            },
            "bonusTemplateId": "66983",
            "remoteFreeSpin": false
          }
        ]
      },
      "gameCodeName": "abwl",
      "liveTableDetails": {
        "launchAlias": "abwl_wonderland",
        "tableId": "9493",
        "tableName": "UAT Adventures Beyond Wonderland Live"
      }
    }
    	
    ### CASH VALUE REFUND ###
    POST /gameRoundResult HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate	
    {
      "requestId": "81ce108d-14ef-4bd7-a769-36205b76f63d",
      "username": "CRXD_EUGENE2",
      "externalToken": "CRXD_TOKEN1315746301",
      "gameRoundCode": "live_87616929098",
      "pay": {
        "transactionCode": "88009186",
        "transactionDate": "2025-07-31 08:26:32.000",
        "amount": "5",
        "type": "REFUND",
        "betType": "MAIN_BET",
        "internalFundChanges": [],
        "relatedTransactionCode": "88005306"
      },
      "gameCodeName": "bjl",
      "liveTableDetails": {
        "launchAlias": "blj_blackjack10",
        "tableId": "9349",
        "tableName": "UAT Blackjack 10"
      }
    }
    
    ### WIN WITH MAIN BET AND SIDE BET (Live games) ###
    {
        "requestId": "0aee0c38-8894-4931-9bf4-59f5ef0c7cf2",
        "username": "CRXD_EUGENE",
        "externalToken": "CRXD_TOKEN8867280057",
        "gameRoundCode": "live_87617552245#9960affe",
        "jackpot": {
            "contributionAmount": "0",
            "winAmount": "0"
        },
        "gameRoundClose": {
            "date": "2025-11-05 08:57:07.000",
            "rngGeneratorId": "LIVE",
            "rngSoftwareId": "LIVE"
        },
        "gameCodeName": "ubjl",
        "gameHistoryUrl": "https://extstg3-cashier01.ptstaging.eu/getgamehistoryurl.php?casino=ptstaging3.210&username=CRXD_EUGENE&ngscode=29721505&remotesessionenddate=2025-11-05+08%3A57%3A07&token=ff407d1b3384ff05c0e505acf7220e23f8db0e4ffde53788a870dbfab87863b2&language=EN&showFullHistoryPerBet=false",
        "liveTableDetails": {
            "launchAlias": "ubjl_unlimitedbj",
            "tableId": "9507",
            "tableName": "UAT Unlimited Blackjack"
        },
        "gamingDetails": {
            "betSelections": [
                {
                    "type": "UBJ_21_PLUS_3",
                    "betAmount": "1",
                    "winAmount": "0",
                    "sideBet": true
                },
                {
                    "type": "UBJ_PLAYER_PERFECT_PAIR",
                    "betAmount": "1",
                    "winAmount": "0",
                    "sideBet": true
                },
                {
                    "type": "BJ_TOP_3",
                    "betAmount": "1",
                    "winAmount": "0",
                    "sideBet": true
                },
                {
                    "type": "UBJ_ANTE",
                    "betAmount": "1",
                    "winAmount": "0",
                    "sideBet": false
                }
            ]
        }
    }
    
    							
    
    								Cache-Control: no-cache, no-store
    								Connection: Keep-Alive
    								Content-Type: application/json; charset=UTF-8
    								Date: Thu, 25 Jun 2020 05:59:08 GMT
    								{
    								  "requestId": "b0f09415-8eec-493d-8e70-c0659b972653",
    								  "externalTransactionCode": "938295739610",
    								  "externalTransactionDate": "2020-06-25 05:59:08.000",
    								  "balance": {
    									"real": "75353.98",
    									"timestamp": "2020-06-25 05:59:08.000"
    								  }
    								}
    							
    
    Example 1 - General system error - Request will be retried untill accepted or final error returned 
    { 
     	"requestId":"19860313-4rv1-1337-h4xr-123419860313",
    	"error":{  
    		"description":"Reason of the error described here. Visible for debugging only. Not shown to the player",
    		"code":"INTERNAL_ERROR"
    	 }
    }
    
    Example 2 - Player not found 
    {  
    	"requestId":"e9ccd456-4c6a-47b3-922f-66a5e5e13513",
    	"error":{  
       		"code":"ERR_PLAYER_NOT_FOUND"
       		"description": "Any description"
        }
    }
    
    							
    GameRoundResultRequest:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    username string Player's username. Must be unique.
    externalToken string Provided by operator to be used by Playtech for wallet communication.
    • minSize: 11
    • maxSize: 2147483647
    gameRoundCode string References game round, where monetary transaction is made. In case of first transaction, game round should be started automatically. Might include special symbol hash "#".
    • minSize: 1
    • maxSize: 128
    gameCodeName string Code name of the game played.
    pay Pay Pay transaction details.
    jackpot Jackpot Jackpot details.
    gameRoundClose GameRoundClose If set, game round is ended.
    gameHistoryUrl string If configured, represents an URL to the detailed history of the game round.
    liveTableDetails LiveTableDetails Additional information about the live game table where the game round took place.
    gamingDetails gamingDetails Additional information about the gaming details where the game round took place.
    GameRoundResultResponse:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    externalTransactionCode string Transaction code in operator wallet, if there was a pay done.
    • minSize: 0
    • maxSize: 128
    externalTransactionDate string Transaction time in operator wallet, if there was a pay done. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    balance Balance Balance details after the transaction. Even if there was no pay transaction included the balance is necessary for showing in the game history the balance at the end of the game.
    error GameRoundResultError Error descriptor. Only present when service failed to process request
    POST /getBalance

    Used to retrieve a player's balance from the operator's wallet.

    										
    						POST /getBalance HTTP/1.1
    						Content-Type: application/json; charset=UTF-8
    						Host: operator.com
    						Connection: Keep-Alive
    						User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    						Accept-Encoding: gzip,deflate
    						{  
    						   "requestId":"71c8ebdd-5cbe-4294-bf40-ae12b93fdef9",
    						   "username":"MCCT_PLAYER001",
    						   "externalToken":"MCCT_TOKEN88888888"
    						}
    										
    									
    										
    						Cache-Control: no-cache, no-store
    						Connection: Keep-Alive
    						Content-Type: application/json; charset=UTF-8
    						Date: Fri, 13 Apr 2018 10:36:15 GMT
    						{  
    						   "requestId":"71c8ebdd-5cbe-4294-bf40-ae12b93fdef9",
    						   "balance":{  
    							  "real":105.00,
    							  "timestamp":"2018-04-13 13:55:40.290"
    						   }
    						}
    										
    									
    										
    						### Invalid Token ###
    						{
    						   "requestId":"19860313-4rv1-1337-h4xr-123419860313",
    						   "error":{
    							  "description":"Reason of the error described here. Visible for debugging only. Not shown to a player",
    							  "code":"ERR_AUTHENTICATION_FAILED"
    						   }
    						}
    										
    									
    GetBalance Request Parameters:
    Parameter Type Description
    requestId string A unique identifier for the request, used for troubleshooting between systems.
    username string The player's username, which must be unique.
    externalToken string Provided by the operator for Playtech wallet communication.
    GetBalance Response Parameters:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    balance Balance Balance details after the transaction. Even if there was no pay transaction included the balance is necessary for showing in the game history the balance at the end of the game.
    error GetBalanceError Error descriptor. Only present when service failed to process request
    POST /healthcheck

    This endpoint will be called by Playtech to check whether operator API is still alive. Kindly respond to the request with a response (empty body) with status code 200 to indicate that the operator API is working fine.

    If respond with status code that is not 200 (e.g. 4XX, 5XX), the Playtech will assume that the operator API is having problems and may stop routing traffic to the operator.

    This endpoint has a maximum timeout of 3 seconds. So if operator side did not respond within 3 seconds, Playtech will flag it as timeout with status code 308 Request Timeout.

    
    
    
    ### Example 1 ###
    POST /healthcheck HTTP/1.1
    Content-Length: 113
    Content-Type: application/json; charset=UTF-8
    Host: someHost.ee
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_282)
    Accept-Encoding: gzip,deflat
    
    							
    
    POST https://operator.com/healthcheck
    Cache-Control: no-cache, no-store
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 13 Apr 2018 10:36:15 GMT
    200 OK
     
    
    							
    
    POST https://operator.com/healthcheck
    400 Bad Request
    500 Internal Server Error
      
    							
    HealthCheckRequest:
    HealthCheckResponse:
    Status Code
    • 200: Success
    • 400: Bad Request
    • 500: Internal Error
    POST /keepAlive

    Sent to keep player login session alive during low activity game play.

    
    ### Example 1 ###
    POST /keepAlive HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: someHost.ee
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_282)
    Accept-Encoding: gzip,deflate
    {
        "requestId":"19860313-4rv1-1337-h4xr-123419860313",
        "username":"MCCT_PLAYER001",
        "externalToken":"MCCT_TOKEN88888888"
        "timeFromLastAction":1000
    }
    
    
    							
    
    ### Example 1 ###
    Cache-Control: no-cache, no-store
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 13 Apr 2018 10:36:15 GMT
    {
        "requestId":"19860313-4rv1-1337-h4xr-123419860313"
    }
    
    							
    
    ### Example 1 - KeepAlive error response ###
    {
    	"requestId":"19860313-4rv1-1337-h4xr-123419860313",
        "error":{
        code":"INTERNAL_ERROR",
        "description":"Internal server error"
        }
    }
    							
    KeepAliveRequest:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    • minSize: 11
    • maxSize: 255
    username string Player's username. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
    • minSize: 1
    • maxSize: 32
    externalToken string Provided by operator to be used by Playtech for wallet communication.
    • minSize: 11
    • maxSize: 255
    timeFromLastAction integer Time in milliseconds from player's last action on Playtech side. If empty, last action is considered to be taken place at the moment of sending current request.
    KeepAliveResponse:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    • minSize: 11
    • maxSize: 255
    error KeepAliveError Error descriptor. Only present when service failed to process request
    POST /logout

    Sent when the session expires on the Playtech side. The Operator can invalidate the session related to the given external token and not accept requests with it any more (except retries).

    
    POST /logout HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate
    {  
       "requestId":"f2b26f85-021e-4326-80cf-490932c45a2b",
       "username":"MCCT_PLAYER001",
       "externalToken":"MCCT_TOKEN88888888"
    }
    
    							
    
    Cache-Control: no-cache, no-store
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 13 Apr 2018 10:36:15 GMT
    {  
       "requestId":"f2b26f85-021e-4326-80cf-490932c45a2b"
    }
    							
    
    ### Example 1 - Logout response if players session already closed or token expired ###
    {
        "requestId":"19860313-4rv1-1337-h4xr-123419860313",
        "error":{
        "code":"ERR_AUTHENTICATION_FAILED",
        "description":"Invalid token / Player session already closed"
        }
    }
    
    							
    LogoutRequest:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    • minSize: 11
    • maxSize: 255
    username string Player's username. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
    • minSize: 1
    • maxSize: 32
    externalToken string Provided by operator to be used by Playtech for wallet communication.
    • minSize: 11
    • maxSize: 255
    LogoutResponse:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    • minSize: 11
    • maxSize: 255
    error LogoutError Error descriptor. Only present when service failed to process request
    playerMessage string (Error) message to be displayed to player in player's language.
    POST /notifyBonusEvent

    This request is to notify the Operator about an event with bonus instance. Currently supports ACCEPTED and REMOVED status.

    
    ## ACCEPTED STATUS ###
    POST /notifyBonusEvent HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_282)
    Accept-Encoding: gzip,deflate								
    {
    	"requestId":"49511363-cde0-4dfb-8281-d0f1ab7c03cf",
    	"username":"SomePlayer6715",
    	"remoteBonusCode":"4980222",
    	"bonusInstanceCode":"4980223",
    	"resultingStatus":"ACCEPTED",
    	"date":"2021-05-24 12:34:54.000",
    	"freeSpinsChange":10
    }
    								
    ## REMOVED ALL SPIN STATUS ##
    POST /notifyBonusEvent HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_282)
    Accept-Encoding: gzip,deflate
    {
       "requestId":"83ff935f-be3f-444a-8042-725b21e86322",
       "username":"MOCK2lauri",
       "remoteBonusCode":"325453452fff52",
       "bonusInstanceCode":"5428819",
       "resultingStatus":"REMOVED",
       "date":"2025-07-15 10:51:47.000",
       "bonusTemplateId":"63323"
    }
    
     
    ## REMOVED WITH PENDING BONUS ##
    POST /notifyBonusEvent HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5.13 (Java/1.8.0_282)
    Accept-Encoding: gzip,deflate
    {
       "requestId":"d071132e-a396-4bd7-a73c-9ed93f6b7930",
       "username":"MOCK2lauri",
       "remoteBonusCode":"325453452fggff52",
       "bonusInstanceCode":"5428820",
       "resultingStatus":"REMOVED",
       "date":"2025-07-15 10:56:10.000",
       "bonusBalanceChange":"-32",
       "freeSpinsChange":-4,
       "bonusTemplateId":"63323",
       "freeSpinValue":"32"
    }
    
    							
    
    Cache-Control: no-cache, no-store
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 13 Apr 2018 10:36:15 GMT
    {
    	"requestId":"49511363-cde0-4dfb-8281-d0f1ab7c03cf"
    }
    							
    
    {
    	"requestId":"091844a4-88a1-40f3-bf9e-8c2fef3c646e",
    	"error":{
    		"code":"ERR_PLAYER_NOT_FOUND",
    		"description":"Remote bonus code was not found"
    	}
    }
    
    							
    NotifyBonusEventRequest:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    • minSize: 11
    • maxSize: 255
    username string Player's username. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
    • minSize: 1
    • maxSize: 32
    resultingStatus string Possible values: ACCEPTED, REMOVED.
      Enum:
    • ACCEPTED : The result of the event lead bonus to accepted status.
    • REMOVED : The result of the event lead bonus to removed status.
    date string Event start time on Playtech side. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    remoteBonusCode string Operator side identification of the bonus instance for which the event notification was triggered.
    • minSize: 1
    • maxSize: 128
    bonusInstanceCode string Playtech side identification of the bonus instance for which the event notification was triggered.
    bonusBalanceChange decimal Bonus money amount that was issued to or removed from the player.
    • decimalPrecision: 22
    • decimalScale: 2
    freeSpinsChange long Notifies the operator about the number of free spins that were issued to or removed from the player.
    goldenChipsChange GoldenChipsChange Notifies the operator about the Golden Chips that were issued to or removed from the player.
    bonusTemplateId string The code of the bonus template.
    freeSpinValue decimal The value of a single Free Spin. Available if Free Spin bonuses support predefined bet values.
    • decimalPrecision: 22
    • decimalScale: 2
    NotifyBonusEventResponse:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    • minSize: 11
    • maxSize: 255
    error NotifyBonusEventError Error descriptor. Only present when service failed to process request
    POST /transferFunds

    This request is to transfer funds to the Operator's wallet outside of a regular game round. This is mostly relevant in case of free spins with wagering requirements, where bonus winnings are released after the wagering has been completed.

    Important:
    • Will trigger transferFunds API:
      • Cash Bonus
      TransferFunds is an API that Playtech calls to the operator once the required conditions are fulfilled.
    • Will not trigger transferFunds API:
      • Free Spins without Wagering (Spend)
      • Golden Chips
      Winnings are credited directly into player wallet via GameRoundResult api parameter "amount" in "pay" object.

    TransferFunds only occurs when all free spins are used and the player has winnings."

    
    POST /transferFunds
    Content-Type: application/json; charset=UTF-8
    Host: operator.com
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.5 (Java/1.8.0_152)
    Accept-Encoding: gzip,deflate
    {
      "requestId": "0b5966ff-38f9-4368-bc38-ac863c4568a4",
      "username": "MOCK__raido",
      "transactionCode": "8860421",
      "transactionDate": "2025-08-05 07:40:59.981",
      "amount": "2",
      "bonusInstanceCode": "123123",
      "bonusTemplateId": "12345",
      "type": "BONUS",
      "bonusInfo": {
        "remoteBonusCode": "123123",
        "bonusInstanceCode": "123123",
        "bonusTemplateId": "12345",
        "bonusType": "CASH"
      }
    }
    
    
    							
    
    Cache-Control: no-cache, no-store
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 13 Apr 2018 10:36:15 GMT
    {  
       "requestId":"b771ae8f-9e6d-45b6-a5ff-64b58f7c4ab8",
       "externalTransactionCode":"24941974",
       "externalTransactionDate":"2019-04-12 08:43:20.357",
       "balance":{  
          "real":"100.25",
          "timestamp":"2019-04-12 08:43:20.357"
       }
    }
    							
    
    ### Example 1 - Error response in case system failure to process the request - Will be retried until accepted ###
    {
    	"requestId":"19860313-4rv1-1337-h4xr-123419860313",
    	"error":{
    		"code":"INTERNAL_ERROR",
    		"description":"System down, Please retry"
    	}
    }
    							  
    ### In case of transfer funds its a must succeed request. There is no error response to decline the transaction. Funds must not get stuck on IMS side ###
    
    							
    TransferFundsRequest:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    • minSize: 11
    • maxSize: 255
    username string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
    • minSize: 1
    • maxSize: 32
    transactionCode string Identifies the transaction that resulted in funds being transferred.
    • minSize: 0
    • maxSize:20
    transactionDate string Transaction start time. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    amount string Amount of money being transferred.
    • decimalPrecision: 22
    • decimalScale: 2
    type string Type of funds being transferred.
      Enum:
    • BONUS : All bonus related funds. Additional information provided in the dedicated bonusInfo object.
    bonusInstanceCode string Unique identifier of the bonus instance on Playtech side.
    bonusTemplateId string The code of the bonus template.
    bonusInfo BonusInfo Additional information for the source of bonus funds.
    TransferFundsResponse:
    Parameter Type Description
    requestId string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    externalTransactionCode string Transaction code in operator wallet.
    • minSize: 0
    • maxSize: 128
    externalTransactionDate string Transaction time in operator wallet. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    balance Balance Balance details after the transaction.
    error TransferFundsError Error descriptor. Only present when service failed to process request

    #Report API

    All "From Operator" API calls need to provide x-auth-kiosk-key header. Kindly obtain the kiosk key from technical support. This key allows the platform to identify that the request is coming from which operator.

    GET /reports/dailyReport

    Get a report of total bets, wins, refunds. Grouped by entity name and transaction date.

    
    GET /reports/dailyReport?from_date=2024-07-01&to_date=2024-09-01&timezone=Asia/Kuala_Lumpur&per_page=100&page=1 HTTP/1.1
    x-auth-admin-key: {{admin_key}}
    
    							
    
    Cache-Control: no-cache, no-store
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 20 Sep 2024 13:18:15 GMT
    {
    	"code": 200,
    	"message": "",
    	"data": [
    	  {
    		"date": "2024-08-30",
    		"entity_name": "TEST",
    		"currency": "CNY",
    		"player_count": 1,
    		"game_count": 3,
    		"total_bets": 47,
    		"total_refunds": 0,
    		"total_wins": 26,
    		"total_progressive_share": 0,
    		"total_progressive_win": 0,
    		"total_free_spin_bets": 0,
    		"total_free_spin_wins": 2,
    		"total_golden_chip_bets": 10.52,
    		"total_golden_chip_wins": 11,
    		"average_bet": 15.67
    	  },
    	  {
    		"date": "2024-08-30",
    		"entity_name": "TEST2",
    		"currency": "CNY",
    		"player_count": 1,
    		"game_count": 2,
    		"total_bets": 22,
    		"total_refunds": 0,
    		"total_wins": 2,
    		"total_progressive_share": 0.02,
    		"total_progressive_win": 0,
    		"total_free_spin_bets": 0,
    		"total_free_spin_wins": 0,
    		"total_golden_chip_bets": 0,
    		"total_golden_chip_wins": 0,
    		"average_bet": 11
    	  },
    	  {
    		"date": "2024-08-31",
    		"entity_name": "TEST",
    		"currency": "CNY",
    		"player_count": 1,
    		"game_count": 7,
    		"total_bets": 37.8,
    		"total_refunds": 0,
    		"total_wins": 6,
    		"total_progressive_share": 0.86,
    		"total_progressive_win": 0,
    		"total_free_spin_bets": 0,
    		"total_free_spin_wins": 0,
    		"total_golden_chip_bets": 0,
    		"total_golden_chip_wins": 0,
    		"average_bet": 5.4
    	  }
    	],
    	"timestamp": "2024-10-04T02:47:24+00:00",
    	"pagination": {
    	  "current_page": 1,
    	  "last_page": 1,
    	  "path": "https://api-uat.agmidway.net/reports/dailyReport",
    	  "per_page": 100,
    	  "total_items": 97
    	}
      }
    							
    
     ### Error ###
    	Connection: Keep-Alive
    	Content-Type: application/json; charset=UTF-8
    	Date: Fri, 20 Sep 2024 13:18:15 GMT
    {
        "code": 422,
        "message": "The from date field is required. (and 2 more errors)",
        "data": null,
        "timestamp": "2024-09-19T10:09:35+00:00"
    }
    
    							
    dailyReport Request:
    Parameter Location Type Description
    x-auth-admin-key header string {{admin_key}}
    from_date body string The start date for the report in YYYY-MM-DD format (e.g., "2024-07-01")
    to_date body string The end date for the report in YYYY-MM-DD format (e.g., "2024-09-01")
    timezone body string The timezone for the report. Valid PHP timezone from https://www.php.net/manual/en/timezones.php
    currency body string The currency for the report
    entity_name body string Entity name to query, will include all downlines of the entity
    kiosk_name body string Kiosk name to query
    game_code body string Game code to query
    per_page body integer The number of items per page
    page body integer The page number to request
    dailyReport Response:
    Parameter Type Description
    code integer The status code of the response.
    message string Error descriptor. Only present when service failed to process request
    data DailyReportData An array of daily reports
    timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
    pagination PaginationData Pagination details.
    GET /reports/gameRoundStatus

    This endpoint retrieves the status of a specific game round and also all the relevant game round details. Only can retrieve game rounds up to 3 months earlier from current date.

    
    GET /reports/gameRoundStatus?game_round=1234#b4353&timezone=Asia/Kuala_Lumpur HTTP/1.1
    x-auth-admin-key: {{admin_key}}
    
    		
    
    Cache-Control: no-cache, no-store
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 20 Sep 2024 13:18:15 GMT
    {
        "code": 200,
        "message": "",
        "data": {
            "player_username": "UGIHBMY_C789AAD06SB",
            "bet_date": "2025-07-04T21:57:46+08:00",
            "result_date": "2025-07-04T21:57:46+08:00",
            "operator_token": null,
            "game_code": "pop_f6d36d30_qsp",
            "game_round": "56_9281119040",
            "status": "closed",
            "is_closed": true,
            "is_refund": false,
            "currency": "MYR",
            "bet": 0.6,
            "win": 0,
            "refund": 0,
            "progressive_bet": 0,
            "progressive_win": 0,
            "free_spin_bet": 0,
            "free_spin_win": 0,
            "golden_chip_bet": 0,
            "golden_chip_win": 0,
            "game_history_url": [
                "https://cashier.nptgp.com/getgamehistoryurl.php?casino=agcasino&username=UGIHBMY_C789AAD06SB&ngscode=6643615734&remotesessionenddate=2025-07-04+13%3A57%3A46&token=859b470d6181b7a9cc6138e86745a99f10f344f46cf48c559fc281a498ac0b7b&language=MS&showFullHistoryPerBet=false"
            ],
            "operator_result_acknowledged": true,
            "line_items": [
                {
                    "id": "9f4f7ce6-13da-4b26-856a-42d7727223a5",
                    "transaction_date": "2025-07-04T21:57:46+08:00",
                    "transaction_code": "15884523467",
                    "type": "BET",
                    "game_round_close": false,
                    "operator_acknowledged": true,
                    "currency": "MYR",
                    "amount": -0.6,
                    "progressive_bet": 0,
                    "progressive_win": 0,
                    "free_spin_amount": 0,
                    "golden_chip_amount": 0,
                    "created_at": "2025-07-04T21:57:46+08:00"
                },
                {
                    "id": "9f4f7ce6-caff-426a-869c-59a493e22ad7",
                    "transaction_date": "2025-07-04T21:57:47+08:00",
                    "transaction_code": "NA",
                    "type": "NOWIN",
                    "game_round_close": true,
                    "operator_acknowledged": true,
                    "currency": "MYR",
                    "amount": 0,
                    "progressive_bet": 0,
                    "progressive_win": 0,
                    "free_spin_amount": 0,
                    "golden_chip_amount": 0,
                    "created_at": "2025-07-04T21:57:47+08:00"
                }
            ]
        },
        "timestamp": "2025-07-09T06:29:49+00:00"
    }
    		
    
    ### Error ###
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 20 Sep 2024 13:18:15 GMT
    {
    "code": 500,
    "message": "Unknown or bad timezone (Asia/Kuala)",
    "data": null,
    "timestamp": "2024-10-14T13:51:53+00:00"
    }
    
    		
    gameroundStatus Request:
    Parameter Location Type Description
    x-auth-admin-key header string {{admin_key}}
    game_round body string Game round code
    timezone body string The timezone for date/time to be displayed in the report
    gameroundStatus Response:
    Parameter Type Description
    code integer The status code of the response.
    message string Error descriptor. Only present when service failed to process request
    data GameRoundStatusData The data object containing the game round status details
    timestamp string The timestamp of the response
    GET /reports/gameStats (By transaction Date)

    Get a report of total bets, wins, refunds. Grouped by entity name and transaction date.

    
    GET /reports/gameStats?from_date=2025-07-01 15:30:18&to_date=2025-07-31 18:50:20&timezone=Asia/Kuala_Lumpur&report_by=daily HTTP/1.1
    x-auth-admin-key: {{admin_key}}
    
    		
    
    ### Report by game_code ###
    Cache-Control: no-cache, no-store
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 20 Sep 2024 13:18:15 GMT
    {
        "code": 200,
        "message": "",
        "data": [
            {
                "currency": "CNY",
                "player_count": 1,
                "game_count": 3,
                "total_bets": 30,
                "total_refunds": 0,
                "total_wins": 13.75,
                "total_progressive_share": 0,
                "total_progressive_win": 0,
                "total_free_spin_bets": 0,
                "total_free_spin_wins": 0,
                "total_golden_chip_bets": 0,
                "total_golden_chip_wins": 0,
                "net_gaming": 16.25,
                "game_payout_percentage": 45.8333,
                "game_income_share": 16.25,
                "game_code": "White King (whk)"
            }
        ],
        "timestamp": "2025-08-04T08:32:30+00:00",
        "pagination": {
            "current_page": 1,
            "last_page": 1,
            "path": "https://api-uat.agmidway.net/reports/gameStats",
            "per_page": 100,
            "total_items": 1
        }
    }
    
    ### Report by Daily ###
    Cache-Control: no-cache, no-store
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 20 Sep 2024 13:18:15 GMT
    {
        "code": 200,
        "message": "",
        "data": [
            {
                "currency": "CNY",
                "player_count": 1,
                "game_count": 3,
                "total_bets": 30,
                "total_refunds": 0,
                "total_wins": 13.75,
                "total_progressive_share": 0,
                "total_progressive_win": 0,
                "total_free_spin_bets": 0,
                "total_free_spin_wins": 0,
                "total_golden_chip_bets": 0,
                "total_golden_chip_wins": 0,
                "net_gaming": 16.25,
                "game_payout_percentage": 45.8333,
                "game_income_share": 16.25,
                "date": "2025-07-14"
            }
        ],
        "timestamp": "2025-08-06T07:01:35+00:00",
        "pagination": {
            "current_page": 1,
            "last_page": 1,
            "path": "https://api-uat.agmidway.net/reports/gameStats",
            "per_page": 100,
            "total_items": 1
        }
    }
    		
    
    ### Error ###
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 20 Sep 2024 13:18:15 GMT
    {
    	"code": 422,
        "message": "The timezone field must be a valid timezone.",
        "data": null,
        "timestamp": "2025-08-04T08:38:11+00:00"
    }
    
    		
    gameStats Request:
    Parameter Location Type Description
    x-auth-admin-key header string {{admin_key}}
    from_date body string The start datetime for the report in the specified timezone in YYYY-MM-DD HH:MM:SS format
    to_date body string The end datetime for the report in the specified timezone in YYYY-MM-DD HH:MM:SS format
    timezone body string The timezone for the report. Valid PHP timezone from https://www.php.net/manual/en/timezones.php
    report_by body string entity, daily, monthly, kiosk, entity, game_code, player, currency
    player_username body string The username of the player. Must be unique. Must contain kiosk prefix. {{kiosk_prefix}}_{{string}}
    • minSize: 1
    • maxSize: 32
    currency body string The currency for the report
    entity_name body string Entity name to query, will include all downlines of the entity
    kiosk_name body string Kiosk name to query
    game_code body string Game code name
    per_page body integer The number of items per page
    page body integer The page number to request
    gameStats Response:
    Parameter Type Description
    code integer The status code of the response.
    message string Error descriptor. Only present when service failed to process request
    data GameStatsReportData An array of gamestats reports
    timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
    pagination PaginationData Pagination details.
    GET /reports/unfinishedGameRounds

    Get a list of game transactions that is not closed yet.

    
    GET /reports/unfinishedGameRounds?from_date=2024-09-01&to_date=2024-09-30&timezone=Asia/Kuala_Lumpur HTTP/1.1
    x-auth-admin-key: {{admin_key}}
    
    							
    
    								Cache-Control: no-cache, no-store
    								Connection: Keep-Alive
    								Content-Type: application/json; charset=UTF-8
    								Date: Fri, 20 Sep 2024 13:18:15 GMT
    								{
    									"code": 200,
    									"message": "",
    									"data": [
    									  {
    										"id": "9c8c4211-f223-4aab-90a1-ff71699331f8",
    										"entity_name": "SRGMUATCNY",
    										"bet_date": "2024-07-18 08:22:57",
    										"player_username": "SRGC_HKSCN000000015",
    										"game_round": "gpas_MUVRBO1x1GQb4c-LdCaM",
    										"operator_token": "SRGC_a2f4fd1b-111a-48c9-ab46-32997619699a",
    										"game_code": "gpas_amammothpp_pop",
    										"currency": "CNY",
    										"bet": 2,
    										"win": 3,
    										"refund": 0,
    										"progressive_share": 0,
    										"progressive_win": 0,
    										"free_spin_bet": 0,
    										"free_spin_win": 0,
    										"golden_chip_bet": 0,
    										"golden_chip_win": 0
    									  },
    									  {
    										"id": "9c8a9a82-8c09-4dcc-8959-2098f95c8746",
    										"entity_name": "CRXTESTMIDDEV",
    										"bet_date": "2024-07-17 12:38:35",
    										"player_username": "CRXD_S040",
    										"game_round": "gpas_bLyFevIEfFniuNcA1wyf",
    										"operator_token": "CRXD_23a53280-6b4d-4575-ac46-86023f93fb60",
    										"game_code": "gpas_bprog_pop",
    										"currency": "MYR",
    										"bet": 20,
    										"win": 20,
    										"refund": 0,
    										"progressive_share": 0,
    										"progressive_win": 0,
    										"free_spin_bet": 0,
    										"free_spin_win": 0,
    										"golden_chip_bet": 0,
    										"golden_chip_win": 0
    									  },
    									  {
    										"id": "9c8a671b-d645-47b4-aba8-30a4e40706b5",
    										"entity_name": "SRGMUATCNY",
    										"bet_date": "2024-07-17 10:14:51",
    										"player_username": "SRGC_HKSCN000000015",
    										"game_round": "gpas_oNAwqAyNdcfjimpiIYXY",
    										"operator_token": "SRGC_89f7a793-e0e3-46a7-a6da-761b0970dbf4",
    										"game_code": "gpas_eape2_pop",
    										"currency": "CNY",
    										"bet": 2,
    										"win": 5.5,
    										"refund": 0,
    										"progressive_share": 0,
    										"progressive_win": 0,
    										"free_spin_bet": 0,
    										"free_spin_win": 0,
    										"golden_chip_bet": 0,
    										"golden_chip_win": 0
    									  },
    									  {
    										"id": "9c886d54-3b1d-44d1-9d4c-6c723f4912ce",
    										"entity_name": "SRGMUATCNY",
    										"bet_date": "2024-07-16 10:40:36",
    										"player_username": "SRGC_HKSCN000000015",
    										"game_round": "gpas_moF8ziOh0v-J0FNH4wpC",
    										"operator_token": "SRGC_3a02c0f7-066f-423b-adeb-9ee94d1f73a6",
    										"game_code": "gpas_aogetroy_pop",
    										"currency": "CNY",
    										"bet": 2,
    										"win": 2,
    										"refund": 0,
    										"progressive_share": 0,
    										"progressive_win": 0,
    										"free_spin_bet": 0,
    										"free_spin_win": 0,
    										"golden_chip_bet": 0,
    										"golden_chip_win": 0
    									  }
    									],
    									"timestamp": "2024-09-16T02:54:38+00:00",
    									"pagination": {
    									  "current_page": 1,
    									  "last_page": 1,
    									  "path": "https://test.app/reports/unfinishedGameRounds",
    									  "per_page": 100,
    									  "total_items": 6
    									}
    								  }
    
    							
    
     ### Error ###
    	Connection: Keep-Alive
    	Content-Type: application/json; charset=UTF-8
    	Date: Fri, 20 Sep 2024 13:18:15 GMT
    {
        "code": 422,
        "message": "The from date field is required. (and 2 more errors)",
        "data": null,
        "timestamp": "2024-09-19T10:09:35+00:00"
    }
    
    							
    unfinishGameRounds Request:
    Parameter Location Type Description
    x-auth-admin-key header string {{admin_key}}
    from_date body string The start date for the report in YYYY-MM-DD format (e.g., "2024-09-01")
    to_date body string The end date for the report in YYYY-MM-DD format (e.g., "2024-09-30")
    timezone body string The timezone for the report. Valid PHP timezone from https://www.php.net/manual/en/timezones.php
    currency body string The currency for the report
    entity_name body string Entity name to query, will include all downlines of the entity
    kiosk_name body string Kiosk name to query
    game_round body string Game round code
    per_page body integer The number of items per page
    page body integer The page number to request
    unfinishGameRounds Response:
    Parameter Type Description
    code integer The status code of the response.
    message string Error descriptor. Only present when service failed to process request
    data UnfinishedGameRoundsData An array of unfinished game round reports
    timestamp string The timestamp of the response Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
    pagination PaginationData Pagination details.
    GET /reports/playerGameTransactionReport

    This endpoint retrieves all game transaction line items within a specified date range and timezone. 1 game round may have more than 1 game transaction line items.

    
    		GET /reports/playerGameTransactionReport?bet_start_date=2025-02-01%2000%3A00%3A00&bet_end_date=2025-02-01%2012%3A30%3A00&game_server=AGCASTG&timezone=Asia%2FKuala_Lumpur&per_page=1000&page=1' 
    		x-auth-admin-key: {{admin_key}}
    		
    		
    									
    
    Cache-Control: no-cache, no-store
    Connection: Keep-Alive
    Content-Type: application/json; charset=UTF-8
    Date: Fri, 1 Feb 2025 13:18:15 GMT
    {
        "code": 200,
        "message": "",
        "data": [
            {
                "player_username": "CRXD_RR",
                "bet_date": "2025-11-10T18:46:51+08:00",
                "result_date": "2025-11-10T18:47:04+08:00",
                "operator_token": null,
                "game_code": "ubal",
                "game_alias_code": "bal_soireebaccarat",
                "game_round": "live_87617557416#9fdfaad6",
                "status": "closed",
                "is_closed": true,
                "is_refund": false,
                "currency": "MYR",
                "bet": 25,
                "win": 25,
                "refund": 0,
                "progressive_bet": 0,
                "progressive_win": 0,
                "free_spin_bet": 0,
                "free_spin_win": 0,
                "golden_chip_bet": 0,
                "golden_chip_win": 0,
                "game_history_url": [
                    "https://extstg3-cashier01.ptstaging.eu/getgamehistoryurl.php?casino=ptstaging3.210&username=CRXD_RR&ngscode=29797814&remotesessionenddate=2025-11-10+10%3A47%3A04&token=612fc3b55b9ee9088d075e10521d824f6526ec4580d4282500d7b600148a3cb4&language=EN&showFullHistoryPerBet=false"
                ],
                "operator_result_acknowledged": true,
                "line_items": [
                    {
                        "id": "019a6d60-4352-71d3-b066-d6cda1d17870",
                        "transaction_date": "2025-11-10T18:46:51+08:00",
                        "transaction_code": "93120496",
                        "type": "BET",
                        "game_round_close": false,
                        "operator_acknowledged": true,
                        "currency": "MYR",
                        "amount": -25,
                        "progressive_bet": 0,
                        "progressive_win": 0,
                        "free_spin_amount": 0,
                        "golden_chip_amount": 0,
                        "created_at": "2025-11-10T18:46:56+08:00"
                    },
                    {
                        "id": "019a6d60-712d-7040-9464-99d712cd4322",
                        "transaction_date": "2025-11-10T18:47:04+08:00",
                        "transaction_code": "93120511",
                        "type": "WIN",
                        "game_round_close": true,
                        "operator_acknowledged": true,
                        "currency": "MYR",
                        "amount": 25,
                        "progressive_bet": 0,
                        "progressive_win": 0,
                        "free_spin_amount": 0,
                        "golden_chip_amount": 0,
                        "created_at": "2025-11-10T18:47:08+08:00"
                    }
                ]
            }
        ],
        "timestamp": "2025-11-10T13:53:50+00:00",
        "pagination": {
            "current_page": 1,
            "last_page": 1,
            "path": "https://api-uat.agmidway.net/reports/playerGameTransactionReport",
            "per_page": 100,
            "total_items": 1
        }
    }
    		
    									
    
    			### Error ###
    			Connection: Keep-Alive
    			Content-Type: application/json; charset=UTF-8
    			Date: Fri, 27 Apr 2025 13:18:15 GMT
    			{
    				"code": 422,
    				"message": "The bet start date field is required when result start date is not present. (and 1 more error)",
    				"data": null,
    				"timestamp": "2025-05-07T02:38:03+00:00"
    			}
    		
    									
    PlayerGameTransaction Request:
    Parameter Location Type Description
    x-auth-admin-key header string {{admin_key}}
    bet_start_date body string The start datetime for the report in the specified timezone in YYYY-MM-DD HH:MM:SS format
    game_server body string The name of the server
    bet_end_date body string The end datetime for the report in the specified timezone in YYYY-MM-DD HH:MM:SS format
    timezone body string The timezone for the report. Valid PHP timezone from https://www.php.net/manual/en/timezones.php
    entity_name body string Name of the entity to filter. Will return results inclusive of all downlines.
    game_round body string Game round code
    per_page body integer The number of items per page
    page body integer The page number to request
    PlayerGameTransaction Response:
    Parameter Type Description
    code integer The status code of the response.
    message string Error descriptor. Only present when service failed to process request
    data PlayerGameTransactionData An array of PlayerGameTransaction reports
    pagination PaginationData Pagination details.

    list of Context

    AuthenticateError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD: This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR: Internal service error.
    • CONSTRAINT_VIOLATION: This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND: Player not found (should not be retried).
    • ERR_AUTHENTICATION_FAILED: Authentication failed. Player session token is not valid / expired (should not be retried).
    • ERR_REGULATORY_GENERAL: General error code for regulatory related decline (should not be retried).
    description string Description text of error

    Balance

    Parameter Type Description
    real decimal Player's available real money rounded to 2 decimal places, e.g 123.45.
    • decimalPrecision: 22
    • decimalScale: 2
    timestamp string Timestamp of the balance snapshot. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.

    BetDetails

    Parameter Type Description
    tableCoverage integer Table coverage, representing percentage of positions covered by all bets. Whole number in range 0-100.
    • minValue: 0
    • maxValue: 100
    betType string The bet type.
      Enum:
    • MAIN_BET: Bet is a main bet.
    • SIDE_BET: Bet is a side bet.

    BetError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD: This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR: Internal service error.
    • CONSTRAINT_VIOLATION: This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND: Player not found (should not be retried).
    • ERR_AUTHENTICATION_FAILED: Authentication failed. Player session token is not valid / expired (should not be retried).
    • ERR_TRANSACTION_DECLINED: General error code for decline transaction (should not be retried).
    • ERR_INSUFFICIENT_FUNDS: Insufficient funds (should not be retried).
    • ERR_REGULATORY_GENERAL: General error code for regulatory related decline (should not be retried).
    • ERR_REGULATORY_REALITYCHECK: Player has hit the time limit configured for reality check. Accompanied with reality check dialog data (should not be retried).
    description string Description text of error

    BetSelections

    Parameter Type Description
    type string Type of Bets
    betAmount string Amount of the bet
    winAmount string Win amount of the bet
    sideBet string Indicates whether this bet is a side bet.

    BonusChange

    Parameter Type Description
    remoteBonusCode string Identifies the bonus instance on Operator side.
    • minSize: 1
    • maxSize: 128
    bonusInstanceCode string Unique identifier of the bonus instance on Playtech side.
    freeSpinChange FreeSpinChange Info about changed free spins.
    goldenChipsChange GoldenChipsChange Info about changed golden chips.
    bonusTemplateId string The code of the bonus template.
    remoteFreeSpin string Indicates whether this is a Free Spin.

    BonusInfo

    Parameter Type Description
    remoteBonusCode string The identifier on Operator side for the bonus instance that triggered current fund transfer.
    • minSize: 0
    • maxSize: 128
    bonusInstanceCode string The identifier on Playtech side for the bonus instance that triggered current fund transfer.
    bonusTemplateId string The code of the bonus template.
    bonusType string The type of bonus.
      Enum:
    • FREESPIN: Free spin bonus
    • GOLDENCHIP: Golden chip bonus
    • PREWAGER: Prewager bonus
    • AFTERWAGER: Afterwager bonus
    • CASH: Cash bonus
    • FREESPIN2: Free spin 2 bonus
    • POKER: Poker bonus

    BonusInstance

    Parameter Type Description
    code long Unique identifier of the bonus instance that player was given.
    name string Marketing name of the bonus template.
    type string Type of the bonus.
      Enum:
    • GOLDENCHIP : Golden chip bonus
    • FREESPIN2 : Free spin 2 bonus
    bonusBalance decimal Amount of bonus money related to this bonus instance. This will also include pending winnings. Not provided in case bonus instance is removed.
    • decimalPrecision: 22
    • decimalScale: 2
    remoteBonusCode string Identifies the bonus instance on Operator side.
    • minSize: 1
    • maxSize: 128
    acceptDate string Date and time when the bonus was accepted. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    expireDate string Date and time when the bonus will expire. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    givenAmount decimal Initial amount of bonus money that was given to player. Not provided in case of free spin bonus.
    • decimalPrecision: 22
    • decimalScale: 2
    givenFreespinCount long Initial count of freespins that were given to player.
    remainingFreespinCount long Remaining count of freespins that player has not yet used. Not provided in case bonus instance is removed.
    gameCodeNames array of string List of games where the bonus is usable.
    removalDetails RemovalDetails Details on how bonus instance was removed. Not present in case bonus is still active.
    givenGoldenChipCount long Initial count of golden chips that were given to player.
    remainingGoldenChipCount long Remaining count of golden chips that player has not yet used. Not provided in case bonus instance is removed.
    goldenChipValue decimal The monetary value of single golden chip.
    • decimalPrecision: 22
    • decimalScale: 2
    freeSpinBetValue decimal The value of a single Free Spin bet. Available only after the player has accepted the Free Spin bonus.
    • decimalPrecision: 22
    • decimalScale: 2

    BonusWinningsInfo

    Parameter Type Description
    freeSpinWinning FreeSpinWinning Information about Free Spin bonus instance where the win came from.
    goldenChipWinnings array of GoldenChipWinning Information about Golden Chips bonus instance(s) where the win came from.

    CompletionRequirement

    Parameter Type Description
    type string Completion requirement type.
    • Enum:
    • AMOUNT : Bet amount based wagering requirement.
    initial decimal
      Initial wagering requirement for the bonus.
    • decimalPrecision: 22
    • decimalScale: 2
    remaining decimal
      Remaining wagering requirement for the bonus. In case of removed bonus, the remaining wagering requirement at the moment of bonus removal.
    • decimalPrecision: 22
    • decimalScale: 2

    DailyReportData

    Parameter Type Description
    date string The date of the report.
    entity_name string The name of the entity involved in the transaction.
    currency string The currency of the report.
    player_count integer The player count of the report.
    game_count integer The game count of the report.
    total_bets decimal The total bet amount.
    total_refunds decimal The total refund amount.
    total_wins decimal The total win amount.
    total_progressive_share decimal The total progressive share amount.
    total_progressive_win decimal The total progressive win amount.

    EndLoginSessionData

    Parameter Type Description
    RequestID string Unique identifier of the request to help troubleshooting of problems between the systems.
    error endLoginSessionError

    endLoginSessionError

    Parameter Type Description
    code string Error code
      Enum:
    • ERR_PLAYER_NOT_FOUND : When fail to find player in the database
    description string Description text of error

    FreeSpinChange

    Parameter Type Description
    count long Change to the count of free spins.
    value decimal Monetary value of the free spin.
    • decimalPrecision: 22
    • decimalScale: 2

    FreeSpinWinning

    Parameter Type Description
    bonusInstanceCode string Unique identifier of the bonus instance on Playtech side.
    amount decimal Amount of money won from the Free Spin bet.
    • decimalPrecision: 22
    • decimalScale: 2
    remoteBonusCode string Identifies the bonus instance on Operator side.
    • minSize: 1
    • maxSize: 128
    bonusTemplateId string The code of the bonus template.

    FundChange

    Parameter Type Description
    type string Balance type.
      Enum:
    • REAL: Real balance.
    • BONUS: Bonus balance.
    amount decimal The player's balance change amount.
    • decimalPrecision: 22
    • decimalScale: 2

    GameLaunch Data

    Parameter Type Description
    url string GameLaunch URL

    GameMetadata

    Parameter Type Description
    gameVersion string Game version used in this specific session. Required in Greece and Switzerland regulation.
    • minSize: 0
    • maxSize: 32
    payTableId string Game pay table identifier. Required in Greece regulation.
    • minSize: 0
    • maxSize: 40

    GameRoundClose

    Parameter Type Description
    date string Game round close time in game server.
    • minSize: 1
    • maxSize: 23
    rngGeneratorId string Identifier of the RNG hardware/software that was used for random numbers in the finished game. Required in Danish regulation.
    • minSize: 0
    • maxSize: 32
    rngSoftwareId string Random number scaling and mapping software identifier - the software that is used for converting numbers from RNG into usable values in game logic. Required in Danish regulation.
    • minSize: 0
    • maxSize: 32
    gameRoundSummary GameRoundSummary Additional game round details. Required in Slovak regulation.

    GameRoundDataLineItem

    Parameter Type Description
    id string The identifier of the line item.
    bet_date string The datetime of the bet.
    transaction_date string The datetime of the transaction.
    transaction_code string The code of the transaction.
    type string The type of the transaction (BET/WIN/NOWIN/REFUND).
    game_round_close boolean Indicates if the game round is closed.
    operator_acknowledged boolean Indicates if the operator has received & acknowledged the transaction.
    currency string The currency used.
    amount integer The amount of the transaction.
    progressive_bet integer The progressive bet amount.
    progressive_win integer The progressive win amount.
    created_at string The creation date of the transaction.

    GameRoundResultError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD: This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR: Internal service error.
    • CONSTRAINT_VIOLATION: This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND: Player not found.
    • ERR_NO_BET: This error code indicates that the request was rejected because the referenced bet transaction was not found. Used only for requests where the Pay.type value is REFUND.
    description string Description text of error

    GameRoundStatusData

    Parameter Type Description
    player_username string The username of the player.
    bet_date string The datetime of the bet.
    result_date string The datetime of the result.
    game_code string The code of the game.
    game_round string The identifier of the game round.
    status string The status of the game round (open/closed).
    is_closed boolean Indicates if the game round is closed.
    is_refund boolean Indicates if the game round is refunded.
    currency string The currency used.
    bet integer The amount bet.
    win integer The amount won.
    refund integer The amount refunded.
    progressive_bet integer The progressive bet amount.
    progressive_win integer The progressive win amount.
    game_history_url array The URL for the game history.
    line_items array of GameRoundDataLineItem An array of line items/transactions of the game round.
    operator_token string The operator token.

    GameRoundSummary

    Parameter Type Description
    baseBetAmount decimal The bet amount in base game (without bonus and gamble round bets).
    • decimalPrecision: 22
    • decimalScale: 2
    baseWinAmount decimal The win amount in base game (without bonus and gamble round wins).
    • decimalPrecision: 22
    • decimalScale: 2
    bonusRoundCount long The number of bonus rounds that took place.
    bonusRoundWinAmount decimal The win amount from bonus rounds.
    • decimalPrecision: 22
    • decimalScale: 2
    gambleRoundCount long The number of gamble rounds that took place.
    gambleRoundBetAmount decimal The bet amount from gamble rounds.
    • decimalPrecision: 22
    • decimalScale: 2
    gambleRoundWinAmount decimal The win amount from gamble rounds.
    • decimalPrecision: 22
    • decimalScale: 2

    GameStatsData

    Parameter Type Description
    currency string The currency of the report.
    player_count integer The player count of the report.
    game_count integer The game count of the report.
    total_bets decimal The total bet amount.
    total_refunds decimal The total refund amount.
    total_wins decimal The total win amount.
    total_progressive_share decimal The total progressive share amount.
    total_progressive_win decimal The total progressive win amount.
    total_free_spin_bets decimal The total progressive bets using freespin.
    total_free_spin_wins decimal The total wins amountusing freespin
    total_golden_chip_bets decimal The total progressive bets using goldenchip.
    total_golden_chip_wins decimal The total wins amountusing goldenchip
    net_gaming decimal The net gaming
    game_payout_percentage decimal Payout percentage by games
    game_income_share decimal Total game income share
    date string When report_by daily, monthly
    kiosk_name string When report_by kiosk
    entity_name string When report_by entity
    game_code string When report_by game_code
    playername string When report_by player

    GameContext

    Parameter Type Description
    gameCodeName string Code name of the game that is currently played.
    • minSize: 1
    • maxSize: 0

    GamingDetails

    Parameter Type Description
    betSelections array of BetSelections Information about betSelections for multiple bets.

    GetBalanceError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD: This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR: Internal service error.
    • CONSTRAINT_VIOLATION: This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND: Player not found (should not be retried).
    • ERR_AUTHENTICATION_FAILED: Authentication failed. Player session token is not valid / expired (should not be retried).
    • ERR_REGULATORY_GENERAL: General error code for regulatory related decline (should not be retried).
    description string Description text of error

    GetPlayerActiveBonusesData

    Parameter Type Description
    RequestID string Unique identifier of the request to help troubleshooting of problems between the systems
    BonusInstances array of BonusInstance For getPlayerActiveBonuses API
    error GetPlayerActiveBonusError Error descriptor. Only present when service failed to process request

    GetPlayerBonusHistoryData

    Parameter Type Description
    RequestID string Unique identifier of the request to help troubleshooting of problems between the systems
    removedBonusInstances array of RemoveBonusInstance For getPlayerBonusHistory API
    error GetPlayerHistoryBonusError Error descriptor. Only present when service failed to process request

    GetPlayerActiveBonusError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD : This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR : Internal service error.
    • CONSTRAINT_VIOLATION : This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND : Player not found (should not be retried).
    description string Description text of error

    GetPlayerHistoryBonusError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD : This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR : Internal service error.
    • CONSTRAINT_VIOLATION : This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND : Player not found (should not be retried).
    description string Description text of error

    GetSupportedFreeSpinBetValuesData

    Parameter Type Description
    RequestID string Unique identifier of the request to help troubleshooting of problems between the systems
    betValues array of decimal All the supported Free Spin bet values for the specified game(s).
    error GetSupportedFreeSpinBetValuesError The error descriptor. Only present when the service failed to process the request.

    GetSupportedFreeSpinBetValuesError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD : This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR : Internal service error.
    • CONSTRAINT_VIOLATION : This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_INVALID_GAMECODENAME : Unknown game code name provided.
    description string Description text of error

    GiveFreeSpinsError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD : This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR : Internal service error.
    • CONSTRAINT_VIOLATION : This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND : Player not found (should not be retried).
    • ERR_BONUS_TEMPLATE_NOT_FOUND : Bonus template not found (should not be retried).
    • ERR_INVALID_FREESPIN_BET_VALUE : One or more Free Spin bet values provided is not supported by the specified games or the Free Spin bonus amount is not divisible by the bet value(s).
    description string Description text of error

    GiveFreeSpinsData

    Parameter Type Description
    RequestID string Unique identifier of the request to help troubleshooting of problems between the systems
    bonusInstanceCode long Unique identifier of the bonus instance on Playtech side that player was given.
    error(FS) GiveFreeSpinsError Error descriptor. Only present when service failed to process request

    GiveGoldenChipData

    Parameter Type Description
    RequestID string Unique identifier of the request to help troubleshooting of problems between the systems
    bonusInstanceCode long Unique identifier of the bonus instance on Playtech side that player was given.
    error(GC) GiveGoldenChipsError Error descriptor. Only present when service failed to process request

    GiveGoldenChipsError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD : This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR : Internal service error.
    • CONSTRAINT_VIOLATION : This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND : Player not found (should not be retried).
    • ERR_BONUS_TEMPLATE_NOT_FOUND : Bonus template not found (should not be retried).
    description string Description text of error

    GoldenChipsChange

    Parameter Type Description
    count long Change to the count of golden chips.
    value decimal Monetary value of a single golden chip.
    • decimalPrecision: 22
    • decimalScale: 2

    GoldenChipWinning

    Parameter Type Description
    remoteBonusCode string Identifies the bonus instance on Operator side.
    • minSize: 1
    • maxSize: 128
    bonusInstanceCode string Unique identifier of the bonus instance on Playtech side.
    amount decimal Amount of money won from the Golden Chip bonus.
    • decimalPrecision: 22
    • decimalScale: 2
    count long Count of Golden Chips that contributed to the win.
    bonusTemplateId string The code of the bonus template.

    Jackpot

    Parameter Type Description
    contributionAmount decimal Amount of money contributed to jackpot prize pool.
    • decimalPrecision: 36
    • decimalScale: 16
    winAmount decimal Amount of money won from jackpot. Specifies the amount out of total funds paid out as a win during game round.
    • decimalPrecision: 22
    • decimalScale: 2
    jackpotId string The jackpot ID. Required to be reported under some regulations (for example, in Denmark and Switzerland).
    • minSize: 0
    • maxSize: 128
    jackpotContributions array of JackpotContribution Information about jackpot contributions for multiple jackpots.

    JackpotContribution

    Parameter Type Description
    amount decimal Amount of money contributed to jackpot prize pool.
    • decimalPrecision: 36
    • decimalScale: 16
    jackpotId string Jackpot network ID.
    subJackpotInfo array of SubJackpotContribution List of sub-jackpot contributions info.
    jackpotCycleId string The identifier of the current jackpot cycle that is unique per jackpot. It is generated when a new jackpot cycle starts after a jackpot pool payout.
    jackpotCycleCounter long The number of times a jackpot has been paid out from this jackpot pool.

    KeepAliveError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD: This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR: Internal service error.
    • CONSTRAINT_VIOLATION: This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND: Player not found.
    description string Description text of error

    KeyValueData

    Parameter Type Description
    key string Key name of the data being passed.
    • minSize: 0
    • maxSize: 255
    value string Value of the data being passed.
    • minSize: 0
    • maxSize: 255

    LiveTableDetails

    Parameter Type Description
    dealerName string The name of the dealer in live game table.
    • minSize: 0
    • maxSize: 255
    launchAlias string Alias used in live game table direct launch URL where the game is currently played.
    • minSize: 0
    • maxSize: 128
    tableId string Unique table identifier.
    • minSize: 0
    • maxSize: 128
    tableName string The name of the live game table.
    • minSize: 0
    • maxSize: 128

    LiveTableContext

    Parameter Type Description
    launchAlias string Dynamic identifier for the live game table where the game is currently played.
    • minSize: 0
    • maxSize: 128

    LogoutError

    Parameter Type Description
    code string Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD: This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR: Internal service error.
    • CONSTRAINT_VIOLATION: This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND: Player not found (should not be retried).
    • ERR_AUTHENTICATION_FAILED: Authentication failed. Player session token is not valid / expired (should not be retried).
    description string Description text of error

    NotifyBalanceChangeData

    Parameter Type Description
    RequestID string Unique identifier of the request to help troubleshooting of problems between the systems.
    error NotifyBalanceChangeError

    NotifyBalanceChangeError

    Parameter Type Description
    code required Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD : This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR : Internal service error.
    • ERR_PLAYER_NOT_FOUND : Player not found (should not be retried).
    description string Description text of error

    NotifyBonusEventError

    Parameter Type Description
    code required Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD : This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR : Internal service error.
    • CONSTRAINT_VIOLATION : This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND : Player not found (should not be retried).
    description string Description text of error

    PaginationData

    Parameter Type Description
    current_page integer The current page number.
    last_page integer The last page number.
    path string The path of the pagination.
    per_page integer The number of items per page.
    total_items integer The total number of items.

    Pay

    Parameter Type Description
    transactionCode string Transaction code of the pay in game server.
    • minSize: 1
    • maxSize: 20
    transactionDate string Transaction time of the pay in game server. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    amount string Amount paid to player in player's currency.
    • decimalPrecision: 22
    • decimalScale: 2
    • Jackpot win is included in the amount of pay.
    type string Pay type.
      Enum:
    • WIN: Player wins money.
    • REFUND: Bet is refunded to player.
    betType string The type of bet to which this result belongs.
      Enum:
    • MAIN_BET: Bet is a main bet.
    • SIDE_BET: Bet is a side bet.
    internalFundChanges array of FundChange Changes to funds stored in Playtech wallet that were changed in current transaction.
    relatedTransactionCode string Transaction code of the related action. E.g. reference to the bet that is being refunded.
    • minSize: 0
    • maxSize: 20
    bonusChanges array of BonusChange Bonuses ADDED back to player's balance with current pay transaction in case of refund or tie.
    bonusWinningsInfo BonusWinningsInfo Information about money won from bonus bets. Pay transaction amount already contains all these funds.This breakdown is provided only for informational purposes. Provided only if bonus money was used for betting and player won from this money.

    PlayerData

    Parameter Type Description
    currencyCode string The player's currency code (ISO 4217).
    countryCode string The player's country code (ISO 3166-1 alpha-2).
    accountVerificationStatus string The player's account verification result. Mandatory in French regulation. Possible values: UNKNOWN, FAILED, PASSED, INPROCESS, REVIEW.
    externalId string A 40-character hexadecimal SHA1 hash of the player's personal data in the format <Name, Surname, Date of Birth, Place of Birth>. Mandatory in French regulation.

    PlayerDialog

    Parameter Type Description
    dialogId string ID of the dialog. Used for referencing player's decision.
    type string Type of the dialog
      Enum:
    • REALITYCHECK: Reality check.
    playerMessage string Message to be displayed to player.

    PlayerGameTransactionData

    Parameter Type Description
    player_username string The username of the player.
    bet_date string The date when the bet was placed.
    result_date string The date when the game result was recorded.
    game_code string Unique code of the game.
    game_alias_code string Game alias Code
    game_round string Unique identifier of the game round.
    status string The status of the game round.
    is_closed boolean Indicates whether the game round is closed.
    is_refund boolean Indicates whether the game round was refunded.
    currency string The currency used for the bet.
    bet number Amount bet by the player.
    win number Amount won by the player.
    refund number Refund amount (if applicable).
    progressive_bet number The amount of the bet allocated to a progressive jackpot.
    progressive_win number Amount won from the progressive jackpot.
    free_spin_bet number Amount bet using free spins.
    free_spin_win number Amount won from free spins.
    golden_chip_bet number Amount bet using golden chips.
    golden_chip_win number Amount won from golden chips.
    game_history_url array Array of URLs to the full game history view.
    operator_result_acknowledged boolean Indicates if the operator acknowledged the result.
    line_items array of PlayerGameTransactionLineItems List of detailed transactions related to the game round.
    operator_token string The game session token of the operator involved in the playerGameTransactionReport

    PlayerGameTransactionLineItem

    Parameter Type Description
    id string The identifier of the line item.
    bet_date string The datetime of the bet.
    transaction_date string The datetime of the transaction.
    transaction_code string The code of the transaction.
    type string The type of the transaction (BET/WIN/NOWIN/REFUND).
    game_round_close boolean Indicates if the game round is closed.
    operator_acknowledged boolean Indicates if the operator has received & acknowledged the transaction.
    currency string The currency used.
    amount integer The amount of the transaction.
    progressive_bet integer The progressive bet amount.
    progressive_win integer The progressive win amount.
    created_at string The creation date of the transaction.
    free_spin_amount number Amount associated with free spins used in this transaction.
    golden_chip_amount number Amount of golden chips used in the transaction.

    PlayerTagData

    Parameter Type Description
    messageid string The identifier of the line item.
    errorCode string Always return 0 when no error
    timingInformation array of timingInformation The datetime of the transaction.
    tags array of Tags The code of the transaction.
    requestID string Unique identifier of the request to help troubleshooting of problems between the systems. Must be echoed back in the request response.
    error(set) Set PlayerTag Error

    PlayerTagTimingInformation

    Parameter Type Description
    timingsList array of timingInformation The datetime of the transaction.

    PlayerTagtimingList

    Parameter Type Description
    requestReceivedByIMS string The datetime request by IMS Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
    responseSentByIMS string The datetime respond by IMS Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00).

    PlayerTags

    Parameter Type Description
    playerTagEntry array of playerTagEntry The datetime of the transaction.

    PlayerTagEntry

    Parameter Type Description
    name string The datetime request by IMS Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00)
    Value string The datetime respond by IMS Format: "yyyy-mm-dd hh24:mi:ss", GMT time zone. (Example: 2024-06-14T20:11:19+00:00).

    RemoveBonusData

    Parameter Type Description
    requestID string Unique identifier of the request to help troubleshooting of problems between the systems.
    removedFreespinCount long Provided when the removed bonus is of free spin type. Indicates the number of remaining free spins the player had before removal.
    removedGoldenChipCount long Provided when the removed bonus is of golden chip type. Indicates the number of remaining golden chips the player had before removal.
    removedGoldenChipsValue decimal Provided when the removed bonus is of golden chip type. Indicates the total value of the removed golden chips.
    • Decimal precision: 22
    • Decimal scale: 2
    error RemoveBonusError Error descriptor. Only present when service failed to process request

    RemoveBonusError

    Parameter Type Description
    code Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD : This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR : Internal service error.
    • CONSTRAINT_VIOLATION : This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND : Player not found (should not be retried).
    • ERR_BONUS_INSTANCE_NOT_FOUND : Unknown bonus instance passed (should not be retried).
    description string Description text of error

    RemovalDetails

    Parameter Type Description
    removalDate string Date and time when the bonus was removed. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    removalReason string The reason why the bonus instance was removed.
    • Enum:
    • redeemed_manually : Redeemed manually.
    • redeemed_by_wagering : Redeemed by completion wagering requirements.
    • cancelled_by_withdraw : Cancelled by a withdrawal.
    • cancelled_by_administrator : Cancelled by the administrator.
    • cancelled_by_expiration : Cancelled by expiration.
    • declined_by_administrator : Declined by the administrator.
    • declined_by_player : Declined by the player.
    • declined_by_expiration : Declined by expiration.
    • redeemed_by_threshold : Redeemed by the threshold.
    • redeemed_immediately : Redeemed immediately.
    • declined_by_withdrawal : Cancelled by a withdrawal.
    • cancelled_by_player : Cancelled by the player.
    • declined_by_ring_fencing_insufficient_funds : Declined due to insufficient funds for ring-fencing.
    • cancelled_by_bonus_lost : Cancelled by bonus lost.
    • cancelled_by_operator : Cancelled by operator.
    • declined_by_operator : Declined by operator.
    removalComment string Comment for removing bonus instance.
    removedAmount decimal Remaining amount of bonus money that was removed from the player. Not provided in case of free spin bonus.
    • decimalPrecision: 22
    • decimalScale: 2
    removedFreespinCount long Remaining count of freespins that were removed from the player.
    redeemedAmount decimal Total amount of bonus funds that were redeemed in regards to current bonus instance.
    • decimalPrecision: 22
    • decimalScale: 2
    removedGoldenChipCount long Remaining count of golden chips that were removed from the player.

    RemoveBonusInstance

    Parameter Type Description
    code long Unique identifier of the bonus instance that player was given.
    name string Marketing name of the bonus template.
    type string Type of the bonus.
      Enum:
    • GOLDENCHIP : Golden chip bonus
    • FREESPIN2 : Free spin 2 bonus
    bonusBalance decimal Amount of bonus money related to this bonus instance. This will also include pending winnings. Not provided in case bonus instance is removed.
    • decimalPrecision: 22
    • decimalScale: 2
    remoteBonusCode string Identifies the bonus instance on Operator side.
    • minSize: 1
    • maxSize: 128
    acceptDate string Date and time when the bonus was accepted. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    expireDate string Date and time when the bonus will expire. Format: "yyyy-mm-dd hh24:mi:ss.SSS", GMT timezone.
    givenAmount decimal Initial amount of bonus money that was given to player. Not provided in case of free spin bonus.
    • decimalPrecision: 22
    • decimalScale: 2
    givenFreespinCount long Initial count of freespins that were given to player.
    remainingFreespinCount long Remaining count of freespins that player has not yet used. Not provided in case bonus instance is removed.
    gameCodeNames array of string List of games where the bonus is usable.
    removalDetails RemovalDetails Details on how bonus instance was removed. Not present in case bonus is still active.
    givenGoldenChipCount long Initial count of golden chips that were given to player.
    remainingGoldenChipCount long Remaining count of golden chips that player has not yet used. Not provided in case bonus instance is removed.
    goldenChipValue decimal The monetary value of single golden chip.
    • decimalPrecision: 22
    • decimalScale: 2
    freeSpinBetValue decimal The value of a single Free Spin bet. Available only after the player has accepted the Free Spin bonus.
    • decimalPrecision: 22
    • decimalScale: 2

    Set PlayerTags Error

    Parameter Type Description
    code string Error code
      Enum:
    • ERR_SYSTEM : General system error. Transaction state is not known. Idempotent transactions must be retried. Report to tech.
    • ERR_HEAVY_LOAD : Server is under heavy load. Internal error.
    • ERR_AUTH : Authentication error. Authentication parameters were invalid. Also external wallet might be the source.
    • ERR_INVALID : Request is somehow invalid (mandatory parameter missing or parameters such as currency, session type are different in retry).
    • ERR_DENIED: Insufficient API permissions for the action. Contact your project manager or tech support for assistance.
    • ERR_OBJECT_NOT_FOUND/ERR_NOT_MODIFIED : Object is not found in system. Check the value of ObjectIdentity.
    • ERR_2FA_TOKEN_REQUIRED :Two factor session validation needed to continue operation..
    description string Description text of error

    SubJackpotContribution

    Parameter Type Description
    amount decimal Amount of money contributed to sub-jackpot prize pool.
    • decimalPrecision: 36
    • decimalScale: 16
    jackpotId string Sub-jackpot network ID.
    jackpotCycleId string The identifier of the current jackpot cycle that is unique per jackpot. It is generated when a new jackpot cycle starts after a jackpot pool payout.
    jackpotCycleCounter long The number of times a jackpot has been paid out from this jackpot pool.

    TransferFundsError

    Parameter Type Description
    code required Error code
      Enum:
    • INVALID_REQUEST_PAYLOAD : This code indicates that service failed to deserialize request payload.
    • INTERNAL_ERROR : Internal service error.
    • CONSTRAINT_VIOLATION : This error code indicates that service triggered failure during constraints validation on request fields.
    • ERR_PLAYER_NOT_FOUND : Player not found (should not be retried).
    description string Description text of error

    UnfinishedGameRoundsData

    Parameter Type Description
    id string The id of the unfinished game round.
    entity_name string The name of the entity involved in the unfinished game round.
    bet_date string The unfinished game round bet date.
    player_username string The username of the player involved in the unfinished game round.
    game_code string The game code of the unfinished game round.
    game_round string Game round code
    operator_token string The game session token of the operator involved in the unfinished game round.
    currency string The currency involved in the unfinished game round.
    bet decimal The bet amount in the unfinished game round.
    win decimal The win amount in the unfinished game round.
    refund decimal The refund amount in the unfinished game round.
    progressive_share decimal The progressive share amount in the unfinished game round.
    progressive_win decimal The progressive win amount in the unfinished game round.

    Gameplay Scenarios

    #Broken Game

    A broken game occurs when the player is unable to complete an action within the game, e.g. making an in-game bonus round bet. There might be several reasons for this, mainly player side connectivity problems or technical errors between Playtech and the Operator Wallet communication.

    The player can finish a broken game when they re-launch the same game where the broken game occurred.

    The following example scenario demonstrates a broken game creation after the main game round which ended with a bonus round offering without a player’s response. Since the broken game is launched as a new game, the external token is different from the one used initially.

    #In-game Bonus Round

    Game logic may decide to offer the player a bonus round based on previous gameplay. In this case, the game round is not closed after the main round and additional winnings may follow. If player wins, a GameRoundResult request is sent with Pay object. If the player does not win, nothing is sent to the Operator side, unless it’s the final spin/bet of the bonus round. In this case, a GameRoundResult is sent without Pay object, but with GameRoundClose object to indicate that this game round can be closed now on the Operator side and no more transactions are expected for this round.

    Please note that all GameRoundResult requests sent within the main and bonus round combination carry the same gameRoundCode.

    #Regular Game Round

    During a regular game round, the player makes a bet and clicks spin in the game client. Playtech sends Bet request to the Operator’s wallet. The Operator must decide based on the included game round code, whether to open a new game session or if the bet is part of an existing game round. At the end of the game round, a GameRoundResult request is sent. It contains information about the win transaction (if any) and indicates whether the game round has ended or there is more activity expected.

    #Refund

    In Live table games, players are able to play with multiple hands. Due to various errors, one or all hands might get refunded. For this, a dedicated Pay type is used in the GameRoundResult request. The Pay object will contain the refunded amount but also refers to the original Bet transaction that is being refunded.

    If the player also wins as part of the game round, then 2 GameRoundResult requests are sent: one for the refund and one for the win.

    #Response Times / Timeout (Retry)

    Due to Live and Poker real time gameplay, Playtech excpects response for every request in less then 250ms. Anything above that number might cause technical difficulties and refund to be sent to the wallet (gameRoundResult.pay.type = ‘REFUND’) so that gameplay can continue normally.

    #Spend-only Free Spins

    Free spin can be issued with GamesLink Service API GiveFreeSpins request. In case of FREESPIN1 bonus template, the free spins count must be provided. In case of FREESPIN2 bonus template, free spins total amount and possible value(s) of a single spin must be provided. To know the supported free spin bet values of a game/games, a request GetSupportedFreeSpinBetValues must be made before issuing a bonus.

    Spend-only free spins have no wagering requirements and winnings are immediately released to the player’s balance after every round. If a player makes a Bet from such a bonus, then the amount value is zero (no funds are requested from Operator’s wallet).

    In case FREESPIN2 bonus is used, then the free spin bet value becomes known at the point of player accepting the bonus and choosing a bet value. If only single possible bet value configured, then it’s known already at the point of issuing.

    The free spin game round result is passed with a regular GameRoundResult request, with the included (real money) winnings, if any.

    Optionally, if configured, NotifyBonusEvent requests are sent once the player receives the bonus and the bonus is removed from the player after using up all the free spins.

    #Spend-only Golden Chips

    Spend-only golden chips have no wagering requirements and winnings are immediately released to the player’s balance after every round. The player can combine golden chip bets with real money. In such cases, Bet request with a positive amount field is sent. Bonus money usage is reflected in the internalFundChanges object, which indicates how much money was taken from Playtech’s bonus balance.

    The player can use multiple golden chip bonus instances in a single bet. The breakdown of all the used bonuses is brought out in bonusChanges field. This object contains information about the count of golden chips used and also the monetary value of a single chip.

    The game round result is passed with a regular GameRoundResult request, with the included (real money) winnings, if any.

    If there is a tie between player and dealer or bet is refunded for whatever reason, the golden chips are returned to the player’s bonus balance. In such case, the GameRoundResult pay object contains the bonusChanges object, which reflects the golden chips returned to the player. In case of tie, the pay type is “WIN”. In case of refund, the pay type is “REFUND”.

    Optionally, if configured, NotifyBonusEvent requests are sent once the player receives the bonus and the bonus is removed from the player after using up all the golden chips.

    #Technical Error Handling (Retry)

    If a technical error or time-out occurs during any of the transactional requests (Bet, GameRoundResult), Playtech will retry the request until a successful response or a final error is returned. In the case of GameRoundResult, the Operator must accept the request even with an expired externalToken, because the retry process may take longer than the lifetime of the external token session. Bet request must only be accepted with an expired external token if the transactions already exist on the Operator side.

    In case of a game operation failure due to time-out or a system error or any other indefinite response, the game client is always closed automatically. A broken game is created only once a retry succeeds and only if the player has pending actions within the game, e.g. free spins or any other in-game bonus rounds.

    The following example demonstrates a flow where the first GameRoundResult request doesn’t reach the Operator’s Wallet at all. The second retry reaches the Operator’s Wallet, but the response is not received by Playtech. Meanwhile, the external token session also expires, but the third retry is still successful because the Operator can determine the request as being a retry.

    The following example describes a scenario where the initial Bet request fails, but the retry succeeds. Since the game client has been closed by that time, Playtech will initiate a 100% bet refund operation through the GameRoundResult request, meaning that the game round is voided and should not be reported in the game history.

    #Bonus Scenario

    Golden Chips

    
    									### Example 1 - Golden Chip Bet  ###
    									{
    										"requestId": "ff645dc6-da85-4fe1-b90d-e614da1fedb1",
    										"username": "CRXTESTDEV_HELLO",
    										"externalToken": "CRXTESTDEV_TOKEN8888663732",
    										"gameRoundCode": "59727245",
    										"transactionCode": "82760658",
    										"transactionDate": "2025-04-17 10:10:50.000",
    									  
    										"amount": "100",                  // Amount of player's own money used for the bet
    									  
    										"internalFundChanges": [
    										  {
    											"type": "BONUS",
    											"amount": "-2"                // Amount deducted from Golden Chip 
    										  }
    										],
    									  
    										"gameCodeName": "ba",
    									  
    										"betDetails": {
    										  "tableCoverage": 55,            // Indicates the table number or coverage percentage
    										  "betType": "MAIN_BET"
    										},
    									  
    										"bonusChanges": [
    										  {
    											"remoteBonusCode": "0000010",
    											"bonusInstanceCode": "5259758",
    											"goldenChipsChange": {
    											  "count": -1,                // Number of Golden Chips deduct
    											  "value": "2"                // Value per Golden Chip used
    											},
    											"bonusTemplateId": "66983",
    											"remoteFreeSpin": false       // Indicates this is not a free spin usage
    										  }
    										]
    									  }
    									  
    									  
    										### Example 2 - Golden Chip GameRoundResult ###
    										{
    											"requestId": "073db0eb-bea4-4765-b9fe-83929028f76c",
    											"username": "CRXTESTDEV_HELLO",
    											"externalToken": "CRXTESTDEV_TOKEN8888663732",
    											"gameRoundCode": "59727245",
    											"gameCodeName": "ba",
    											"pay": {
    											  "transactionCode": "82760660",
    											  "transactionDate": "2025-04-17 10:10:51.000",
    											  "amount": "202",                  // Total amount won by the player in this round
    											  "type": "WIN",
    											  "betType": "MAIN_BET",
    											  "internalFundChanges": [],
    											  "bonusChanges": [],
    											  "bonusWinningsInfo": {
    												"goldenChipWinnings": [
    												  {
    													"remoteBonusCode": "0000010",
    													"bonusInstanceCode": "5259758",
    													"amount": "2",              // Winnings attributed by the Golden Chip
    													"count": 1,                 // Number of Golden Chips used
    													"bonusTemplateId": "66983"
    												  }
    												]
    											  }
    											},
    											"jackpot": {
    											  "contributionAmount": "0",
    											  "winAmount": "0"
    											},
    											"gameRoundClose": {
    											  "date": "2025-04-17 10:10:51.000",
    											  "rngGeneratorId": "SecureRandom",
    											  "rngSoftwareId": "Casino CaGS 25.1.3.0"
    											},
    											"gameHistoryUrl": "https://extstg3-cashier01.ptstaging.eu/getgamehistoryurl.php?casino=ptstaging3.210&username=CRXTESTDEV_HELLO&ngscode=24122441&remotesessionenddate=2025-04-17+10%3A10%3A51&token=405359e6f078430c395aae2caaa2aa45b9e870ce7b8abb0ba5e2ef49fe138007&language=EN&showFullHistoryPerBet=false"
    										  }
    										  
    										  
    										  
    										  
    		
    									
    
    											### Example 1 - Golden chip  bet  ###
    											{
    												"requestId": "ff645dc6-da85-4fe1-b90d-e614da1fedb1",
    												"externalTransactionCode": "82760658",
    												"externalTransactionDate": "2025-04-17 10:10:50.000",
    												"balance": {
    												  "real": "300.00",
    												  "timestamp": "2025-04-17 10:10:50.918"
    												}
    											  }
    											  
    											
    											  ### Example 2 - Golden chip gameroundresult  ###
    											  {
    												"requestId": "073db0eb-bea4-4765-b9fe-83929028f76c",
    												"externalTransactionCode": "82760660",
    												"externalTransactionDate": "2025-04-17 10:10:51.482",
    												"balance": {
    												  "real": "502.00",
    												  "timestamp": "2025-04-17 10:10:51.482"
    												}
    											  }
    											  
    											  
    											  
    											  
    			
    										
    Step 1
    The player is given 3 Golden Chips.
    ```java
    GiveGoldenChips(count=3, remoteBonusCode=0000010)
    ```
    Operator Balance PT Golden Chips Count
    400 3 (+3)
    Step 2
    The player makes a golden chips bet in a game(golden chip+regular bet).
    ```java
    Bet(amount=100, bonusChanges.remoteBonusCode=0000010, bonusChanges.goldenChipsChange.count=-1,bonusChanges.goldenChipsChange.value=2)
    ```
    Operator Balance PT Golden Chips Count
    300 2(-1)
    Step 3
    Game logic generates win in the amount of 202.
    ```java
    GameRoundResult(pay.type=WIN, pay.amount=202, pay.bonusWinningsInfo.goldenChipWinnings.amount=2,bonusChanges.goldenChipsChange.value=2, gameRoundClose.date=2025-04-17 10:10:51.000)
    ```
    Operator Balance PT Golden Chips Count
    502 2(-1)

    FreeSpin

    
    									### Example 1 - Freespin Bet  ###
    									{
    										"requestId": "80bc55db-4f8b-4f86-a006-6f34beac9206",
    										"username": "DEVU__EUGENE31",
    										"externalToken": "cdee5a9a-dcfe-4a93-af9b-2c59f5da7508",
    										"gameRoundCode": "gpas_O2GnU24d5BRT-x4xYdSL",
    										"transactionCode": "82392701",
    										"transactionDate": "2025-04-02 08:28:59.000",
    										"amount": 0.0,
    										"internalFundChanges": [
    										  {
    											"type": "BONUS",
    											"amount": -2.0
    										  }
    										],
    										"gameCodeName": "gpas_bwizard_pop",
    										"betDetails": {
    										  "tableCoverage": 0,
    										  "betType": "MAIN_BET"
    										},
    										"liveTableDetails": null,
    										"bonusChanges": [
    										  {
    											"remoteBonusCode": "000000",
    											"bonusInstanceCode": "5257313",
    											"freeSpinChange": {
    											  "count": -1,
    											  "value": 2.0
    											},
    											"goldenChipsChange": null,
    											"bonusTemplateId": "67243"
    										  }
    										],
    										"gameMetadata": {
    										  "gameVersion": "1.1.95",
    										  "payTableId": "2a1f245d-f8b6-4ae1-8ffb-08fa28927e03"
    										},
    										"remoteBonusCode": "000000",
    										"customData": null,
    										"jackpotContributions": null
    									  }
    									  
    									  
    								
    										### Example 2 - Free spin GameRoundResult ###
    										{
    											"requestId": "0e43bf4f-c4f9-4c66-b180-fc7fcb45d115",
    											"username": "DEVU__EUGENE31",
    											"externalToken": "cdee5a9a-dcfe-4a93-af9b-2c59f5da7508",
    											"gameRoundCode": "gpas_O2GnU24d5BRT-x4xYdSL",
    											"pay": {
    											  "transactionCode": "82392705",
    											  "transactionDate": "2025-04-02 08:29:01.000",
    											  "amount": 0.0,
    											  "type": "WIN",
    											  "betType": "MAIN_BET",
    											  "internalFundChanges": [
    												{
    												  "type": "BONUS",
    												  "amount": 10.8
    												}
    											  ],
    											  "relatedTransactionCode": null,
    											  "bonusChanges": [],
    											  "bonusWinningsInfo": {
    												"freeSpinWinning": {
    												  "remoteBonusCode": "000000",
    												  "bonusInstanceCode": "5257313",
    												  "amount": 10.8,
    												  "bonusTemplateId": "67243"
    												},
    												"goldenChipWinnings": []
    											  }
    											},
    											"jackpot": {
    											  "contributionAmount": 0.0,
    											  "winAmount": 0.0,
    											  "jackpotId": null,
    											  "jackpotBalanceBeforeWin": 0.0,
    											  "jackpotBalanceAfterWin": 0.0,
    											  "jackpotContributions": null,
    											  "jackpotWinnings": null
    											},
    											"gameRoundClose": {
    											  "date": "2025-04-02 08:29:01.000",
    											  "rngGeneratorId": "1.0.3",
    											  "rngSoftwareId": "1.1.95",
    											  "gameRoundSummary": null
    											},
    											"gameCodeName": "gpas_bwizard_pop",
    											"gameHistoryUrl": "https://extstg3-cashier01.ptstaging.eu/getgamehistoryurl.php?casino=ptstaging3.210&username=DEVU__EUGENE31&ngscode=23959030&remotesessionenddate=2025-04-02+08%3A28%3A59&token=9b145cb0ba7b0ea7f4407539cf227da00313ef834cc66b59fb9d41a8ba651870&language=EN&showFullHistoryPerBet=false",
    											"liveTableDetails": null,
    											"customData": null,
    										
    										  }
    										  
    										  
    										  
    										  
    										  
    		
    									
    
    											### Example 1 - Freespin bet  ###
    											{
    												"balance": {
    												  "real": 500.00,
    												  "timestamp": "2025-04-02 08:29:00.945"
    												},
    												"externalTransactionCode": "88e1620c-787e-4671-87a6-9aff9cd136dd",
    												"externalTransactionDate": "2025-04-02 08:29:00.945",
    												"requestId": "80bc55db-4f8b-4f86-a006-6f34beac9206"
    											  }
    											  
    											  
    											
    											  ### Example 2 - Freespin gameroundresult  ###
    											  {
    												"requestId": "0e43bf4f-c4f9-4c66-b180-fc7fcb45d115",
    												"externalTransactionCode": "88e1620c-787e-4671-87a6-9aff9cd136dd",
    												"externalTransactionDate": "2025-04-02 08:29:01.446",
    												"balance": {
    												  "real": 500.00,
    												  "timestamp": "2025-04-02 08:29:01.462"
    												}
    											  }
    											  
    											  
    											  
    											  
    											  
    			
    										
    Step 1
    The player is given 3 Freespin. The win wagering multiplier is set to 5.
    ```java
    GiveFreespin(count=3, remoteBonusCode=000000)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100 3 (+3) 0 0 0
    Step 2
    The player makes a freespin bet in a game.
    ```java
    Bet(amount=0, bonusChanges.remoteBonusCode=000000, bonusChanges.freeSpinChange.count=-1, bonusChanges.freeSpinChanges.value=2)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100 2(-1) 0 0 0
    Step 3
    Game logic generates win in the amount of 10.8 .
    ```java
    GameRoundResult(pay.type=WIN, pay.amount=0, pay.internalFundChanges.type=BONUS, internalFundChanges.amount=10.8, gameRoundClose.date=2025-04-02 08:29:01.000)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100 2 10.8(+10.8) 0 54(+54)
    Step 4
    The player makes a regular bet in a game in the amount of 6 .
    ```java
    Bet(amount=0, internalFundChanges.type=BONUS, internalFundChanges.amount=-6)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100 2 4.8(-6) 0 54
    Step 5
    Game logic generates win in the amount of 8 .The wagering requirement is reduced by the bet amount.
    ```java
    GameRoundResult(pay.type=WIN, pay.amount=0, pay.internalFundChanges.type=BONUS, internalFundChanges.amount=8, gameRoundClose.date=2025-04-02 08:31:01.000)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100 2 12.8(+8) 0 48(-6)
    Step 6
    The player makes a regular bet in a game in the amount of 40 .12.8 is taken from pending bonus winnings, 27.2 from Operator Wallet.
    ```java
    Bet(amount=27.2, internalFundChanges.type=BONUS, internalFundChanges.amount=-12.8)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    72.8(-27.2) 2 0(-12.8) 0 48
    Step 7
    Game logic generates win in the amount of 100 .The win is divided proportionally for bonus and real, based on the bet proportions: 50 to bonus balance as 50% was taken from pending bonus winnings; 27.2 to Operator Wallet as 27.2 of the other half was taken from there and remaining 22.8 to PT real winnings. The wagering requirement is reduced by the bet amount.
    ```java
    GameRoundResult(pay.type=WIN, pay.amount=27.2, [pay.internalFundChanges.type=BONUS, internalFundChanges.amount=50], [pay.internalFundChanges.type=REAL, [pay.internalFundChanges.amount=22.8],gameRoundClose.date=2025-04-02 08:32:01.000)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100(+27.2) 2 50(+50) 22.8(+22.8) 8(-40)
    Step 8
    The player makes a free spin bet in a game.
    ```java
    Bet(amount=0, bonusChanges.remoteBonusCode=000000, bonusChanges.freeSpinChange.count=-1, bonusChanges.freeSpinChanges.value=2)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100 1(-1) 50 22.8 8
    Step 9
    No win,game round ends.
    ```java
    GameRoundResult( gameRoundClose.date=2025-04-02 08:32:25.000)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100 1 50 22.8 8
    Step 10
    The player makes a regular bet in a game in the amoubt of 8.
    ```java
    Bet(amount=0, internalFundChanges.type=REAL, internalFundChanges.amount=-8)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100 1 50 14.8(-8) 8
    Step 11
    No win,game round ends.
    ```JSON
    GameRoundResult( gameRoundClose.date=2025-04-02 08:33:25.000)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100 1 50 14.8 0(-8)
    Step 12
    The player makes a free spin bet in a game.
    ```java
    Bet(amount=0, bonusChanges.remoteBonusCode=000000, bonusChanges.freeSpinChange.count=-1, bonusChanges.freeSpinChanges.value=2)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    100 0(-1) 50 14.8 0
    Step 13
    No win,game round ends.
    ```java
    GameRoundResult (gameRoundClose.date=2025-04-02 08:34:25.000)
    ```
    Bonus has been redeemed: no free spins left and wagering requirements completed. Money is released to Operator Wallet: 50 from bonus balance + 14.8 from real balance.
    ```java
    Transferfunds (amount=50, remoteBonusCode=000000)
    Transferfunds (amount=14.8)
    ```
    Operator Balance PT Free Spins Count PT Pending Bonus Winnings PT Real Balance PT Wagering Requirement
    164.8(+64.8) 0 0(-50) 0(-14.8) 0

    #FAQ

    Can an operator assign multiple bonus templates to a player?

    • Yes, different bonus templates can be assigned to a player without issue.

    What happens if the same bonus template ID is assigned to the player more than once?

    • Playtech will still accept the reassignment of a duplicate bonus template ID to the same player.
    • However, the player will only be able to accept the first instance of the bonus offer; any subsequent offers with the same template ID will not be accepted again.

    Can an operator remove a player's bonus?

    • Yes, the operator can remove a bonus using the removeBonus API, regardless of whether the player has accepted or partially redeemed it.
    • The same bonus can also be reissued to the player, as long as it is within the configured claim limit.
    • However, once the player has fully redeemed the bonus, it can no longer be removed.

    How do you differentiate FREESPIN1 and FREESPIN2?

    • FREESPIN1: Requires the operator to provide count when calling giveFreeSpin.
    • FREESPIN2: Requires the operator to provide amount and betValues when calling giveFreeSpin.

    How many types of freespins are there?

    • Freespin without wagering (spend): Winnings from the free spins will be credited directly to the player's wallet.
      • Remove Bonus can be done regardless of whether the player has accepted or partially redeemed their bonus.
      • May trigger the notifyBonusEvent callback depending on the configuration settings. Operators should ensure that the relevant bonus event handling logic is in place if this callback is enabled.

      How can an operator determine the remaining bets required before triggering the transferFunds API?

      • Operators can use the getPlayerActiveBonus API, which offers real-time information about the player's active bonus status — including the outstanding wagering amount and remaining free spin needed to meet the bonus requirements.

      How cash bonus works?

      • Accept immediately: When a TAM or a member of the Marketing manually awards a cash bonus to a player,the system will automatically trigger the transferFunds API to credit the bonus amount to the player's wallet. This process occurs regardless of the player's online status — whether the player is online or offline at the time of the award, the bonus will be delivered seamlessly. When an IMS user awards a cash bonus to a player, the system automatically triggers a transferFunds API request to the operator. This process occurs regardless of whether the player is online or offline at the time the bonus is granted, ensuring that the bonus is delivered seamlessly.
      
      								### Example 1 - Transferfunds for cash bonus ###
      								{
      									"requestId": "c5ce5dbd-f959-4df3-a380-b0758f20168e",
      									"username": "CRXTESTDEVM_TEST3",
      									"transactionCode": "82501524",
      									"transactionDate": "2025-04-09 04:31:56.000",
      									"amount": "100",
      									"remoteBonusCode": "5258084",
      									"bonusInstanceCode": "5258085",
      									"bonusTemplateId": "67323",
      									"type": "BONUS",
      									"bonusInfo": {
      									  "remoteBonusCode": "5258084",
      									  "bonusInstanceCode": "5258085",
      									  "bonusTemplateId": "67323",
      									  "bonusType": "CASH"
      									}
      								  }
      								  
      
      							

      Will the transferFunds API be triggered if an operator removes a player's bonus?

      • No, the transferFunds API will not be triggered when an operator manually removes a bonus from a player. Bonus removal is considered an administrative action and does not result in any fund transfer to the player's wallet.

      Should player usernames be treated as case-sensitive during authentication?

      • No, player usernames should be compared in a case-insensitive manner during authentication. Operators must ensure that the case of the input does not affect the outcome of the authentication process.
      • For example, "TESTPLAYER" is same as "testplayer" during the authenticate process.