NAV

Overview

This document serves as a guide to integration of direct partners.

Definitions

Partner

A partner is responsible for supplying the provider with players and managing their wallet accounts. Casinos act as partners.

Provider

A provider supplies virtual space for betting activities. Winfinity acts as a provider.

Player

A player is a user who has a gaming account with a partner. Each user has a unique ID uid.

Game

The term ‘game’ refers to what is traditionally known as a ‘round’. Each table hosts multiple games during its active hours. Each game has a unique game ID gid. All players participate in the same round with the identical game identifier gid if they are playing at the same table simultaneously.

Table

A table is a physical setup with gaming equipment on which games are played.

Transactions

Financial transactions include payment transactions. Each of them has a transaction ID tid.

There are three types of transactions available: PayIn, PayOut, and Refund.

PayIn
A payin represents a payment transaction where money is deducted from a player’s account for betting purposes. It is considered a betting or debit operation.

PayOut
A payout transaction credits an amount of money to a player’s account, signifying the settlement of a bet. It is considered a credit operation. A payout is always associated with a specific payin transaction, and the reference/associated ID refid equals to the payin tid.

Refund
Refund is the cancellation of a specific payin. The refund tid corresponds to the payin tid.

Promo PayOut
Promotional bonus payout in case a player has won a reward. A promo payout is always associated with a specific payin transaction, and the reference/associated ID refid equals to the payin tid.

Master session

The master session msid is a global session within our system, and it is associated with the user id uid and the selected currency cur.

Table session

The table session sid tracks the activity of a master session ID msid within a specific table tbid.

Termination

The terminate or terminateAll command manually calls the master session msid to expire. The following notification is displayed: “The session has expired, operations on it are no longer accepted.”

Interaction manual

Partner registration

To register a partner with Winifnity Web BackOffice, contact our account manager with the info on:

Once your site is registered with Winfinity, you will receive a pair of credentials:

You need this pair to get the authorization token.

Both terms, client_id and site_id, are used interchangeably.

General

  1. The partner initiates the startMasterSession method via the Winfinity API and receives an iFrame URL along with a master session ID.
  2. The partner then redirects the player to the provided iFrame URL or embeds this URL within their own iFrame.
  3. When a player joins a table, Winfinity generates a session ID and forwards it to the partner. Subsequently, Winfinity utilizes table session sid and master session msid IDs to interact with the partner for conducting monetary transactions, retrieving user information, and other necessary actions.
  4. Once the game starts, the user is able to place bets. For additional information, please refer to the Interaction Manual.
  5. Partners may notify Winfinity of changes to users’ balances using the changeUserBalance method within the Winfinity API.

Sessions

Our system utilizes two types of sessions:

Master session specifics

Master session relationship

