You are on page 1of 40

Skywind Live Games

Integration guide
V.1.5

July 2022
The information presented herein is confidential information of Skywind Holdings Ltd. It is also protected subject matter of copyrights owned by
Skywind Holdings Ltd. and of agreements between Skywind Holdings Ltd. and its licensees and other parties. Copying, transmission and disclosure
of such information can only be done within the strict scope of a governing Skywind Holdings Ltd. agreement. In the absence of any specific
agreement to the contrary, reverse engineering, decompilation and disassembly are prohibited in any event as to any software content. While all
efforts have been made to ensure that the content of this document is accurate at the time of publication, the data upon which this document is
based is subject to future change. Updated versions of this document will be released when necessary, resources permitting.
PREFACE

Purpose
To describe how to set up Skywind Live Games on the Operator’s website

Scope
The document describes 3 options to set up Skywind Live Games along with the
relevant API methods

Related Documents
Document Version Description
Describes the basic API
Skywind Seamless Integration
commands and gives
Guide 4.88
instructions for Seamless
Integration.
Provides an overview of
Skywind’s Falcon Integration
Skywind Operator API 4.88 System API and gives
instructions on third-party
integration.

Intended Audience
Skywind Licensees

2 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Table of Contents
Introduction............................................................................................................................... 5
1. Direct launch ........................................................................................................................ 5
2. 1. Skywind Lobby solution (Seamless Integration) ................................................................. 5
2.2. Skywind Lobby Solution (iWallet Integration) ..................................................................... 5
3. Implement Your Own Lobby Solution .................................................................................... 5
Direct Launch ............................................................................................................................. 6
Get Player Game URL ............................................................................................................... 6
Ticket Validation ...................................................................................................................... 8
Validate Ticket...................................................................................................................... 8
Refresh Session Token ........................................................................................................ 10
Error Responses ................................................................................................................. 11
Skywind Lobby Solution (Seamless Integration) .................................................................... 13
Overview ............................................................................................................................... 13
Flow ...................................................................................................................................... 14
1. Lobby Link .......................................................................................................................... 14
2. Login Page Setup ................................................................................................................ 14
Directing the Player to the Specific Game Category in the Lobby ........................................... 15
Directing the Player to the Lobby in the Specified Language .................................................. 15
Player Ticket Requirements (for both login options) ............................................................. 16
3. Ticket Validation ................................................................................................................ 16
Validate Ticket.................................................................................................................... 16
Refresh Session Token ........................................................................................................ 18
Error Responses ................................................................................................................. 19
Skywind Lobby Solution (iWallet Integration) ....................................................................... 21
Overview ............................................................................................................................... 21
Flow ...................................................................................................................................... 22
1. Lobby Link .......................................................................................................................... 22
2.1. Login Setup for Players with Password ............................................................................. 22
2.1. Login Setup for Players with/without Password ............................................................... 22
Directing the Player to the Specific Game Category in the Lobby ........................................... 23
Directing the Player to the Lobby in the Specified Language .................................................. 23
Player Ticket Requirements (for the second login option)...................................................... 24
3. Ticket Validation ................................................................................................................ 25
Validate Ticket.................................................................................................................... 25
Refresh Session Token ........................................................................................................ 26
Error Responses ................................................................................................................. 28
Implement Your Own Lobby Solution .................................................................................... 29
Overview ............................................................................................................................... 29
Integration Setup Flow ........................................................................................................... 29
REST API ................................................................................................................................ 30
Get Live Manager URL......................................................................................................... 30
Get List of Games ............................................................................................................... 31
Get Fun Mode Game URL .................................................................................................... 32
Player Login........................................................................................................................ 33
Get Game URL .................................................................................................................... 34
Get List of Game Categories ................................................................................................ 35
Get List of Live Tables Statuses ............................................................................................ 36
Socket Message Definitions .................................................................................................... 37
3 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Player Login........................................................................................................................ 37
Subscribe to Game Events ................................................................................................... 37
Unsubscribe from Game Events ........................................................................................... 38
Live Table Open .................................................................................................................. 38
Live Table Info .................................................................................................................... 38
Live Table Dealer Changed .................................................................................................. 39
Live Table Status Changed ................................................................................................... 39
Live Table Blackjack Seat Selected ....................................................................................... 39
Document History ................................................................................................................... 40

4 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
INTRODUCTION

This document is aimed at the operators who have already completed Integration
with Skywind and want to move on to Live Lobby configuration.

There are 3 options how you can proceed. Please read about each of them, decide
on the one that is preferable for you and proceed to the dedicated chapter.

1. Direct launch

This option requires zero development on top of general integration from your side.
The idea is that clicking on the static game icon or a link on your website calls the
Get Player Game URL method, same as for Skywind slot games.

Limitations: you can’t benefit from the add-ons developed specifically for live
games such as dynamic table preview icons, etc.

2. 1. Skywind Lobby solution (Seamless Integration)


This option implies that you use the Live Lobby theme provided by Skywind. It will
have filters specific to Live games (Commission/No-Commission for Live Baccarat
games) and will display game limits on the icons. Also, this lobby solution offers
display customization options.

2.2. Skywind Lobby Solution (iWallet Integration)


Same as above, but for the operators who implemented iWallet Integration.

3. Implement Your Own Lobby Solution


This option is preferable for you if you have the design and developer resources to
build your own lobby. We from our side can provide the API which will let you get
information such as the current dealer’s name, table status (online/offline), etc. This
requires more time and development effort for implementation from the operator’s
side.

