Seamless Wallet API Integration
Documentation 2.30
Latest update: 26/08/2024
API version 2.30
1. Integration API
1.1 API Details
This is an API for Casino Operator to integrate with the wallet system. API is an HTTP listener, which listens to POST requests coming to a URL with the request mappings below.
All requests should contain header “Content-Type: application/json”
Http Methods: POST
APIUrl, AgentCode, SecretKey will be provided by seamless.
You may refer to the “BO > API Info” page to know what the APIUrl is.
CallbackURL needs to be provided by the operator.
Kindly refer to Integration API 1.2 and 1.3 for its intended purpose.
Casino Operator do not have to provide IP Address for whitelist purpose. Whitelist IP is not required.
Kindly use UTC+0 for all DateTime values
Please take note that during the staging phase, certain products will result in “Product under maintenance”, in those instances, kindly use another ProductID to test that specific game type.
You may refer to the “BO > API Info” page to know what product is opened for testing. You may also change the callback URL in "BO > API Info" page.
The credential for BO login will be sent out by the related department accordingly.
As of now, a set of desingated products are opened for testing in staging environment. Hence, the requested products in the API Request Form will not necessarily appear in staging. Therefore, please test the available products only, and do feedback if there are products you insist on testing in staging environment. Then, we will verify if the product is available for testing in staging environment.
Kindly take note that currency is fixed to IDR for the staging environment. It will be set to the requested currency in the production environment. Hence, kindly ignore it during staging.
Operator must implement all APIs in section “2. Seamless API” in their end; Since these APIs will be called by Seamless to the operator side to perform specific actions, such as GetBalance, or PlaceBet etc.
APIs under section “3. Operator API” are APIs that are available for operators to call. E.g. Operators may call the 3.1 LaunchGame API to access a specific product.

However, please take note for APIs related to Pull Report, or obtain bet records functionality. Namely 3.2 Pull Report, 3.3 Pull Report By SettlementDate, 3.6 Pull Report By Wager IDs, 3.7 Pull Pending Records, 3.8 Fetch Records, and 3.9 Mark Records. you can only access 1 of these APIs 1 at a time, you cannot call any 2 of these APIs at the same time, or do 2 API request to the same API at the same time, you will encounter an error if you do so.
Once operators have completed the integration. Kindly use the test page link below to verify the integration’s correctness:

Link: https://swmd.6633663.com/testcase/index2

Agent URL: (Your callback URL)
AgentCode: (username that is used to login into staging BO)
MemberName: (Your unique identifier of the player in your system)
SecretKey: (Refer to the staging credential for the secretKey)
ProductID: (Refer to BO -> API Info Page to know which ProductID is opened and can be used)
MemberPassword: (Your password for the player)

Feel free to revert to us in the Telegram if you require our assistance on how to run the test page properly.

On the other hand, before moving on to production after passing the test cases in the link above, please ensure that your side has tested launchGame API, and your side can:
1) Successfully enter the game pages
2) Successfully place normal bet
3) Successfully obtain game result from previously placed normal bet
Signature Generation:
Signature = MD5(OperatorCode + RequestTime + MethodName +SecretKey)
 
Method Name in lower case eg:
Get Balance:
MD5(OperatorCode + RequestTime + getbalance +SecretKey)
 
Place Bet:
MD5(OperatorCode + RequestTime + placebet +SecretKey)
 
Sample using GetBalance:
MD5(ABCD + 20230315104218 + getbalance + ABCD1234)
Sign: c59866786cdd569b63e2bf3dde3da9e1
 
1.2 Player, Operator, and Seamless Initialization Flow
 
1.3 Provider, Seamless, and Operator general flow
Remark:
  • Flow is the same for other actions such as CancelBet/GameResult etc, listed in section 2. Seamless API.
 