erDiagram
    USER ||--o{ MASTER_SESSION : has
    USER {
        string uid
        string user_name
    }
    MASTER_SESSION {
        string msid
        string uid
        string cur
    }

Master session lifecycle

sequenceDiagram
rect  rgb(0, 0, 0)
Player ->>+ Partner: select Winfinity
Partner->>+Winfinity: start master session 
uid, cur Winfinity-->>- Partner: frameUrl, msid Partner-->>- Player: open Winifinity frameUrl end opt join a table Player-->Winfinity : join a table, play game (see in table session section) end rect rgb(0, 0, 0) note right of Winfinity: All table sessions have already expired
No actions in the lobby for some time par logout player Winfinity-->> Player: redirect to partner page and master session expired Winfinity-->> Partner: master session expired
com=6, msid, uid end end

Master session generation

flowchart  TD
startMasterSession([Winfinity recieves a start master session request])
startMasterSession -- startMasterSession with uid and cur -->
if_msid_exist{if msid exists for 
uid and currency
and msid has not expired} if_msid_exist -- no --> generateNew generateNew(generate new msid) if_msid_exist -- yes, msid already exists --> existing existing(return existing msid) generateNew -- new msid --> response existing -- existing msid --> response response([send response to partner])

This global session is linked to a user’s ID (uid) and their chosen currency (cur). A new msid is assigned for each unique uid and cur combination or when an existing msid expires.

Table session specifics

Session relationship

erDiagram
    USER ||--o{ MASTER_SESSION : has
    USER {
        string uid
        string user_name
    }
	MASTER_SESSION ||--o{ SESSION : has
    MASTER_SESSION {
        string msid
        string uid
        string cur
    }
    SESSION {
        string sid
        string msid
        string tbid
    }

Session lifecycle

sequenceDiagram
Player-->Partner: select Winifinity 
(see in master session section) rect rgb(0, 0, 0) Player->>+Winfinity: join a table Winfinity->>+Partner: start game session
com=7, sid, msid, tbid, uid alt succees Partner-->>-Winfinity: 200 ok Winfinity-->>- Player: open table rect rgb(30, 34, 36) loop game Player-->Winfinity: play game
see in game flow section end end note right of Winfinity: No actions at selected table
for some time par logout to lobby Winfinity-->> Player: redirect to lobby page and session expired Winfinity-->> Partner: session expired
com=4, sid, msid, uid end else create session failed Partner-->>Winfinity: error activate Winfinity Winfinity-->> Player: redirect to the lobby page deactivate Winfinity end end

Table session generation

flowchart  TD
joinTable([player joins a table])
joinTable -- msid, tbid -->
if_sid_exist{if sid exists for 
msid and tbid
and sid not expired} if_sid_exist -- no --> generateNew generateNew(generate new sid) -- msid, uid, tbid, new sid --> send(send com=7 to partner) if_sid_exist -- yes, load table tbid for existing sid --> showTable send -- show table tbid for new sid --> showTable showTable([show the table to the player])

This specialized session monitors master session’s (msid) activities within a specific table (tbid). A unique sid is generated when a player first joins a table. This sid remains consistent for the player for all subsequent games at the same table, provided it has not expired. Parameter sid can be disabled on Winfinity side by reaching out to Winfinity team, meaning that Table Session Registration (com=7) and Table Session Expiration (com=4) notifications will not be sent out. Without the sid parameter in request you can rely on master session and table identifiers, getting rid of table sessions completely.

Notes

Commands from Winfinity always include the msid. Should the integration of table sessions (sid) be unnecessary or challenging, partners may opt to omit the ‘Expire Table Session’ command (com=4) and disregard the sid in commands.

Game flow

sequenceDiagram
Player-->Partner: select Winifinity 
(see in master session section) opt join table Player-->Winfinity: join a table
(see in table session section) rect rgb(0, 0, 0) loop for each round, until session is expired or table is closed loop place bets note over Winfinity, Player: Attention: it is a loop section, because multiple pay ins are available Winfinity--> Player: betting phase end loop for each successful bet note over Winfinity, Player: Attention: it is a loop section, because multiple pay outs are available Winfinity--> Player: deсision phase end Winfinity--> Player: finish phase end end end

A game is divided into three phases:

Betting phase

sequenceDiagram
Player-->Partner: select Winifinity 
(see in master session section) opt join table Player-->Winfinity: join a table
(see in table session section) loop for each round, until session expired or table closed Winfinity-->> Player: game started activate Player rect rgb(0, 0, 0) loop place bets Player->>+Winfinity: place bets Winfinity->>+Partner: payin
com=1, sid, msid, tbid, uid, cur ... alt succeed Partner-->>-Winfinity: ok Winfinity-->>-Player: bet accepted else payin failed Partner-->>Winfinity: error activate Winfinity Winfinity-->>Player: bet rejected deactivate Winfinity else Winfinity didn't recieve response in time Partner--x+ Winfinity: timeout Winfinity-->>-Player: bet rejected loop retry refund untill successful or retry count is over Winfinity->>+Partner: cancelled
com=3, sid, msid, tbid, uid, cur ... Partner-->>-Winfinity: response end % loop refund end end % place bet loop end loop for each successful bet Winfinity--> Player: desision phase end Winfinity--> Player: finish phase end end

Once a game has started, players can place bets. During the betting phase, Winfinity can send payins com=1. It is possible for multiple payins to be sent for the same player in the same game.

If we do not receive a response or receive a timeout response during the betting phase, we initiate refund requests com=3 for these payins. The refund message contains a transaction id tid, which matches the tid of the payin that needs to be canceled.

Winfinity will keep retrying the refund process until it succeeds. Refund success refers to any received response, excluding timeouts or 5xx status codes.

Decision phase

sequenceDiagram
Player-->Partner: select Winifinity 
(see in master session section) opt join table Player-->Winfinity: join a table
(see in table session section) loop for each round, until session expired or table closed Winfinity-->> Player: game started activate Player loop place bets Player-->Winfinity: place bets
see previos chapter end % loop place bets rect rgb(0, 0, 0) loop for each successful bet opt if bet wins par notify player about win Winfinity-->> Player: win deactivate Player activate Winfinity and send payout to partner Winfinity->>+Partner: payout
com=2, sid, msid, tbid, uid, cur ... alt payout succeed Partner-->>-Winfinity: 200 ok else error Partner-->> Winfinity: error else timeout Partner--x Winfinity: timeout loop retry payout until any response is received, except timeout or retry count exceeded Winfinity->>+Partner: payout
com=2, sid, msid, tbid, uid, cur ... Partner-->>-Winfinity: response end %loop retry payout end %payout state end %par win end %opt win end %bets end Winfinity--> Player: finish phase end %games end

If a player has accepted payins and some of their bets win in the game, Winfinity will send payout requests com=2 for these winning bets. Each payout message contains a reference to the corresponding payin in the refid field. This allows us to precisely identify which bets have resulted in a win. Even if some bets were previously canceled for this player during the game, we can always process payouts for the successful bets.

In case we encounter a timeout while processing payouts, we will make repeated attempts to perform the same payout until it succeeds. Payout success refers to any received response, excluding timeouts or 5xx status codes.

Finish phase

sequenceDiagram
Player-->Partner: select Winifinity 
(see in master session sectio) opt join table Player-->Winfinity: join a table
(see in table session section) loop for each round, until session expired or table closed Winfinity-->> Player: game started activate Player loop place bets Player-->>Winfinity: place bets (see previous chapter) activate Winfinity end % place bets loop for each successful bet Winfinity-->> Player: decision phase (see previous chapter) end % decision phase rect rgb(0, 0, 0) par notify player about game finishing Winfinity-->> Player: game finished deactivate Player and send finish to partner
in case the Zero Win message is not enabled Winfinity->>+Partner: finish
com=8, sid, msid, tbid, uid, cur ... Partner-->>-Winfinity: 200 ok deactivate Winfinity end %finish phase end end %games end %take table

When a player places bets in a game, regardless of whether they are accepted or not, we will send a ‘finish’ message com=8 for that player. This finish message is sent only after we have received responses for all payment transactions (payin, payout, refund), including any retries for payouts or refunds. Therefore, the finish message indicates that all operations for a specific player will conclude during the round in which the player participated. Alternatively, a Zero Win message can be sent instead. These two approaches signify the end of all operations and are mutually exclusive.

Game scenarios

Let’s define a user uid=u1, with currency cur=eur, who has a master session msid=m1, plays at table tbid=tb1, with game type gtp=gtp1, and session sid=s1.

All payment commands will contain:
msid = m1
sid = s1
tbid = tb1
gtp = gtp1
uid = u1
cur = eur

Game 1: all bets accepted, there are no winning bets

sequenceDiagram
loop 
Player-->>+Winfinity: place bet
end
note right of Winfinity: Bets were split into two payins
Winfinity -->> Partner: com: 1, tid: 1
activate Partner
Winfinity -->> Partner: com: 1, tid: 2
activate Partner
Partner -->> Winfinity: 200
deactivate Partner
Partner -->> Winfinity: 200
deactivate Partner
Winfinity -->>- Player: bets accepted
Winfinity -->> Player: there are no wins
Winfinity -->> Partner: com: 8

The player places their first bets, which will be split into two payments:

  1. Winfinity sends the first payin to partner:
    com = 1
    gid = 1
    tid = 1
    timestamp = 1
    {common part, see above}

  2. Winfinity sends the second payin to partner:
    com = 1
    gid = 1
    tid = 2
    timestamp = 2
    {common part}

  3. As there are no wins, Winfinity sends a finish round command: com = 8
    gid = 1
    timestamp = 3
    {common part}

Game 2: one timeout, there are no winning bets

sequenceDiagram
loop 
Player-->>+Winfinity: place bet
end
note right of Winfinity: Bets were split into two payins
Winfinity -->> Partner: com: 1, tid: 3
activate Partner
Winfinity -->> Partner: com: 1, tid: 4
activate Partner
Partner -->> Winfinity: 200
note right of Winfinity: Time for waiting for a response 
from partner is finished Winfinity -->>- Player: some bets are accepted
some bets are rejected deactivate Partner Winfinity -->> Player: there are no wins Partner --x Winfinity: there could be any response
500, 200, 400
it doesn't matter, because desision phase is finished deactivate Partner activate Winfinity Winfinity -->>+ Partner: com: 3, tid: 3 Partner -->>- Winfinity: 200 deactivate Winfinity Winfinity -->> Partner: com: 8

The player places their first bets, which will be split into two payments:

  1. Winfinity sends a first payin to partner:
    com = 1
    gid = 2
    tid = 3
    timestamp = 4
    {common part}

  2. Winfinity sends a second payin to partner:
    com = 1
    gid = 2
    tid = 4
    timestamp = 5
    {common part}

  3. There is no response from partner for the first payment in this game, so Winfinity sends a refund command:
    com = 3
    gid = 2
    tid = 3 (tid of the first payin, because it is not a new transaction, it is a cancellation of the existing one)
    refid = 3 (tid of the first payin)
    {common part}

  4. Finish Round command will only be sent after payment and refund commands:
    com = 8
    gid = 2
    timestamp = 7
    {common part}

Game 3: two bets, first bet wins

sequenceDiagram
loop 
Player-->>+Winfinity: place bet
end
note right of Winfinity: Bets were split into two payins
Winfinity -->> Partner: com: 1, tid: 5
activate Partner
Winfinity -->> Partner: com: 1, tid: 6
activate Partner
Partner -->> Winfinity: 200
Partner -->> Winfinity: 200
deactivate Partner
Winfinity -->>- Player: bets accepted

Winfinity -->> Player: win
Winfinity -->>+ Partner: com: 2, tid: 7, refid: 6
Partner -->>- Winfinity: 200
Winfinity -->> Partner: com: 8

The player places their first bets, which will be split into two payments:

  1. Winfinity sends a first payin to partner:
    com = 1
    gid = 3
    tid = 5
    timestamp = 8
    {common part}

  2. Winfinity sends a second payin to partner:
    com = 1
    gid = 3
    tid = 6
    timestamp = 9
    {common part}

  3. There are no refunds, first bet wins, so Winfinity sends a payout command:
    com = 2
    gid = 3
    tid = 7 new tid for a payout command
    timestamp = 10
    refid = 5 tid of the first payment
    {common part}

  4. Finish Round command will only be sent after payment commands:
    com = 8
    gid = 3
    timestamp = 11
    {common part}

Game 4: two bets, one refund, one win

sequenceDiagram
loop 
Player-->>Winfinity: place bet
activate Winfinity
end
note right of Winfinity: Bets were split into two payins
Winfinity -->> Partner: com: 1, tid: 8
activate Partner
Winfinity -->> Partner: com: 1, tid: 9
activate Partner
Partner -->> Winfinity: 200
deactivate Partner
Winfinity -->> Player: some bets are accepted 
some bets are rejected deactivate Winfinity Partner --x Winfinity: there could be any response
500, 200, 400
it doesn't matter, because the decision phase is finished deactivate Partner activate Winfinity par Winfinity -->>+ Partner: com: 3, tid: 8 Partner -->>- Winfinity: 200 deactivate Winfinity and Winfinity -->> Player: you win and Winfinity -->>+ Partner: com: 2, tid: 10, refid: 9 Partner -->>- Winfinity: 200 end Winfinity -->> Partner: com: 8

The player places their first bets, which will be split into two payments:

  1. Winfinity sends the first payin to partner:
    com = 1
    gid = 4
    tid = 8
    timestamp = 11
    {common part}

  2. Winfinity sends the second payin to partner:
    com = 1
    gid = 4
    tid = 9
    timestamp = 12
    {common part}

  3. There is no response for the first payin, so Winfinity refunds it:
    com = 3
    gid = 4
    tid = 8 same as the second payin tid, which should be refunded
    refid = 8 same as payin tid
    {common part}

  4. Winfinity sends a payout command for the second payin:
    com = 2
    gid = 4
    tid = 10 new tid, because it is a new payment
    timestamp = 14
    refid = 9 same as the first payin tid, because the first bet won
    {common part}

  5. Finish Round command will only be sent after payment and refund commands:
    com = 8
    gid = 4
    timestamp = 15
    {common part}

Winfinity API

General info

Obtain access token

After partner registration you obtain client_id and client_secret. You need these parameters to obtain an access token.

Request

Request example

curl --location '{{gw_api_url}}/connect/token' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
    "grant_type": "client_credentials",
    "client_id": "630f3428de590a4b876cfc41",
    "client_secret": "c680aeba-9173-46bc-979b-b218244fbdfc",
    "scope": [
        "partner_client.call"
    ]
}'
Parameter Type Description
client_id string client_id you obtain after partner registration
client_secret string client_secret you obtain after partner registration
scope string[] ["partner_client.call"]
grant_type string client_credentials

Method: POST

Successful response

Successful response example

HTTP status code 200
{
  "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjhFM0Y5QjBGODI4NTdCMjAwNTIxNjUwNDAzNzIyOEI0QTYxMjJFRjNSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImpqLWJENEtGZXlBRklXVUVBM0lvdEtZU0x2TSJ9.eyJuYmYiOjE2OTk5MDk2NTgsImV4cCI6MTY5OTkxMzI1OCwiaXNzIjoiaHR0cDovL3Bhc3Nwb3J0IiwiYXVkIjoiYmFja29mZmljZV9hcGkiLCJjbGllbnRfaWQiOiJwb3N0bWFuX2NsaWVudCIsImNsaWVudF9yb2xlIjoicG9zdG1hbiIsImp0aSI6IkExMjc3MTBFOUM5MUIzRUEzQUQxMEYzREE1QjFGOTEyIiwiaWF0IjoxNjk5OTA5NjU4LCJzY29wZSI6WyJiYWNrb2ZmaWNlX2FwaS5jYWxsIl19.gtH9v6AWjPdTldIRy78wXz_aXqMhWCG8PmFip77lDPh23AQVZwMmIgw8yHiNSMNQlsnwt67F49YJtjPdPI9JlYYphQpdf_KPeIMjEp5F0JNjJkBCZrw74l55kxC6sXuXUp11dmR8iQEt4SHJzFWlVluay3q8UxiA5v2BciOx8vyYPzRJX8IexRE0OabLv1yQSQ_ML_XFhtFOH6bQ6ARp1IYfEHMLZCjjPsZ9lcyW2IrQ5_E_2AmklHX-dWJuAaK6MQ2PUizt1vIf4BPI39xXuajqubCxABI31iNMLZwY6YtiEcFWyUjveZ3uWk88U5m_Wc6A329iseeDikze32XlFg",
  "expires_in": 3600,
  "token_type": "Bearer",
  "scope": "partner_client.call"
}
Parameter Type Description
access_token string you need to use it in every response to Winfinity Authorization: Bearer {{access_token}}
expires_in long after this time your access_token will be invalid
token_type string token type in Authorization header
scope string same as you requested partner_client.call

Failed response

There could be 4xx, 5xx HTTP status codes

Fail response example

HTTP status code 400
"{\"error\":\"invalid_client\"}"

Obtain available tables

Returns a list of tables available for users from the partner’s site. These tables will be shown from our lobby with a possibility to display them on the partner’s site. Explicitly defined currency limits are returned by default. If you need other currencies, use the optional currencies param in the query.

Request

Request example

curl --location 'https://{{gw_api_url}}/partners/tables?partnerSiteId=630f3428de590a4b876cfc41&currencies=USD&currencies=VND' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjhFM0Y5QjBGODI4NTdCMjAwNTIxNjUwNDAzNzIyOEI0QTYxMjJFRjNSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImpqLWJENEtGZXlBRklXVUVBM0lvdEtZU0x2TSJ9.eyJuYmYiOjE2OTk5MDk2NTgsImV4cCI6MTY5OTkxMzI1OCwiaXNzIjoiaHR0cDovL3Bhc3Nwb3J0IiwiYXVkIjoiYmFja29mZmljZV9hcGkiLCJjbGllbnRfaWQiOiJwb3N0bWFuX2NsaWVudCIsImNsaWVudF9yb2xlIjoicG9zdG1hbiIsImp0aSI6IkExMjc3MTBFOUM5MUIzRUEzQUQxMEYzREE1QjFGOTEyIiwiaWF0IjoxNjk5OTA5NjU4LCJzY29wZSI6WyJiYWNrb2ZmaWNlX2FwaS5jYWxsIl19.gtH9v6AWjPdTldIRy78wXz_aXqMhWCG8PmFip77lDPh23AQVZwMmIgw8yHiNSMNQlsnwt67F49YJtjPdPI9JlYYphQpdf_KPeIMjEp5F0JNjJkBCZrw74l55kxC6sXuXUp11dmR8iQEt4SHJzFWlVluay3q8UxiA5v2BciOx8vyYPzRJX8IexRE0OabLv1yQSQ_ML_XFhtFOH6bQ6ARp1IYfEHMLZCjjPsZ9lcyW2IrQ5_E_2AmklHX-dWJuAaK6MQ2PUizt1vIf4BPI39xXuajqubCxABI31iNMLZwY6YtiEcFWyUjveZ3uWk88U5m_Wc6A329iseeDikze32XlFg' \
Parameter Type Description
partnerSiteId string client_id you obtain after partner registration
currencies string optional Three letter currency code. Max 50 currencies. supported currencies

Method: GET

Headers

Success response

Response: HTTP 200

{
  "data": [
    {
      "id": "1fec54685b50bcd660332c12",
      "gameType": "Roulette",
      "name": "Venice Roulette",
      "workingSchedule24By7": true,
      "workingSchedule": "09:00-12:00",
      "onlinePlayersCount": 4,
      "limits": {
        "EUR": {
          "minBetLimit": 0.1,
          "maxBetLimit": 900
        },
        "USD": {
          "minBetLimit": 1,
          "maxBetLimit": 100
        },
        "VND": {
          "minBetLimit": 0.01,
          "maxBetLimit": 0.1
        }
      },
      "lobbyCategories": [
        {
          "name": "Roulette",
          "index": 0,
          "subCategories": [
            {
              "name": "Venice",
              "description": "VIP",
              "index": 0
            }
          ]
        },
        {
          "name": "custom",
          "index": 1,
          "subCategories": []
        }
      ],
      "branding": "General",
      "demoUrl": "https://demo.game.winfinity.live"
    }
  ]
}
Parameter Type Description
id string Identifier of a table (game)
gameType string Type of the game. See below
name string Name of a table (game)
description string optional
workingSchedule24By7 bool Indicates whether the game works 24/7
workingSchedule string Used if workingSchedule24By7 is false. Format example: “18:00-21:00”
onlinePlayersCount integer Current online players count
limits object A map with bet limits by currency
lobbyCategories object Array of lobby categories this table belongs to
branding string Type of a branding. See below
demoUrl string The URL to launch a free-play game mode

Limit: The key of the map is 3 or 4 letters identifier of currency in upper case (ISO 4217)

Parameter Type Description
minBetLimit number
maxBetLimit number

Lobby category:

Parameter Type Description
name string Name of the lobby category
index number Position inside this lobby category

Branding types:

Failed response

Fail response example

HTTP status code 400
{
    "error": {
        "code": 400,
        "message": "Bad request"
    }
}

There could be 4xx, 5xx HTTP status codes.

Start master session

Log in a player into the Winfinity system.

Request

Request

curl --location 'https://{{gw_api_url}}/partners/startMasterSession' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer  eyJhbGciOiJSUzI1NiIsImtpZCI6IjhFM0Y5QjBGODI4NTdCMjAwNTIxNjUwNDAzNzIyOEI0QTYxMjJFRjNSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImpqLWJENEtGZXlBRklXVUVBM0lvdEtZU0x2TSJ9.eyJuYmYiOjE2OTk5MDk2NTgsImV4cCI6MTY5OTkxMzI1OCwiaXNzIjoiaHR0cDovL3Bhc3Nwb3J0IiwiYXVkIjoiYmFja29mZmljZV9hcGkiLCJjbGllbnRfaWQiOiJwb3N0bWFuX2NsaWVudCIsImNsaWVudF9yb2xlIjoicG9zdG1hbiIsImp0aSI6IkExMjc3MTBFOUM5MUIzRUEzQUQxMEYzREE1QjFGOTEyIiwiaWF0IjoxNjk5OTA5NjU4LCJzY29wZSI6WyJiYWNrb2ZmaWNlX2FwaS5jYWxsIl19.gtH9v6AWjPdTldIRy78wXz_aXqMhWCG8PmFip77lDPh23AQVZwMmIgw8yHiNSMNQlsnwt67F49YJtjPdPI9JlYYphQpdf_KPeIMjEp5F0JNjJkBCZrw74l55kxC6sXuXUp11dmR8iQEt4SHJzFWlVluay3q8UxiA5v2BciOx8vyYPzRJX8IexRE0OabLv1yQSQ_ML_XFhtFOH6bQ6ARp1IYfEHMLZCjjPsZ9lcyW2IrQ5_E_2AmklHX-dWJuAaK6MQ2PUizt1vIf4BPI39xXuajqubCxABI31iNMLZwY6YtiEcFWyUjveZ3uWk88U5m_Wc6A329iseeDikze32XlFg' \
--data '{
    "user": {
        "partnerSiteId": "630f3428de590a4b876cfc41",
        "userId": "3899",
        "language": "EN",
        "timeZoneOffset": "04:00:00",
        "screenName" : "test1701859045485"
    },
    "tableId": "633565bd9a0db90b1f931517",
    "currency": "RUB",
    "country": "RU",
    "device": "mobile",
    "ipAddress": "80.251.117.218",
    "balance": 3248.02,
    "test" : true,
    "lobbyCategory": "Roulette",
    "urls" : {
        "signOutUrl" : "http://signout.test",
        "responsibleGamblingUrl" : "http://gamblin.test",
        "cashierUrl" : "http://cashier.test",
        "lobbyUrl" : "http://lobby.test"
    }
}'
Parameter Type Description
tableId string optional Identifier of a table (game) for directly launching the game. If tableId parameter is not passed in the request, the user will end up in the lobby.
currency string supported currencies
country string 2-letter country identifier (ISO 3166 )
device string Device, which can be identified from Player’s User-Agent
ipAddress string Player’s IP address (IPv4)
lobbyCategory string optional Optional lobby category name to open in the lobby. Available values: Roulette, BlackJack, BankerGames, GameShows.
user User
urls Urls optional
balance number optional Initial balance. Should always be sent, if possible. We will make a balance call right after this, if it is not sent.
test bool optional If true, the related transactions will be ignored in reports.
stage string optional Table stage. Available values: Monaco, Symphony, Royal, Venice, Bar, Le Rouge, BigBang, Tao Yuan, Shangrila, Luxe, Golden
group string optional Table group. Available values: Private

Urls:

Parameter Type Description
signOutUrl string optional URL where the user will be redirected after their playing session finishes
responsibleGamblingUrl string optional Responsible Gambling URL
cashierUrl string optional URL where the user will be redirected in order to make a deposit
lobbyUrl string optional URL where the user will be redirected after exiting a table (game)

User:

Parameter Type Description
partnerSiteId string Partner’s identifier (obtained from account manager)
userId string Identifier of a player on the partner’s side
language string 2-letter language identifier (ISO 639-1, download)
timeZoneOffset string optional Format example: “04:00:00” - 4h
screenName string optional If null, a random name will be set

Method: POST

Headers

Success response

Response: HTTP 200

{
  "data": {
    "frameUrl": "https://lobby_frame_url",
    "masterSessionId": "21277bf55bb24e15ac30be8fc510ce02"
  }
}
Parameter Type Description
frameUrl string Url for Winfinity game or lobby. Redirect user to this url or open it in your own iFrame.
masterSessionId string We will use this value as msid in request to partner

Failed response

Error response example

HTTP status code 400
{
  "error": {
    "code": 602,
    "message": "Current user is blocked "
  }
}

There could be 4xx, 5xx HTTP status codes

Error code in message 4xx, 5xx, 6xx, 7xx

Error code Message Meaning
602 Current user is blocked
603 Player from this country is not allowed
701 Game is not available right now Selected table is not active in our system, this table could be in lobby, please check available tables
702 Currency is not allowed
703 Partner site does not exist
704 Country is not allowed

Start demo session

Creates a demo session for unregistered players without requiring user credentials. Betting is disabled in demo sessions — they are intended for observation purposes only. Please contact your account manager to enable this feature.

Request

Request

curl --location 'https://{{gw_api_url}}/partners/startDemoSession' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer  eyJhbGciOiJSUzI1NiIsImtpZCI6IjhFM0Y5QjBGODI4NTdCMjAwNTIxNjUwNDAzNzIyOEI0QTYxMjJFRjNSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImpqLWJENEtGZXlBRklXVUVBM0lvdEtZU0x2TSJ9.eyJuYmYiOjE2OTk5MDk2NTgsImV4cCI6MTY5OTkxMzI1OCwiaXNzIjoiaHR0cDovL3Bhc3Nwb3J0IiwiYXVkIjoiYmFja29mZmljZV9hcGkiLCJjbGllbnRfaWQiOiJwb3N0bWFuX2NsaWVudCIsImNsaWVudF9yb2xlIjoicG9zdG1hbiIsImp0aSI6IkExMjc3MTBFOUM5MUIzRUEzQUQxMEYzREE1QjFGOTEyIiwiaWF0IjoxNjk5OTA5NjU4LCJzY29wZSI6WyJiYWNrb2ZmaWNlX2FwaS5jYWxsIl19.gtH9v6AWjPdTldIRy78wXz_aXqMhWCG8PmFip77lDPh23AQVZwMmIgw8yHiNSMNQlsnwt67F49YJtjPdPI9JlYYphQpdf_KPeIMjEp5F0JNjJkBCZrw74l55kxC6sXuXUp11dmR8iQEt4SHJzFWlVluay3q8UxiA5v2BciOx8vyYPzRJX8IexRE0OabLv1yQSQ_ML_XFhtFOH6bQ6ARp1IYfEHMLZCjjPsZ9lcyW2IrQ5_E_2AmklHX-dWJuAaK6MQ2PUizt1vIf4BPI39xXuajqubCxABI31iNMLZwY6YtiEcFWyUjveZ3uWk88U5m_Wc6A329iseeDikze32XlFg' \
--data '{
    "partnerSiteId": "630f3428de590a4b876cfc41",
    "language": "EN",
    "timeZoneOffset": "04:00:00",
    "tableId": "633565bd9a0db90b1f931517",
    "country": "RU",
    "device": "mobile",
    "ipAddress": "80.251.117.218",
    "test" : true,
    "lobbyCategory": "Roulette",
    "urls" : {
        "signOutUrl" : "http://signout.test",
        "responsibleGamblingUrl" : "http://gamblin.test",
        "cashierUrl" : "http://cashier.test",
        "lobbyUrl" : "http://lobby.test"
    }
}'
Parameter Type Description
partnerSiteId string Partner’s identifier (obtained from account manager)
language string 2-letter language identifier (ISO 639-1)
timeZoneOffset string optional Format example: “04:00:00” - 4h
tableId string optional Identifier of a table (game) for directly launching the game. If not passed, the user will end up in the lobby.
country string optional 2-letter country identifier (ISO 3166)
device string optional Device, which can be identified from Player’s User-Agent
ipAddress string optional Player’s IP address (IPv4)
lobbyCategory string optional Optional lobby category name to open in the lobby. Available values: Roulette, BlackJack, BankerGames, GameShows.
urls Urls optional
test bool optional Indicates whether the session is created for testing purposes
stage string optional Table stage. Available values: Monaco, Symphony, Royal, Venice, Bar, Le Rouge, BigBang, Tao Yuan, Shangrila, Luxe, Golden
group string optional Table group. Available values: Private

Urls:

Parameter Type Description
signOutUrl string optional URL where the user will be redirected after their playing session finishes
responsibleGamblingUrl string optional Responsible Gambling URL
cashierUrl string optional URL where the user will be redirected in order to make a deposit
lobbyUrl string optional URL where the user will be redirected after exiting a table (game)

Method: POST

Headers

Success response

Response: HTTP 200

{
  "data": {
    "frameUrl": "https://lobby_frame_url"
  }
}
Parameter Type Description
frameUrl string Url for Winfinity game or lobby. Redirect user to this url or open it in your own iFrame

Failed response

Error response example

HTTP status code 400
{
  "error": {
    "code": 703,
    "message": "Partner site does not exist"
  }
}

There could be 4xx, 5xx HTTP status codes

Error code in message 4xx, 5xx, 6xx, 7xx

Error code Message Meaning
701 Game is not available right now Demo sessions are not enabled in our system or selected table is not active in our system, this table could be in lobby, please check available tables
703 Partner site does not exist
704 Country is not allowed
705 Demo sessions are not allowed

Terminate master session

Terminate all

This endpoint terminates all partner master sessions.

Request

Request example

curl --location 'https://{{gw_api_url}}/partners/terminateAll' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer  eyJhbGciOiJSUzI1NiIsImtpZCI6IjhFM0Y5QjBGODI4NTdCMjAwNTIxNjUwNDAzNzIyOEI0QTYxMjJFRjNSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImpqLWJENEtGZXlBRklXVUVBM0lvdEtZU0x2TSJ9.eyJuYmYiOjE2OTk5MDk2NTgsImV4cCI6MTY5OTkxMzI1OCwiaXNzIjoiaHR0cDovL3Bhc3Nwb3J0IiwiYXVkIjoiYmFja29mZmljZV9hcGkiLCJjbGllbnRfaWQiOiJwb3N0bWFuX2NsaWVudCIsImNsaWVudF9yb2xlIjoicG9zdG1hbiIsImp0aSI6IkExMjc3MTBFOUM5MUIzRUEzQUQxMEYzREE1QjFGOTEyIiwiaWF0IjoxNjk5OTA5NjU4LCJzY29wZSI6WyJiYWNrb2ZmaWNlX2FwaS5jYWxsIl19.gtH9v6AWjPdTldIRy78wXz_aXqMhWCG8PmFip77lDPh23AQVZwMmIgw8yHiNSMNQlsnwt67F49YJtjPdPI9JlYYphQpdf_KPeIMjEp5F0JNjJkBCZrw74l55kxC6sXuXUp11dmR8iQEt4SHJzFWlVluay3q8UxiA5v2BciOx8vyYPzRJX8IexRE0OabLv1yQSQ_ML_XFhtFOH6bQ6ARp1IYfEHMLZCjjPsZ9lcyW2IrQ5_E_2AmklHX-dWJuAaK6MQ2PUizt1vIf4BPI39xXuajqubCxABI31iNMLZwY6YtiEcFWyUjveZ3uWk88U5m_Wc6A329iseeDikze32XlFg' \
--data ''

Method: POST

Headers

Success response

Response: HTTP 200

{
  "data": {
    "activeMasterSessionsCount": 0,
    "terminatedMasterSessionsCount": 2
  }
}
Parameter Type Description
activeMasterSessionsCount number The number of active master sessions, it will always be 0 for this endpoint.
terminatedMasterSessionsCount number The number of master sessions terminated by this endpoint call.

Failed response
There could be 4xx, 5xx HTTP status codes.

Error response example

HTTP status code 400
{
  "error": {
    "code": 400,
    "message": "Bad request"
  }
}

Terminate

This endpoint terminates specific requested partner master sessions.

Request

Request example for userIds

curl --location 'https://{{gw_api_url}}/partners/terminate' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer  eyJhbGciOiJSUzI1NiIsImtpZCI6IjhFM0Y5QjBGODI4NTdCMjAwNTIxNjUwNDAzNzIyOEI0QTYxMjJFRjNSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImpqLWJENEtGZXlBRklXVUVBM0lvdEtZU0x2TSJ9.eyJuYmYiOjE2OTk5MDk2NTgsImV4cCI6MTY5OTkxMzI1OCwiaXNzIjoiaHR0cDovL3Bhc3Nwb3J0IiwiYXVkIjoiYmFja29mZmljZV9hcGkiLCJjbGllbnRfaWQiOiJwb3N0bWFuX2NsaWVudCIsImNsaWVudF9yb2xlIjoicG9zdG1hbiIsImp0aSI6IkExMjc3MTBFOUM5MUIzRUEzQUQxMEYzREE1QjFGOTEyIiwiaWF0IjoxNjk5OTA5NjU4LCJzY29wZSI6WyJiYWNrb2ZmaWNlX2FwaS5jYWxsIl19.gtH9v6AWjPdTldIRy78wXz_aXqMhWCG8PmFip77lDPh23AQVZwMmIgw8yHiNSMNQlsnwt67F49YJtjPdPI9JlYYphQpdf_KPeIMjEp5F0JNjJkBCZrw74l55kxC6sXuXUp11dmR8iQEt4SHJzFWlVluay3q8UxiA5v2BciOx8vyYPzRJX8IexRE0OabLv1yQSQ_ML_XFhtFOH6bQ6ARp1IYfEHMLZCjjPsZ9lcyW2IrQ5_E_2AmklHX-dWJuAaK6MQ2PUizt1vIf4BPI39xXuajqubCxABI31iNMLZwY6YtiEcFWyUjveZ3uWk88U5m_Wc6A329iseeDikze32XlFg' \
--data '{
  "userIds": [
    "32144f111bb24e15ac30be8fc645ab77"
  ]
}'

Request example for masterSessionIds

curl --location 'https://{{gw_api_url}}/partners/terminate' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer  eyJhbGciOiJSUzI1NiIsImtpZCI6IjhFM0Y5QjBGODI4NTdCMjAwNTIxNjUwNDAzNzIyOEI0QTYxMjJFRjNSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImpqLWJENEtGZXlBRklXVUVBM0lvdEtZU0x2TSJ9.eyJuYmYiOjE2OTk5MDk2NTgsImV4cCI6MTY5OTkxMzI1OCwiaXNzIjoiaHR0cDovL3Bhc3Nwb3J0IiwiYXVkIjoiYmFja29mZmljZV9hcGkiLCJjbGllbnRfaWQiOiJwb3N0bWFuX2NsaWVudCIsImNsaWVudF9yb2xlIjoicG9zdG1hbiIsImp0aSI6IkExMjc3MTBFOUM5MUIzRUEzQUQxMEYzREE1QjFGOTEyIiwiaWF0IjoxNjk5OTA5NjU4LCJzY29wZSI6WyJiYWNrb2ZmaWNlX2FwaS5jYWxsIl19.gtH9v6AWjPdTldIRy78wXz_aXqMhWCG8PmFip77lDPh23AQVZwMmIgw8yHiNSMNQlsnwt67F49YJtjPdPI9JlYYphQpdf_KPeIMjEp5F0JNjJkBCZrw74l55kxC6sXuXUp11dmR8iQEt4SHJzFWlVluay3q8UxiA5v2BciOx8vyYPzRJX8IexRE0OabLv1yQSQ_ML_XFhtFOH6bQ6ARp1IYfEHMLZCjjPsZ9lcyW2IrQ5_E_2AmklHX-dWJuAaK6MQ2PUizt1vIf4BPI39xXuajqubCxABI31iNMLZwY6YtiEcFWyUjveZ3uWk88U5m_Wc6A329iseeDikze32XlFg' \
--data '{
  "masterSessionIds": [
    "21277bf55bb24e15ac30be8fc510ce02"
  ]
}'
Parameter Type Description
masterSessionIds array of strings Array of master session identifiers
userIds array of strings Array of user identifiers

Only masterSessionIds or userIds must be specified.

Method: POST

Headers

Success response

Response: HTTP 200

{
  "data": {
    "activeMasterSessionsCount": 1,
    "terminatedMasterSessionsCount": 2
  }
}
Parameter Type Description
activeMasterSessionsCount number The number of active master sessions left.
terminatedMasterSessionsCount number The number of master sessions terminated by this endpoint call.

Failed response
There could be 4xx, 5xx HTTP status codes.

Error response example

HTTP status code 400
{
  "error": {
    "code": 400,
    "message": "Bad request"
  }
}

Obtain public RSA key

Using this key you can validate whether a message belongs to Winfinity.

Request

Request

curl --location 'https://{{gw_api_url}}/partners/jwtpublickey' \
--header 'Accept: text/plain' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjhFM0Y5QjBGODI4NTdCMjAwNTIxNjUwNDAzNzIyOEI0QTYxMjJFRjNSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImpqLWJENEtGZXlBRklXVUVBM0lvdEtZU0x2TSJ9.eyJuYmYiOjE2OTk5MDk2NTgsImV4cCI6MTY5OTkxMzI1OCwiaXNzIjoiaHR0cDovL3Bhc3Nwb3J0IiwiYXVkIjoiYmFja29mZmljZV9hcGkiLCJjbGllbnRfaWQiOiJwb3N0bWFuX2NsaWVudCIsImNsaWVudF9yb2xlIjoicG9zdG1hbiIsImp0aSI6IkExMjc3MTBFOUM5MUIzRUEzQUQxMEYzREE1QjFGOTEyIiwiaWF0IjoxNjk5OTA5NjU4LCJzY29wZSI6WyJiYWNrb2ZmaWNlX2FwaS5jYWxsIl19.gtH9v6AWjPdTldIRy78wXz_aXqMhWCG8PmFip77lDPh23AQVZwMmIgw8yHiNSMNQlsnwt67F49YJtjPdPI9JlYYphQpdf_KPeIMjEp5F0JNjJkBCZrw74l55kxC6sXuXUp11dmR8iQEt4SHJzFWlVluay3q8UxiA5v2BciOx8vyYPzRJX8IexRE0OabLv1yQSQ_ML_XFhtFOH6bQ6ARp1IYfEHMLZCjjPsZ9lcyW2IrQ5_E_2AmklHX-dWJuAaK6MQ2PUizt1vIf4BPI39xXuajqubCxABI31iNMLZwY6YtiEcFWyUjveZ3uWk88U5m_Wc6A329iseeDikze32XlFg' \
--data ''

Method: GET

Headers

Success response

Response: HTTP 200

Content-Type: text/plain

-----BEGIN PUBLIC KEY-----
xHkrM8S8EEkXtbd4Ai2izI3DgBZsqwftYYQgEsP73oIQlW13jv8K/gqxqG8fTOnr
.......
xHkrM8S8EEkXtbd4Ai2izI3DgBZsqwftYYQgEsP73oIQlW13jv8K/gqxqG8fTOnr
-----END PUBLIC KEY-----

Failed response

There could be 4xx, 5xx HTTP status codes

Balance change notification

Please send this message each time the user balance changes without a request from Winfinity. It signifies that the player spent his money in another system/casino.

Request

Request

curl --location --request PUT 'https://{{gw_api_url}}/partners/changeUserBalance' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjhFM0Y5QjBGODI4NTdCMjAwNTIxNjUwNDAzNzIyOEI0QTYxMjJFRjNSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImpqLWJENEtGZXlBRklXVUVBM0lvdEtZU0x2TSJ9.eyJuYmYiOjE2OTk5MDk2NTgsImV4cCI6MTY5OTkxMzI1OCwiaXNzIjoiaHR0cDovL3Bhc3Nwb3J0IiwiYXVkIjoiYmFja29mZmljZV9hcGkiLCJjbGllbnRfaWQiOiJwb3N0bWFuX2NsaWVudCIsImNsaWVudF9yb2xlIjoicG9zdG1hbiIsImp0aSI6IkExMjc3MTBFOUM5MUIzRUEzQUQxMEYzREE1QjFGOTEyIiwiaWF0IjoxNjk5OTA5NjU4LCJzY29wZSI6WyJiYWNrb2ZmaWNlX2FwaS5jYWxsIl19.gtH9v6AWjPdTldIRy78wXz_aXqMhWCG8PmFip77lDPh23AQVZwMmIgw8yHiNSMNQlsnwt67F49YJtjPdPI9JlYYphQpdf_KPeIMjEp5F0JNjJkBCZrw74l55kxC6sXuXUp11dmR8iQEt4SHJzFWlVluay3q8UxiA5v2BciOx8vyYPzRJX8IexRE0OabLv1yQSQ_ML_XFhtFOH6bQ6ARp1IYfEHMLZCjjPsZ9lcyW2IrQ5_E_2AmklHX-dWJuAaK6MQ2PUizt1vIf4BPI39xXuajqubCxABI31iNMLZwY6YtiEcFWyUjveZ3uWk88U5m_Wc6A329iseeDikze32XlFg' \
--data '{
    "partnerSiteId": "630f3428de590a4b876cfc41",
    "balances": [
        {
            "masterSessionId": "08a4c87bd9f246ebb073b460fce0d97a",
            "balance": 155,
            "timestamp": 1704794454
        }
    ]
}'
Parameter Type Description
partnerSiteId string Partner’s identifier (obtained from account manager)
balances array of Balance objects

Balance:

Parameter Type Description
masterSessionId string Identifier of the master session
balance number Player’s balance in the currency of the master session
timestamp long Unix Epoch timestamp in microseconds. Indicates when the balance was changed.

Method: PUT

Headers

Success response

There could be 2xx HTTP status codes

Failed response

There could be 4xx, 5xx HTTP status codes

Round check

Provides a player’s game details.

Request

curl --location 'https://{{gw_api_url}}/partners/roundCheck?userId=6492d6e35094ed2e14c19d69&gameId=4667bbb208b743519c0b073151cd714b' \
--header 'Accept: text/plain' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjhFM0Y5QjBGODI4NTdCMjAwNTIxNjUwNDAzNzIyOEI0QTYxMjJFRjNSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6ImpqLWJENEtGZXlBRklXVUVBM0lvdEtZU0x2TSJ9.eyJuYmYiOjE2OTk5MDk2NTgsImV4cCI6MTY5OTkxMzI1OCwiaXNzIjoiaHR0cDovL3Bhc3Nwb3J0IiwiYXVkIjoiYmFja29mZmljZV9hcGkiLCJjbGllbnRfaWQiOiJwb3N0bWFuX2NsaWVudCIsImNsaWVudF9yb2xlIjoicG9zdG1hbiIsImp0aSI6IkExMjc3MTBFOUM5MUIzRUEzQUQxMEYzREE1QjFGOTEyIiwiaWF0IjoxNjk5OTA5NjU4LCJzY29wZSI6WyJiYWNrb2ZmaWNlX2FwaS5jYWxsIl19.gtH9v6AWjPdTldIRy78wXz_aXqMhWCG8PmFip77lDPh23AQVZwMmIgw8yHiNSMNQlsnwt67F49YJtjPdPI9JlYYphQpdf_KPeIMjEp5F0JNjJkBCZrw74l55kxC6sXuXUp11dmR8iQEt4SHJzFWlVluay3q8UxiA5v2BciOx8vyYPzRJX8IexRE0OabLv1yQSQ_ML_XFhtFOH6bQ6ARp1IYfEHMLZCjjPsZ9lcyW2IrQ5_E_2AmklHX-dWJuAaK6MQ2PUizt1vIf4BPI39xXuajqubCxABI31iNMLZwY6YtiEcFWyUjveZ3uWk88U5m_Wc6A329iseeDikze32XlFg' \
--data ''
Parameter Type Description
userId string Identifier of a player on the partner’s side
gameId string Identifier of the game/round

Method: GET

Headers

Success response

There could be 2xx HTTP status codes.

Body with http page.

example

Failed response

There could be 4xx, 5xx HTTP status codes

Create Magic chips

Creates a Magic chips promo campaign for selected users and tables.

Request

Request example

curl --location 'https://{{gw_api_url}}/partners/createMagicChips' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data '{
    "name": "Magic chips campaign",
    "startDate": "2026-08-12T10:00:00Z",
    "endDate": "2026-08-20T10:00:00Z",
    "expiredDate": "2026-08-18T10:00:00Z",
    "tableIds": [
        "633565bd9a0db90b1f931517"
    ],
    "userIds": [
        "3899"
    ],
    "siteId": "630f3428de590a4b876cfc41",
    "chipsNumber": 10,
    "chipsValue": 1.5,
    "currency": "USD",
    "winLimit": 100,
    "betLimit": 5
}'
Parameter Type Description
name string Campaign name
startDate datetime Campaign start date (UTC)
endDate datetime Campaign end date (UTC). Must be greater than startDate
expiredDate datetime optional UTC date by which the user must use at least one chip; otherwise the chips expire. When set, must be greater than startDate and less than endDate
tableIds string[] Table identifiers where Magic chips can be used
userIds string[] Partner user identifiers (external user ids)
siteId string Partner’s site identifier
chipsNumber integer Number of Magic chips granted to each user. Must be greater than 0
chipsValue number Value of a single Magic chip in the campaign currency. Must be greater than 0
currency string 3- or 4-letter currency identifier in upper case. See Supported currencies
winLimit number Maximum win amount for the campaign. Must be greater than 0
betLimit integer Maximum number of bets. Must be greater than 0

Method: POST

Headers

Success response

Response: HTTP 200

{
  "data": {
    "promoId": "cf0ae75a-fd1f-48c2-af1c-22715c0c229d"
  }
}
Parameter Type Description
promoId string Identifier of the created Magic chips campaign

Failed response

Error response example

HTTP status code 400
{
  "error": {
    "code": 400,
    "message": "Bad request"
  }
}

There could be 4xx, 5xx HTTP status codes

Get Magic chips

Returns details of an existing Magic chips campaign.

Request

Request example

curl --location 'https://{{gw_api_url}}/partners/getMagicChips?promoId=cf0ae75a-fd1f-48c2-af1c-22715c0c229d' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{access_token}}'
Parameter Type Description
promoId string Identifier of the Magic chips campaign