5 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
DIRECT LAUNCH

This option implies that the player accesses live games the same ways as regular
slot or arcade games. Whenever the player clicks on the live game icon in the lobby,
the Get Player Game URL method is called.

Get Player Game URL

Request:
GET api.operatorapi.com/players/{playerCode}/games/{gameCode} HTTP/1.1

The user can get a particular game URL for a specific player.

To do this, the game code, the player code (to get the URL for a particular player)
and the play mode (‘real’ by default) should be entered according to the schema
below.

This method is used when the server-to-server communication is enabled between


Skywind and the operator (the integration to Skywind slot games is set up) and
requires IP whitelisting.

Parameters to enter

Located Notes
Name Required Schema
In
The site of the cashier
cashier query yes/no string

Player’s code of a player that is


playerCode path yes string (32) fetched.
Game code of a game that is
gameCode path yes string (32)
fetched.
This is an external ticket with
customer data used to recognise
us a customer in the provider’s
system.
For registered customers, tickets
can be provided either for real or
for fun play mode. This
ticket query no string (64)
parameter provides a quick
means of switching to real mode
via the mode button in a
game/lobby without redirecting
to merch_login_url.
The ticket will be validated by the
API command: validate ticket.
type query no string (32) Type of the game.

string | “fun” A play mode used for a ‘real’ or


playmode query no
or “real” ‘fun’ game.
6 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
If the play mode is not specified,
the customer will be asked to
choose a play mode at the start
of the game.
The language used by a
customer.
If no language is defined, then a
language query no string (2) language will be selected based
on customer data. If a customer
is anonymous, the language
must be defined.
lobby query yes/no string The site of the lobby.

ip query no string Internet IP Address (Ipv4)

The System responds to the parameters entered according to the following schema:
Response
Code Schema Example
200 { {
url: string (1024) – game URL "url":
for specific player, "http://super_live_roulette.com
token: string (512) player /",
token to access game "token":
} "oJqXX2tkAADKn3MpcM9kVbVk53neuI
YI62dEkYdYubl+9lyXRECjQww3VsmEP
fMoUkO6uqB56WDPhPGdS3aGnQ"
}

Note:
The returned url is the URL that should be used for launching the game. The
returned token value can be ignored by the operator.

If any issues occur while retrieving the game URL, the System responds with the
following error codes:

HTTP Code Error Code Description


40 Validation error
One of the parents is
62
suspended
101 Not a brand
306 Game is suspended
703 IP address cannot be resolved
400
It is forbidden to start game
708
from unauthorized site

712 Player is suspended

Entity is under maintenance,


736 but maintenance url is not
defined

7 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
HTTP Code Error Code Description
751 Referrer is missing

10 Access Token is missing


204 Access token error
401
205 Access token has expired
792 Access Session is expired
User doesn’t have permission to
206
execute the operation
403
Country {country} of IP:{ip} is
701
restricted
51 Could not find entity
102 Player is not found

404 213 Game is not available for entity|

240 Game is not found

502 Merchant not found

500 506 Merchant internal error

Ticket Validation
Please contact your Integration Manager to find out whether ticket
validation is required in your case.

The preferrable request and response format of API is JSON.

On receiving the player ticket from you, Skywind will send you the /validate_ticket or
/validate_terminal_ticket call.

Validate Ticket

/validate_ticket is used for opening normal games including slots and for opening
the lobby.

/validate_terminal_ticket is used only for opening the lobby.

You need to inform Skywind which method you will be using so that we can proceed
with the configuration.

Request: POST api.playerapi.com/api/validate_ticket HTTP/1.1


Request: POST api.playerapi.com/api/validate_terminal_ticket HTTP/1.1

This method sends a received ticket from Skywind to the operator’s system for
validation. If the ticket is valid, the operator’s server will reply with the player’s specific
account data. If not, it will send an error.
8 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Below are the parameters that Skywind will send in the request:

Parameters
Name Located in Required Type Notes

ticket body yes string (64) Operator’s ticket, used for


authentication and getting session ID.
merch_id body yes string (32) This parameter refers to the operator’s
ID (set up on the Integration phase).

merch_pwd body yes string (48) This parameter refers to the operator’s
password (set up on the Integration
phase).

ip body no string (16) This parameter shows the player’s IP


address.

Example of JSON Request


{
"ticket": "aXc2!f",
"merch_id": "gcxMerch",
"merch_pwd": "merchPassword"
}

The System responds to such requests according to the following schema:


Response
Code Schema Example