2. Seamless API
2.1 Get Balance
Request Path: (CallbackURL)/Seamless/GetBalance
Remark:
  • This API is event-driven by the provider. Whenever a provider wants to get balance for a specific player, seamless will call this API in operator.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless No
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "MemberName": "6b9cb11982674e4b8ba8b3047af0fd26",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221026092029303_6b9cb11982674e4b8ba8b3047af0fd26",
 "Sign": "6a866431f73685b6998156b8fe5ade56",
 "RequestTime": "20221026092030"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 96.95,
  "BeforeBalance": 0
}
                    
 
2.2 Place Bet
Request Path: (CallbackURL)/Seamless/PlaceBet
Remark:
  • This API is event-driven by the provider. Whenever a player wants to place a bet, the provider will call seamless, and seamless in turn will call this API in operator.
  • If the TransactionID is not empty and exists in the operator system, please return a duplicate transaction.
  • Same WagerID can be sent multiple times with different TransactionID.
  • BetAmount will be sent as the latest total bet of the wager. (Kindly take note to always use = instead of += when recording the BetAmount)
  • TransactionAmount is the amount that needs to be deducted from the player wallet.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless Yes
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Transactions List< Transaction> List of transaction object
Kindly refer to Model 4.1 for the details of the transaction
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
BeforeBalance Decimal Previous Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "Transactions": [
  {
   "MemberID": 0,
   "OperatorID": 0,
   "ProductID": 1002,
   "ProviderID": 0,
   "ProviderLineID": 0,
   "WagerID": 221027032644145,
   "CurrencyID": 1,
   "GameType": 2,
   "GameID": "TestGame",
   "GameRoundID": "221027032644145",
   "ValidBetAmount": 10,
   "BetAmount": 10,
   "TransactionAmount": -10,
   "TransactionID": "221027032644145_1",
   "PayoutAmount": 0,
   "PayoutDetail": null,
   "CommissionAmount": 0,
   "JackpotAmount": 0,
   "SettlementDate": null,
   "JPBet": 0,
   "Status": 100,
   "CreatedOn": "2022-10-27T03:26:44.145248Z",
   "ModifiedOn": "2022-10-27T03:26:44.145248Z"
  }
 ],
 "MemberName": "TESTER",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221027032644145_ TESTER ",
 "Sign": "369af7416deef76a9cc4f019b8559f99",
 "RequestTime": "20221027032644"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 86.95,
  "BeforeBalance": 96.95
}
                    
 
2.3 Game Result
Request Path: (CallbackURL)/Seamless/GameResult
Remark:
  • This API is event-driven by the provider. Whenever a provider wants to settle a wage for a specific player, seamless will call this API in operator.
  • If the TransactionID is not empty and exists in the operator system, please return a duplicate transaction.
  • Same WagerID can be sent multiple times with different TransactionID. However, please check if the WagerID exists, if it doesn't exist, please return bet does not exists and do not process the gameResult.
  • PayoutAmount will be sent as the latest total payout of the wager. (Kindly take note to always use = instead of += when recording the PayoutAmount)
  • TransactionAmount is the amount that needs to be adjusted into the player's wallet, please take note it can be negative or positive value due to direct resettlement. Kindly refer to Appendix 5.7 for more details.
  • Kindly refer to Appendix 5.7 for the difference between GameResult, Jackpot and Bonus.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless Yes
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Transactions List< Transaction> List of transaction object
Kindly refer to Model 4.1 for the details of the transaction
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
BeforeBalance Decimal Previous Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "Transactions": [
  {
   "MemberID": 0,
   "OperatorID": 0,
   "ProductID": 1002,
   "ProviderID": 0,
   "ProviderLineID": 0,
   "WagerID": 221027032644145,
   "CurrencyID": 1,
   "GameType": 2,
   "GameID": "TestGame",
   "GameRoundID": "221027032644145",
   "ValidBetAmount": 10,
   "BetAmount": 10,
   "TransactionAmount": 10,
   "TransactionID": "221027032644145_2",
   "PayoutAmount": 10,
   "PayoutDetail": null,
   "CommissionAmount": 0,
   "JackpotAmount": 0,
   "SettlementDate": "2022-10-27T03:26:44.3437171Z",
   "JPBet": 0,
   "Status": 101,
   "CreatedOn": "2022-10-27T03:26:44.3437171Z",
   "ModifiedOn": "2022-10-27T03:26:44.3437171Z"
  }
 ],
 "MemberName": "TESTER",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221027032644343_ TESTER ",
 "Sign": "cb83e5e4a465a7154e1b838d6ff403fc",
 "RequestTime": "20221027032644"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 96.95,
  "BeforeBalance": 86.95
}
                    
 
2.4 Rollback
Request Path: (CallbackURL)/Seamless/Rollback
Remark:
  • This API is event-driven by the provider. Whenever a provider wants to rollback a win for a specific player, seamless will call this API in operator.
  • If the TransactionID is not empty and exists in the operator system and has been refunded previously, please return a duplicate transaction.
  • WagerID might be empty, please check with transactionID.
  • TransactionAmount is the amount that needs to be deducted from the player wallet.
  • Please take note, on certain cases, Rollback API can also be used for bet adjustments, where provider wants to refund a specific amount from the bet amount back to the player, while keeping the bet active and not cancelling it. Kindly refer to Appendix 5.7 for a bet adjustment example, and cancel win example.
  • In addition, please take note of the status regarding the bet. Since certain providers will void an entire bet while requiring us to calculate the amount that needs to be deducted/refunded from the player's wallet. In which, we will use Rollback API to reverse the entire bet's transactions including its payout. Kindly refer to Appendix 5.7 for Reverse Bet Transactions using Rollback API examples.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless Yes
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Transactions List< Transaction> List of transaction object
Kindly refer to Model 4.1 for the details of the transaction
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
BeforeBalance Decimal Previous Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "Transactions": [
  {
   "MemberID": 0,
   "OperatorID": 0,
   "ProductID": 1002,
   "ProviderID": 0,
   "ProviderLineID": 0,
   "WagerID": 221027032645244,
   "CurrencyID": 1,
   "GameType": 2,
   "GameID": "TestGame",
   "GameRoundID": "221027032645244",
   "ValidBetAmount": 10,
   "BetAmount": 10,
   "TransactionAmount": -10,
   "TransactionID": "221027032645244_3",
   "PayoutAmount": 0,
   "PayoutDetail": null,
   "CommissionAmount": 0,
   "JackpotAmount": 0,
   "SettlementDate": "null",
   "JPBet": 0,
   "Status": 100,
   "CreatedOn": "2022-10-27T03:26:45.6532539Z",
   "ModifiedOn": "2022-10-27T03:26:45.6532539Z"
  }
 ],
 "MemberName": "TESTER",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221027032645653_ TESTER ",
 "Sign": "cb06c77e47921f822a11d16eb5afdade",
 "RequestTime": "20221027032645"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 86.95,
  "BeforeBalance": 96.95
}
                    
 
2.5 Cancel Bet
Request Path: (CallbackURL)/Seamless/CancelBet
Remark:
  • This API is event-driven by the provider. Whenever a provider wants to cancel a bet for a specific player due to unknown error, such as network issue, seamless will call this API in operator.
  • If the TransactionID is not empty and exists in the operator system and has been refunded previously, please return a duplicate transaction.
  • WagerID might be empty, please check with transactionID.
  • TransactionAmount is the amount that needs to be credited back into the player wallet.
  • Kindly refer to Appendix 5.7 about cancel bet status.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless Yes
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Transactions List< Transaction> List of transaction object
Kindly refer to Model 4.1 for the details of the transaction
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
BeforeBalance Decimal Previous Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "Transactions": [
  {
   "MemberID": 0,
   "OperatorID": 0,
   "ProductID": 1002,
   "ProviderID": 0,
   "ProviderLineID": 0,
   "WagerID": 221027032647591,
   "CurrencyID": 1,
   "GameType": 2,
   "GameID": "TestGame",
   "GameRoundID": "221027032647591",
   "ValidBetAmount": 0,
   "BetAmount": 0,
   "TransactionAmount": 10,
   "TransactionID": "221027032647591_2",
   "PayoutAmount": 0,
   "PayoutDetail": null,
   "CommissionAmount": 0,
   "JackpotAmount": 0,
   "SettlementDate": "2022-10-27T03:26:47.7607866Z",
   "JPBet": 0,
   "Status": 102,
   "CreatedOn": "2022-10-27T03:26:47.7607866Z",
   "ModifiedOn": "2022-10-27T03:26:47.7607866Z"
  }
 ],
 "MemberName": "TESTER",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221027032647760_ TESTER ",
 "Sign": "6ae2642c9d419182c39d95b983980f69",
 "RequestTime": "20221027032647"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 96.95,
  "BeforeBalance": 86.95
}
                    
 
2.6 Bonus
Request Path: (CallbackURL)/Seamless/Bonus
Remark:
  • This API is event-driven by the provider. When there is a bonus or promotional payout, provider will call to this API for the additional payouts acquired from the bonus/promotion, resulting in seamless will call this API to the operator, to perform the action described earlier.
  • TransactionAmount is the amount that needs to be credited into the player wallet, it will always be positive for Bonus. The bet status will also be directly 101 = Bet_Settled
  • Kindly refer to Appendix 5.7 for the difference between GameResult, Jackpot and Bonus.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless Yes
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Transactions List< Transaction> List of transaction object
Kindly refer to Model 4.1 for the details of the transaction
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
BeforeBalance Decimal Previous Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "Transactions": [
  {
   "MemberID": 0,
   "OperatorID": 0,
   "ProductID": 1002,
   "ProviderID": 0,
   "ProviderLineID": 0,
   "WagerID": 221027032652728,
   "CurrencyID": 1,
   "GameType": 11,
   "GameID": "TestGame",
   "GameRoundID": "",
   "ValidBetAmount": 0,
   "BetAmount": 0,
   "TransactionAmount": 10,
   "TransactionID": "221027032652728_1",
   "PayoutAmount": 10,
   "PayoutDetail": null,
   "CommissionAmount": 0,
   "JackpotAmount": 0,
   "SettlementDate": "2022-10-27T03:26:52.7280019Z",
   "JPBet": 0,
   "Status": 101,
   "CreatedOn": "2022-10-27T03:26:52.7280019Z",
   "ModifiedOn": "2022-10-27T03:26:52.7280019Z"
  }
 ],
 "MemberName": "TESTER",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221027032652728_ TESTER ",
 "Sign": "7491c3e8563d228ed8b8b460d0aa6592",
 "RequestTime": "20221027032652"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 106.95,
  "BeforeBalance": 96.95
}
                    
 
2.7 Jackpot
Request Path: (CallbackURL)/Seamless/Jackpot
Remark:
  • This API is event-driven by the provider. When there is a Jackpot payout, where provider will call to this API for the payouts acquired from jackpots. Please take note, not all jackpots appear in the game screen counts as jackpot, we differentiate by how the provider differentiates it.
  • E.g. if player encounters an in-game jackpot in a slot game, but provider does not considers it as jackpot, and only considers it as a normal spin, and game result, then we will do the same, and not call to this jackpot API.
  • TransactionAmount is the amount that needs to be credited into the player wallet, it will always be positive for Jackpot.
  • Kindly refer to Appendix 5.7 for the difference between GameResult, Jackpot and Bonus.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless Yes
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Transactions List< Transaction> List of transaction object
Kindly refer to Model 4.1 for the details of the transaction
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
BeforeBalance Decimal Previous Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "Transactions": [
  {
   "MemberID": 0,
   "OperatorID": 0,
   "ProductID": 1002,
   "ProviderID": 0,
   "ProviderLineID": 0,
   "WagerID": 221027032653618,
   "CurrencyID": 1,
   "GameType": 12,
   "GameID": "TestGame",
   "GameRoundID": "",
   "ValidBetAmount": 0,
   "BetAmount": 0,
   "TransactionAmount": 10,
   "TransactionID": "221027032653618_1",
   "PayoutAmount": 10,
   "PayoutDetail": null,
   "CommissionAmount": 0,
   "JackpotAmount": 10,
   "SettlementDate": "2022-10-27T03:26:53.6180869Z",
   "JPBet": 0,
   "Status": 101,
   "CreatedOn": "2022-10-27T03:26:53.6180869Z",
   "ModifiedOn": "2022-10-27T03:26:53.6180869Z"
  }
 ],
 "MemberName": "TESTER",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221027032653618_ TESTER ",
 "Sign": "8c216b4e0889f1e0037b0e3858eb13ba",
 "RequestTime": "20221027032653"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 116.95,
  "BeforeBalance": 106.95
}
                    
 
2.8 Mobile Login
Request Path: (CallbackURL)/Seamless/MobileLogin
Remark:
  • This API is event-driven by the provider when there is a player that intends to access the provider’s game via mobile. In this case, provider will call this API for the specific player mobile login, resulting in seamless will call this API in operator for mobile login of the specific player.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless Yes
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Password String Player’s password in operator Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "Password": "TESTERPASSWORD",
 "MemberName": "TESTER",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221027032703750_ TESTER ",
 "Sign": "6189b54f7b53093b593930dc5cd58bfd",
 "RequestTime": "20221027032703"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 116.95,
  "BeforeBalance": 0
}
                    
 
2.9 Buy In
Request Path: (CallbackURL)/Seamless/BuyIn
Remark:
  • This API is event-driven by the provider. When there is only a transaction to deduct the player’s wallet, seamless will call this API in operator. In addition, there are 2 types of scenarios that can result in this API call.
  • Scenario A: There is no bet detail associated with the bet transaction, such as which game round does the bet belong to. In this case, we will request your side to deduct the player’s wallet for the transaction to pass and for the bet in the game to proceed. Later on, there will be a Push Bet API call to your side, to “push” the bet details that is meant to reflect the transaction that was done in the BuyIn API Call.
  • Scenario B: It is a normal deposit action, whereby a certain amount of the player’s wallet is transferred into a provider’s game.
  • WagerID is empty, please check with TransactionID. If the TransactionID is not empty and exists in the operator system, please return a duplicate transaction.
  • TransactionAmount is the amount that needs to be deducted from the player wallet, it will be a negative value.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless Yes
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Transaction Transaction Single transaction object
Kindly refer to Model 4.1 for the details of the transaction
Yes
CheckLimit Bool Check buy in limit
Default is false
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
BeforeBalance Decimal Previous Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "CheckLimit": false,
 "Transaction": {
   "MemberID": 0,
   "OperatorID": 0,
   "ProductID": 1002,
   "ProviderID": 0,
   "ProviderLineID": 0,
   "WagerID": 0,
   "CurrencyID": 1,
   "GameType": 8,
   "GameID": "TestGame",
   "GameRoundID": "null",
   "ValidBetAmount": 0,
   "BetAmount": 0,
   "TransactionAmount": -10,
   "TransactionID": "221027032654583_1",
   "PayoutAmount": 0,
   "PayoutDetail": null,
   "CommissionAmount": 0,
   "JackpotAmount": 0,
   "SettlementDate": "null",
   "JPBet": 0,
   "Status": 0,
   "CreatedOn": "2022-10-27T03:26:54.5835409Z",
   "ModifiedOn": "2022-10-27T03:26:54.5835409Z"
  },
 "MemberName": "TESTER",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221027032654583_ TESTER ",
 "Sign": "1681e098ac447156e6c00b18ab99b359",
 "RequestTime": "20221027032654"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 106.95,
  "BeforeBalance": 116.95
}
                    
 
2.10 Buy Out
Request Path: (CallbackURL)/Seamless/BuyOut
Remark:
  • This API is event-driven by the provider. When there is only a transaction to increase the player’s wallet, seamless will call this API in operator. There are 2 types of scenarios that can result in this API call.
  • Scenario A: There is no bet detail associated with the payout transaction, such as which game round does the payout belong to. In this case, we will request your side to increase the player’s wallet for the transaction to pass and for the payout in the game to proceed. Later on, there will be a Push Bet API call to your side, to “push” the bet details that is meant to reflect the transaction that was done in the BuyOut API Call.
  • Scenario B: It is a normal withdrawal action, whereby a certain amount of the player’s wallet that was deposited previously into a specific provider’s game, is now transferred back into the player’s wallet.
  • WagerID might be empty, please check with TransactionID. If the TransactionID is not empty and exists in the operator system, please return a duplicate transaction.
  • TransactionAmount is the amount that needs to be credited into the player wallet, it will be a positive value.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless Yes
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Transaction Transaction Single transaction object
Kindly refer to Model 4.1 for the details of the transaction
Yes
IsAddWager Bool Identifier to check if a wage record is added during buyout
Default is false
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
BeforeBalance Decimal Previous Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "IsAddWager": false,
 "Transaction": {
   "MemberID": 0,
   "OperatorID": 0,
   "ProductID": 1002,
   "ProviderID": 0,
   "ProviderLineID": 0,
   "WagerID": 0,
   "CurrencyID": 1,
   "GameType": 8,
   "GameID": "TestGame",
   "GameRoundID": "null",
   "ValidBetAmount": 0,
   "BetAmount": 0,
   "TransactionAmount": 10,
   "TransactionID": "221027032702116_1",
   "PayoutAmount": 0,
   "PayoutDetail": null,
   "CommissionAmount": 0,
   "JackpotAmount": 0,
   "SettlementDate": "null",
   "JPBet": 0,
   "Status": 0,
   "CreatedOn": "2022-10-27T03:27:02.1162202Z",
   "ModifiedOn": "2022-10-27T03:27:02.1162202Z"
  },
 "MemberName": "TESTER",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221027032702116_ TESTER ",
 "Sign": "0066768f0ae65684c340956b96c6d839",
 "RequestTime": "20221027032702"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 116.95,
  "BeforeBalance": 106.95
}
                    
 
2.11 Push Bet
Request Path: (CallbackURL)/Seamless/PushBet
Remark:
  • This API is event-driven by the provider. When there is a BuyIn or BuyOut API call meant for a bet or payout transaction with no bet detail associated with those API calls. Hence, this PushBet API call will “push” those bet details to operator side, so that operator side will have the bet details that reflect the transaction done in the BuyIn/BuyOut API calls. In short, seamless will call this API in operator, so that operator side has the win/loss record from the transactions done in the BuyIn/BuyOut API calls accordingly.
  • Please take note that this API is not meant for transactions. Please do not perform any transactions upon receiving this API call. It is only intended for pushing win/loss records to the operator.
  • Please note that this “PushBet” is not an immediate process, it takes time for the data to be pushed. In addition, there is unfortunately no way for us to map which BuyIn/BuyOut API call belongs to which bet detail, as there is no specific ID from the provider that we can use for this mapping.