Method: GET

Headers

Success response

Response: HTTP 200

{
  "data": {
    "name": "Magic chips campaign",
    "startDate": "2026-08-12T10:00:00Z",
    "endDate": "2026-08-20T10:00:00Z",
    "expiredDate": "2026-08-18T10:00:00Z",
    "siteId": "630f3428de590a4b876cfc41",
    "tableIds": [
      "633565bd9a0db90b1f931517"
    ],
    "userIds": [
      "3899"
    ],
    "chipsNumber": 10,
    "chipsValue": 1.5,
    "currency": "USD",
    "winLimit": 100,
    "betLimit": 5,
    "promoId": "cf0ae75a-fd1f-48c2-af1c-22715c0c229d",
    "status": "LIVE"
  }
}
Parameter Type Description
name string Campaign name
startDate datetime Campaign start date (UTC)
endDate datetime Campaign end date (UTC)
expiredDate datetime optional UTC date by which the user must use at least one chip; otherwise the chips expire
siteId string Partner’s site identifier
tableIds string[] Table identifiers where Magic chips can be used
userIds string[] User identifiers associated with the campaign
chipsNumber integer Number of Magic chips granted to each user
chipsValue number Value of a single Magic chip in the campaign currency
currency string Campaign currency
winLimit number Maximum win amount for the campaign
betLimit integer Maximum number of bets
promoId string Identifier of the Magic chips campaign
status string Campaign status (for example LIVE)