200 { {
error_code: number, "error_code": 0,
cust_session_id: string, "cust_session_id": "custSessId",
cust_id: string, "cust_id": 1234,
currency_code: string, "currency_code": "GBP",
test_cust: string ("true"| "test_cust": false,
"country": "GB",
"false") or
"game_group": "Double Bets Group"
boolean(true|false,
}
country: string,
game_group: string
}
Notes:
- The optional game_group parameter is used to override game limits. To update
player’s game group and limits, operator needs to create game groups by following
the Skywind ‘Game Group API’ document and set a name of the game group in the
validate_ticket response in the game_group field.

- The cust_id refers to the customer’s ID and includes numbers, letters, special
characters, except a colon.

- If you use terminals and use the same endpoint for the terminal user login as for the
validate_ticket method, it’s mandatory for you to add the language parameter to your
validate_ticket response.

9 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
- By default, one cust_session_id should be used for several different games (you
should not have in place a validation that cust_session_id is assigned to a specific
game code). If your system cannot support it and you have unique tokens for each
played game, you should implement Refresh Session Token method and request
Skywind L2 Technical Integration team to enable this option for your entity.

For information on error responses, please see Error Responses.

Refresh Session Token


Request: POST api.playerapi.com/api/refresh_session HTTP/1.1

This method is used for merchant systems that require implementation of ticket
validation but do not allow a player to play different games with the same session
token. Skywind will call this method to obtain a new token (new_cust_session_id)
when a player opens a new game on the provider’s website after having played
another game.

Please contact Skywind L2 Technical Integration team to enable this option for your
entity.

Request Parameters
Name Located Required Type Notes
in

merch_id body yes string (32) The merchant’s ID (set up on the


Integration phase).

merch_pwd body yes string (48) The merchant’s password (set up on the
Integration phase).

old_game_code body yes string (32) The code of the game the player opened
prior to opening the new game.
new_game_code body yes string (32) The code of the new game that the
player opens.

cust_id body yes string (32) The id of the customer (player).

cust_session_id body yes string (64) The id of the customer’s (player’s)


session preceding the launch of a new
game.

Example of JSON Request

Example
{
"merch_id": "EB",
"merch_pwd": "SoMEpassw",
"old_game_code": "sw_mrmnky",

10 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
"new_game_code": "sw_dc",
"cust_id": "1234",
"cust_session_id": "SoMeSeSsionId" //
old customer session id
}

The System responds to such requests according to the following schema:

Response
Code Schema Example

200 { {
error_code: 0, "error_code": 0,
new_cust_session_id: string "new_cust_session_id": "NewSessionId"
(64) }
}

For information on error responses, please see Error Responses.

Error Responses
If any issues occur while performing one of the operations, the merchant’s system
should respond with the error codes from the table below. If the System has an error
code that doesn’t equal -1 or 0, we expect to receive HTTP status 200 to parse the
error code and the message.
If the System has an error code that doesn’t equal 0 in the response, it should be
explained in the error_msg.
General Errors
Seamless Text Description
Error Code

0 No errors

-1 Merchant internal error An unexpected error was encountered


while processing the request. It can be
caused by a validation error, for example,
if the merchant doesn’t exist. Operator
can use this error when they don’t expect
such behavior from the provider’s side.

-2 Player not found Returned when the game is launched with


the playerCode which doesn’t exist on the
merchant’s side or if the playerCode has
an invalid value, for example, is empty or
has a number value type.

-3 Game token expired Player session has expired or has invalid


value.

11 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Notes:
- For the response with the HTTP status 200 we apply the mapping of errors depending
on the error_code in the response.
- For the response with the HTTP status which is greater than or equals 400 and is less
than 500 (400 ≤ statusCode < 500) we send MerchantInternalError HTTP: 500,
code: 506, message: ‘Merchant internal error’.

12 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
SKYWIND LOBBY SOLUTION (SEAMLESS
INTEGRATION)

Overview

This option implies that you use the Live Lobby theme provided by Skywind. The tables
in this lobby will be grouped by games. There will be an option to access favorite
tables in My Lobby tab. Also, the table icons will display the minimum bet required to
play and the table limits if the player clicks on the minimum bet size.

It is possible to change the logo, the color scheme and other UI parameters. To do
this, please contact your Account Manager.

13 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Flow
1. Lobby Link
Skywind will provide the Operator with a static link to Skywind Live Lobby with
standard display settings.

2. Login Page Setup


There are 2 options to set up the login process: the first one will require the player to
log in when accessing Live Lobby, the second one doesn’t.

First option:
The operator is required to set up a login page on their website that will authorize the
player in the operator’s system.

The operator needs to insert the following code on their login page. The operator is
supposed to replace <PLAYER_TICKET> with the player’s authorization ticket number
(please see the operator ticket requirements) and keep the type value unchanged.

window.top.postMessage(
{
type: "tokenInfo",
ticket: "<PLAYER_TICKET> "
}, "*");

Once the login page is configured, the link to this page will be placed into lobby
settings in Skywind System.

This way when the player clicks the link to the Live Lobby on the operator’s website,
they will see the previously configured login page. The login page will receive the
player ticket from the operator’s website and execute the postMessage. The lobby will
get the postMessage and send the player ticket to Skywind. Skywind will verify the
player with Validate Ticket method and receive the required player information.

Second option:
For better user experience, instead of placing a static link on their website, the
operator may provide a dynamic link to the player by appending their authorization
ticket to the base Lobby link according to the example below:

Example:

https://lobby_id-lobby.skywindgroup.com/#/ticket/<PLAYER_TICKET>
https://abcd1234-lobby.skywindgroup.com/#/ticket/1234567890

Clicking this link will send the player ticket to Skywind for validation. After the
validation, the player will appear on the lobby page without having to log in again.
14 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Skywind will verify the player with Validate Ticket method and receive the required
player information.

Directing the Player to the Specific Game Category in the Lobby


This will work only if you opt for the second login setup option.
To provide the operator with the ability to open the Lobby directly at the page of the
desired game category, the new dynamic URL parameter category has been
introduced. The value of the parameter should be the hashed id of the desired game
category. The category id can be provided by your Integration Manager.

Example:

https://lobby_id-lobby.skywindgroup.com/#/ticket/1234567890?category=<categoryID>
https://abcd1234-lobby.skywindgroup.com/#/ticket/1234567890?category=6ca78adf

Directing the Player to the Lobby in the Specified Language


This will work only if you opt for the second login setup option.

The Merchant can open the lobby in a specific language supported by the Lobby by using the
dynamic URL parameter language. The parameter value must be the code of the language
that is supported by the Lobby.

Example:

https://lobby_id-lobby.skywindgroup.com/#/ticket/1234567890?language=<code>
https://abcd1234-lobby.skywindgroup.com/#/ticket/1234567890?language=en

Below is the list of the supported languages and their codes:

Language Language code


English en
Simplified Chinese zh-cn
Traditional Chinese zh-tw
Japanese ja
Malay ms
Korean ko
Thai th
Vietnamese vi
Indonesian id
Romanian ro
Italian it
Greek el
15 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Player Ticket Requirements (for both login options)
For the Skywind System to receive the player’s information in its proper format, the
player ticket needs to meet the following requirements:

• The ticket string length shouldn’t exceed 64 characters.


• The recommended minimum inactivity time after which the ticket session
expires is 30 minutes. After the specified inactivity timeout period the player is
logged out of the Live Lobby. This value is not mandatory and can be set in
accordance with your preference. However, a very short inactivity timeout
period (1-2 minutes) is not advisable as it may negatively impact user
experience.

3. Ticket Validation

On receiving the player ticket from you, Skywind will send you the /validate_ticket or
/validate_terminal_ticket call.

Validate Ticket

/validate_ticket is used for opening normal games including slots and for opening
the lobby.

/validate_terminal_ticket is used only for opening the lobby.

You need to inform Skywind which method you will be using so that we can proceed
with the configuration.

Request: POST api.playerapi.com/api/validate_ticket HTTP/1.1


Request: POST api.playerapi.com/api/validate_terminal_ticket HTTP/1.1

These methods send a received ticket from Skywind to the operator’s system for
validation. If the ticket is valid, the operator’s server will reply with the player’s specific
account data. If not, it will send an error.

Below are the parameters that Skywind will send in the request:

Parameters
Name Located in Required Type Notes

ticket body yes string (64) Operator’s ticket, used for


authentication and getting session ID.

merch_id body yes string (32) This parameter refers to the operator’s
ID (set up on the Integration phase).

16 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Name Located in Required Type Notes

merch_pwd body yes string (48) This parameter refers to the operator’s
password (set up on the Integration
phase).

ip body no string (16) This parameter shows the player’s IP


address.

Example of JSON Request

Example
{
"ticket": "aXc2!f",
"merch_id": "gcxMerch",
"merch_pwd": "merchPassword"
}

The System responds to such requests according to the following schema:


Response
Code Schema Example

200 { {
error_code: number, "error_code": 0,
cust_session_id: string, "cust_session_id": "custSessId",
cust_id: string, "cust_id": 1234,
currency_code: string, "currency_code": "GBP",
test_cust: string ("true"| "test_cust": false,
"country": "GB",
"false") or "game_group": "Double Bets Group"
boolean(true|false,
}
country: string,
game_group: string
}
Notes:
- The optional game_group parameter is used to override game limits. To update
player’s game group and limits, operator needs to create game groups by following
the Skywind ‘Game Group API’ document and set a name of the game group in the
validate_ticket response in the game_group field.

- The cust_id refers to the customer’s (player’s) ID and includes numbers, letters,
special characters, except a colon.

- If you use terminals and use the same endpoint for the terminal user login as for the
validate_ticket method, it’s mandatory for you to add the language parameter to your
validate_ticket response.

- By default, one cust_session_id should be used for several different games (you
should not have in place a validation that cust_session_id is assigned to a specific
game code). If your system cannot support it and you have unique tokens for each
played game, you should implement Refresh Session Token method and request
Skywind L2 Technical Integration team to enable this option for your entity.

17 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Please refer to Error Responses for the information about the errors.

Refresh Session Token

Request: POST api.playerapi.com/api/refresh_session HTTP/1.1

This method is used for merchant systems that require implementation of ticket
validation but do not allow a player to play different games with the same session
token. Skywind will call this method to obtain a new token (new_cust_session_id)
when a player opens a new game on the provider’s website after having played
another game.

Please contact Skywind L2 Technical Integration team to enable this option for your
entity.

Request Parameters
Name Located Required Type Notes
in
merch_id body yes string (32) The merchant’s ID (set up on the
Integration phase).
merch_pwd body yes string (48) The merchant’s password (set up on the
Integration phase).
old_game_code body yes string (32) The code of the game the player opened
prior to opening the new game.

new_game_code body yes string (32) The code of the new game that the
player opens.

cust_id body yes string (32) The id of the customer (player).

cust_session_id body yes string (64) The id of the customer’s (player’s)


session preceding the launch of a new
game.

Example of JSON Request

Example
{
"merch_id": "EB",
"merch_pwd": "SoMEpassw",
"old_game_code": "sw_mrmnky",
"new_game_code": "sw_dc",
"cust_id": "1234",
"cust_session_id": "SoMeSeSsionId" //
old customer session id
}

18 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
The System responds to such requests according to the following schema:
Response
Code Schema Example

200 { {
error_code: 0, "error_code": 0,
new_cust_session_id: string "new_cust_session_id": "NewSessionId"
(64) }
}

Please refer to Error Responses below for the information about the errors.

Error Responses
If any issues occur while performing one of the operations, the merchant’s system
should respond with the error codes from the table below. If the System has an error
code that doesn’t equal -1 or 0, we expect to receive HTTP status 200 to parse the
error code and the message.
If the System has an error code that doesn’t equal 0 in the response, it should be
explained in the error_msg.
General Errors
Seamless Text Description
Error Code

0 No errors

-1 Merchant internal error An unexpected error was encountered


while processing the request. It can be
caused by a validation error, for example,
if the merchant doesn’t exist. Operator
can use this error when they don’t expect
such behavior from the provider’s side.

-2 Player not found Returned when the game is launched with


the playerCode which doesn’t exist on the
merchant’s side or if the playerCode has
an invalid value, for example, is empty or
has a number value type.

-3 Game token expired Player session has expired or has invalid


value.

19 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Notes:
- For the response with the HTTP status 200 we apply the mapping of errors depending
on the error_code in the response.
- For the response with the HTTP status which is greater than or equals 400 and is less
than 500 (400 ≤ statusCode < 500) we send MerchantInternalError HTTP: 500,
code: 506, message: ‘Merchant internal error’.

20 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
SKYWIND LOBBY SOLUTION (IWALLET INTEGRATION)

Overview

This option implies that you use the Live Lobby theme provided by Skywind. The tables
in this lobby will be grouped by games. There will be an option to access favorite
tables in My Lobby tab. Also, the table icons will display the minimum bet required to
play and the table limits if the player clicks on the minimum bet size.

It is possible to change the logo, the color scheme and other UI parameters. To do
this, please contact your Account Manager.

21 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Flow
1. Lobby Link
Skywind will provide the Operator with a static link to Skywind Live Lobby with
standard display settings.

2.1. Login Setup for Players with Password

No additional configuration is required for this user type. The player will click on the
lobby link (see point 1) and see the login form like the one below.

2.1. Login Setup for Players with/without Password


This method can be used for both types of players: with and without password, but it
requires implementation of the Validate ticket method on the operator’s side.

The operator is required to develop the API for establishing communication between
their system and Skywind system. The described API must support the following
method:

22 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
• Validate Ticket – the method which enables sending the received ticket to
the operator’s platform for validation. If the ticket is valid, the operator’s server
will reply with the customer’s specific account data. If not, it will send an error.

Once the API with the method described above has been established on the operator’s
side, the operator must provide Skywind with the link according to the example below:
• https://api.example.com/api/validate_ticket

Provided that the Validate Ticket method is implemented, the operator may provide a
dynamic link to the player by appending their authorization ticket to the base Lobby
link according to the example below.

Example:

https://lobby_id-lobby.skywindgroup.com/#/ticket/<PLAYER_TICKET>
https://abcd1234-lobby.skywindgroup.com/#/ticket/1234567890

Clicking this link will send the player ticket to Skywind for validation. After the
validation, the player will appear on the lobby page without having to log in again.
Skywind will verify the player with Validate Ticket method and receive the required
player information.

Directing the Player to the Specific Game Category in the Lobby


This will work only if you opt for the second login setup for players with/without
password option.

To provide the operator with the ability to open the Lobby directly at the page of the
desired game category, the new dynamic URL parameter category has been
introduced. The value of the parameter should be the hashed id of the desired game
category. The category id can be provided by your Integration Manager.

Example:

https://lobby_id-lobby.skywindgroup.com/#/ticket/1234567890?category=<categoryID>
https://abcd1234-lobby.skywindgroup.com/#/ticket/1234567890?category=6ca78adf

Directing the Player to the Lobby in the Specified Language


This will work only if you opt for the second login setup for players with/without
password option.

The Merchant can open the lobby in a specific language supported by the Lobby by using the
dynamic URL parameter language. The parameter value must be the code of the language
that is supported by the Lobby.

23 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Example:

https://lobby_id-lobby.skywindgroup.com/#/ticket/1234567890?language=<code>
https://abcd1234-lobby.skywindgroup.com/#/ticket/1234567890?language=en

Below is the list of the supported languages and their codes:

Language Language code


English en
Simplified Chinese zh-cn
Traditional Chinese zh-tw
Japanese ja
Malay ms
Korean ko
Thai th
Vietnamese vi
Indonesian id
Romanian ro
Italian it
Greek el

Player Ticket Requirements (for the second login option)


For the Skywind System to receive the player’s information in its proper format, the
player ticket needs to meet the following requirements:

• The ticket string length shouldn’t exceed 64 characters.


• The recommended minimum inactivity time after which the ticket session
expires is 30 minutes. After the specified inactivity timeout period the player is
logged out of the Live Lobby. This value is not mandatory and can be set in
accordance with your preference. However, a very short inactivity timeout
period (1-2 minutes) is not advisable as it may negatively impact user
experience.

24 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
3. Ticket Validation
Please contact your Integration Manager to find out whether ticket
validation is required in your case.

The preferrable request and response format of API is JSON.

On receiving the player ticket from you, Skywind will send you the /validate_ticket or
/validate_terminal_ticket call.

Validate Ticket

/validate_ticket is used for opening normal games including slots and for opening
the lobby.

/validate_terminal_ticket is used only for opening the lobby.

You need to inform Skywind which method you will be using so that we can proceed
with the configuration.

Request: POST api.playerapi.com/api/validate_ticket HTTP/1.1


Request: POST api.playerapi.com/api/validate_terminal_ticket HTTP/1.1

This method sends a received ticket from Skywind to the operator’s system for
validation. If the ticket is valid, the operator’s server will reply with the player’s specific
account data. If not, it will send an error.

Below are the parameters that Skywind will send in the request:

Parameters
Name Located in Required Type Notes

ticket body yes string (64) Operator’s ticket, used for


authentication and getting session ID.

merch_id body yes string (32) This parameter refers to the operator’s
ID (set up on the Integration phase).

merch_pwd body yes string (48) This parameter refers to the operator’s
password (set up on the Integration
phase).

ip body no string (16) This parameter shows the player’s IP


address.

Example of JSON Request


{
"ticket": "aXc2!f",
"merch_id": "gcxMerch",
"merch_pwd": "merchPassword"
}
25 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
The System responds to such requests according to the following schema:
Response
Code Schema Example

200 { {
error_code: number, "error_code": 0,
cust_session_id: string, "cust_session_id": "custSessId",
cust_id: string, "cust_id": 1234,
currency_code: string, "currency_code": "GBP",
test_cust: string ("true"| "test_cust": false,
"country": "GB",
"false") or
"game_group": "Double Bets Group"
boolean(true|false,
}
country: string,
game_group: string
}
Notes:
- The optional game_group parameter is used to override game limits. To update
player’s game group and limits, operator needs to create game groups by following
the Skywind ‘Game Group API’ document and set a name of the game group in the
validate_ticket response in the game_group field.

- The cust_id refers to the customer’s ID and includes numbers, letters, special
characters, except a colon.

- If you use terminals and use the same endpoint for the terminal user login as for the
validate_ticket method, it’s mandatory for you to add the language parameter to your
validate_ticket response.

- By default, one cust_session_id should be used for several different games (you
should not have in place a validation that cust_session_id is assigned to a specific
game code). If your system cannot support it and you have unique tokens for each
played game, you should implement Refresh Session Token method and request
Skywind L2 Technical Integration team to enable this option for your entity.

For information on error responses, please see Error Responses.

Refresh Session Token


Request: POST api.playerapi.com/api/refresh_session HTTP/1.1

This method is used for merchant systems that require implementation of ticket
validation but do not allow a player to play different games with the same session
token. Skywind will call this method to obtain a new token (new_cust_session_id)
when a player opens a new game on the provider’s website after having played
another game.

Please contact Skywind L2 Technical Integration team to enable this option for your
entity.

26 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Request Parameters
Name Located Required Type Notes
in

merch_id body yes string (32) The merchant’s ID (set up on the


Integration phase).

merch_pwd body yes string (48) The merchant’s password (set up on the
Integration phase).

old_game_code body yes string (32) The code of the game the player opened
prior to opening the new game.

new_game_code body yes string (32) The code of the new game that the
player opens.

cust_id body yes string (32) The id of the customer (player).

cust_session_id body yes string (64) The id of the customer’s (player’s)


session preceding the launch of a new
game.

Example of JSON Request

Example
{
"merch_id": "EB",
"merch_pwd": "SoMEpassw",
"old_game_code": "sw_mrmnky",
"new_game_code": "sw_dc",
"cust_id": "1234",
"cust_session_id": "SoMeSeSsionId" //
old customer session id
}

The System responds to such requests according to the following schema:

Response
Code Schema Example

200 { {
error_code: 0, "error_code": 0,
new_cust_session_id: string "new_cust_session_id": "NewSessionId"
(64) }
}

For information on error responses, please see Error Responses.

27 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Error Responses
If any issues occur while performing one of the operations, the merchant’s system
should respond with the error codes from the table below. If the System has an error
code that doesn’t equal -1 or 0, we expect to receive HTTP status 200 to parse the
error code and the message.
If the System has an error code that doesn’t equal 0 in the response, it should be
explained in the error_msg.
General Errors
Seamless Text Description
Error Code

0 No errors

-1 Merchant internal error An unexpected error was encountered


while processing the request. It can be
caused by a validation error, for example,
if the merchant doesn’t exist. Operator
can use this error when they don’t expect
such behavior from the provider’s side.

-2 Player not found Returned when the game is launched with


the playerCode which doesn’t exist on the
merchant’s side or if the playerCode has
an invalid value, for example, is empty or
has a number value type.

-3 Game token expired Player session has expired or has invalid


value.

Notes:
- For the response with the HTTP status 200 we apply the mapping of errors depending
on the error_code in the response.
- For the response with the HTTP status which is greater than or equals 400 and is less
than 500 (400 ≤ statusCode < 500) we send MerchantInternalError HTTP: 500,
code: 506, message: ‘Merchant internal error’.

28 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
IMPLEMENT YOUR OWN LOBBY SOLUTION

Overview
Skywind can provide the operator with a set of API methods and socket messages
which will let them receive all the required information for setting up Live Games
previews on their website and launch the live games in fun and real modes.

Integration Setup Flow

1) Start by requesting terminal token (terminalToken) and the list of game codes from
your Account Manager.
2) Get playerUrl and terminalUrl by decoding the received terminalToken.

Token decoding example

const {terminalUrl, playerUrl} = jwt_decode(terminalToken);

3) To display the thumbnail images of the live games, follow the steps below:
a. Send Get List of Games call specifying the codes of the games you wish to
display.
b. In the response, you’ll receive features, tableId and provider.
c. Get the socket endpoint by sending Get Live Manager URL call.
d. Get list of online tables by sending Get List of Live Tables Statuses call.
4) To receive game information via socket, send login message
5) For online table send live-subscribe message. On sending live-subscribe
message, you’ll immediately get the message with the game information in live-
table message.
When the table status changes to “online”, you’ll receive live-table-open message
and can send live-subscribe message
6) When the dealer or the table status changes, you’ll receive live-table-dealer and
live-table-state messages respectively.
7) When the game thumbnail is no longer needed to be displayed for the player, send
live-unsubscribe to stop receiving this type of messages.