Request Parameters:
Parameter Type Description Required
MemberName String Player's unique identifier for operator Yes
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Long Unique identifier for products in seamless Yes
MessageID String Unique identifier for the current API request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Sign String Signature of the request
Kindly refer to Integration API 1.1 for signature generation
Yes
Transactions List< Transaction> List of transaction object
Kindly refer to Model 4.1 for the details of the transaction
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response Yes
ErrorMessage String Message of the response Yes
Balance Decimal Final Credit Balance
Kindly return 4 decimal places
Yes
Sample Request body from Seamless:
{
 "Transactions": [
  {
   "MemberID": 0,
   "OperatorID": 0,
   "ProductID": 1002,
   "ProviderID": 0,
   "ProviderLineID": 0,
   "WagerID": 221027032702775,
   "CurrencyID": 1,
   "GameType": 1,
   "GameID": "TestGame",
   "GameRoundID": "221027032702775",
   "ValidBetAmount": 10,
   "BetAmount": 10,
   "TransactionAmount": 0,
   "TransactionID": "null",
   "PayoutAmount": 20,
   "PayoutDetail": null,
   "CommissionAmount": 0,
   "JackpotAmount": 0,
   "SettlementDate": "2022-10-27T03:27:02.7754423Z",
   "JPBet": 0,
   "Status": 101,
   "CreatedOn": "2022-10-27T03:27:02.7754423Z",
   "ModifiedOn": "2022-10-27T03:27:02.7754423Z"
  }
 ],
 "MemberName": "TESTER",
 "OperatorCode": "ABCD",
 "ProductID": 1002,
 "MessageID": "221027032702775_ TESTER ",
 "Sign": "null",
 "RequestTime": "null"
}
                    