Failed response

Error response example

HTTP status code 400
{
  "error": {
    "code": 400,
    "message": "Bad request"
  }
}

There could be 4xx, 5xx HTTP status codes

Abort Magic chips

Aborts an existing Magic chips campaign.

Request

Request example

curl --location --request PUT 'https://{{gw_api_url}}/partners/abortMagicChips' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data '{
    "promoId": "cf0ae75a-fd1f-48c2-af1c-22715c0c229d"
}'
Parameter Type Description
promoId string Identifier of the Magic chips campaign

Method: PUT

Headers

Success response

Response: HTTP 200

{
  "data": "cf0ae75a-fd1f-48c2-af1c-22715c0c229d"
}
Parameter Type Description
data string Identifier of the aborted Magic chips campaign

Failed response

Error response example

HTTP status code 400
{
  "error": {
    "code": 400,
    "message": "Bad request"
  }
}

There could be 4xx, 5xx HTTP status codes

Game types

Game types can be represented as string and as integer. Currently supported:

Supported currencies

USD, EUR

3- or 4- letter currency identifier in upper case.

ISO 4217
fiat
crypto

Partner API

Winfinity API communicates with the Partner API through HttpClient that calls the endpoint implemented by the partner and registered in Winfinity’s BackOffice.

The body of the request contains a signed RSA JWT (you need to get the public key through the API for decoding).