Each message contains tableId and provider which correspond to particular game
codes. See point 3)a and b.

8) live-table-dealer and live-table and live-table-open socket messages will


contain a link to the dealer image. You can request the up-to-date image with the
intervals that you define in your system.

The game can be launched in 2 modes: fun and real.

9)

29 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
a. To launch the game in fun mode, you need to get the game launch URL using
Get Fun Mode Game URL method specifying the game code.
b. Alternatively, if you have already set up integration to Skywind slot games, you
can use a regular Get Player Game URL method to get the URLs from the
server.
Both options may require Ticket Validation.
10)
a. To launch the game in real mode, you need to generate the player ticket
meeting the ticket requirements and then call Player Login method. Use the
player token received in the response to send Get Game URL.
b. Alternatively, if you have already set up integration to Skywind slot games, you
can use a regular Get Player Game URL method
Both options may require Ticket Validation.

REST API
Get Live Manager URL
Request: GET [terminalUrl]/v1/terminals/live-manager/url HTTP/1.1

Gets Live Manager URL for the entity.

Parameters

Name Located in Required Type Notes

x-terminal- header yes string Terminal token provided by Skywind


token Account Manager

Response
Code Schema Example

200 { {
url: string, "url": "http://someurl",
path: string "path": "live-manager"
} }

