St8 is a Game Aggregator that provides unified APIs to simplify workflow of casino Operators when managing their content portfolio.
St8 provides the following APIs for Operator to use (in accordance with this documentation):
Should Operator choose to use Seamless Wallet, it is expected that the Operator will provide Seamless Wallet API generated in accordance with the given documentation.
| Date | Change | 2025-12-31 | Checksums API now supports filtering by hashing algorithm. |
|---|---|
| 2025-06-26 | Added jackpot_debit as new transaction kind. |
| 2025-05-06 |
1. Introduced rate limiting for Bonus API; 2. Added block with provider mapping information to 9 Wickets exchange transactions; 3. Public release of Regulatory API documentation |
| 2024-11-06 | Added developer_code to Cancel Transaction callback |
| 2024-11-01 | Public release of Testing API documentation |
| 2024-08-15 | Expanded list of bonus related fields that are sent in seamless transactions |
| 2024-05-02 | Added site to Balance request |
| 2024-04-03 | Added max_payout_coeff to Games response. |
| 2024-02-05 | Jurisdiction in player profile cannot be null anymore. |
| 2023-08-10 | Added volatility and hit_ratio to Games response. |
| 2023-07-26 |
1. Listed additional parameters which are being sent in Cancel Transaction callback; 2. Added optional reference_transaction_id field (sent only for cancel kind) to Transactions List response.
|
| 2023-05-26 |
1. Added API to download 9 Wickets exchange transactions; 2. Images now available in .webp format as well; 3. Add 2 more provider transaction kinds related to bonus buying; 4. Clarified limitations of session token; 5. Added processing status to Transfer Wallet API responses.
|
| 2023-01-26 |
1. Added developer_code field to Seamless Wallet API callbacks;2. Expanded description of Bonus statuses; 3. Cashier: expanded transaction status description and added `processing` status; 4. Added bonus_types field to Games method to show which games support what kind of bonus types;
|
| 2022-12-06 | Added developer_code field to Transactions List and Round Info (JSON-format) responses |
| 2022-11-24 | Added round_closed field to Transactions List and Round Info (JSON-format) responses |
| 2022-10-17 |
1. Changes to list of required parameters for the game launch. Now required parameters are marked with real money gameplay in mind; 2. Added bonus block to Transactions List and Seamless Wallet callbacks;3. Added processing status to bonus instances;4. start_time and end_time in response from Bonus API could be NULL
|
| 2022-09-27 | Expanded Games method to return lists of Developers and Categories |
| 2022-08-03 | Added provider_kind to Seamless API calls and Transactions List |
| 2022-06-13 |
1. Fixed spelling of Philippines license; 2. Added site to Cancel Bonus;3. Added cancel_id to Cancel Transaction;4. Game code in Payout and Buyin could be NULL |
| 2022-06-02 | RTP in Games changed type from float to decimal(string) |
| 2022-05-31 |
1. Initial release of Bonus API documentation; 2. Informational API renamed to Query API; 3. Added support of lang parameter in Build Launch URL
|
| 2022-05-02 | Added option to call Round Info with transaction_id instead of round |
| 2022-04-12 | Added note about automatic device detection during Game Launch |
| 2022-04-10 | Initial release of documentation |
When using Seamless Wallet Operator is responsible for holding information about player current balance (i.e. Operator is holding the wallet)
This solution suggests that the Operator itself should perform all actions with the funds such as checking the balance, increasing/decreasing amounts.
The benefit of such approach is that Operator controls wallet state and doesn't need to rely on anyone else for this matter, as well as possibility for player to play multiple games from different providers at the same time.
The downsides would be:
Operator’s involvement and required technical proficiency to implement all callbacks according to Seamless Wallet API definition
Amount of network communication between Aggregator’s platform and Operator's platform.
In regions with high network latency, this amount of network calls is the most widespread reason for poor player experience such as slower spin time, bet lags, not being able to place a bet in time and straight up transaction fails due to occasional timeouts.
By implementing Transfer Wallet solution Operator allows Aggregator to hold information about player's balance and perform corresponding changes (i.e. Operator transfers wallet to Aggregator to manage it on Operator's behalf) With such approach Operator has to implement Transfer Wallet API calls to be able to transfer balance in and out of aggregation platform.
The benefit of such approach would be very little network communication: Operator only needs to send requests for transfering money in and out of St8 system. And even if there have been thousands of game rounds played in between deposit and withdraw, Operator doesn't need to do anything to process them, because St8 system does it on their behalf.
The downsides would be:
Operator needs to transfer certain amount of money from player's balance to aggregation platform. Until the money gets withdrawn back by operator, it can be used only to play games provided by St8.io
If the Operator wants to know what player has used his balance for, then Operator needs to query transactions or consume Apache Kafka topic.
To authenticate requests going in and out of St8 system we use ECDSA signature (Elliptic Curve Digital Signature Algorithm).
Request author has to sign payload with his private key and receiving party has to validate signature with corresponding public key.
We reserve the right to add new fields in payloads of our requests and responses without prior notification. Therefore, Operator has to develop integration keeping this in mind. This also applies to signature verification: Operator has to verify signature of the whole payload and not only from the known fields ( This will be verified during integration acceptance testing).
The diagram below illustrates how St8 and Operator generate and exchange keys during setup phase and signature validation later during operation phase.
openssl ecparam -genkey -name prime256v1 -noout -out ec.key
You should have now file ec.key with content similar to this:
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIIBEdi1kkP+IAIVmbke0EP8XSyEAaEi82dwLUwr9HuY9oAoGCCqGSM49
AwEHoUQDQgAE1yliYVgjr28KYkDD0QYkGa9Y11folImZkMrOiNdmz01Eq7a1y9G8
l/KlnaDluWnKEpm0IBpNy1D+Y5jXIivvbQ==
-----END EC PRIVATE KEY-----
openssl ec -in ec.key -pubout -out ec.pub
You should have now file ec.pub with content similar to this:
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1yliYVgjr28KYkDD0QYkGa9Y11fo
lImZkMrOiNdmz01Eq7a1y9G8l/KlnaDluWnKEpm0IBpNy1D+Y5jXIivvbQ==
-----END PUBLIC KEY-----
Let's assume that "test" is our payload which we want to sign. In this case we would sign it with our private key from ec.key file and then encode it into base64. Note that we've added -n after echo so it wouldn't add new line (\n) in the end of our payload.
echo -n "test" | openssl dgst -sha256 -sign ec.key -binary | base64 > sign.txt
Now you should have a sign.text file with contents similar to:
MEQCIGyMAz34xzIpMr+wTT40L/uIe+n6Tw0L0dli4/TfrA40AiA+AUzgt57yAvrkUqVQSmNMdD0ODdr6imTVYeBJY1kwrw==
Now we need to decode signature from base64:
base64 -D -i sign.txt -o sign.bin
And feed it back into OpenSSL to validate (Note that we are using public ec.pub key for validation):
echo -n "test" | openssl dgst -sha256 -verify ec.pub -signature sign.bin`
You should have received such result:
Verified OK
St8 platform provides two methods for Operator to launch the game:
With this approach Operator doesn't need to make extra calls to St8 platform to obtain game launch URL. Game URL is built according to schema described in this documentation and given to player to load it.
Using this solution Operator has to add only a few required params to the game URL, and the rest of the player session information will be requested by St8 system via the /check callback.
One of the required parameters in game launch URL is token and we will address it as "launch token". We recommended generating unique launch token for combination of player + game + currency. It is important to generate new token on each game launch and it is a good practice to expire this token after 15 mins
It's important for Operator to validate all arguments of incoming /check call and match them with what is expected to be received (is the game_code matching the game launch token was issued for?). In case of the mismatch this game launch attempt may be classified as an attempted fraudulent behaviour and should be rejected.
In case of successful validation Operator has to reply with information about player and session. One of required fields in reply is token and we will address it as "wallet token". It's required that wallet token is not the same as launch token, since the original token has been already seen by player in the URL and can be abused by malicious player to launch different game.
Please, keep all wallet tokens available for at least couple months, since some /credit or /cancel calls might reference not the latest wallet token, but a week (or more) old. The following diagram describes the processes activated as soon as the player on Operator’s side starts playing a game provided by St8.
With this approach Operator has to make server-to-server /launch call to St8 system and provide all player session information as payload of this call. In response St8 will return game launch URL which player has to load to start playing.
Since there is no /check callback in this scenario and player never sees request payload, token in this request should be already wallet token.
Please, keep all wallet tokens available for at least couple months, since some /credit or /cancel calls might reference not the latest wallet token, but a week (or more) old.
The following diagram describes the processes activated as soon as the player on Operator’s side starts playing a game provided by St8.
Both approaches have one thing in common, which is optional /player_profile callback. St8 makes this request when player first time interacts with games provided by St8 or when Operator prompts St8 to do so (see documentation for /launch calls for details).
Returned player information will be used for selecting the best fitting game configuration. It will also be available in St8 back-office for player segmentation purposes.
The following framework describes how Operator can request game URL in server-to-server call
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from Operator platform to St8 system
| game_code required | string (generic_game_code) Unique string identifier of the Game in St8 system. Can be used as argument in game launch or in other APIs. It can be obtained from Games endpoint. |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
required | object (site_object) This field informs St8 which site the player belongs to and enables use of separate back-office reports and bet limits per site, as well as being additional segmentation filter. |
| token required | string [ 10 .. 255 ] characters Player gameplay session token, serving as a unique identifier for the game session on the Operator's side. This token will be used in the following wallet callbacks. To ensure system integrity, it should be unique and not reused across different gaming sessions. Not required if |
required | player (string) or null |
| country | string or null (country) = 2 characters Country where the player's activity is coming from. It can be NULL if Operator is not sure where the player is currently situated. Country code must be in uppercase and comply with ISO 3166-1 Alpha-2 standard. |
| lang | string or null (lang) Language code that is used for game launch. Must be lowercase and must comply with ISO 639-3 standard. If language isn't supported by game client, it will fall back to default language which is English. |
| device | string or null Enum: "DESKTOP" "MOBILE" Type of device used by the player. This will affect game layout for better user experience. St8 has its own player device detection system and will default to it, unless this parameter is provided by the Operator. |
| fun_mode | boolean or null Boolean flag to inform St8 system that game is being launched in demo mode where no changes to actual balance happen. Default is |
required | object Information about the player. Operator is required to either implement /player_profile callback or to send this object at least once (on the first interaction of the player with St8 platform). |
| status | string (generic_status) Enum: "ok" "error" Status of action. |
| game_url | string URL to game client. Operator has to redirect player to this url either by opening it inside of iframe on Operator's site or opening in a new tab (recommended for mobile devices). |
{- "game_code": "btsl_zeppelin",
- "currency": "EUR",
- "site": {
- "id": "st8casino",
}, - "token": "3f7b0483742b3efab97c752cc40a34dd",
- "player": "player_1234",
- "country": "IN",
- "lang": "eng",
- "device": "DESKTOP",
- "fun_mode": false,
- "player_profile": {
- "id": "player_1234",
- "jurisdiction": "CW",
- "default_currency": "EUR",
- "reg_country": "IN",
- "affiliate": "aff_5678",
- "bet_limits": "low",
- "birth_date": "1999-04-01",
- "reg_date": "2022-04-10",
- "attributes": {
- "labels": [
- "table game preference",
- "language English"
]
}
}
}{- "status": "ok",
}The following process describes how Operator needs to build game launch URL. Requires implementation of /check and /player_profile callbacks
| operator_code required | string Example: operator_code=demo01 Unique identifier of Operator in St8 system. Used to authorize requests to API and choose correct configurations |
| game_code required | string Example: game_code=btsl_zeppelin Game Identifier within St8 system. This parameter is used to inform St8 which game has to be launched |
| token required | string or null [ 10 .. 255 ] characters Example: token=94a08da1fecbb6e8b46990538c7b50b2 Identifier of gameplay session in Operator's platform. This token will be later sent to /check callback to get more information about session. Can be omitted in play for fun mode. |
| fun_mode | boolean or null Example: fun_mode=false Boolean flag to inform St8 system that game is being launched in demo mode where no changes to actual balance happen. Default is |
| device | string or null Enum: "DESKTOP" "MOBILE" Example: device=DESKTOP Type of device used by the player. This will affect game layout for better user experience. St8 has its own player device detection system and will default to it, unless this parameter is provided by the Operator. |
| lang | string or null Example: lang=eng Language code that is used for game launch. Must be lowercase and must comply with ISO 639-3 standard. If language isn't supported by game client, it will fall back to default language which is English. |
| location | string Examples: "https://provider.com/game_client?code=zeppelin" URL to game client |
Informational API that is designed to improve operational activity by providing list of available games, list of transactions or checking result of a round.
Displays the list of games that are available for the Operator.
Flag required on field names means that fields are always sent, however they may be equal NULL
St8 provides games-related media content such as thumbnails. To get thumbnails mentioned above you should build URL according to the following format:
https://{cdn_host}/{game_code}/thumb.[webp/jpg]
Where game_code is game_code which you get in response to this method and cdn_host will be shared with you during integration process.
Examples:
| site | string Example: site=st8casino Operator's unique ID for site where games are played. Used to filter correct records. |
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
required | Array of objects (Games) |
required | Array of objects (Developer) |
required | Array of objects |
{- "status": "ok",
- "games": [
- {
- "code": "btsl_zeppelin",
- "name": "Zeppelin",
- "enabled": true,
- "developer": "BETSOLUTIONS",
- "bonus_types": [
- "free_bets"
], - "category": "Crash Games",
- "themes": [
- "Planes",
- "Adventure"
], - "features": [
- "Sticky Wilds",
- "User Interactions",
- "Bonus Buy",
- "Re-Spins"
], - "rtp": "96.2",
- "volatility": 5,
- "max_payout_coeff": "41667",
- "hit_ratio": "20.8",
- "fun_mode": true,
- "release_date": "2021-06-14",
- "deprecation_date": "2024-09-14",
- "restricted_territories": [
- "ES",
- "FR"
], - "prohibited_territories": [
- "US",
- "UK",
- "KP"
]
}
], - "developers": [
- {
- "name": "BETSOLUTIONS",
- "code": "btsl",
- "restricted_territories": [
- "ES",
- "FR"
], - "prohibited_territories": [
- "US",
- "UK",
- "KP"
]
}
], - "categories": [
- {
- "name": "Crash Games",
- "type": "rng"
}
]
}This method enables Operator to request additional information about game round. Type of bet (e.g. player, banker, red, black, etc.) for table games and state of reels for slots games.
This API allows to choose the format of data transmission: human readable page or JSON object.
Either round or transaction_id is required, both can be provided at the same time.
| round | string Example: round=9bbd993d9da7df60b3fd4a4ed721b082 Unique round ID within St8 system. Round is an entity that links debit and credit together indicating that these actions are related. |
| transaction_id | string Example: transaction_id=729a2a9c-bcfd-4c88-8056-9b4cf8a06314 Unique transaction ID within St8 system. This ID is used as idempotency key, i.e. request with the same transaction_id must not be processed more than once. |
| player | string Example: player=player_1234 Unique player ID on Operator's platform. |
| format | string Enum: "html" "json" What format of response Operator wants from this endpoint. Default value is If If |
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
| url required | string URL to page with game round information |
Displays the list of transactions that are matching provided filters.
Flag required on field names means that fields are always sent, however they may be equal NULL
| start_time required | string <date-time> Example: start_time=2021-02-28T23:00:13Z Filtering the time when transaction was processed at. It has to be in the past and has to be earlier than the |
| end_time required | string <date-time> Example: end_time=2021-02-28T23:00:13Z Filtering the time when transaction was processed at. It has to be later than the |
| cursor | string Example: cursor=QTEyOEdDTQ.... Cursor where the previous download has stopped. If provided filters match more than |
| site | string Example: site=st8casino Operator's unique ID for site where games are played. Used to filter correct records. |
| player | string Example: player=player_1234 Unique player ID on Operator's platform. |
| currency | string Example: currency=EUR Currency code of transaction. MUST comply with ISO 4217 Alpha-3 standard. |
| limit | integer Example: limit=300 Limit how many transactions are returned per one request. Maximum limit is 1000, default is 100 |
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
| cursor required | string or null Cursor pointing to last record of this batch. Add this cursor in your next request to receive next batch. |
required | Array of objects (Transaction) Transaction List |
{- "status": "ok",
- "cursor": "QTEyOEdDTQ._DexbeWI4KRvLuUMi4_BZsmx1-dftFgIOcwQ4Ki4qk61JwRtzqbJGqylI1M.9q4Qbqw_Ke2_PoGj.fuT00d-ybBk14fCs0mZDjV_gzvr58YXeQfbFfroaIoymqwX-NpH0z21CQGKur4H6S93U9re0WFkbLN6MN1yvTb7596wLxnUQ7-AdhNrApsPrrNMKNIElItgwUQ7uLQQi4xGAAhisHXQftv69QDSrFEPXtCw2RrFUkKnSIlMLhzbSvVb_5a4tEUR3jHyDfJ3emTGHC6hOpwzspXFp5keWKl2faR6gN89nnPSpeKTYg25umiYg3oow5C9sMPtEc3FNAPg7kYL9BWMbzXE9mTZEAKOTbeoLbhJwMf7Vsw.QuIxhVMgDxSZ787H3iWR8g",
- "transactions": [
- {
- "operator_code": "demo01",
- "site": "st8casino",
- "player": "player_1234",
- "game_code": "btsl_zeppelin",
- "developer_code": "btsl",
- "round": "9bbd993d9da7df60b3fd4a4ed721b082",
- "round_closed": false,
- "transaction_id": "729a2a9c-bcfd-4c88-8056-9b4cf8a06314",
- "kind": "debit",
- "provider_kind": "debit",
- "status": "success",
- "amount": "0.05",
- "currency": "EUR",
- "processed_at": "2022-01-10T23:00:13Z",
- "provider": {
- "transaction_id": "ZcoFAkJ2dfefOHeapj4",
- "amount": "500.0",
- "currency": "USD",
- "player": "bx08m2vrh6",
- "round": "r1q2bOHFiUxPp06dPVlbW8",
- "metadata": {
- "event_id": "31324087",
- "market_id": "1.196623932",
- "odd_value": 1.93
}
}, - "bonus": {
- "instance_id": "player_1234_bonus_1234",
- "status": "finished",
- "bonus_id": "bonus_1234"
}, - "reference_transaction_id": "729a2a9c-bcfd-4c88-8056-9b4cf8a06314"
}
]
}Displays the list of 9 Wickets summary transactions that are matching provided filters.
Flag required on field names means that fields are always sent, however they may be equal NULL
| start_time required | string <date-time> Example: start_time=2021-02-28T23:00:13.000Z Filtering the time when transaction was processed at. It has to be in the past and has to be earlier than the |
| end_time required | string <date-time> Example: end_time=2021-02-28T23:00:13.999Z Filtering the time when transaction was processed at. It has to be later than the |
| cursor | string Example: cursor=QTEyOEdDTQ.... Cursor where the previous download has stopped. If provided filters match more than |
| site | string Example: site=st8casino Operator's unique ID for site where games are played. Used to filter correct records. |
| player | string Example: player=player_1234 Unique player ID on Operator's platform. |
| limit | integer Example: limit=300 Limit how many transactions are returned per one request. Maximum limit is 1000, default is 100 |
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
| cursor required | string or null Cursor pointing to last record of this batch. Add this cursor in your next request to receive next batch. |
required | Array of objects (9w_summary_transaction) Summary Objects |
{- "status": "ok",
- "cursor": "QTEyOEdDTQ._DexbeWI4KRvLuUMi4_BZsmx1-dftFgIOcwQ4Ki4qk61JwRtzqbJGqylI1M.9q4Qbqw_Ke2_PoGj.fuT00d-ybBk14fCs0mZDjV_gzvr58YXeQfbFfroaIoymqwX-NpH0z21CQGKur4H6S93U9re0WFkbLN6MN1yvTb7596wLxnUQ7-AdhNrApsPrrNMKNIElItgwUQ7uLQQi4xGAAhisHXQftv69QDSrFEPXtCw2RrFUkKnSIlMLhzbSvVb_5a4tEUR3jHyDfJ3emTGHC6hOpwzspXFp5keWKl2faR6gN89nnPSpeKTYg25umiYg3oow5C9sMPtEc3FNAPg7kYL9BWMbzXE9mTZEAKOTbeoLbhJwMf7Vsw.QuIxhVMgDxSZ787H3iWR8g",
- "summary_transactions": [
- {
- "site": "st8casino",
- "player": "player_1234",
- "category_type_id": 1,
- "category_type": "BetFair",
- "event_type_id": 1,
- "event_type": "Soccer",
- "event_id": 10000151,
- "event_name": "Japan v Paraguay",
- "market_id": 1.184953463,
- "market_name": "Match Odds",
- "started_at": "2021-07-02T19:30:09",
- "settled_at": "2021-07-02T21:29:33",
- "resettled_at": "2021-07-14T10:29:21",
- "market_total": "1.56",
- "stake_total": "1.05",
- "profit_loss": "1.40",
- "commission": "0.16",
- "currency_code": "INR",
- "provider": {
- "player": "bx08m2vrh6"
}, - "bets": [
- {
- "bet_id": 102054750,
- "bet_placed_at": "2021-07-01T19:30:09",
- "amount": "1.05",
- "profit_loss": "1.56",
- "bet_status": "Settled",
- "selection_id": 789552,
- "selection_name": "Team A",
- "requested_odds": "1.47",
- "actual_odds": "1.48",
- "match_type": "Lay"
}
]
}
]
}This is a set of APIs designed for Operators working in regulated markets to help them comply with local online gambling requirements.
Lists checksums for critical files used in the games that are available to the Operator.
| site | string Example: site=st8casino Operator's unique ID for site where games are played. Used to filter correct records. |
| algorithms[] | Array of strings Items Enum: "sha1" "sha256" … 1 more Example: algorithms[]=sha1&algorithms[]=sha256 You may filter results to include only hashing algorithm that you are interested in. Array is encoded with Bracket Notation (aka PHP-style array encoding or Exploded Arrays). |
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
required | Array of objects (Checksums for game specific files) |
required | Array of objects (Developer) |
{- "status": "ok",
- "games": [
- {
- "code": "btsl_zeppelin",
- "name": "Zeppelin",
- "developer_code": "btsl",
- "checksums": [
- {
- "algorithm": "sha1",
- "file": "Modules.Games.Zeppelin.dll",
- "hash": "9ad2437534aefdcdf55f7fc26dcf7538c2b0a0cd"
}
]
}
], - "developers": [
- {
- "name": "BETSOLUTIONS",
- "code": "btsl",
- "checksums": [
- {
- "algorithm": "sha1",
- "file": "engine.dll",
- "hash": "9ad2437534aefdcdf55f7fc26dcf7538c2b0a0cd"
}
]
}
]
}Bonus API is designed to enable Operator’s promotional activities such as rewarding players, as well as sending out big reactivation/retention campaigns.
St8 delivers a logical solution to Operators where decoding the matching bet sizes across multiple games is no longer needed. St8 provides special API method “Offers” for querying available betting options for games making the entire process more flawless.
The following method “Offers” accepts list of games as an argument and returns offers that are compatible with all of the games.
We believe that the strategy of automatic adjustment of bet size to "match the game math", which is employed by certain game developers, should be improved. Otherwise the user might receive lower value of spins that has initially been advertised, thus creating bad user experience for both casino (and marketing) managers and especially players.
Therefore, this API method will show only offers which are exactly compatible with all of the games. The following approach might lead to empty response, when there are no common offers between requested games.
This could happen due to difference in game math (number of lines or coins) as well as game developer's API limitation where they don't allow creation of bonuses for multiple games at the same time. In such cases Operator should try decreasing selection of games or swapping some of the games for more compatible ones.
There are currently three types of offers:
St8 provides Operator with API which allows creation of bonuses for multiple games and many users at the same time.
Usual scenario of bonus creation would consist of choosing supported bonus offer (maybe with help of offers method) and providing offer's details along with the list of players. If there are many players, creation process might take some time (response will say that bonus status is processing) and Operator has to come back later to get the final result.
Action sequence diagram:
Display the list of available bonus offers that are matching provided filters.
Flag required on field names means that fields are always sent, however they may be equal NULL
| game_codes required | string Example: game_codes=btsl_zeppelin,btsl_mines Comma separated list of unique game identifiers in St8 system. It can be obtained from Games endpoint. The same |
| currency | string (currency) Examples: currency=EUR currency=USD Currency code of bonus offer. MUST comply with ISO 4217 Alpha-3 standard. |
| type | string (bonus type) Enum: "free_bets" "free_money" … 1 more Examples: type=free_bets type=free_money Type of bonus offer. The type affects behaviour of bonus.
|
| site | string Example: site=st8casino Operator's unique ID for site where games are played. Used to filter correct records. |
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
required | Array of objects (Offers) |
{- "status": "ok",
- "offers": [
- {
- "type": "free_bets",
- "value": "0.05",
- "currency": "EUR"
}
]
}Method for Operator to issue bonus creation order.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from Operator platform to St8 system
| bonus_id required | string (bonus_id) [ 2 .. 255 ] characters Unique bonus ID within Operator's platform. This ID is used as idempotency key, i.e. request with the same bonus_id will not be processed more than once. |
| game_codes required | Array of strings (game_codes) Array of It can be obtained from Games endpoint. |
| currency required | string (bonus_offer_currency) Currency code of bonus offer. MUST comply with ISO 4217 Alpha-3 standard. |
| value required | string (bonus_offer_value) Monetary value of the bonus offer. Its meaning differs from type to type. Sent as stringified float value (also known as Decimal). For For For |
| type required | string (bonus_offer_type) Enum: "free_bets" "free_money" … 1 more Type of bonus offer. The type affects behaviour of bonus.
|
| players required | Array of strings (bonus_players) non-empty [ items [ 1 .. 255 ] characters ] Array of players. Which are unique player IDs (case-sensitive) on Operator's platform. Note: if player has never interacted with our system prior to this call, we will call Player Profile callback to learn more about the player. |
| count | integer (bonus_offer_count) Number of free bets. Supported only by offers of Example: |
| site | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| start_time | string <date-time> (bonus_start_time) Date and time when bonus becomes active. Must be UTC timestamp and encoded according to ISO 8601. Due to limitation of game developer APIs actual start time might not always match the one requested in this field, therefore, pay attention to Default value: current time |
| duration | integer (bonus_duration) For how long (in seconds) since the Default value: 1 209 600 seconds, which is 2 weeks |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
required | object (bonus_object) Bonus object. Contains information about value of the bonus, games it has been applied for and the list of players. Pay attention to status of bonus and each particular instance, as it might still be pending or failed. |
{- "bonus_id": "bonus_1234",
- "game_codes": [
- "btsl_zeppelin",
- "btsl_mines"
], - "currency": "EUR",
- "value": "0.05",
- "type": "free_bets",
- "players": [
- "player_1234"
], - "count": 12,
- "site": "st8casino",
- "start_time": "2022-01-10T23:00:13Z",
- "duration": 1209600
}{- "status": "ok",
- "bonus": {
- "bonus_id": "bonus_1234",
- "site": "st8casino",
- "game_codes": [
- "btsl_zeppelin",
- "btsl_mines"
], - "value": "0.05",
- "currency": "EUR",
- "count": 12,
- "type": "free_bets",
- "status": "finished",
- "instances": [
- {
- "instance_id": "player_1234_bonus_1234",
- "player": "player_1234",
- "status": "active",
- "cancel_status": null,
- "start_time": "2022-01-10T23:00:13Z",
- "end_time": "2022-01-24T23:00:13Z"
}
]
}
}Method for Operator to fetch info about the bonus order.
| bonus_id required | string (bonus_id) [ 2 .. 255 ] characters Examples: bonus_id=bonus_1234 bonus_id=20220421_happy_birthday Unique bonus ID within Operator's platform. This ID is used as idempotency key, i.e. request with the same bonus_id will not be processed more than once. |
| site | string Example: site=st8casino Operator's unique ID for site where games are played. Used to filter correct records. |
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
required | object (bonus_object) Bonus object. Contains information about value of the bonus, games it has been applied for and the list of players. Pay attention to status of bonus and each particular instance, as it might still be pending or failed. |
{- "status": "ok",
- "bonus": {
- "bonus_id": "bonus_1234",
- "site": "st8casino",
- "game_codes": [
- "btsl_zeppelin",
- "btsl_mines"
], - "value": "0.05",
- "currency": "EUR",
- "count": 12,
- "type": "free_bets",
- "status": "finished",
- "instances": [
- {
- "instance_id": "player_1234_bonus_1234",
- "player": "player_1234",
- "status": "active",
- "cancel_status": null,
- "start_time": "2022-01-10T23:00:13Z",
- "end_time": "2022-01-24T23:00:13Z"
}
]
}
}Method for Operator to cancel previously issued bonus package.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from Operator platform to St8 system.
| bonus_id required | string (bonus_id) [ 2 .. 255 ] characters Unique bonus ID within Operator's platform. This ID is used as idempotency key, i.e. request with the same bonus_id will not be processed more than once. |
| site | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| players | Array of strings (players) non-empty [ items [ 1 .. 255 ] characters ] Array of players whose bonuses has to be canceled. If this parameter is omitted, bonuses of players (with same |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
required | object Bonus object. Contains information about value of the bonus, games it has been applied for and the list of players. Pay attention to status of bonus and each particular instance, as it might still be pending or failed. |
{- "bonus_id": "bonus_1234",
- "site": "st8casino",
- "players": [
- "player_1234"
]
}{- "status": "ok",
- "bonus": {
- "bonus_id": "bonus_1234",
- "site": "st8casino",
- "game_codes": [
- "btsl_zeppelin",
- "btsl_mines"
], - "value": "0.05",
- "currency": "EUR",
- "count": 12,
- "type": "free_bets",
- "status": "canceled",
- "instances": [
- {
- "instance_id": "player_1234_bonus_1234",
- "player": "player_1234",
- "status": "canceled",
- "start_time": "2022-01-10T23:00:13Z",
- "end_time": "2022-01-24T23:00:13Z",
- "cancel_status": null
}
]
}
}Transfer Wallet API is designated to improve gameplay experience in high network latency areas. This is set of callbacks which Operator can use to manage balance of their players in St8 system.
The following diagram describes the processes activated as soon as the player on Operator’s side starts playing a game provided by St8.
This method is used to check player's balance in St8 system.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from Operator platform to St8 system
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| site | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| developer_code | string (sw_developer_code) Unique string identifier of the game development studio. With this parameter Operator indicates that balance should be added/removed from a particular developer wallet. Required to use 9Wickets developer. It can be obtained from Games endpoint. |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
| balance required | number <string> (balance) Current balance in player's wallet. Served as stringified float value (also known as Decimal) |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
{- "player": "player_1234",
- "currency": "EUR",
- "site": "st8casino",
- "developer_code": "btsl"
}{- "status": "ok",
- "balance": "0.055",
- "currency": "EUR",
- "player": "player_1234"
}This method is used to transfer player's money from Operator's platform into St8 system to enable player's gameplay.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from Operator platform to St8 system
| transaction_id required | string (tw_transaction_id) Unique ID of this transfer. Has to be generated by Operator. This ID is used as idempotency key, i.e. request with the same |
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| amount required | number <string> (amount) Monetary amount of this action. Sent as stringified float value (also known as Decimal). |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| site | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| developer_code | string (sw_developer_code) Unique string identifier of the game development studio. With this parameter Operator indicates that balance should be added/removed from a particular developer wallet. Required to use 9Wickets developer. It can be obtained from Games endpoint. |
| status required | string (tw_status) Enum: "ok" "processing" … 1 more Status of transfer wallet action. If |
| balance required | number <string> (balance) Current balance in player's wallet. Served as stringified float value (also known as Decimal) |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
{- "transaction_id": "5d41402abc4b2a76b9719d911017c592",
- "player": "player_1234",
- "amount": "0.05",
- "currency": "EUR",
- "site": "st8casino",
- "developer_code": "btsl"
}{- "status": "ok",
- "balance": "0.055",
- "currency": "EUR",
- "player": "player_1234"
}This method is used to transfer player's money from St8 system back into Operator's platform.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from Operator platform to St8 system
| transaction_id required | string (tw_transaction_id) Unique ID of this transfer. Has to be generated by Operator. This ID is used as idempotency key, i.e. request with the same |
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| amount required | number <string> (amount) Monetary amount of this action. Sent as stringified float value (also known as Decimal). |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| site | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| developer_code | string (sw_developer_code) Unique string identifier of the game development studio. With this parameter Operator indicates that balance should be added/removed from a particular developer wallet. Required to use 9Wickets developer. It can be obtained from Games endpoint. |
| status required | string (tw_status) Enum: "ok" "processing" … 1 more Status of transfer wallet action. If |
| balance required | number <string> (balance) Current balance in player's wallet. Served as stringified float value (also known as Decimal) |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
{- "transaction_id": "5d41402abc4b2a76b9719d911017c592",
- "player": "player_1234",
- "amount": "0.05",
- "currency": "EUR",
- "site": "st8casino",
- "developer_code": "btsl"
}{- "status": "ok",
- "balance": "0.055",
- "currency": "EUR",
- "player": "player_1234"
}This method is used to check status of money transfer within St8 system.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from Operator platform to St8 system
| transaction_id required | string (tw_transaction_id) Unique ID of this transfer. Has to be generated by Operator. This ID is used as idempotency key, i.e. request with the same |
| site | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| status required | string (generic_status) Enum: "ok" "error" Status of action. |
required | object |
{- "transaction_id": "5d41402abc4b2a76b9719d911017c592",
- "site": "st8casino"
}{- "status": "ok",
- "transaction": {
- "transaction_id": "5d41402abc4b2a76b9719d911017c592",
- "player": "player_1234",
- "site": "st8casino",
- "amount": "0.05",
- "currency": "EUR",
- "kind": "deposit",
- "status": "success",
- "processed_at": "2022-01-10T23:00:13Z"
}
}This chapter covers set of callbacks which Operator has to provide to enable gameplay when opting for Seamless Wallet solution.
Here is the list of statuses that we expect Operator's platform to return in response to seamless wallet callbacks.
| Status code | Description |
|---|---|
| ok | Operation finished successfully |
| player_locked | Player's activity is suspended due to self-exclusion, fraudulent activity, etc. |
| session_expired | Gameplay session has expired and operation can't be processed |
| player_not_found | Unknown player ID |
| not_enough_money | Player doesn't have enough of balance to place a bet |
| transaction_not_found | Referenced transaction is not found in Operator's platform |
| game_disabled | Operation is rejected because game is disabled or unknown |
| site_disabled | Operation is rejected because site is disabled or unknown |
| spending_limit | Player has reached configured wagering limit and all bets are rejected |
| auth_failed | Operator platform could not verify request signature |
| unknown | For all other error cases not listed above |
St8 appreciates the need of being more transparent with data which we receive from game providers. Original type (aka "kind") of transaction is one of many examples.
This transaction kind gives an insight into origin of transaction, as well as describes some specifics of its processing.
Below you can find the table of supported provider transaction kinds and their descriptions.
Please pay attention to correction_debit.
| Provider transaction kind | Description | |
|---|---|---|
| debit | Regular in-game betting action, when money has to be taken from the player's balance. Processed in scope of a particular game round and active game session. | |
| credit | Regular in-game winning action, when money has to be added to the player's balance. Processed in scope of a particular game round and active game session. | |
| jackpot_debit | Action of debiting player's balance due to participation in a jackpot. Represents an entry fee required to join the jackpot pool. It may be processed outside of active gameplay and does not necessarily reference a specific game round. Transaction of this type may or may not be associated with an active game session. | |
| jackpot_credit | Action of increasing player's balance due to winning a jackpot. Could be processed when player is not in game and could reference no round or reference already closed round. | |
| promo_credit | Action of increasing player's balance due to participating in some kind of promotional activity. It can be tournaments organised by Operator or Provider. It may be processed when player is not in the game and will not reference any round. | |
| free_debit | Debiting player's balance due to his use of the issued bonuses. This amount usually equals 0 [1]. If Operator has the concept of "bonus balance", they should debit this balance. It is usually processed in scope of an active gameplay session and round. Transaction of this type should contain reference to the bonus ID[2]. | |
| free_credit | Crediting player's balance due to his use of the issued bonuses. If Operator has concept of "bonus balance", they should credit this balance. It is usually processed in scope of an active gameplay session and round[3]. Transaction of this type should contain reference to the bonus ID[2]. | |
| correction_credit | Crediting player's balance on demand of sports content provider due to change in odds and/or betting amount. This may also occur due to resettlement of the match results. This transaction kind is usually used by sportsbook and sports-exchange products | |
| correction_debit | Debiting player's balance on demand of sports content provider due to change in odds and/or betting amount. This may also occur due to resettlement of the match results. If the player doesn't have enough balance to fulfil this action, operator should decrease player's balance below zero or set it to 0 and "gift" the rest of the amount. In any case operator must respond `ok` to this transaction. In case of match results resettlement correction debit could be made for the full amount of the preceding credit. This transaction kind is usually used by sportsbook and sports-exchange products | |
| bonus_buy_debit | Debiting player's balance due to player buying in-game bonus game. This debit might be bigger than game max bet setting. | |
| bonus_buy_credit | Crediting player's balance due to player winning in-game bonus game, that was previously bought by the player. | |
|
[1] In most cases amount will be 0, meaning that Operator shouldn't decrease player's balance. However, there may be cases of "discounted" bets, where Operator has to debit only a part of the bet amount (e.g. player's bet is 10 but his balance should be decreased only by 1). The amount that will be sent by St8 platform is the amount to debit player's balance. [2] True in case bonus was issued via St8 Bonus API or St8 Back-office. If bonus was initiated by Provider or by Operator via Provider Back-office, the bonus reference will be empty [3] Many Providers send free_credit transactions without any preceding free_debit. Operator must be able to accept such transactions. | ||
The following diagram describes the processes activated as soon as the player on Operator’s side starts playing a game provided by St8.
This callback is used by St8 system to obtain information about player and his active session from Operator's platform. It is used during game launch and rewards creation.
While loading game URL (generated by Operator) St8 will get token from query parameters and launch /check request back to Operator platform to obtain extra information about player session.
It's required to return a different token, since the original token has been already seen by player in the URL and can be abused by malicious player.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from St8 to Operator platform
| token required | string Player’s game launch token that was provided in game URL query parameters |
| game_code required | string Code of game that is being launched. Operator has to validate that |
| status required | |
| token required | string (wallet_token) [ 10 .. 255 ] characters Player's gameplay session token, which was returned in /check callback or provided during game launch. This token serving as a unique identifier for the game session on the Operator's side. To ensure system integrity, it should be unique and not reused across different gaming sessions. This token will be used in the following wallet callbacks. |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| game_code required | string (generic_game_code) Unique string identifier of the Game in St8 system. Can be used as argument in game launch or in other APIs. It can be obtained from Games endpoint. |
| country required | string or null (country) = 2 characters Country where the player's activity is coming from. It can be NULL if Operator is not sure where the player is currently situated. Country code must be in uppercase and comply with ISO 3166-1 Alpha-2 standard. |
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| lang | string or null (lang) Language code that is used for game launch. Must be lowercase and must comply with ISO 639-3 standard. If language isn't supported by game client, it will fall back to default language which is English. |
object (site_object) This field informs St8 which site the player belongs to and enables use of separate back-office reports and bet limits per site, as well as being additional segmentation filter. |
{- "token": "737fdef28f96a6a0e240a1081e2a45d5",
- "game_code": "btsl_zeppelin"
}{- "status": "ok",
- "token": "3f7b0483742b3efab97c752cc40a34dd",
- "currency": "EUR",
- "game_code": "btsl_zeppelin",
- "country": "IN",
- "player": "player_1234",
- "lang": "eng",
- "site": {
- "id": "st8casino",
}
}This callback is used by St8 system to obtain information about player from Operator's platform. It is used during game launch and rewards creation.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from St8 to Operator platform
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| site required | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| status required | |
| id required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| jurisdiction required | string (jurisdiction) Enum: "CW" "IoM" … 7 more Certain regions of the world have specific legislation in place allowing them to license and regulate companies that operate online gambling businesses or provide industry services (such as the supply of gaming software). These regions are referred to as online gambling jurisdictions or licensing jurisdictions. Return in this field jurisdiction code which has to be applied to player. |
| default_currency required | string (default_currency) Default player currency. This currency will be used for payouts and buyins, which are not directly linked to gameplay session, such as promo, jackpot, tournament payouts and entrance fees. In case of such payout or buyin, amount will be converted to default currency and sent to /payout and /buyin callbacks respectively. Therefore, Operator should provide such default currency, which they can always accept. MUST comply with ISO 4217 Alpha-3 standard. |
| reg_country required | string (reg_country) = 2 characters Country of player's registration. Country code must be in uppercase and comply with ISO 3166-1 Alpha-2 standard. |
| affiliate | string or null (affiliate) [ 2 .. 255 ] characters ID of an affiliate agent to whom player should be linked. Operator will be able to segment its players by this attribute. |
| bet_limits | string or null (bet_limits) Enum: "low" "medium" … 1 more Inform St8 system whether this is high profile player, which needs increased betting limits. If game client supports different bet limits per player, St8 will launch game with requested bet limit range. |
| birth_date | string <date> (birth_date) Player's date of birth. It is used to prevent underage gambling incidents and will be available as segmentation filter in St8 Back-Office. As defined by |
| reg_date | string <date> (reg_date) Date of player's on site registration. It is used for player scoring and will be available as segmentation filter in St8 Back-Office. As defined by |
object or null (attributes) Metadata about player, which Operator would like to see in St8 Back-Office and use for player segmentation. |
{- "player": "player_1234",
- "site": "st8casino"
}{- "status": "ok",
- "id": "player_1234",
- "jurisdiction": "CW",
- "default_currency": "EUR",
- "reg_country": "IN",
- "affiliate": "aff_5678",
- "bet_limits": "low",
- "birth_date": "1999-04-01",
- "reg_date": "2022-04-10",
- "attributes": {
- "labels": [
- "table game preference",
- "language English"
]
}
}This callback is used by St8 system to obtain player’s current balance from Operator's platform.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from St8 to Operator platform
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| site required | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| token | string (wallet_token) [ 10 .. 255 ] characters Player's gameplay session token, which was returned in /check callback or provided during game launch. This token serving as a unique identifier for the game session on the Operator's side. To ensure system integrity, it should be unique and not reused across different gaming sessions. This token will be used in the following wallet callbacks. |
| status required | |
| balance required | number <string> (balance) Current balance in player's wallet. Served as stringified float value (also known as Decimal) |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
{- "player": "player_1234",
- "currency": "EUR",
- "site": "st8casino",
- "token": "3f7b0483742b3efab97c752cc40a34dd"
}{- "status": "ok",
- "balance": "0.055",
- "currency": "EUR"
}This callback is used by St8 system to decrease current balance of player in Operator's platform.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from St8 to Operator platform
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| site required | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| token required | string (wallet_token) [ 10 .. 255 ] characters Player's gameplay session token, which was returned in /check callback or provided during game launch. This token serving as a unique identifier for the game session on the Operator's side. To ensure system integrity, it should be unique and not reused across different gaming sessions. This token will be used in the following wallet callbacks. |
| transaction_id required | string (transaction_id) Unique transaction ID within St8 system. This ID is used as idempotency key, i.e. request with the same transaction_id must not be processed more than once. |
| round required | string (round) Unique round ID within St8 system. Round is an entity that links debit and credit together indicating that these actions are related. |
| round_closed required | boolean or null (round_closed) Flag which states whether game round is still open or this transaction is closing it. |
| game_code required | string (sw_game_code) Unique game identifier in St8 system. It can be obtained from Games endpoint. Note: game code which is being sent to Operator in Seamless Wallet transactions might be different from the game code which was provided by Operator during game launch. This happens when Game Provider has their own lobby and allows players to switch from one game to another (typical behaviour for Live Dealer products). St8 tracks these changes of games and sends Operator the correct game code. |
| developer_code required | string (sw_developer_code) Unique string identifier of the game development studio. It can be obtained from Games endpoint. |
| amount required | number <string> (amount) Monetary amount of this action. Sent as stringified float value (also known as Decimal). |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| provider_kind required | string (provider_kind) Original kind of transaction sent by Provider. See the table for more details. |
required | object (provider) Information about game round on Provider's side. Original ID of transaction and round, name under which provider knows the player, information about original currency and transaction amount. Note: neither round nor transaction id from this block is unique and you shouldn't build any logic on this data. St8 provides this information as metadata. |
object or null (sw_bonus_object) Object with information about bonus, if this transaction is related to the previously issued bonuses. |
| status required | |
| balance required | number <string> (balance) Current balance in player's wallet. Served as stringified float value (also known as Decimal) |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
{- "player": "player_1234",
- "site": "st8casino",
- "token": "3f7b0483742b3efab97c752cc40a34dd",
- "transaction_id": "729a2a9c-bcfd-4c88-8056-9b4cf8a06314",
- "round": "9bbd993d9da7df60b3fd4a4ed721b082",
- "round_closed": false,
- "game_code": "btsl_zeppelin",
- "developer_code": "btsl",
- "amount": "0.05",
- "currency": "EUR",
- "provider_kind": "debit",
- "provider": {
- "transaction_id": "ZcoFAkJ2dfefOHeapj4",
- "amount": "500.0",
- "currency": "USD",
- "player": "bx08m2vrh6",
- "round": "r1q2bOHFiUxPp06dPVlbW8"
}, - "bonus": {
- "instance_id": "player_1234_bonus_1234",
- "status": "finished",
- "bonus_id": "bonus_1234"
}
}{- "status": "ok",
- "balance": "0.055",
- "currency": "EUR"
}This callback is used by St8 system to increase current balance of player in Operator's platform.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from St8 to Operator platform
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| site required | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| token required | string (wallet_token) [ 10 .. 255 ] characters Player's gameplay session token, which was returned in /check callback or provided during game launch. This token serving as a unique identifier for the game session on the Operator's side. To ensure system integrity, it should be unique and not reused across different gaming sessions. This token will be used in the following wallet callbacks. |
| transaction_id required | string (transaction_id) Unique transaction ID within St8 system. This ID is used as idempotency key, i.e. request with the same transaction_id must not be processed more than once. |
| round required | string (round) Unique round ID within St8 system. Round is an entity that links debit and credit together indicating that these actions are related. |
| round_closed required | boolean or null (round_closed) Flag which states whether game round is still open or this transaction is closing it. |
| game_code required | string (sw_game_code) Unique game identifier in St8 system. It can be obtained from Games endpoint. Note: game code which is being sent to Operator in Seamless Wallet transactions might be different from the game code which was provided by Operator during game launch. This happens when Game Provider has their own lobby and allows players to switch from one game to another (typical behaviour for Live Dealer products). St8 tracks these changes of games and sends Operator the correct game code. |
| developer_code required | string (sw_developer_code) Unique string identifier of the game development studio. It can be obtained from Games endpoint. |
| amount required | number <string> (amount) Monetary amount of this action. Sent as stringified float value (also known as Decimal). |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| provider_kind required | string (Provider Transaction Kind) Original kind of transaction sent by Provider. See the table for more details. |
required | object (provider) Information about game round on Provider's side. Original ID of transaction and round, name under which provider knows the player, information about original currency and transaction amount. Note: neither round nor transaction id from this block is unique and you shouldn't build any logic on this data. St8 provides this information as metadata. |
object or null (sw_bonus_object) Object with information about bonus, if this transaction is related to the previously issued bonuses. |
| status required | |
| balance required | number <string> (balance) Current balance in player's wallet. Served as stringified float value (also known as Decimal) |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
{- "player": "player_1234",
- "site": "st8casino",
- "token": "3f7b0483742b3efab97c752cc40a34dd",
- "transaction_id": "729a2a9c-bcfd-4c88-8056-9b4cf8a06314",
- "round": "9bbd993d9da7df60b3fd4a4ed721b082",
- "round_closed": false,
- "game_code": "btsl_zeppelin",
- "developer_code": "btsl",
- "amount": "0.05",
- "currency": "EUR",
- "provider_kind": "free_credit",
- "provider": {
- "transaction_id": "ZcoFAkJ2dfefOHeapj4",
- "amount": "500.0",
- "currency": "USD",
- "player": "bx08m2vrh6",
- "round": "r1q2bOHFiUxPp06dPVlbW8"
}, - "bonus": {
- "instance_id": "player_1234_bonus_1234",
- "status": "finished",
- "bonus_id": "bonus_1234"
}
}{- "status": "ok",
- "balance": "0.055",
- "currency": "EUR"
}This callback is used by St8 system to revert any effect made by referenced transaction to player's balance in Operator's platform.
If Operator receives transaction_id which hasn't been processed before, the transaction_id must be saved to prevent it from being processed later.
Due to specific behaviour of different game providers there might be two different payloads for this call:
full - where we send session token, player id, round, etc.limited - where we send only transaction ID of the transaction that has to be reverted.See examples of different payload below.
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from St8 to Operator platform
| cancel_id required | string (cancel_id) Unique ID of cancel action. |
| transaction_id required | string (reference_transaction_id) ID of transaction effect of which has to be canceled. Note, that it could be ID of either debit or credit transaction. Depending on the type of referenced transaction, player’s balance has to be either increased or decreased accordingly. |
| round required | string (round) Unique round ID within St8 system. Round is an entity that links debit and credit together indicating that these actions are related. |
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| token required | string (wallet_token) [ 10 .. 255 ] characters Player's gameplay session token, which was returned in /check callback or provided during game launch. This token serving as a unique identifier for the game session on the Operator's side. To ensure system integrity, it should be unique and not reused across different gaming sessions. This token will be used in the following wallet callbacks. |
| amount required | number <string> (amount) Monetary amount of this action. Sent as stringified float value (also known as Decimal). |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| site required | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| developer_code required | string (sw_developer_code) Unique string identifier of the game development studio. It can be obtained from Games endpoint. |
sw_game_code (string) or null |
| status required | |
| balance required | number <string> (balance) Current balance in player's wallet. Served as stringified float value (also known as Decimal) |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
{- "cancel_id": "10aec35353f9c4096a71c38654c3d402",
- "transaction_id": "729a2a9c-bcfd-4c88-8056-9b4cf8a06314",
- "round": "9bbd993d9da7df60b3fd4a4ed721b082",
- "player": "player_1234",
- "token": "3f7b0483742b3efab97c752cc40a34dd",
- "amount": "0.05",
- "currency": "EUR",
- "site": "st8casino",
- "developer_code": "btsl",
- "game_code": "btsl_zeppelin"
}{- "status": "ok",
- "balance": "0.055",
- "currency": "EUR"
}This callback is used by St8 system to decrease player's current balance on Operator's platform. It's different from regular debit as it's not related to gameplay session (e.g. campaign or tournament entrance fee).
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from St8 to Operator platform
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| site required | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| transaction_id required | string (transaction_id) Unique transaction ID within St8 system. This ID is used as idempotency key, i.e. request with the same transaction_id must not be processed more than once. |
| amount required | number <string> (amount) Monetary amount of this action. Sent as stringified float value (also known as Decimal). |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
sw_game_code (string) or null | |
| developer_code required | string (sw_developer_code) Unique string identifier of the game development studio. It can be obtained from Games endpoint. |
| provider_kind required | string (Provider Transaction Kind) Original kind of transaction sent by Provider. See the table for more details. |
object (provider) Information about game round on Provider's side. Original ID of transaction and round, name under which provider knows the player, information about original currency and transaction amount. Note: neither round nor transaction id from this block is unique and you shouldn't build any logic on this data. St8 provides this information as metadata. |
| status required | |
| balance required | number <string> (balance) Current balance in player's wallet. Served as stringified float value (also known as Decimal) |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
{- "player": "player_1234",
- "site": "st8casino",
- "transaction_id": "729a2a9c-bcfd-4c88-8056-9b4cf8a06314",
- "amount": "0.05",
- "currency": "EUR",
- "game_code": "btsl_zeppelin",
- "developer_code": "btsl",
- "provider_kind": "correction_debit",
- "provider": {
- "transaction_id": "ZcoFAkJ2dfefOHeapj4",
- "amount": "500.0",
- "currency": "USD",
- "player": "bx08m2vrh6",
- "round": "r1q2bOHFiUxPp06dPVlbW8"
}
}{- "status": "ok",
- "balance": "0.055",
- "currency": "EUR"
}This callback is used by St8 system to increase player's current balance on Operator's platform. It's different from regular credit as it's not related to gameplay session (e.g. campaign or tournament payout).
| x-st8-sign required | string Example: MEUCIG4Sv41BkjrkWTdbrmLFQnNLihc...n00jjA=
In case of GET request encoded query string is considered as payload, and for POST requests body is considered as payload. For more details see here |
Payload of request from St8 to Operator platform
| player required | string (player) [ 1 .. 255 ] characters Unique player ID (case-sensitive) on Operator's platform. |
| site required | string (site) Operator's site where game is being played. The same site which was returned from /check callback. |
| transaction_id required | string (transaction_id) Unique transaction ID within St8 system. This ID is used as idempotency key, i.e. request with the same transaction_id must not be processed more than once. |
| amount required | number <string> (amount) Monetary amount of this action. Sent as stringified float value (also known as Decimal). |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
sw_game_code (string) or null | |
| developer_code required | string (sw_developer_code) Unique string identifier of the game development studio. It can be obtained from Games endpoint. |
| provider_kind required | string (Provider Transaction Kind) Original kind of transaction sent by Provider. See the table for more details. |
object (provider) Information about game round on Provider's side. Original ID of transaction and round, name under which provider knows the player, information about original currency and transaction amount. Note: neither round nor transaction id from this block is unique and you shouldn't build any logic on this data. St8 provides this information as metadata. | |
object or null (sw_bonus_object) Object with information about bonus, if this transaction is related to the previously issued bonuses. |
| status required | |
| balance required | number <string> (balance) Current balance in player's wallet. Served as stringified float value (also known as Decimal) |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
{- "player": "player_1234",
- "site": "st8casino",
- "transaction_id": "729a2a9c-bcfd-4c88-8056-9b4cf8a06314",
- "amount": "0.05",
- "currency": "EUR",
- "game_code": "btsl_zeppelin",
- "developer_code": "btsl",
- "provider_kind": "free_credit",
- "provider": {
- "transaction_id": "ZcoFAkJ2dfefOHeapj4",
- "amount": "500.0",
- "currency": "USD",
- "player": "bx08m2vrh6",
- "round": "r1q2bOHFiUxPp06dPVlbW8"
}, - "bonus": {
- "instance_id": "player_1234_bonus_1234",
- "status": "finished",
- "bonus_id": "bonus_1234"
}
}{- "status": "ok",
- "balance": "0.055",
- "currency": "EUR"
}Our Testing Tool is an essential part of integrating with our API service. It allows operators to thoroughly test API functionality, performance, and compatibility before production deployment. Additionally, it serves as an assistance tool during the integration process, aiding operators in debugging and troubleshooting.
Key features include endpoint testing, request customization, response validation, performance evaluation, security testing, and automation support.
The St8 team will provide operators with access to the Testing Tool web page during onboarding.
Upon completing the wallet integration, operators may wish to establish consistent quality control measures to ensure compliance with the latest ST8 requirements. To facilitate this objective, operators may integrate ST8 testing tool to their development processes using following API
List the available tests cases. Pay attention which tests are mandatory.
| Authorization required | string Example: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== Basic Auth credentials to authorize in the Testing tool. Use username and password which are shared by St8 team during onboarding process |
Array of objects |
{- "tests": [
- {
- "code": "get_balance",
- "description": "Operator should be able to respond to balance request.",
- "mandatory": true,
- "name": "Basic Balance request"
}
]
}The following process describes how Operator can run specific list of tests
| Authorization required | string Example: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== Basic Auth credentials to authorize in the Testing tool. Use username and password which are shared by St8 team during onboarding process |
Payload of request from Operator platform to St8 Testing tool
required | Array of strings or string List of test codes. Can be obtained from Tests API. Alternatively keywords |
| player required | string Player ID which will be used in test scenarios |
| currency required | string (currency) Current currency code in player's active wallet. MUST comply with ISO 4217 Alpha-3 standard. |
| game_code1 required | string Game code to be sent within test scenarios. Should be set to anything, that Operator will accept. |
| game_code2 required | string Alternative game_code to be sent within test scenarios. Should be set to anything, that Operator will accept. Cannot be the same value as game_code1. |
| token required | string [ 10 .. 255 ] characters Token to be sent within test scenarios. Should be set to anything, that Operator will accept. |
| callback required | string Callback URL for calls from the Testing tool.
For example, if Operator's callback is |
| status required | string Enum: "success" "failed" |
required | object Tests scenarios and their results |
{- "tests": [
- "get_balance"
], - "player": "testuser123",
- "currency": "EUR",
- "game_code1": "btsl_zeppelin",
- "game_code2": "evo_crazy_time",
- "token": "3f7b0483742b3efab97c752cc40a34dd",
}{- "status": "success",
- "tests": {
- "test_code": {
- "status": "failed",
- "expected": {
- "balance": "Example: \"10.0\"",
- "currency": "EUR",
- "status": "ok"
}, - "received": {
- "body": {
- "status": "user not found"
}, - "status": 404
}
}
}
}