Request params

Parameter Type Size Description
com integer see below command type
tid string 32 symbols (GUID) transaction identifier (financial transactions only)
msid string 32 symbol (GUID) master session identifier (for command types 0, 6, 7)
tbid string 24 symbols table identifier (for command type 7)
uid string user identifier (financial transactions only)
cur string 3- or 4- letter currency identifier in upper case (ISO 4217)
gtp string see above game type (financial transactions only)
sid string 32 symbol (GUID) session identifier (for command types 0-5, 7)
gid string 32 symbols (GUID) game Id (financial transactions only)
sum number sum (financial transactions only)
timestamp long unix epoch timestamp in microseconds. Indicates when the financial transaction or the finish round was registered
refid string 32 symbol (GUID) reference PayIn transaction identifier. (for command types 2, 3, 9)
promoId string Optional. Promo identifier.
- Filled for command types 1 and 2 only when a promo campaign is active and promoType = MagicChips.
- Always filled for command type 9.
promoType string Optional. Type of promo: Wdrops, Jackpot, Tournament, MagicChips.
- Filled for command types 1 and 2 only when a promo campaign is active (MagicChips only).
- Always filled for command type 9.
partnerId string Partner identifier. Filled for command types 1, 2, 3, 9.

Response params

Successful response params

Parameter Type Description
data.transaction string Optional. For financial transactions only. Transaction identifier of financial operations on the partner’s side
data.balance number User balance after operation in requested currency.
data.timestamp long Unix Epoch timestamp in microseconds. Indicates when the operation was processed.