HTTP Code Error Code Description

400 903 Dynamic domain is not defined

Terminal Access Token is


11
missing
401 204 Access token error
208 Terminal token error

30 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Get List of Games
Request: GET [terminalUrl]/v1/terminals/games HTTP/1.1

Gets list of games for the entity filtered by the specified parameters

Parameters

Name Located in Required Type Notes

x-terminal- header yes string Terminal token provided by Skywind AM


token

code query yes string Game code

currency query no string Currency code according to ISO 4217.


The request will only fetch the limits for
the specified currency.

Response
Code Schema Example

200 [ [
{ {
features: { "features": {
live: { "live": {
tableId: string, "tableId": "some_tableId",
provider: string "provider": "some_provider"
} }
} }
] ]

HTTP Code Error Code Description


Terminal Access Token is
11
401 missing
208 Terminal token error

31 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Get Fun Mode Game URL
Request: GET [terminalUrl]/v1/terminals/fun/games/{gameCode} HTTP/1.1

Returns an URL which allows any player to play the specified game in fun mode.

Parameters

Name Located in Required Type Notes

x-terminal- header yes string Terminal token provided by Skywind


token Account Manager

language query no string Language code according to ISO 639-1

Response
Code Schema Example

200 { {
url: string, "url": "http://some-url.com",
token: string "token":
} "oJqXX2tkAADKf7n3MpcM9kVbVk53n"
}

HTTP Code Error Code Description


One of the parents is
62
suspended
400
101 Not a brand
Terminal Access Token is
11
401 missing
208 Terminal token error
51 Could not find entity
404
300 Game not found

32 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Player Login
Request: POST [terminalUrl]/v1/terminals/players/external/login HTTP/1.1

Logs in the specified player (defined by player ticket).

Parameters

Name Located in Required Type Notes

x-terminal- header yes string Terminal token provided by Skywind


token Account Manager

ticket body yes string Player’s ticket

Response
Code Schema Example

200 { {
url: string, "url": "http://live_game.com/",
token: string "token":
} "cM9kVbVk53neuIYI62dEkYdYu"
}

HTTP Code Error Code Description

40 Validation error

One of the parents is


400 62
suspended

712 Player is suspended

Terminal Access Token is


11
401 missing
208 Terminal token error
51 Could not find entity
404
502 Merchant not found
Merchant should have url and
505
500 password in parameters
505 Merchant internal error

33 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Get Game URL
Request: GET [playerUrl]/v1/games/{gameCode} HTTP/1.1

Returns an URL which allows the specified player to play the specified game in real
mode.

Parameters

Name Located in Required Type Notes

x-player- header yes string Player token


token

language query no string Language code according to ISO 639-1

Response
Code Schema Example

200 { {
url: string, "url": "http://live_game.com/",
token: string "token":
} "cM9kVbVk53neuIYI62dEkYdYu"
}

HTTP Code Error Code Description

40 Validation error

One of the parents is


62
suspended

306 Game is suspended

703 IP address cannot be resolved

It is forbidden to start game


708
from unauthorized site
400
712 Player is suspended

Entity is under maintenance,


736 but maintenance url is not
defined

751 Referrer is missing

902 Static domain is not defined

903 Dynamic domain is not defined

401 11 Player Token is missing


34 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
HTTP Code Error Code Description
208 Player Token error
51 Could not find entity
404
502 Merchant not found
Merchant should have url and
505
500 password in parameters
505 Merchant internal error

Get List of Game Categories


Request: GET [playerUrl]/v1/gamecategories HTTP/1.1

Gets list of game categories for the entity filtered by the specified parameters.

Parameters

Name Located in Required Type Notes

x-player-token header yes string Player token

includeGames query no boolean Include games available for entity in


game category

currency query no string Currency code according to ISO 4217.


The request will only fetch the limits
for the specified currency.

gameGroup query no string Game group of player

Response
Code Schema Example
200 [ [
{ {
id: string, "id": "some_category_code",
title: string, "title": "some_category",
games: [ "games": [
{ {
code: string, "code": "some_game_code",
limits: { "limits": {
[currency_code]: {} [currency_code]: {}
}, },
features: { "features": {
live: { "live": {
tableId: string, "tableId":
provider: string "some_tableId",
} "provider":
} "some_provider"
} }

35 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
] }
} }
] ]
}
]

HTTP Code Error Code Description

400 40 Validation error

11 Player Token is missing


401
208 Player Token error
51 Could not find entity
404
502 Merchant not found

Get List of Live Tables Statuses


Request: GET [liveManagerURL]/v2/tables HTTP/1.1
Where liveManagerURL = ${url}/${path}

Gets list of online live tables for the entity.

Parameters

Name Located in Required Type Notes

x-terminal- header yes string Terminal token provided by Skywind


token AM

Response
Code Schema Example

200 [ [
{ {
id: string, "id": "some_table_id”,
provider: string, "provider": "some_provider",
type: string, "type": "some_game_type",
dealer: { "dealer": {
name: string, "name": "some_dealer_name",
picture: string "picture": "some_url"
}, },
language: string (2) "language": "en"
} }
] ]

36 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
HTTP Code Error Code Description
Terminal Access Token is
11
401 missing
208 Terminal token error

Socket Message Definitions

Player Login
Player Login Event example:

{
"event": "login",
"payload": {
"token": "cM9kVbVk53neuIYI62dEkYdYu"
}
}

Field Description
token terminalToken provided by the Account
Manager

Subscribe to Game Events


Subscribe to Game Event example:

{
"event": "live-subscribe",
"payload": {
"feature": "GameFeature",
"tableId": "some_table_id",
"provider": "some_provider"
}
}

Field Description
feature Parameters received in Get List of Games
tableId
provider

37 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Unsubscribe from Game Events
Subscribe to Game Event example:

{
"event": "live-unsubscribe",
"payload": {
"tableId": "some_table_id",
"provider": "some_provider"
}
}

Live Table Open


Live Table Open Event example:

{
"event": "live-table-open",
"payload": {
"provider": "some_provider",
"tableId": "some_table_id",
"tableType": 2,
"dealer": {
"name": "some_name",
"picture": "some_picture_url"
},
"language": "en",
"status": "online" | "offline"
}
}

Live Table Info


Live Table Info Event example:

{
"event": "live-table",
payload: {
"provider": "some_provider",
"tableId": "some_table_id",
"tableType": 2,
"dealer": {
"name": "some_name",
"picture": "some_picture_url"
},
"language": "en",
"status": "online" | "offline",
"seats": {
"seat": "P1" | "P2" | "P3" | "P4" | "P5" | "P6" | "P7" | "D",
"isActive": true,
"playerCode": "some_player_code",
"playerHash": "hash"
}[]
}
}

38 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
Live Table Dealer Changed
Live Table Dealer Changed Event example:

{
"event": "live-table-dealer",
"payload": {
"provider": "some_provider",
"tableId": "some_table_id",
"tableType": 2,
"dealer": {
"name": "some_name",
"picture": "some_picture_url"
},
"language": "en"
}
}

Live Table Status Changed


Live Table Status Changed Event example:

{
"event": "live-table-state",
"payload": {
"provider": "some_provider",
"tableId": "some_table_id",
"tableType": 2,
"status": "online" | "offline"
}
}

Live Table Blackjack Seat Selected


Live Table Blackjack Seat Selected Event example:

{
"event": "live-table-seat",
"payload": {
"provider": "some_provider",
"tableId": "some",
"tableType": 2,
"seat": "P1" | "P2" | "P3" | "P4" | "P5" | "P6" | "P7" | null,
"previousSeat": "P1" | "P2" | "P3" | "P4" | "P5" | "P6" | "P7",
"playerCode": "some_player_code",
"playerHash": "hash"
}
}

39 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved
DOCUMENT HISTORY

Version Date Author Change Description

1.0 07.05.2021 Viktoria Buhtarevich Initial Document Created

1.1 09.06.2021 Viktoria Buhtarevich Added ‘Direct launch: Advanced


Live Games Integration’ chapter.

1.2 19.10.2021 Viktoria Buhtarevich Added method Refresh Session


Token for Wallet and Seamless
integration and for Direct
Launch.

Added a note about the


possibility to implement Refresh
Session Token method by the
operators that require unique
tokens for different games to
Validate Ticket method for
Wallet and Seamless integration
and for Direct Launch.

1.4 18.02.2022 Vladimir Minakov Added Get List of Game


Categories and Get List of Live
Tables Statuses methods in
REST API.
Added Live Table Open and Live
Table Blackjack Seat Selected
Event examples; updated Live
Table Info Event example in
Socket Message Definitions.

1.5 12.07.2022 Yevheniia Liashenko Added a note about


liveManagerURL in Get List of
Live Tables Statuses.

40 of 40
Copyright © 2022 Skywind Holdings Ltd.
All Rights Reserved

You might also like