Expected Response From Operator:
{
  "ErrorCode": 0,
  "ErrorMessage": "Success",
  "Balance": 116.95,
  "BeforeBalance": 0
}
                    
 
3. Operator API
3.1 Launch Game
Request Path: (ApiUrl)/Seamless/LaunchGame
Remark:
  • This API is event-driven by operator. Whenever an operator wants to launch a game, kindly call this API in Seamless.
  • Seamless will automatically register new players via this API call.
  • The MemberName parameter will be used for the operator to identify the player whenever seamless calls to the operator side.
Request Parameters:
Parameter Type Description Required
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
MemberName String Player's unique identifier for operator Yes
DisplayName String Player’s display name No
Password String Player’s password in operator No
GameID String Unique provider game code
Kindly refer to Operator API 3.4 to obtain the GameID
No
ProviderGameType String Provider Game Type that is required to launch specific provider's games.
Kindly refer to Operator API 3.4 to obtain the ProviderGameType, and know if there is a value for it.
No
ProductID Int Unique identifier for products in seamless
Kindly refer to “BO > API Info” page for the product code
Yes
GameType Int Game Type
Kindly refer to Appendix 5.6 for the game types
Yes
LanguageCode Int Language Code
Kindly refer to Appendix 5.4 for the language code
Yes
Platform Int Platform
Kindly refer to Appendix 5.5 for the platform code
Yes
IPAddress String IP Address of the player Yes
OperatorLobbyURL String Parameter to store the URL of operator's home page, to redirect player to operator's home page.
Kindly refer to Appendix 5.7 to know which provider allow redirect to operator's home page.
No
Sign String Signature of the request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response
Kindly refer to Appendix 5.1 for the error code
Yes
ErrorMessage String Message of the response Yes
Url String Url of the game No
Sample Request body from Operator:
{
  "OperatorCode": "ABCD",
  "MemberName": "TESTER",
  "Password": "TESTERPASSWORD",
  "ProductID": "1091",
  "GameType": "1",
  "LanguageCode": "1",
  "Platform": "0",
  "Sign": "e2c7650619bdc2bf36458122d27b8cc9",
  "RequestTime": "20230315104218"
}
                    
Expected Response From Seamless:
{
  "Url": "https://uat-wbgame.jlfafafa3.com/fish/index.html?ssoKey=1F-7cL8o7EHrehZrCCW-l-23tok&lang=en-US&apiId=1441&be=moc.teertsmsti.ipabewbw-tau&domain_gs=teertsmsti&domain_platform=moc.teertsmsti.df-tolsbw-tau&gameId=1&gs=teertsmsti&iu=true",
  "ErrorCode": 0,
  "ErrorMessage": null
}
                    
 
3.2 Pull Report
Request Path: (ApiUrl)/Seamless/PullReport
Remark:
  • This API is event-driven by operator. Whenever an operator wants to pull a report to view the unsettle and settled wage records within a specified period, kindly call this API in Seamless.
  • Kindly use a maximum of 5 minutes interval between the StartDate and EndDate to prevent heavy load on our server. Otherwise, we will respond error to your API call if you do not adhere to this rule.
Request Parameters:
Parameter Type Description Required
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
StartDate String StartDate of the Bet Time Search Range
DateTime in the format yyyy-mm-dd HH:mm:ss
Yes
EndDate String EndDate of the Bet Time Search Range
DateTime in the format yyyy-mm-dd HH:mm:ss
Yes
Sign String Signature of the request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response
Kindly refer to Appendix 5.1 for the error code
Yes
ErrorMessage String Message of the response Yes
Wagers List< Wager> List of Wagers
Kindly refer to Model 4.2 for the details of each wager
No
Sample Request body from Operator:
{
  "OperatorCode": "ABCD",
  "StartDate": "2023-01-04 08:13:00",
  "EndDate": "2023-01-04 08:18:00",
  "Sign": "6556451b8da3d674eb3c1730bbf6a533",
  "RequestTime": "20230315104218"
}
                    
Expected Response From Seamless:
{
  "Wagers": [
    {
      "MemberName": "demo_jili",
      "ProductID": 1091,
      "WagerID": 1111,
      "CurrencyID": 8,
      "GameType": 1,
      "GameID": "135",
      "GameRoundID": "1661394429190876135",
      "ValidBetAmount": 1,
      "BetAmount": 1,
      "PayoutAmount": 0,
      "CommissionAmount": 0,
      "JackpotAmount": 0,
      "SettlementDate": "2023-01-04T08:14:55",
      "JPBet": 0,
      "Status": 101,
      "CreatedOn": "2023-01-04T08:13:35",
      "ModifiedOn": "2023-01-04T08:14:55"
    },
    {
      "MemberName": "demo_jili",
      "ProductID": 1091,
      "WagerID": 2222,
      "CurrencyID": 8,
      "GameType": 8,
      "GameID": "119",
      "GameRoundID": "424589082685896823",
      "ValidBetAmount": 12,
      "BetAmount": 12,
      "PayoutAmount": 16,
      "CommissionAmount": 0,
      "JackpotAmount": 0,
      "SettlementDate": "2023-01-04T08:16:49",
      "JPBet": 0,
      "Status": 101,
      "CreatedOn": "2023-01-04T08:15:35",
      "ModifiedOn": "2023-01-04T08:16:49"
    },
    {
      "MemberName": "demo_jili",
      "ProductID": 1091,
      "WagerID": 3333,
      "CurrencyID": 8,
      "GameType": 8,
      "GameID": "119",
      "GameRoundID": "424589087719061623",
      "ValidBetAmount": 20,
      "BetAmount": 20,
      "PayoutAmount": 14,
      "CommissionAmount": 0,
      "JackpotAmount": 0,
      "SettlementDate": "2023-01-04T08:18:55",
      "JPBet": 0,
      "Status": 101,
      "CreatedOn": "2023-01-04T08:17:35",
      "ModifiedOn": "2023-01-04T08:18:55"
    }
  ],
  "ErrorCode": 0,
  "ErrorMessage": null
}
                    
 
3.3 Pull Report By Settlement Date
Request Path: (ApiUrl)/Seamless/PullReportBySettlementDate
Remark:
  • This API is event-driven by operator. Whenever an operator wants to pull a report to view the settled wage records within a specified period, kindly call this API in Seamless.
  • Kindly use a maximum of 5 minutes interval between the StartDate and EndDate to prevent heavy load on our server. Otherwise, we will respond error to your API call if you do not adhere to this rule.