Failed response params

There could be 2xx, 5xx HTTP status codes.

Error code in message 4xx, 5xx, 6xx, 7xx, 9xx

Parameter Type Description
error.code integer Business error code (not HTTP status code). Codes are defined below.
error.message string Error text.

Response should contain a data or error field. If the response contains an error field, it will be treated as an error. Examples of successful and unsuccessful responses below.

The message field can contain the error text in free form. The message will not be displayed on the UI but will be logged, which will help to further investigate the problem.

Common errors could be achived on each command.

Code Message Meaning
400 Bad request Request is not formatted correctly or did not pass the validation rules.
500 Unknown error
504 Request timeout
601 Wrong session identifier Session expired or has never been registered.
602 Current user is blocked User is blocked in your system.

Commands

Get balance

Request example

POST https://{{partners_api_url}}
{
  "com": 0,
  "msid": "90aa7247b3ed113223245c6199322431",
  "sid": "90aa7247b3ed113223245c6199322312"
}

com : 0
Get balance for a user with requested msid.

Successful response example

{
  "data": {
    "balance": 123.45,
    "timestamp": 1658415028084125
  }
}

Failed response example

HTTP status code 200
{
  "error": {
    "code": 601,
    "message": "Wrong session identifier"
  }
}

PayIn

Request example