Request Parameters:
Parameter Type Description Required
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
StartDate String StartDate of the Bet Time Search Range
DateTime in the format yyyy-mm-dd HH:mm:ss
Yes
EndDate String EndDate of the Bet Time Search Range
DateTime in the format yyyy-mm-dd HH:mm:ss
Yes
Sign String Signature of the request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response
Kindly refer to Appendix 5.1 for the error code
Yes
ErrorMessage String Message of the response Yes
Wagers List< Wager> List of Wagers
Kindly refer to Model 4.2 for the details of each wager
No
Sample Request body from Operator:
{
  "OperatorCode": "ABCD",
  "StartDate": "2023-01-04 08:13:00",
  "EndDate": "2023-01-04 08:18:00",
  "Sign": "7b01ccc0de9f0a24b91e23c41c704ae8",
  "RequestTime": "20230315104218"
}
                    
Expected Response From Seamless:
{
  "Wagers": [
    {
      "MemberName": "demo_jili",
      "ProductID": 1091,
      "WagerID": 1111,
      "CurrencyID": 8,
      "GameType": 1,
      "GameID": "135",
      "GameRoundID": "1661394429190876135",
      "ValidBetAmount": 1,
      "BetAmount": 1,
      "PayoutAmount": 0,
      "CommissionAmount": 0,
      "JackpotAmount": 0,
      "SettlementDate": "2023-01-04T08:14:55",
      "JPBet": 0,
      "Status": 101,
      "CreatedOn": "2023-01-04T08:13:35",
      "ModifiedOn": "2023-01-04T08:14:55"
    },
    {
      "MemberName": "demo_jili",
      "ProductID": 1091,
      "WagerID": 2222,
      "CurrencyID": 8,
      "GameType": 8,
      "GameID": "119",
      "GameRoundID": "424589082685896823",
      "ValidBetAmount": 12,
      "BetAmount": 12,
      "PayoutAmount": 16,
      "CommissionAmount": 0,
      "JackpotAmount": 0,
      "SettlementDate": "2023-01-04T08:16:49",
      "JPBet": 0,
      "Status": 101,
      "CreatedOn": "2023-01-04T08:15:35",
      "ModifiedOn": "2023-01-04T08:16:49"
    }
  ],
  "ErrorCode": 0,
  "ErrorMessage": null
}
                    
 
3.4 Get Game List
Request Path: (ApiUrl)/Seamless/GetGameList
Remark:
  • This API is event-driven by operator. Whenever an operator wants to get game list for a specific product with its specified game type, kindly call this API in Seamless.
  • Please insert a valid MemberName although its only getting the game list, as certain providers require a valid member to obtain their game list.
  • Kindly take note that not all providers will have a GetGameList, you may refer to Appendix 5.7 for more information about this.
  • Please pass the GameCode, and ProviderGameType (if there is value) from the response ProviderGames into 3.1 Launch Game API GameID, and ProviderGameType parameter to launch the game.
Request Parameters:
Parameter Type Description Required
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
MemberName String Player's unique identifier for operator Yes
DisplayName String Player’s display name No
Password String Player’s password in operator No
GameID String Unique provider game code
Kindly refer to Operator API 3.4 to obtain the GameID
No
ProductID Int Unique identifier for products in seamless
Kindly refer to “BO > API Info” page for the product code
Yes
GameType Int Game Type
Kindly refer to Appendix 5.6 for the game types
Yes
LanguageCode Int Language Code
Kindly refer to Appendix 5.4 for the language code
Yes
Platform Int Platform
Kindly refer to Appendix 5.5 for the platform code
Yes
IPAddress String IP Address of the player Yes
Sign String Signature of the request Yes
RequestTime String Request DateTime
DateTime in the format yyyyMMddHHmmss
Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response
Kindly refer to Appendix 5.1 for the error code
Yes
ErrorMessage String Message of the response Yes
ProviderGames List< ProviderGames> List of Provider Games
Kindly refer to Model 4.3 for ProviderGames details
No
Sample Request body from Seamless:
{
  "OperatorCode": "ABCD",
  "MemberName": "TESTER",
  "DisplayName": "f61bd50815a4c3656ae5b4e46c2bfc08",
  "ProductID": 1009,
  "GameType": 1,
  "LanguageCode": 1,
  "Platform": 0,
  "Sign": "c0a6124139b4822ae86a243c35503fdf",
  "RequestTime": "20230315104218"
}
                    
Expected Response From Seamless:
{
  "ProviderGames": [
    {
      "GameCode": "2",
      "GameName": "GodOfChess",
      "GameType": 1,
      "Category": "Games",
      "ImageUrl": "http://localhost:1002/Image/CQ9/en/2.png",
      "ProviderGameType": null
    },
    {
      "GameCode": "10",
      "GameName": "LuckyBats",
      "GameType": 1,
      "Category": "Games",
      "ImageUrl": "http://localhost:1002/Image/CQ9/en/10.png",
      "ProviderGameType": null
    },
    {
      "GameCode": "35",
      "GameName": "Crazy NuoZha",
      "GameType": 1,
      "Category": "Games",
      "ImageUrl": "http://localhost:1002/Image/CQ9/en/35.png",
      "ProviderGameType": null
    }
  ],
  "ErrorCode": 0,
  "ErrorMessage": null
}
                    
 
3.5 Get Bet Details
Request Path: (ApiUrl)/Report/BetDetail?agentCode=agentCode&WagerID=WagerID
Remark:
  • This API is event-driven by operator. Whenever an operator wants to inquire for a specific wager’s bet details, kindly call this API in Seamless.
  • Kindly use the created url and its query string, to redirect into the corresponding page to view the queried wager’s bet details.
Request Parameters:
Parameter Type Description Required
agentCode String Unique identifier for operators in seamless
BO Login username.
Yes
WagerID Long WagerID of the bet that is meant for the inquiry Yes
Sample URL generated by Operator:
https://ApiURL/Report/BetDetail?agentCode=ABCD&WagerID=33388
                    
 
3.6 Pull Report By Wager IDs
Request Path: (ApiUrl)/Seamless/PullReportByWagerIDs
Remark:
  • This API is event-driven by operator. Whenever an operator wants to pull a report to view the wager records by Wager IDs, kindly call this API in Seamless.
Request Parameters:
Parameter Type Description Required
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
WagerIDs List< Long > List of WagerIDs of the bets that is meant for the inquiry Yes
Response Parameters:
Parameter Type Description Required
Wagers List< Wager> List of Wagers
Kindly refer to Model 4.2 for the details of each wager
No
ErrorCode Int Status Code for response
Kindly refer to Appendix 5.1 for the error code
Yes
ErrorMessage String Message of the response Yes
Sample Request body from Operator:
{
  "OperatorCode": "ABCD",
  "WagerIDs": [
    2180032,
    2180031
  ]
}
                    
Expected Response From Seamless:
{
    "Wagers": [
        {
            "MemberName": "220331",
            "ProductID": 1091,
            "WagerID": 2180031,
            "CurrencyID": 8,
            "GameType": 1,
            "GameID": "51",
            "GameRoundID": "1685610458544190051",
            "ValidBetAmount": 100.0000,
            "BetAmount": 100.0000,
            "PayoutAmount": 0.0000,
            "CommissionAmount": 0.0000,
            "JackpotAmount": 0.0000,
            "JPBet": 0.0000,
            "Status": 101,
            "SettlementDate": "2023-06-09T10:42:59",
            "CreatedOn": "2023-06-09T10:42:59",
            "ModifiedOn": "2023-06-09T10:42:59"
        },
        {
            "MemberName": "220331",
            "ProductID": 1091,
            "WagerID": 2180032,
            "CurrencyID": 8,
            "GameType": 1,
            "GameID": "51",
            "GameRoundID": "1685610458544200051",
            "ValidBetAmount": 100.0000,
            "BetAmount": 100.0000,
            "PayoutAmount": 0.0000,
            "CommissionAmount": 0.0000,
            "JackpotAmount": 0.0000,
            "JPBet": 0.0000,
            "Status": 101,
            "SettlementDate": "2023-06-09T10:43:02",
            "CreatedOn": "2023-06-09T10:43:02",
            "ModifiedOn": "2023-06-09T10:43:02"
        }
    ],
    "ErrorCode": 0,
    "ErrorMessage": null
}
                    
 
3.7 Pull Pending Records
Request Path: (ApiUrl)/Seamless/PullPendingRecords
Remark:
  • This API is event-driven by operator. Whenever an operator wants to pull a report to view the Pending Records, kindly call this API in Seamless.
  • Kindly use a maximum of 24 hours interval between the StartDate and EndDate to prevent heavy load on our server. Otherwise, we will respond error to your API call if you do not adhere to this rule.