POST https://{{partners_api_url}}
{
  "com": 1,
  "tid": "1ad5045f673f44c89d46e1a3dc250f54",
  "msid": "90aa7247b3ed113223245c6199322431",
  "tbid": "456884123abcPOPJxihB6n",
  "uid": "unique_user_id",
  "cur": "USD",
  "gtp": "Roulette",
  "sid": "90aa7247b3ed113223245c6199322312",
  "gid": "90aa7247b3ed11ec94245c619932d0d6",
  "sum": 123.45,
  "timestamp": 1694505755000000,
  "partnerId": "partner_id_example"
}

com : 1
It’s refundable

Successful response example

{
  "data": {
    "transaction": "1f42fcc7419eec35b1275284",
    "balance": 123.45,
    "timestamp": 1658415028084125
  }
}

Failed response example

HTTP status code 200
{
  "error": {
    "code": 600,
    "message": "Not enough funds for current operation"
  }
}

Additional failed codes:

Code Message Meaning
600 Not enough funds for current operation
654 Operation is not allowed in finished round No more transactions will be accepted during this round.
700 Game is not available This game is currently disabled on the partner’s side.
900 Player reached customized bet limit
901 Player exceeded his personal limit of session time
902 Bet exceeded max bet limit
903 Player exceeded the maximum loss limit

PayOut

Request example

POST https://{{partners_api_url}}
{
  "com": 2,
  "tid": "1ad5045f673f44c89d46e1a3dc250f54",
  "msid": "90aa7247b3ed113223245c6199322431",
  "tbid": "456884123abcPOPJxihB6n",
  "uid": "unique_user_id",
  "cur": "USD",
  "gtp": "Roulette",
  "sid": "90aa7247b3ed113223245c6199322312",
  "gid": "90aa7247b3ed11ec94245c619932d0d6",
  "refid": "zjcp6ug249nywjkbna35ene2",
  "sum": 123.45,
  "timestamp": 1694505755000000,
  "partnerId": "partner_id_example"
}

com : 2
Payout for a specific PayIn transaction.
refid refers to payin tid
It’s retriable

Successful response example

{
  "data": {
    "transaction": "1f42fcc7419eec35b1275284",
    "balance": 123.45,
    "timestamp": 1658415028084125
  }
}

Failed response example

HTTP status code 200
{
  "error": {
    "code": 654,
    "message": "Operation is not allowed in finished round "
  }
}

Additional failed codes:

Code Message Meaning
650 Could not make PayOut request because PayIn transaction is not found
654 Operation is not allowed in a finished round No more transactions will be accepted during this round.

Refund

Request example

POST https://{{partners_api_url}}
{
  "com": 3,
  "tid": "1ad5045f673f44c89d46e1a3dc250f54",
  "msid": "90aa7247b3ed113223245c6199322431",
  "tbid": "456884123abcPOPJxihB6n",
  "uid": "unique_user_id",
  "cur": "USD",
  "gtp": "Roulette",
  "sid": "90aa7247b3ed113223245c6199322312",
  "gid": "90aa7247b3ed11ec94245c619932d0d6",
  "refid": "zjcp6ug249nywjkbna35ene2",
  "sum": 123.45,
  "partnerId": "partner_id_example"
}