Request Parameters:
Parameter Type Description Required
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
ProductID Int Unique identifier for products in seamless
Kindly refer to “BO > API Info” page for the product code
Yes
GameType Int Game Type
Kindly refer to Appendix 5.6 for the game types
Yes
StartDate String StartDate of the Bet Time Search Range
DateTime in the format yyyy-mm-dd HH:mm:ss
Yes
EndDate String EndDate of the Bet Time Search Range
DateTime in the format yyyy-mm-dd HH:mm:ss
Yes
Response Parameters:
Parameter Type Description Required
Wagers List< Wager> List of Wagers
Kindly refer to Model 4.2 for the details of each wager
No
ErrorCode Int Status Code for response
Kindly refer to Appendix 5.1 for the error code
Yes
ErrorMessage String Message of the response Yes
Sample Request body from Operator:
{
    "OperatorCode": "ABCD",
    "ProductID": 1009,
    "GameType": 8,
    "StartDate": "2023-12-14 00:00:00",
    "EndDate": "2023-12-15 00:00:00"
}
                    
Expected Response From Seamless:
{
    "Wagers": [
        {
            "MemberName": "demo_cq9",
            "ProductID": 1009,
            "WagerID": 2703221,
            "CurrencyID": 8,
            "GameType": 8,
            "GameID": "GO02",
            "GameRoundID": "GO02m1232669m1m1",
            "ValidBetAmount": 1.1000,
            "BetAmount": 1.1000,
            "PayoutAmount": 1.7000,
            "CommissionAmount": 0.0000,
            "JackpotAmount": 0.0000,
            "JPBet": 0.0000,
            "Status": 100,
            "SettlementDate": "2023-12-14T04:48:08",
            "CreatedOn": "2023-12-14T04:48:08",
            "ModifiedOn": "2023-12-14T04:48:08"
        },
        {
            "MemberName": "demo_cq9",
            "ProductID": 1009,
            "WagerID": 2704317,
            "CurrencyID": 8,
            "GameType": 8,
            "GameID": "GO02",
            "GameRoundID": "GO02m1232715m1m1",
            "ValidBetAmount": 3.9000,
            "BetAmount": 3.9000,
            "PayoutAmount": 11.6000,
            "CommissionAmount": 0.0000,
            "JackpotAmount": 0.0000,
            "JPBet": 0.0000,
            "Status": 100,
            "SettlementDate": "2023-12-14T07:40:53",
            "CreatedOn": "2023-12-14T07:40:53",
            "ModifiedOn": "2023-12-14T07:40:53"
        }
    ],
    "ErrorCode": 0,
    "ErrorMessage": null
}
                    
 
3.8 Fetch Records
Request Path: (ApiUrl)/Seamless/FetchReport
Remark:
  • In order to use this API, please request for it to be enabled under which agent code. Our tech support will enable it for you. However, please take note that you cannot use 3.3 Pull Report By Settlement Date and 3.8 Fetch Records at the same time, you can only access 1 of these API at a time.
  • This API is event-driven by operator. Whenever an operator wants to fetch all existing valid bets, kindly call this API in Seamless.
  • Once you have fetched the records, please save the WagerIDs and mark them using the API mentioned in "3.9 Mark Records", to ensure there will not be any unforeseen issue using fetch mark to obtain the bet records.
Request Parameters:
Parameter Type Description Required
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
Response Parameters:
Parameter Type Description Required
Wagers List< Wager> List of Wagers
Kindly refer to Model 4.2 for the details of each wager
No
ErrorCode Int Status Code for response
Kindly refer to Appendix 5.1 for the error code
Yes
ErrorMessage String Message of the response Yes
Sample Request body from Operator:
{
    "OperatorCode": "ABCD"
}
                    
Expected Response From Seamless:
{
    "Wagers": [
        {
            "MemberName": "demo_cq9",
            "ProductID": 1009,
            "WagerID": 2703221,
            "CurrencyID": 8,
            "GameType": 8,
            "GameID": "GO02",
            "GameRoundID": "GO02m1232669m1m1",
            "ValidBetAmount": 1.1000,
            "BetAmount": 1.1000,
            "PayoutAmount": 1.7000,
            "CommissionAmount": 0.0000,
            "JackpotAmount": 0.0000,
            "JPBet": 0.0000,
            "Status": 100,
            "SettlementDate": "2023-12-14T04:48:08",
            "CreatedOn": "2023-12-14T04:48:08",
            "ModifiedOn": "2023-12-14T04:48:08"
        },
        {
            "MemberName": "demo_cq9",
            "ProductID": 1009,
            "WagerID": 2704317,
            "CurrencyID": 8,
            "GameType": 8,
            "GameID": "GO02",
            "GameRoundID": "GO02m1232715m1m1",
            "ValidBetAmount": 3.9000,
            "BetAmount": 3.9000,
            "PayoutAmount": 11.6000,
            "CommissionAmount": 0.0000,
            "JackpotAmount": 0.0000,
            "JPBet": 0.0000,
            "Status": 100,
            "SettlementDate": "2023-12-14T07:40:53",
            "CreatedOn": "2023-12-14T07:40:53",
            "ModifiedOn": "2023-12-14T07:40:53"
        }
    ],
    "ErrorCode": 0,
    "ErrorMessage": null
}
                    
 
3.9 Mark Records
Request Path: (ApiUrl)/Seamless/MarkReport
Remark:
  • This API is event-driven by operator. It is mandatory for operator to call this API so that operator may fetch new bet valid records in 3.8 Fetch Record API.
  • Please pass in the list of WagerIDs that was retrieved in 3.8 Fetch Record API. For our system to mark them as fetched.
  • However, please take note if the wager is updated after it was fetched, it will reappear in 3.8 Fetch Record API even if it was marked. Then, kindly pass the same WagerID in the next 3.9 Mark Records API call, when there is no new update for the wager, it will not reappear in 3.8 Fetch Record API.
Request Parameters:
Parameter Type Description Required
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
WagerID List< Long > List of WagerIDs meant to be marked for Fetch API to return new wagers. Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response
Kindly refer to Appendix 5.1 for the error code
Yes
ErrorMessage String Message of the response Yes
Sample Request body from Operator:
{
    "OperatorCode": "ABCD",
    "WagerID":[
    2703221,
    2704317,
    2704231
]
}
                    
Expected Response From Seamless:
{
    "ErrorCode": 0,
    "ErrorMessage": null
}
                    
 
3.10 Get Member Outstanding Balance
Request Path: (ApiUrl)/Seamless/GetMemberOutstandingBalance
Remark:
  • This API is event-driven by operator. It is meant for operator to retrieve outstanding balance details regarding a specific player based on the given member name.
  • Kindly refer to Appendix 5.7 on more details regarding member outstanding balance.
Request Parameters:
Parameter Type Description Required
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
MemberName String Player's unique identifier for operator Yes
Sign String Signature of the request Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response
Kindly refer to Appendix 5.1 for the error code
Yes
ErrorMessage String Message of the response Yes
MemberOutstandingBalanceListing List< OutstandingBalance> List of Member Outstanding Balance Details
Kindly refer to Model 4.4 for the details of Outstanding Balance
No
Sample Request body from Operator:
{
    "OperatorCode": "QA08",
    "MemberName": "MDQA_Member01",
    "Sign":"e04c06f8a31200298ecd3ad1cc09724b"
}
                    
Expected Response From Seamless:
{
  "ErrorCode": 0,
  "ErrorMessage": null,
  "MemberOutstandingBalanceListing": [
    {
      "OutstandingBalanceID": 14,
      "MemberID": 130551,
      "WagerID": 2932939,
      "OutstandingBalanceAmount": -200,
      "CreatedOn": "2024-08-23T09:49:29",
      "ModifiedOn": "2024-08-23T09:51:15"
    }
  ]
}
                    
 
3.11 Resolve Member Outstanding Balance
Request Path: (ApiUrl)/Seamless/ResolveMemberOutstandingBalance
Remark:
  • This API is event-driven by operator. It is meant for operator to do a manual resolve for a outstanding balance ID that was retrieved from 3.10 Get Member Outstanding Balance API.
  • Kindly refer to Appendix 5.7 on more details regarding member outstanding balance.
Request Parameters:
Parameter Type Description Required
OperatorCode String Unique identifier for operators in seamless
BO Login username.
Yes
MemberName String Player's unique identifier for operator Yes
OutstandingBalanceID List< long > List of outstanding balance ID that has already been resolved manually between operator and player. Yes
Sign String Signature of the request Yes
Response Parameters:
Parameter Type Description Required
ErrorCode Int Status Code for response
Kindly refer to Appendix 5.1 for the error code
Yes
ErrorMessage String Message of the response Yes
Sample Request body from Operator:
{
  "OperatorCode": "QA08",
  "MemberName": "MDQA_Member01",
  "OutstandingBalanceID": [
    14
  ],
  "Sign": "e04c06f8a31200298ecd3ad1cc09724b"
}
                    
Expected Response From Seamless:
{
  "ErrorCode": 0,
  "ErrorMessage": null
}
                    
 
4. Model
4.1 Transaction
Parameters Data Type Nullable Remark
MemberID Long No Unique identifier for players in seamless
OperatorID Long No Unique identifier for operators in seamless
Sometimes it is called AgentID
ProductID Long No Unique identifier for products in seamless
ProviderID Long No Unique identifier for providers in seamless
ProviderLineID Long No Unique identifier for configurations done to product line in seamless
WagerID Long Yes Unique identifier for wage record in seamless
CurrencyID Int No Unique identifier for currencies in seamless
GameType Int No Game type for the transaction
Kindly refer to Appendix 5.6 for the game types
GameID String Yes Provider game code.
GameRoundID String Yes Provider game round ID.
ValidBetAmount Decimal Yes Amount of the bet after deducting turnover winnings
May vary with BetAmount due to turnover bets in certain games
BetAmount Decimal Yes Amount of the entire bet without deducting turnover winnings
TransactionAmount Decimal No Change amount that needs to be done to player’s wallet
Positive value is increase player’s wallet
Negative value is minus player’s wallet
TransactionID String Yes Unique identifier for the current transaction
Kindly return error code 1003 for detected duplicate transactions.
PayoutAmount Decimal Yes Player’s winning amount.
Can be 0 if the player loses.
PayoutDetail String Yes Details about player’s winning sent by provider
BetDetail String Yes Details about player’s bet sent by provider
It is default to null
CommisionAmount Decimal Yes Commission amount
JackpotAmount Decimal Yes Jackpot amount
SettlementDate DateTime Yes Date of the finalized wage record
When the bet is over, the player has either lost or won.
JPBet Decimal Yes Jackpot contribution per bet from provider
Another term is progressive jackpot
Status Int No Status of the current transaction
Kindly refer to Appendix 5.2 for the status
CreatedOn DateTime No Date of the transaction
ModifiedOn DateTime No Date of the modified transaction
 
4.2 Wager
Parameters Data Type Nullable Remark
WagerID Long No Unique identifier for wage record in seamless
MemberName String No Player's unique identifier for operator
ProductID Long No Unique identifier for products in seamless
GameType Int No Game type for the transaction
Kindly refer to Appendix 5.6 for the game types
CurrencyID Int No Unique identifier for currencies in seamless
GameID String Yes Provider game code.
GameRoundID String No Provider game round ID.
ValidBetAmount Decimal No Amount of the bet after deducting turnover winnings
May vary with BetAmount due to turnover bets in certain games
BetAmount Decimal No Amount of the entire bet without deducting turnover winnings
JPBet Decimal Yes Jackpot contribution per bet from provider
Another term is progressive jackpot
PayoutAmount Decimal No Player’s winning amount.
Can be 0 if the player loses.
CommisionAmount Decimal Yes Commission amount
JackpotAmount Decimal Yes Jackpot amount
SettlementDate DateTime Yes Date of the finalized wage record
When the bet is over, the player has either lost or won.
Status Int No Status of the current wage record
Kindly refer to Appendix 5.2 for the status
CreatedOn DateTime No Date of the transaction
ModifiedOn DateTime No Date of the modified transaction
 
4.3 ProviderGames
Parameters Data Type Nullable Remark
GameCode String No Unique provider game id
GameName String No Provider’s game name
GameType Int Yes Game Type
Kindly refer to Appendix 5.6 for the game types
Category String Yes Game category for UI display
This parameter is default to “Games” for UI display
ImageURL String Yes Route to obtain game image
ProviderGameType String Yes Provider’s categorized game type
The default value for this parameter is null.
 
4.4 OutstandingBalance
Parameters Data Type Nullable Remark
OutstandingBalanceID Long No Unique ID of Outstanding Balance
MemberID Long No Unique identifier for players in seamless
WagerID Long No Unique identifier for wage record in seamless
OutstandingBalanceAmount String No Outstanding Balance Amount that player owes.
CreatedOn DateTime No Date of the transaction
ModifiedOn DateTime No Date of the modified transaction
 
5. Appendix
5.1 Error Code
Code Description
0 Success
16 Failed
19 API Error
20 Too Many Requests
999 Internal Server Error
1000 API Member Not Exists
1001 API Member Insufficient Balance
1002 API Incorrect Agent Key
1003 API Duplicate Transaction
1004 API Invalid Sign
1005 API No Get Game List
1006 API Bet Not Exist
2000 API Product Under Maintenance
 
5.2 Status
Code Description
100 Pending
101 Settle
102 Void
 
5.3 Currency
Code Description
1 CNY
2 USD
3 KRW
4 MYR
5 SGD
6 JPY
7 THB
8 IDR
9 VND
10 AUD
11 GBP
12 CHF
13 MXN
14 CAD
15 RUB
16 INR
17 RON
18 DKK
19 NOK
20 NTD
21 COP
22 MMK
23 PLN
24 HRK
25 CZK
26 HUF
27 ZAR
28 SEK
29 NZD
30 TRY
31 BND
32 KHR
33 USDT
34 BDT
35 EUR
36 BRL
37 PHP
38 TND
39 TWD
40 UAH
41 PKR
42 HKD
43 MAD
44 EGP
45 ZMW
46 NPR
47 KSH
48 AED
49 LAK
50 NGN
51 KES
52 UGX
53 SAR
54 AZN
55 BGN
56 ARS
57 AMD
58 MXP
59 MNT
60 CLP
61 ETB
62 VEF
63 ECS
64 PEN
65 QAR
66 KWD
67 BHD
68 OMR
69 GHS
70 LKR
 