com : 3
Refund a PayIn operation.
tid and refid contain payin tid which should be refunded. It’s retriable

Successful response example

{
  "data": {
    "transaction": "1f42fcc7419eec35b1275284",
    "balance": 123.45,
    "timestamp": 1658415028084125
  }
}

Failed response example

HTTP status code 200
{
  "error": {
    "code": 654,
    "message": "Operation is not allowed in finished round "
  }
}

Additional failed codes:

Code Message Meaning
650 Could not make a Refund request because the PayIn transaction is not found
654 Operation is not allowed in a finished round No more transactions will be accepted during this round.
655 Refund is not allowed

Expired table session (Optional)

Note: Contact our team if you want to disable this command

Request example

POST https://{{partners_api_url}}
{
  "com": 4,
  "msid": "90aa7247b3ed113223245c6199322431",
  "uid": "unique_user_id",
  "sid": "90aa7247b3ed113223245c6199322312"
}

com : 4
Expired session notification which was created by com: 7.
Operations on it are no longer accepted.

Successful response example

{
  "data": {
    "balance": 123.45,
    "timestamp": 1658415028084125
  }
}

Failed response example

HTTP status code 200
{
  "error": {
    "code": 601,
    "message": "Wrong session identifier"
  }
}

Expired master session

Request example

POST https://{{partners_api_url}}
{
  "com": 6,
  "msid": "90aa7247b3ed113223245c6199322431",
  "uid": "unique_user_id"
}

com : 6
Expired master session notification which was created by start master session
The session has expired, operations on it are no longer accepted.

Successful response example

{
  "data": {
    "balance": 123.45,
    "timestamp": 1658415028084125
  }
}

Failed response example

HTTP status code 200
{
  "error": {
    "code": 601,
    "message": "Wrong session identifier"
  }
}

Register session on partner side (Optional)

Note: Contact our team if you want to disable this command

Request example

POST https://{{partners_api_url}}
{
  "com": 7,
  "msid": "90aa7247b3ed113223245c6199322431",
  "tbid": "456884123abcPOPJxihB6n",
  "uid": "unique_user_id",
  "sid": "90aa7247b3ed113223245c6199322312"
}

com : 7
Register the session on the partner side as soon as a player tries to take a seat at a table.

Successful response example

{
  "data": {
    "balance": 123.45,
    "timestamp": 1658415028084125
  }
}

Failed response example

HTTP status code 200
{
  "error": {
    "code": 601,
    "message": "Wrong session identifier"
  }
}

Finish round

Request example

POST https://{{partners_api_url}}
{
  "com": 8,
  "msid": "90aa7247b3ed113223245c6199322431",
  "tbid": "456884123abcPOPJxihB6n",
  "uid": "unique_user_id",
  "gtp": "Roulette",
  "sid": "90aa7247b3ed113223245c6199322312",
  "gid": "90aa7247b3ed11ec94245c619932d0d6",
  "timestamp": 1694505755000000
}

com : 8
The game is finished for the current user, no more transactions should be accepted for the gid + sid pair during this game.

Successful response example

{
  "data": {
    "balance": 123.45,
    "timestamp": 1658415028084125
  }
}

Failed response example

HTTP status code 200
{
  "error": {
    "code": 601,
    "message": "Wrong session identifier"
  }
}

Zero win message

Zero Win messages for lost bets are disabled by default. A Finish Round message is sent instead.

By making a request to Winfinity account managers, this behavior can be changed to enable Zero Win Messages. In this case the Finish Round message will not be sent, and each bet will have its corresponding win message, even in case of a loss.

Request example

POST https://{{partners_api_url}}
{
  "com": 2,
  "tid": "1ad5045f673f44c89d46e1a3dc250f54",
  "msid": "90aa7247b3ed113223245c6199322431",
  "tbid": "456884123abcPOPJxihB6n",
  "uid": "unique_user_id",
  "cur": "USD",
  "gtp": "Roulette",
  "sid": "90aa7247b3ed113223245c6199322312",
  "gid": "90aa7247b3ed11ec94245c619932d0d6",
  "refid": "zjcp6ug249nywjkbna35ene2",
  "sum": 0.0,
  "timestamp": 1694505755000000
}

Promo PayOut

Request example

POST https://{{partners_api_url}}
{
  "com": 9,
  "cur": "USD",
  "msid": "90aa7247b3ed113223245c6199322431",
  "tid": "1ad5045f673f44c89d46e1a3dc250f54",
  "uid": "unique_user_id",
  "sum": 123.45,
  "refid": "zjcp6ug249nywjkbna35ene2",
  "timestamp": 1694505755000000,
  "tbid": "456884123abcPOPJxihB6n",
  "promoId": "11abaebc4ced4fc09",
  "promoType": "Wdrops",
  "partnerId": "partner_id_example"
}

com : 9
Reward a user with a certain amount. It’s retriable

Successful response example

{
  "data": {
    "transaction": "1f42fcc7419eec35b1275284",
    "balance": 123.45,
    "timestamp": 1658415028084125
  }
}

Failed response example

HTTP status code 200
{
  "error": {
    "code": 601,
    "message": "Wrong session identifier"
  }
}

Timeouts

Idempotent payment command

Idempotency is a property of certain operations or API requests, which guarantees that performing the operation multiple times will yield the same result as executing it only once.

Please develop idempotent methods for all payment commands.

For example:

If you received a payout with tid : 1 and processed it successfully, you replied with HTTP 200.

Then if you recieve the same payout with tid : 1, please send us the same response you had previously sent, which would be HTTP 200.

If you receive a payout with tid : 1 and decline it due to insufficient funds, next time you receive the same payout, please send us the same response with insufficient funds.

Transaction retry mechanism

In case of a response error for payment transactions, a retry/refund mechanism will be launched:

A PayIn transaction (com: 1) will be refunded (com: 3) and the refund transaction will be repeated with a retry mechanism.

To stop the refund attempts, the expected response status code must be 200.

A PayOut transaction (com: 2) or Promo PayOut transaction (com: 9) will be repeated with retry mechanism.

To stop the retry attempts, the expected reponse must contain a valid .json with data or error information.

To stop the refund attempts, the expected response HTTP status code must be 200 with a success body or with appropriate business error in data.error.

Each retry attempt should be idempotent from the partner’s side.

If a limit is reached, a notification is sent to all interested parties, the transaction is set to the EXPIRED status, and the mechanism stops.

UI requirements

Iframe settings:

Attribute Meaning How we use it
scr Specifies the address of the document to embed src="https://....winfinity.live...."
width Specifies the width of an <iframe> width="100%"
height Specifies the height of an <iframe> height="100%"
allow Gives permission for features such as fullscreen and copy text (from round history for customer support purposes) allow="fullscreen; clipboard-write"

Testing

As soon as the development is complete from your side and you are ready for integration, please provide the following info for our own testing purposes:

  1. Test accounts:
  1. If you have some problems or errors, provide as much data as possible It can be:

FAQ

Can there be two or more Site IDs and why?

Yes. In this way we can divide your sites inside one integration. For example, if you operate several casinos.

Can we have multiple access tokens? Does token generation invalidate the previously generated versions?

Yes, you can have multiple tokens. No, each new token doesn’t invalidate the previous one.

Do you have transaction reports via API?

No, you can use the backoffice to manually generate reports. Please tell us if such an API is required.

Changelog

Here you can see changes according to documentation version:

1.16.19

09.10.2026

1.16.18

15.09.2026

1.16.17

14.09.2026

1.16.16

24.08.2026

1.16.15

12.08.2026

1.16.14

21.07.2026

1.16.13

30.06.2026

1.16.12

23.06.2026

1.16.11

02.06.2026

1.16.10

11.05.2026

1.16.9

23.03.2026

1.16.8

23.03.2026

1.16.7

26.01.2026

1.16.6

11.09.2025

1.16.5

09.09.2025

1.16.4

19.08.2025

1.16.3

13.08.2025

1.16.2

1.16.1

1.16.0

1.15.1

1.15.0

1.14.3

1.14.2

1.14.1

1.14.0

1.13.0

1.12.0

1.11.0

1.10.0

1.9.2

1.9.1

1.9.0

1.8.11

1.8.10

1.8.9

1.8.8

1.8.7

1.8.6

1.8.5

1.8.4