5.4 Language Code
Code Description
1 English
2 Traditional Chinese
3 Simplify Chinese
4 Thai
5 Indonesia
6 Japanese
7 Korea
8 Vietnamese
9 Deutsch
10 Espanol
11 Francais
12 Russia
13 Portuguese
14 Burmese
15 Danish
16 Finnish
17 Italian
18 Dutch
19 Norwegian
20 Polish
21 Romanian
22 Swedish
23 Turkish
24 Bulgarian
25 Czech
26 Greek
27 Hungarian
28 Brazilian Portugese
29 Slovak
30 Georgian
31 Latvian
32 Ukrainian
33 Estonian
34 Filipino
35 Cambodian
36 Lao
37 Malay
38 Cantonese
39 Tamil
40 Hindi
41 European Spanish
42 Azerbaijani
43 Brunei Darussalam
44 Croatian
45 Arabian
 
5.5 Platform
Code Description
0 Web
1 Mobile
 
5.6 Game Type
Code Description
1 Slot
2 Live Casino
3 Sport Book
4 Virtual Sport
5 Lottery
6 Qipai
7 P2P
8 Fishing
9 Others
10 Cock Fighting
11 Bonus
12 Jackpot
13 ESport
 
Frequently Asked Questions
 
1. What is the bet status after a cancelBet API is called?
Status (100 = BET_PENDING)
Kindly refer to the transaction amount to deduct because there is some provider who will merge multiple bets into 1 record. But when cancel bet is called, it only cancels 1 of the bets, hence seamless will call to the operator side, to cancel 1 of the bets in the wage record accordingly. Therefore, the status cannot be considered void yet.
However, please take note that it can result in the status to remain (100 = BET_PENDING) even if all the bets in the same wage are canceled. In this instance, kindly refer to the bet amount, if it's 0 meaning all the consolidated bets are already canceled, and it is safe to ignore that specific wage record. Hence, please take note of this and deduct the bet amount of the wage record accordingly.
Status (102 = BET_VOID)
In this instance, kindly void the entire bet, as it means there is only 1 bet for the entire wage record, and when the provider calls seamless to cancel it, it will cancel the entire bet, and the wage record as well.
 
2. What is the difference between GameResult, Bonus, and Jackpot API calls?
Bonus, and Jackpot are treated as a separate round from GameResult. It is safe to say that all these 3 events will have a different wagerID.
However, even with different wagerID, certain providers will map Jackpot/Bonus/GameResult together using the GameRoundID.
E.g., there can be 3 different WagerID, each representing Jackpot/Bonus/GameResult, but they can have the same GameRoundID as an indicator that these 3 wages came from the same round.
In addition, certain providers will trigger Bonus for free rounds, such as a free spin in Slot.
 
3. Why not all providers have GetGameList API?
Please check the response error code accordingly, if the error code returned is 1005 (API No Get Game List), kindly proceed to call launchGame API to directly access the provider’s site. The reason for this occurrence is mainly due to the reasons below:
  1. Provider site features a complicated game lobby. This may occur for game types such as “Live Casino”, or “Sport book”.
  2. GetGameList is yet to be implemented for the specific provider. Kindly wait as it will be implemented in the future.
  3. Lastly, the provider simply does not have a GetGameList API for us to call.
 
4. Which providers have redirect feature?
Please refer to the table below to know which product have redirect feature.
Product Product Code
YGGDRASIL 1027
Jili 1091
JOKER 1013
Playstar 1050
Royal Slot Gaming 1105
Gameplay Interactive (Mobile Slot only) 1008
 
5. What are the examples for direct resettlement?
Direct Resettlement to resolve Extra Payout on 1st settlement
  • Bet: 20, TransactionAmount = -20
  • Win: 50, TransactionAmount = +50
  • Resettlement Win: 30 (Payout extra 20 on previous GameResult API call, deduct 20 from player), TransactionAmount = -20
Direct Resettlement to resolve Less Payout on 1st settlement
  • Bet: 20, TransactionAmount = -20
  • Win: 50, TransactionAmount = +50
  • Resettlement Win: 100 (Payout less 50 on previous GameResult API call, credit 50 to player), TransactionAmount = +50
This is because, some provider don't use rollback, they directly give a resettlement via GameResult API call, and we have to calculate the previous payout with latest payout to know the amount that needs to be adjusted to operator.
 
6. Why does it take so long to open the products to operators that just moved into production environment?
Please take note, there is an undefined waiting time for the products that are already integrated into Seamless.
This is because, whenever a new operator wants to access a product in production environment, the provider has to setup their production environment to allow the new operator to access their products. Hence, there will be unfortunately an undefined waiting time during this process, since all providers work differently during this process, and is unable to provide an estimated timeline.
 
7. What is credit control in production environment?
Credit control is a risk control on our end, when any balance amendment for player happen, the credit for the operator in the agent wallet will also amend , if the credit is finish operator have to top up again.
Please take note, the agent wallet should not be a negative amount. If there is, then there is an issue related to credit control for one of the product. Hence, please feedback us immediately if it happens.
 
8. What are the examples for bet adjustment and cancel win using rollback API call?
Bet Adjustment to resolve extra bet on initial place bet
  • Bet: 50, TransactionAmount = -50
  • Bet Adjustment: 30 (Bet extra 20 on previous PlaceBet API call, refund 20 to player), transaction amount = 20
  • Currently, there is only bet adjustment to refund extra bet to player, there is no bet adjustment to deduct missing bet from player.
Cancel Win to resolve payout error on previous GameResult API call.
  • Bet: 50, TransactionAmount = -50
  • Win: 100, TransactionAmount = +100
  • Cancel Win: 0 (Payout error on previous GameResult API call, rollback payout 100 from player), transaction amount = -100
 
9. What are the example of Reverse Bet Transactions using Rollback API?
Refund Money Back to Player's Wallet
  • Bet: 50, TransactionAmount = -50
  • Win: 30, TransactionAmount = 30
  • In this case, the entire bet's status will change from settled (101) to void (102), and the transaction amount will be 20 (Bet Amount - Payout amount, 50 - 30). Where 20 needs to be refunded back to the player's wallet
Reverse Payout out from Player's Wallet
  • Bet: 50, TransactionAmount = -50
  • Win: 30, TransactionAmount = 80
  • In this case, the entire bet's status will change from settled (101) to void (102), and the transaction amount will be -30 (Bet Amount - Payout amount, 50 - 80). Where -30 needs to be deducted out from the player's wallet to reverse all the transactions that was done in this bet.
 
10. Outstanding Balance Details
What is outstanding balance, and how can it occur?
  • Outstanding balance is the amount that player owes, this can happen due to insufficient balance from player side during a rollback API that deducts the player's wallet.
  • Seamless system will take note of this incident and note down the outstanding balance that player owes. Operator can call to 3.10 Get Member Outstanding Balance API to retrieve the list of outstanding balance that the player owes.
What is the impact of outstanding balance, and how to resolve it?
  • When a player has outstanding balance, the player essentially is unable to place bet until the outstanding balance has been resolved.
  • When there is a transaction that credits to the player's wallet, the outstanding balance will be automatically be included into the process. Hence, if the credit amount is sufficient to cover the outstanding balance, then the specific outstanding balance will be resolved without the need of a manual resolution. Otherwise, only a portion of the oustanding balance is resolved, and a manual resolution is required.
  • However, please take note, this also means that the amount to be credited into the player's wallet will be reduced due to the involvement of outstanding balance that the player owes.
  • To resolve outstanding balance manually, operator has to manually resolve it with the player first. Once the player has resolved the outstanding balance amount. Kindly call to 3.11 Resolve Member Outstanding Balance API to clear the specific outstanding Balance.
Which Product Has Outstanding Balance Flow?
Product Product Code
SlotXo 1075
AMBPoker 1076