openapi: 3.0.3
info:
  title: Operator Documentation
  description: >-
    <h2>Request signing</h2>
    <p>
    All Games API requests have to be signed by Operator.<br>
    All Wallet API requests have to be signed by Vegangster.<br>
    All Freegames API requests must be signed by the Operator.<br>

    Before the integration, the Operator generates a private/public key pair and sends the public key to Vegangster. Vegangster sends its public key to the Operator. The body of all requests will be signed with RSA-SHA256 using the respective private key and encoded to BASE64. The signature will be placed in the X-API-Signature header. The Operator needs to verify all Wallet API requests using the public key provided by Vegangster. Vegangster verifies all Games and Freegames API requests using the public key provided by the Operator.<br>

    <details>
        <summary><b>Example of signature generation</b></summary>
        <p>Request body:</p>
        <code>{"player_id": "64651509b8c355917ec34421", "token": "64651582b8c355917ec34422", "game_code": "the_best_game", "platform": "desktop", "currency": "USD", "lang": "en", "country": "US", "ip": "145.22.35.62", "lobby_url": "https://my-great-casino.com/lobby", "deposit_url": "https://my-great-casino.com/deposit", "player_nick": "xXx_pro100Max_xXx"}
        </code>
        <p>Private key: <a href="/static/files/example_private_key.txt" target="_blank" rel="nofollow">link</a></p>
        <p>Correct signature:</p>
        <code style="word-break: break-all;">UCbyafCe3Pxv9FQmT8e7sY8eFYuNTrdGyXnA3B6Ihrd1eP+OpRqqjnNq6/aY2LLbPYi5JnOUhLZlGpMTxMwvQGH+k/E7xAdFhjuli/U+J06uMq/Vy5uXMUpRNHk4p5A3lDNQtpBozeAC6zIPUjFPT5L+9HoI5i1LY1q6PS1d5/k=</code>
        <p>Code example in Python: <a href="/static/files/example_python.txt" target="_blank" rel="nofollow">link</a></p>
    </details>

    </p>
    <h2>Request consistency</h2>
    <p>
    Wallet API requests have to be idempotent. All transactions contain a <code>transaction_id</code> field. Operator has to ensure that requests with the same <code>transaction_id</code> are not processed twice while the response has to be same for all duplicate requests.
    </p>
    
    <h2>Gameplay</h2>
    <p>
    Once you meet the prerequisites, the process is as follows:<br>

    <ol><li>
    Obtain a game URL from Vegangster. </li>
    <li>
    Direct the customer to the URL provided by Vegangster.
    </li>
    <li>
    Respond to in-game events sent by Vegangster and update the customer's balance
    </li>
    </ol>
    <p>Note that the process is different for DEMO and REAL gameplay modes. In DEMO mode, user can open the game, check the rules/graphics/paytable, and play with fun mode money. Not all game providers allow DEMO gameplay (none of Live Dealers allow it).
    </p>
    <p>
    Below is an example of interaction flow to open the game in DEMO mode:
    </p>
    <ol>
    <li>
    Operator makes a Game API call to <code>/operator/v1/game/demo/url</code> to obtain game launch URL.
    </li>
    <li>
    When the game URL is returned, the Operator uses it to direct the player to the game (for example, launch it in iframe or redirect player to the URL).
    </li>
    <li>
    In DEMO mode, no calls to Operator's API are made because providers handle the balance themselves.
    If player liked the game and wants to switch to REAL mode, Operator should proceed with the next steps.
    </li>
    </ol>
    
    <p>
    Below is an example of interaction flow between the customer, operator, Vegangster, and game provider in REAL mode:
    </p>
    
    <ol>
    <li>
    Operator generates and stores a unique game session token.
    </li>
    <li>
    Operator makes a Game API call <code>/operator/v1/game/url</code> and passes the generated token along with the other request parameters.
    <b>NOTE</b>: Operator needs to be ready to respond to <code>/player/info</code> Wallet API call even before getting the game URL back.
    </li><li>
    When the game URL is returned, the Operator uses it to direct the player to the game (for example, launch it in iframe or redirect player to the URL).
    
    </li><li>
    When the game URL is loaded in the browser, Vegangster server makes a Wallet API call <code>/player/info</code> (or <code>/player/balance</code> depends on provider) to the Operator's server.
    </li><li>
    Operator verifies the token against the stored token and returns the user's balance. The user can then place a bet.
    
    </li><li>
    When the user attempts to place a bet, a Wallet API call <code>/transaction/bet</code> is triggered on the Operator's server.

    </li><li>
    The Operator verifies the token, ensures that the user has enough money for this bet, decreases the user's balance by the bet amount, and returns the updated user's balance.
    
    </li><li>
    If the user wins, the Wallet API triggers a call <code>/transaction/win</code> on the Operator's server.
    
    </li><li>
    Operator verifies the token, increases the user's balance by the win amount, and returns the updated user's balance.
    
    </li>
    </ol>
    </p>
    
    <h2>Wallet API Response statuses</h2>
    <p>
    <table>
    
    <tr>
    <td><b>Status</b></td>
    <td><b>Description</b></td>
    </tr>
    
    <tr>
    <td><code>OK</code></td>
    <td>Successful response.</td>
    </tr>
    
    <tr>
    <td><code>ERROR_GENERAL</code></td>
    <td>General error status, for cases without a special error code.</td>
    </tr>
    
    <tr>
    <td><code>ERROR_INVALID_DATA</code></td>
    <td>The data passed in request body doesn't match with the model</td>
    </tr>
    
    <tr>
    <td><code>ERROR_INVALID_BRAND</code></td>
    <td>Passed brand is incorrect</td>
    </tr>
    
    <tr>
    <td><code>ERROR_INVALID_TOKEN</code></td>
    <td>Token unknown to Operator's system. Please, note that there is a different status for expired tokens.</td>
    </tr>
    
    <tr>
    <td><code>ERROR_INVALID_GAME</code></td>
    <td>Unknown game_code</td>
    </tr>
    
    <tr>
    <td><code>ERROR_BLACKLISTED_COUNTRY</code></td>
    <td>Operations in given country are unavailable</td>
    </tr>
    
    <tr>
    <td><code>ERROR_WRONG_CURRENCY</code></td>
    <td>Transaction currency differs from Player's wallet currency.</td>
    </tr>
    
    <tr>
    <td><code>ERROR_NOT_ENOUGH_MONEY</code></td>
    <td>Not enough money on Player's balance to place a bet. Please send the actual balance together with this status.</td>
    </tr>
    
    <tr>
    <td><code>ERROR_USER_DISABLED</code></td>
    <td>Player is disabled/locked and can't place bets.</td>
    </tr>
    
    <tr>
    <td><code>ERROR_INVALID_SIGNATURE</code></td>
    <td>Operator couldn't verify signature on request from Vegangster.</td>
    </tr>
    
    <tr>
    <td><code>ERROR_TOKEN_EXPIRED</code></td>
    <td>Session with specified token has already expired. NOTE: token validity MUST NOT be validated in case of wins and rollbacks, since they might come long after the bets.</td>
    </tr>
    
    <tr>
    <td><code>ERROR_TRANSACTION_DOES_NOT_EXIST</code></td>
    <td>Returned when the bet referenced in win request can't be found on Operator's side (wasn't processed or was rolled back). If you received rollback request and can't find the transaction to roll back, respond <code>OK</code></td>
    </tr>
    
    <tr>
    <td><code>ERROR_TRANSACTION_EXISTS</code></td>
    <td>A transaction with same transaction_id was sent</td>
    </tr>
    
    <tr>
    <td><code>ERROR_ROUND_DOES_NOT_FOUND</code></td>
    <td>Transaction with the given round_id can't be found on Operator's side</td>
    </tr>
    
    <tr>
    <td><code>ERROR_FREEGAME_NOT_FOUND</code></td>
    <td>Transaction with the given freegames_reference can't be found.</td>
    </tr>
    
    <tr>
    <td><code>ERROR_SESSION_BLOCKED</code></td>
    <td>MGA LICENSE ONLY: session has been blocked due to responsible gaming guidelines</td>
    </tr>
    
    </table>
    </p>
  version: 1.0.0
tags:
  - name: Sports API
    description: >-
      Vegangster provides several methods for the Operator to display sports
      games on the Operator’s website.
  - name: Games API
    description: >-
      Vegangster provides several methods for the Operator to display games on
      the Operator’s website.
  - name: Wallet API
    description: >-
      Operator is expected to provide API for Vegangster calls. API should
      process the described requests from Vegangster.
  - name: Freegames API
    description: >-
      Freegames API lets you grant rewards (freespins, freebets, prizes) to a
      single player or several players. First-time-player bonuses are supported by
      most providers. In some cases, before granting a free bet a player must
      interact with the game to properly use it.
paths:


  /player/info:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Wallet API
      description: "Called to get player's data. Operator is expected to return available details."
      operationId: playerInfo
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlayerInfoRequest'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlayerInfo'


  /player/balance:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Wallet API
      description: "Called when player's balance is needed. Operator is expected to return player's current balance."
      operationId: playerBalance
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlayerBalanceRequest'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlayerBalance'


  /transaction/bet:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: "Called when the User places a bet. Operator is expected to decrease player's balance by amount and return new balance. Before altering of User's balance, Operator has to check that bet wasn't processed before."
      tags:
        - Wallet API
      description: ""
      operationId: transactionBet
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionBetRequest'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'

  /transaction/win:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Wallet API
      description: "Called when the User wins. Operator is expected to increase player's balance by amount and return new balance. Before any altering of User's balance, Operator has to check that win wasn't processed before."
      operationId: transactionWin
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionWinRequest'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'

  /transaction/rollback:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Wallet API
      description: "Called when there is need to roll back the effect of the referenced transaction. Operator is expected to find referenced transaction, roll back its effects and return the player's new balance."
      operationId: transactionRollback
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionRollbackRequest'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionResponse'

  /transaction/sports/bet/commit:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Wallet API
      description: "This call serves to inform the operator that the player's bet has been accepted by sport provider. However, in certain situations sport provider may reject the bet."
      operationId: transactionSportsBetCommit
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionSportsBetCommitRequest'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BetCommitResponse'

  /transaction/sports/bet/settlement:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Wallet API
      description: "This call is used to notify operator that the bet is closed. Request is sent with 30 days delay after Win (Lost, Rollback) request. During this period rollbacks could be sent."
      operationId: transactionSportsBetSettlement
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionSportsBetSettlementRequest'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BetCommitResponse'

  /operator/v1/game/url:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Games API
      description: >-
        Returns the Landing URL of the chosen game. Operator has to forward User to returned URL. There are several ways to forward the User:<br>
        1. Embed URL into iframe on your site;<br>
        2. Redirect User to URL;<br>
        3. Open URL in new window/tab of browser.
      operationId: gameUrl
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorGameUrl'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorGameUrlResponse'
        '400':
          description: "Error"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorGameUrlError'

  /operator/v1/game/demo/url:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Games API
      description: >-
        Returns the Landing URL of the chosen game in demo mode. No Player data is needed, the funds used are in-game funds.
      operationId: gameDemoUrl
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorDemoUrl'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorGameUrlResponse'
        '400':
          description: "Error"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorGameUrlError'

  /operator/v1/sports/start:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Sports API
      description: >-
        Returns the Landing URL of the chosen game. Operator has to forward User to returned URL. There are several ways to forward the User:<br>
        1. Embed URL into iframe on your site;<br>
        2. Redirect User to URL;<br>
        3. Open URL in new window/tab of browser.
      operationId: SportsGameUrl
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorSportsStart'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorSportsStartResponse'
        '400':
          description: "Error"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorGameUrlError'

  /operator/v1/sports/demo/start/:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Sports API
      description: >-
        Returns the Landing URL of the chosen game in demo mode. No Player data is needed, the funds used are in-game funds.
      operationId: SportsGameDemoUrl
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorSportsDemoStart'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorSportsStartResponse'
        '400':
          description: "Error"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorGameUrlError'

  /operator/v1/game/round-info:
   post:
     parameters:
       - in: header
         name: X-API-Signature
         schema:
           $ref: '#/components/schemas/Signature'
         description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
     tags:
       - Games API
     operationId: gameRoundInfo
     requestBody:
       content:
         application/json:
           schema:
             $ref: '#/components/schemas/OperatorRoundInfo'
       required: true
     responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorRoundInfoResponse'
        '400':
          description: "Error"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorRoundInfoResponseError'

  /operator/v1/game/round-cancel:
   post:
     parameters:
       - in: header
         name: X-API-Signature
         schema:
           $ref: '#/components/schemas/Signature'
         description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
     tags:
       - Games API
     operationId: gameRoundCancel
     requestBody:
       content:
         application/json:
           schema:
             $ref: '#/components/schemas/OperatorRoundCancel'
       required: true
     responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorRoundCancelResponse'
        '400':
          description: "Error"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorRoundCancelResponseError'

  /operator/v1/game/list:
   post:
     parameters:
       - in: header
         name: X-API-Signature
         schema:
           $ref: '#/components/schemas/Signature'
         description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
     tags:
       - Games API
     operationId: gameList
     requestBody:
       content:
         application/json:
           schema:
             $ref: '#/components/schemas/OperatorList'
       required: true
     responses:
       '200':
         description: "OK"
         content:
           application/json:
             schema:
               $ref: '#/components/schemas/GameListResponse'

  /operator/v1/game/tables-info:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Games API
      operationId: gameTablesInfo
      requestBody:
        description: See OperatorGameLiveTablesListResponse schema (id field) for more information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorGameLiveTablesListRequest'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorGameLiveTablesListResponse'


  /operator/v1/freegames/grant:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Freegames API
      operationId: freegamesGrant
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorFreegameGrant'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorFreegameGrantResponse'
        '400':
          description: "Error"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorGameUrlError'

  /operator/v1/freegames/list:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Freegames API
      operationId: freegamesList
      requestBody:
        description: See PlayerInfoRequest schema for more information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorFreegameList'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorFreegameListResponse'

  /operator/v1/freegames/cancel:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Freegames API
      operationId: freegamesCancel
      requestBody:
        description: See OperatorFreegameResponse schema (id field) for more information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorFreegameCancel'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorFreegameResponse'

  /operator/v1/freegames/games:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Freegames API
      operationId: freegamesGames
      requestBody:
        description: See OperatorFreegameGamesListResponse schema (id field) for more information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorFreegameGamesListRequest'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorFreegameGamesListResponse'

  /operator/v1/freegames/bet-amounts:
    post:
      parameters:
        - in: header
          name: X-API-Signature
          schema:
            $ref: '#/components/schemas/Signature'
          description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      tags:
        - Freegames API
      operationId: freegamesBetAmounts
      requestBody:
        description: See OperatorFreegameGameBetAmountListResponse schema (id field) for more information.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OperatorFreegameGameBetAmountListRequest'
        required: true
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperatorFreegameGameBetAmountListResponse'

components:
  schemas:
    Currency:
      type: string
      example: USD
      format: ISO-4217
      description: >-
        ISO 4217 currency code. Following enum contains all currencies supported
        by our system. Note that native game play support with these currencies
        varies per provider. Please contact us to know which provider supports
        which currencies.
      enum:
        - AFN
        - EUR
        - ALL
        - DZD
        - USD
        - AOA
        - XCD
        - ARS
        - AMD
        - AWG
        - AUD
        - AZN
        - BSD
        - BHD
        - BDT
        - BBD
        - BYN
        - BZD
        - XOF
        - BMD
        - INR
        - BTN
        - BOB
        - BOV
        - BAM
        - BWP
        - NOK
        - BRL
        - BND
        - BGN
        - BIF
        - CVE
        - KHR
        - XAF
        - CAD
        - KYD
        - CLP
        - CLF
        - CNY
        - COP
        - COU
        - KMF
        - CDF
        - NZD
        - CRC
        - HRK
        - CUP
        - CUC
        - ANG
        - CZK
        - DKK
        - DJF
        - DOP
        - EGP
        - SVC
        - ERN
        - SZL
        - ETB
        - FKP
        - FJD
        - XPF
        - GMD
        - GEL
        - GHS
        - GIP
        - GTQ
        - GBP
        - GNF
        - GYD
        - HTG
        - HNL
        - HKD
        - HUF
        - ISK
        - IDR
        - XDR
        - IRR
        - IQD
        - ILS
        - JMD
        - JPY
        - JOD
        - KZT
        - KES
        - KPW
        - KRW
        - KWD
        - KGS
        - LAK
        - LBP
        - LSL
        - ZAR
        - LRD
        - LYD
        - CHF
        - MOP
        - MKD
        - MGA
        - MWK
        - MYR
        - MVR
        - MRU
        - MUR
        - XUA
        - MXN
        - MXV
        - MDL
        - MNT
        - MAD
        - MZN
        - MMK
        - NAD
        - NPR
        - NIO
        - NGN
        - OMR
        - PKR
        - PAB
        - PGK
        - PYG
        - PEN
        - PHP
        - PLN
        - QAR
        - RON
        - RUB
        - RWF
        - SHP
        - WST
        - STN
        - SAR
        - RSD
        - SCR
        - SLL
        - SLE
        - SGD
        - XSU
        - SBD
        - SOS
        - SSP
        - LKR
        - SDG
        - SRD
        - SEK
        - CHE
        - CHW
        - SYP
        - TWD
        - TJS
        - TZS
        - THB
        - TOP
        - TTD
        - TND
        - TRY
        - TMT
        - UGX
        - UAH
        - AED
        - USN
        - UYU
        - UYI
        - UYW
        - UZS
        - VUV
        - VES
        - VED
        - VND
        - YER
        - ZMW
        - ZWL
        - XBA
        - XBB
        - XBC
        - XBD
        - XTS
        - XXX
        - XAU
        - XPD
        - XPT
        - XAG
        - USDT
        - ETH
        - BTC
    Language:
      type: string
      format: ISD-639-1
      example: en
      description: ISO 639-1 language code
      enum:
        - aa
        - ab
        - ae
        - af
        - ak
        - am
        - an
        - ar
        - as
        - av
        - ay
        - az
        - ba
        - be
        - bg
        - bh
        - bi
        - bm
        - bn
        - bo
        - br
        - bs
        - ca
        - ce
        - ch
        - co
        - cr
        - cs
        - cu
        - cv
        - cy
        - da
        - de
        - dv
        - dz
        - ee
        - el
        - en
        - eo
        - es
        - et
        - eu
        - fa
        - ff
        - fi
        - fj
        - fo
        - fr
        - fy
        - ga
        - gd
        - gl
        - gn
        - gu
        - gv
        - ha
        - he
        - hi
        - ho
        - hr
        - ht
        - hu
        - hy
        - hz
        - ia
        - id
        - ie
        - ig
        - ii
        - ik
        - io
        - is
        - it
        - iu
        - ja
        - jv
        - ka
        - kg
        - ki
        - kj
        - kk
        - kl
        - km
        - kn
        - ko
        - kr
        - ks
        - ku
        - kv
        - kw
        - ky
        - la
        - lb
        - lg
        - li
        - ln
        - lo
        - lt
        - lu
        - lv
        - mg
        - mh
        - mi
        - mk
        - ml
        - mn
        - mr
        - ms
        - mt
        - my
        - na
        - nb
        - nd
        - ne
        - ng
        - nl
        - nn
        - 'no'
        - nr
        - nv
        - ny
        - oc
        - oj
        - om
        - or
        - os
        - pa
        - pi
        - pl
        - ps
        - pt
        - qu
        - rm
        - rn
        - ro
        - ru
        - rw
        - sa
        - sc
        - sd
        - se
        - sg
        - si
        - sk
        - sl
        - sm
        - sn
        - so
        - sq
        - sr
        - ss
        - st
        - su
        - sv
        - sw
        - ta
        - te
        - tg
        - th
        - ti
        - tk
        - tl
        - tn
        - to
        - tr
        - ts
        - tt
        - tw
        - ty
        - ug
        - uk
        - ur
        - uz
        - ve
        - vi
        - vo
        - wa
        - wo
        - xh
        - yi
        - yo
        - za
        - zh
        - zu

    Country:
      type: string
      format: ISO-3166-1
      description: "Player's country ISO 3166-1 code. Following enum contains all supported values."
      example: "US"
      enum:
      - AD
      - AE
      - AF
      - AG
      - AI
      - AL
      - AM
      - AO
      - AQ
      - AR
      - AS
      - AT
      - AU
      - AW
      - AX
      - AZ
      - BA
      - BB
      - BD
      - BE
      - BF
      - BG
      - BH
      - BI
      - BJ
      - BL
      - BM
      - BN
      - BO
      - BQ
      - BR
      - BS
      - BT
      - BV
      - BW
      - BY
      - BZ
      - CA
      - CC
      - CD
      - CF
      - CG
      - CH
      - CI
      - CK
      - CL
      - CM
      - CN
      - CO
      - CR
      - CU
      - CV
      - CW
      - CX
      - CY
      - CZ
      - DE
      - DJ
      - DK
      - DM
      - DO
      - DZ
      - EC
      - EE
      - EG
      - EH
      - ER
      - ES
      - ET
      - FI
      - FJ
      - FK
      - FM
      - FO
      - FR
      - GA
      - GB
      - GD
      - GE
      - GF
      - GG
      - GH
      - GI
      - GL
      - GM
      - GN
      - GP
      - GQ
      - GR
      - GS
      - GT
      - GU
      - GW
      - GY
      - HK
      - HM
      - HN
      - HR
      - HT
      - HU
      - ID
      - IE
      - IL
      - IM
      - IN
      - IO
      - IQ
      - IR
      - IS
      - IT
      - JE
      - JM
      - JO
      - JP
      - KE
      - KG
      - KH
      - KI
      - KM
      - KN
      - KP
      - KR
      - KW
      - KY
      - KZ
      - LA
      - LB
      - LC
      - LI
      - LK
      - LR
      - LS
      - LT
      - LU
      - LV
      - LY
      - MA
      - MC
      - MD
      - ME
      - MF
      - MG
      - MH
      - MK
      - ML
      - MM
      - MN
      - MO
      - MP
      - MQ
      - MR
      - MS
      - MT
      - MU
      - MV
      - MW
      - MX
      - MY
      - MZ
      - NA
      - NC
      - NE
      - NF
      - NG
      - NI
      - NL
      - 'NO'
      - NP
      - NR
      - NU
      - NZ
      - OM
      - PA
      - PE
      - PF
      - PG
      - PH
      - PK
      - PL
      - PM
      - PN
      - PR
      - PS
      - PT
      - PW
      - PY
      - QA
      - RE
      - RO
      - RS
      - RU
      - RW
      - SA
      - SB
      - SC
      - SD
      - SE
      - SG
      - SH
      - SI
      - SJ
      - SK
      - SL
      - SM
      - SN
      - SO
      - SR
      - SS
      - ST
      - SV
      - SX
      - SY
      - SZ
      - TC
      - TD
      - TF
      - TG
      - TH
      - TJ
      - TK
      - TL
      - TM
      - TN
      - TO
      - TR
      - TT
      - TV
      - TW
      - TZ
      - UA
      - UG
      - UM
      - US
      - UY
      - UZ
      - VA
      - VC
      - VE
      - VG
      - VI
      - VN
      - VU
      - WF
      - WS
      - YE
      - YT
      - ZA
      - ZM
      - ZW

    Date:
      type: string
      format: ISO-8601
      example: "2023-05-11T12:22:35"
      description: "ISO 8601 Extended datetime format (YYYY-MM-DDThh:mm:ss)."

    TableType:
      type: string
      example: "blackjack"
      description: "Table type"
      enum:
        - roulette
        - blackjack
        - baccarat
        - dragon_tiger
        - money_wheel
        - monopoly
        - dice
        - top_card

    GameSection:
      type: string
      example: 'livedealers'
      description: >-
        Game section
      enum:
        - casino
        - livedealers

    GamePlatform:
      type: string
      example: 'desktop'
      description: >-
        Platform: mobile or desktop.
      enum:
        - desktop
        - mobile

    GameLayout:
      type: string
      example: '_4x3'
      description: >-
        Game layout
      enum:
        - _4x3
        - _16x9
        - _16x10
        - _12x10
        - _1280x770
        - _1700x770

    GameFeature:
      type: string
      example: 'respins'
      description: >-
        Game feature
      enum:
        - bonus_buy
        - bonus_symbols
        - bonus_wheel
        - cascading_reels
        - exceptional_wilds
        - expanding_wilds
        - freespins
        - hold_and_win
        - jackpots
        - money_collect
        - picker_bonus
        - progressive_games
        - progressive_multipliers
        - random_multipliers
        - random_wilds
        - respins
        - scatter_symbols
        - scatters
        - special_multipliers
        - standard_wilds
        - static_multipliers
        - wild

    GameTheme:
      type: string
      example: 'fruits'
      description: >-
        Game theme
      enum:
        - adventure
        - ancient
        - animals
        - arabic
        - asia
        - aztec
        - books
        - carnival
        - classic
        - dragons
        - egypt
        - fantasy
        - food
        - fruits
        - gems
        - gods
        - greek
        - historic
        - irish
        - jokers
        - jungle
        - lifestyle
        - luxury
        - nature
        - pirates
        - science
        - sea
        - space
        - spooky
        - technology
        - vikings
        - wild_west

    GameGenre:
      type: string
      example: 'anime'
      description: >-
        Game genre
      enum:
        - anime
        - asian

    GameTag:
      type: string
      example: 'vip'
      description: >-
        Game tag
      enum:
        - bonus_buy
        - drops_and_wins
        - exclusive
        - hold_and_win
        - hot
        - jackpot_hunt
        - jackpots
        - megaways
        - mystery_drops
        - new
        - popular
        - tournament
        - vip

    GameTechnology:
      type: string
      example: 'js'
      description: >-
        Game technology
      enum:
        - js
        - html5
        - other

    SportProvider:
      type: string
      example: 'betby'
      description: >-
        Sport provider
      enum:
        - betby
        - powerplay

    SportType:
        type: string
        example: 'soccer'
        description: >-
          Sport type
        enum:
          - soccer
          - basketball
          - baseball
          - ice_hockey
          - tennis
          - handball
          - floorball
          - trotting
          - golf
          - boxing
          - motor_sport
          - rugby
          - aussie_rules
          - winter_sports
          - bandy
          - american_football
          - cycling
          - specials
          - snooker
          - table_tennis
          - cricket
          - darts
          - volleyball
          - field_hockey
          - pool
          - waterpolo
          - gaelic_sports
          - curling
          - futsal
          - olympics
          - badminton
          - bowls
          - chess
          - beach_volley
          - netball
          - athletics
          - squash
          - rink_hockey
          - lacrosse
          - formula_1
          - bikes
          - dtm
          - alpine_skiing
          - biathlon
          - bobsleigh
          - cross_country
          - nordic_combined
          - ski_jumping
          - snowboard
          - speed_skating
          - luge
          - swimming
          - finnish_baseball
          - softball
          - horse_racing
          - schwingen
          - inline_hockey
          - greyhound_racing
          - rugby_league
          - beach_soccer
          - pesapallo
          - streethockey
          - world_championship
          - rowing
          - freestyle
          - snowboardcross_parallel
          - motogp
          - moto2
          - moto3
          - nascar_cup_series
          - padel_tennis
          - canoeing
          - horseball
          - aquatics
          - archery
          - equestrian
          - fencing
          - gymnastics
          - judo
          - modern_pentathlon
          - sailing
          - shooting
          - taekwondo
          - triathlon
          - weightlifting
          - wrestling
          - olympics_youth
          - mountain_bike
          - riding
          - surfing
          - bmx_racing
          - canoe_slalom
          - rhythmic_gymnastics
          - trampoline_gymnastics
          - artistic_swimming
          - diving
          - track_cycling
          - beach_tennis
          - sumo
          - superbike
          - rally
          - figure_skating
          - freestyle_skiing
          - skeleton
          - short_track
          - soccer_mythical
          - esport
          - world_lottery
          - counter_strike
          - league_of_legends
          - dota_2
          - starcraft
          - hearthstone
          - heroes_of_the_storm
          - world_of_tanks
          - polo
          - mma
          - call_of_duty
          - smite
          - vainglory
          - overwatch
          - warcraft_iii
          - crossfire
          - halo
          - rainbow_six
          - sepak_takraw
          - street_fighter_v
          - rocket_league
          - indy_racing
          - basque_pelota
          - speedway
          - esport_gears_of_war
          - esport_clash_royale
          - esport_king_of_glory
          - gaelic_football
          - gaelic_hurling
          - esport_fifa
          - kabaddi
          - esport_quake
          - esport_playerunknowns_battlegrounds
          - cycling_cycle_ball
          - formula_e
          - ballrun
          - motocross
          - sprint_car_racing
          - speed_boat_racing
          - drag_racing
          - stock_car_racing_148
          - modified_racing
          - off_road
          - truck_tractor_pulling
          - esport_world_of_warcraft
          - esport_nba2k
          - esport_dragon_ball_fighterz
          - basketball_3x3
          - esport_tekken
          - beach_handball
          - esport_arena_of_valor
          - esport_tf2
          - esport_ssbm
          - esport_paladins
          - esport_artifact
          - indoor_soccer
          - esport_apex_legends
          - indy_lights
          - esport_pro_evolution_soccer
          - esport_madden_nfl
          - esport_brawl_stars
          - petanque
          - esport_fortnite
          - esport_mtg
          - fishing
          - esport_dota_underlords
          - esport_teamfight_tactics
          - esport_auto_chess
          - esport_fighting_games
          - deprecated_sc
          - esport_motorsport
          - cycling_bmx_freestyle
          - cycling_bmx_racing
          - karate
          - marathon_swimming
          - skateboarding
          - sport_climbing
          - nascar_camping_world_truck
          - nascar_xfinity_series
          - nhra
          - touring_car_racing
          - formula_2
          - motorcycle_racing
          - stock_car_racing_191
          - air_racing
          - endurance_racing
          - esport_valorant
          - esport_ice_hockey
          - escape_from_tarkov_arena
          - age_of_empires
          - wild_rift
          - mobile_legends
          - harness
          - game_of_tag
          - arm_wrestling
          - freestyle_wrestling
          - greco_roman_wrestling
          - bodybuilding
          - powerlifting
          - jai_alai
          - teqball
          - bossaball
          - table_football
          - headis
          - draughts
          - poker
          - ball_hockey
          - air_hockey
          - quidditch
          - frisbee
          - capoeira
          - sambo
          - starcraft_brood_war
          - free_fire
          - pokemon
          - sidewipe
          - trackmania
          - clash_of_clans
          - pubg_mobile
          - call_of_duty_mobile
          - standoff_2
          - tetris
          - critical_ops
          - omega_strikers
          - kho_kho
          - mahjong
          - vaquejada
          - special_odds
          - cricket_22
          - stormgate
          - osu
          - keirin
          - pickleball
          - x1_soccer
          - footvolley
          - parintis_festival
          - tvbet
          - virtual
          - fifa
          - erocket_league
          - nba_2k
          - etennis
          - efighting
          - ecricket
          - ebaseball
          - penalty_shootout
          - eshooter
          - fifa_volta
          - full_ace_tennis
          - ehorse_racing
          - muay_thai
          - soccer_specials
          - breaking
          - cornhole
          - politics

    OperatorGameUrl:
      type: object
      description: "Set of data required to generate a game url"
      required:
        - operator_id
        - brand_id
        - player_id
        - token
        - game_code
        - platform
        - currency
        - lang
        - country
        - ip
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        player_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Player ID in the Operator’s system."
        token:
          type: string
          example: "64651582b8c355917ec34422"
          description: >-
            Operator's back end generates a token associated with the Player,
            game, Player's current currency and maybe other parameters depending
            on the Operator's preferences. The token acts as an ID parameter for
            the game session. It is important that the currency is not changed
            during the current game session.
        game_code:
          type: string
          example: "the_best_game"
          description: >-
            Unique game identifier in Vegangster system in form of a string. Can
            be obtained from operator/v1/game/list endpoint.
        platform:
          $ref: "#/components/schemas/GamePlatform"
        currency:
          $ref: '#/components/schemas/Currency'
        lang:
          $ref: '#/components/schemas/Language'
        country:
          $ref: '#/components/schemas/Country'
        ip:
          type: string
          description: "Player's IP address"
          example: "145.22.35.62"
        lobby_url:
          type: string
          description: "Most games have a Home button that redirects the Player back to the lobby. Put the lobby URL here."
          example: "https://my-great-casino.com/lobby"
          maxLength: 255
        deposit_url:
          type: string
          description: "Some games have button that redirects Player to page where he can deposit money. Put your URL to deposit page here."
          example: "https://my-great-casino.com/deposit"
          maxLength: 255
        player_nick:
          type: string
          description: "Player's nickname on Operator's back end"
          example: "xXx_pro100Max_xXx"

    OperatorGameUrlResponse:
      type: object
      description: "OK"
      required:
        - url
      properties:
        url:
          type: string
          example: "https://beta.cool-games.com/the-game?session=ffesg-523rfs3-423d-sf-ef"
          description: "Landing URL of chosen game"

    OperatorGameUrlError:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          example: "Game unavailable"
          description: "Reason why request failed"

    OperatorDemoUrl:
      type: object
      description: "Set of data required to generate a demo game url"
      required:
        - operator_id
        - brand_id
        - game_code
        - platform
        - currency
        - lang
        - country
        - ip
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        game_code:
          type: string
          example: "the_best_game"
          description: >-
            Unique game identifier in Vegangster system in form of a string. Can
            be obtained from operator/v1/game/list endpoint.
        platform:
          $ref: "#/components/schemas/GamePlatform"
        currency:
          $ref: '#/components/schemas/Currency'
        lang:
          $ref: '#/components/schemas/Language'
        country:
          $ref: '#/components/schemas/Country'
        ip:
          type: string
          description: "Player's IP address"
          example: "145.22.35.62"
        lobby_url:
          type: string
          description: "Most games have a Home button that redirects the Player back to the lobby. Put the lobby URL here."
          example: "https://my-great-casino.com/lobby"
          maxLength: 255

    OperatorSportsStart:
      type: object
      description: "Set of data required to generate a sport game url"
      required:
        - operator_id
        - brand_id
        - token
        - platform
        - currency
        - lang
        - country
        - ip
        - provider
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        token:
          type: string
          example: "64651582b8c355917ec34422"
          description: >-
            Operator's back end generates a token associated with the Player,
            game, Player's current currency and maybe other parameters depending
            on the Operator's preferences. The token acts as an ID parameter for
            the game session. It is important that the currency is not changed
            during the current game session.
        platform:
          $ref: "#/components/schemas/GamePlatform"
        currency:
          $ref: '#/components/schemas/Currency'
        lang:
          $ref: '#/components/schemas/Language'
        country:
          $ref: '#/components/schemas/Country'
        ip:
          type: string
          description: "Player's IP address"
          example: "145.22.35.62"
        provider:
          $ref: '#/components/schemas/SportProvider'
        player_nick:
          type: string
          description: "Player's nickname on Operator's back end"
          example: "xXx_pro100Max_xXx"
        player_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Player ID in the Operator’s system."
        sport_type:
          $ref: '#/components/schemas/SportType'

    OperatorSportsDemoStart:
      type: object
      description: \"Set of data required to generate a demo game url\"
      required:
        - operator_id
        - brand_id
        - platform
        - lang
        - country
        - ip
        - provider
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        platform:
          $ref: "#/components/schemas/GamePlatform"
        lang:
          $ref: '#/components/schemas/Language'
        country:
          $ref: '#/components/schemas/Country'
        ip:
          type: string
          description: "Player's IP address"
          example: "145.22.35.62"
        sport_type:
          $ref: '#/components/schemas/SportType'

    OperatorSportsStartResponse:
      type: object
      description: "OK"
      required:
        - provider
        - data
      properties:
        provider:
          $ref: '#/components/schemas/SportProvider'
        data:
          $ref: '#/components/schemas/DataOperatorSportsStartResponse'

    DataOperatorSportsStartResponse:
      type: object
      required:
        - game_url
      properties:
        game_url:
          type: string
          example: "https://beta.sport-games.com/the-game?session=ffesg-523rfs3-423d-sf-ef"
          description: "Landing URL of chosen game"
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        theme_name:
          type: string
          example: "default"
          description: "Sport provider develops a theme on frontend and shares a unique parameter."
        token:
          type: string
          example: "bRhRHRNRhaetnasrhaeeRHR346uqrhrehR532.."
          description: "Encoded jwt token"

    OperatorRoundInfo:
      type: object
      required:
        - operator_id
        - brand_id
        - round_id
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        round_id:
          type: string
          example: "64651484b8c355917ec34421"
          minLength: 3
          description: "Round identifier, which you recive from us through API during gameplay."

    OperatorRoundInfoResponse:
      type: object
      properties:
        url:
          type: string
          description: >-
            Url to page where results of round would be shown.
        providers_data:
          type: object
          description: >- 
            Depends on provider, for Live dealer games.

    OperatorRoundInfoResponseError:
      type: object
      required:
        - error
      properties:
        error:
          type: string
        error_details:
          type: array
          items:
            type: object
            example: {'msg': 'API not supported for provider.'}

    OperatorRoundCancel:
      type: object
      required:
        - operator_id
        - brand_id
        - round_id
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        round_id:
          type: string
          example: "64651484b8c355917ec34421"
          minLength: 3
          description: "Round identifier, which you recive from us through API during gameplay."

    OperatorRoundCancelResponse:
      type: object
      properties:
        success:
          type: boolean

    OperatorRoundCancelResponseError:
      type: object
      required:
        - error
      properties:
        error:
          type: string
        error_details:
          type: array
          items:
            type: object
            example: {'msg': 'API not supported for provider.'}

    OperatorList:
      type: object
      required:
        - operator_id
        - brand_id
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."

    LiveTablesAPIListModel:
      type: object
      required:
        - last_modified
        - game_code
        - table_id
        - table_name
        - table_type
        - online
        - dealer
        - players
        - free_seats
      properties:
        last_modified:
          $ref: "#/components/schemas/Date"
        game_code:
          type: string
          example: "blackjack_a"
          description: "Game code as it is listed on Vegangster side. 
          Can be obtained from operator/v1/game/list endpoint."
        table_id:
          type: string
          example: "412"
          description: "Table id as it is obtained from the game provider"
        table_name:
          type: string
          example: "Blackjack A"
          description: "Table name as it is obtained from the game provider"
        table_type:
          $ref: "#/components/schemas/TableType"
        online:
          type: boolean
          example: true
        dealer:
          type: string
          example: "Daniel_1"
        players:
          type: integer
          example: 10
        free_seats:
          type: integer
          example: 5
          description: "If this value is -1 - the field is not relevant to the provided table"
        table_lang:
          $ref: '#/components/schemas/Language'
        results:
          type: array
          description: "Composition may differ from game to game. Strict validations are NOT adviced."
          items:
            type: object
          example: [[ { "value" : 8 } ]]
        min_bet:
          description: "Composition may differ from game to game. Strict validations are NOT adviced."
          type: object
        bet_limits:
          description: "Composition may differ from game to game. Strict validations are NOT adviced."
          type: object
          example: {"USD": {"symbol": "$", "min": 50, "max": 2500}}

    Game:
      type: object
      required:
        - display_provider
        - section
        - name
        - game_code
        - provider_game_code
      properties:
        display_provider:
          type: string
          example: "Evolution Gaming"
        section:
          type: string
          example: "livedealers"
        name:
          type: string
          example: "Black Jack A"
        game_code:
          type: string
          example: "blackjack_a"
        provider_game_code:
          type: string
          example: "provider.blackjack_a"
        provider_mobile_game_code:
          type: string
          example: "provider.blackjack_a_m"
        table_id:
          type: string
          example: "1234"
        blacklisted_countries_iso:
          type: array
          items:
            $ref: '#/components/schemas/Country'
        platforms:
          type: array
          items:
            $ref: '#/components/schemas/GamePlatform'
        rtp:
          type: number
          example: 12.34
        min_bet_eur:
          type: integer
          example: 1234
        max_bet_eur:
          type: integer
          example: 1234
        languages:
          type: array
          items:
            $ref: '#/components/schemas/Language'
        freegames_support:
          type: boolean
        feature_triggers_support:
          type: boolean
        demo:
          type: boolean
        jackpot_support:
          type: boolean
        date_release:
          $ref: "#/components/schemas/Date"
        lines:
          type: integer
          example: 1234
        volatility:
          type: integer
          example: 1
        hit_frequency:
          type: integer
          example: 1
        max_exposure:
          type: integer
          example: 1
        max_multiplier:
          type: integer
          example: 1
        layout:
          $ref: "#/components/schemas/GameLayout"
        features:
          type: array
          items:
            $ref: '#/components/schemas/GameFeature'
        themes:
          type: array
          items:
            $ref: '#/components/schemas/GameTheme'
        genres:
          type: array
          items:
            $ref: '#/components/schemas/GameGenre'
        tags:
          type: array
          items:
            $ref: '#/components/schemas/GameTag'
        technology:
          type: array
          items:
            $ref: '#/components/schemas/GameTechnology'
        reels:
          type: integer
          example: 1
        rows:
          type: integer
          example: 1
        autoplay_support:
          type: boolean
        quickspin_support:
          type: boolean

    GameListResponse:
      type: object
      required:
        - games
      properties:
        games:
          type: array
          items:
            $ref: '#/components/schemas/Game'

    OperatorFreegameGrant:
      type: object
      required:
        - operator_id
        - brand_id
        - player_id
        - country
        - ip
        - reference
        - game_code
        - rounds
        - rounds_bet
        - currency
        - end_date
        - offer_end_date
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        player_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Player ID in the Operator’s system."
        country:
          $ref: '#/components/schemas/Country'
        ip:
          type: string
          description: "Player's IP address"
          example: "145.22.35.62"
        reference:
          type: string
          example: "Ref_1_fsefgrh"
        game_code:
          type: string
          example: "the_best_game"
          description: >-
            Unique game identifier in Vegangster system in form of a string. Can
            be obtained from operator/v1/game/list endpoint.
        rounds:
          type: integer
          example: 10
          description: "Amount of rounds for a freegame session."
        rounds_bet:
          type: integer
          example: 100
          description: "Bet amount for each round of a freegame session.<br>Subunits are used: if currency is 'USD' then 100 = 1 USD."
        currency:
          $ref: '#/components/schemas/Currency'
        end_date:
          $ref: "#/components/schemas/Date"
        offer_end_date:
          $ref: "#/components/schemas/Date"
        start_date:
          $ref: "#/components/schemas/Date"
        max_winnings:
          type: integer
          example: 1000
          description: "Amount of a maximum possible non-zero winning for the freegame. Only applicable to a few of the games. Contact support team in order to determine the list of games/provider that support this feature."

    OperatorFreegameGrantResponse:
      type: object
      required:
        - id
      properties:
        id:
          type: string
          example: "AnsrgRT432-R4rwrw412f-Fijhr55"
          description: "Id of the freegame offer generated on Vegangster side"

    OperatorFreegameList:
      type: object
      required:
        - operator_id
        - brand_id
        - player_id
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        player_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Player ID in the Operator’s system."

    OperatorFreegameCancel:
      type: object
      required:
        - operator_id
        - brand_id
        - id
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        id:
          type: string
          example: "64e4c3900e812e194e6e3767"
          minLength: 3
          description: "Id of the freegame offer generated on Vegangster side."

    OperatorFreegameListResponse:
      type: object
      required:
        - freegames
      properties:
        freegames:
          type: array
          items:
            $ref: '#/components/schemas/OperatorFreegameResponse'

    OperatorFreegameResponse:
      type: object
      required:
        - id
        - reference
        - game_code
        - rounds
        - rounds_bet
        - currency
        - start_date
        - end_date
      properties:
        id:
          type: string
          example: "64e4c3900e812e194e6e3767"
          description: "Id of the freegame offer generated on Vegangster side"
        reference:
          type: string
          example: "Ref_1_fsefgrh"
        game_code:
          type: string
          example: "the_best_game"
          description: >-
            Unique game identifier in Vegangster system in form of a string. Can
            be obtained from operator/v1/game/list endpoint.
        rounds:
          type: integer
          example: 10
          description: "Amount of rounds for a freegame session."
        rounds_bet:
          type: integer
          example: 100
          description: "Bet amount for each round of a freegame session.<br>Subunits are used: if currency is 'USD' then 100 = 1 USD."
        currency:
          $ref: '#/components/schemas/Currency'
        start_date:
          $ref: "#/components/schemas/Date"
        end_date:
          $ref: "#/components/schemas/Date"

    OperatorFreegameGamesListRequest:
      type: object
      required:
        - operator_id
        - brand_id
        - currency
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        currency:
          $ref: '#/components/schemas/Currency'
        display_provider:
          type: string
          example: "evolutiongaming"
        country:
          $ref: '#/components/schemas/Country'

    FreegamesGame:
      type: object
      properties:
        display_provider:
          type: string
          example: "Evolution Gaming"
        game_code:
          type: string
          example: "blackjack_a"
        name:
          type: string
          example: "Black Jack A"
        demo:
          type: boolean
          default: true
        platforms:
          type: array
          items:
            type: string
            example: ["desktop", "mobile"]

    OperatorGameLiveTablesListResponse:
      type: object
      required:
        - tables
      properties:
        tables:
          type: array
          items:
            $ref: '#/components/schemas/LiveTablesAPIListModel'

    OperatorGameLiveTablesListRequest:
      type: object
      required:
        - operator_id
        - brand_id
      properties:
        operator_id:
          type: string
          example: "64651484b8c355917ec34420"
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        game_codes:
          type: array
          description: "If provided, will only return tables info for games, which game codes are listed in this field. Game codes can be obtained from operator/v1/game/list endpoint"
          items:
            type: string
          example: ["blackjack_a", "blackjack_b", "blackjack_c"]

    OperatorGameGamesListResponse:
      type: object
      required:
        - tables
      properties:
        games:
          type: array
          items:
            $ref: '#/components/schemas/Game'

    OperatorFreegameGamesListResponse:
      type: object
      required:
        - games
      properties:
        games:
          type: array
          items:
            $ref: '#/components/schemas/FreegamesGame'

    OperatorFreegameGameBetAmountListRequest:
      type: object
      required:
        - operator_id
        - brand_id
        - game_code
      properties:
        operator_id:
          type: string
          example: "64651433b8c355917ec3441f"
          description: >-
            Unique identifier of Operator in Vegangster system. Used to
            authorize incoming requests. Can be obtained from Vegangster back
            office after Operator is registered and set up in Vegangster system.
        brand_id:
          type: string
          example: "64651484b8c355917ec34420"
          description: "Unique identifier of Brand in Vegangster's system."
        game_code:
          type: string
          example: "the_best_game"
          description: >-
            Unique game identifier in Vegangster system in form of a string. Can
            be obtained from operator/v1/game/list endpoint.
        currency:
          $ref: '#/components/schemas/Currency'
        country:
          $ref: '#/components/schemas/Country'

    OperatorFreegameGameBetAmountListResponse:
      type: object
      required:
        - bet_amounts
      properties:
        bet_amounts:
          type: object
          example: {"USD": [100, 200, 300]}
#          propertyNames:
#            $ref: '#/components/schemas/Currency'
          additionalProperties:
            type: array
            example: [100, 200, 300]
            items:
              type: integer
              example: 100

    Signature:
      type: string
      description: 'RSA-SHA256 is used to sign the request body using the private key. The signature is validated using the public key.'
      example: 'k8T2IfVierOFeALQrNx88Es6Dl8Bgb9ogm1W4xgL3Ve01p59DQNt0oorm0LZt/YqkWYGLL2lpd5Qb1FiX4O7+hfyPKN1Q=='

    PlayerInfoRequest:
      type: object
      required:
        - player_id
        - token
      properties:
        operator_player_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Player ID in the Operator’s system."
        operator_token:
          type: string
          example: "64651582b8c355917ec34422"
          description: >-
            Operator's back end generates a token associated with the Player,
            game, Player's current currency and maybe other parameters depending
            on the Operator's preferences. The token acts as an ID parameter for
            the game session. It is important that the currency is not changed
            during the current game session.

    PlayerInfo:
      type: object
      example:
        status: OK
        currency: EUR
        country: PL
        balance: 10000
      required:
        - status
        - currency
        - country
        - balance
      properties:
        status:
          type: string
          description: A status message about the operation. 'OK' if no problem has occured
          example: OK
        currency:
          $ref: '#/components/schemas/Currency'
        country:
          type: string
          example: AR
          description: a two-letter country code (ISO-3166)
        balance:
          type: integer
          example: 250
          description: >-
            Player's balance in currency subunits (example: USD cents; 100 = 1
            USD)

    PlayerBalanceRequest:
      type: object
      required:
        - player_id
        - token
      properties:
        operator_player_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Player ID in the Operator’s system."

    PlayerBalance:
      type: object
      example:
        status: OK
        currency: USD
        balance: 25000
      required:
        - status
        - currency
        - balance
      properties:
        status:
          type: string
          example: OK
          description: A status message about the operation. 'OK' if no problem has occured
        currency:
          $ref: '#/components/schemas/Currency'
        balance:
          type: integer
          example: 250
          description: >-
            Player's balance in currency subunits (example: USD cents; 100 = 1
            USD)

    TransactionResponse:
      type: object
      example:
        status: OK
        currency: USD
        balance: 50000
        external_transaction_id: LOCAL_TR_ID_1
      required:
        - status
        - currency
        - balance
        - external_transaction_id
      properties:
        status:
          type: string
          example: OK
          description: A status message about the operation. 'OK' if no problem has occured
        currency:
          $ref: '#/components/schemas/Currency'
        balance:
          type: integer
          example: 250
          description: >-
            Player's balance in currency subunits (example: USD cents; 100 = 1
            USD)
        external_transaction_id:
          type: string
          example: F988FUH3BZBWBE23BR35TSE
          description: A unique identifier for a transaction assigned on your side

    TransactionBetRequest:
      type: object
      required:
        - player_id
        - token
        - game_code
        - transaction_id
        - round_id
        - currency
        - amount
      properties:
        operator_player_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Player ID in the Operator’s system."
        operator_token:
          type: string
          example: "64651582b8c355917ec34422"
          description: >-
            Operator's back end generates a token associated with the Player,
            game, Player's current currency and maybe other parameters depending
            on the Operator's preferences. The token acts as an ID parameter for
            the game session. It is important that the currency is not changed
            during the current game session.
        game_code:
          type: string
          example: "the_best_game"
          description: >-
            Unique game identifier in Vegangster system in form of a string. Can
            be obtained from operator/v1/game/list endpoint.
        transaction_id:
          type: string
          example: "fse356yhb3b423rf8s893y33111rff"
          minLength: 3
          description: "Transaction identifier, which you recive from us through API during gameplay."
        round_id:
          type: string
          example: "ffe42346yh-dgr"
          minLength: 3
          description: "Round identifier, which you recive from us through API during gameplay."
        currency:
          $ref: '#/components/schemas/Currency'
        amount:
          type: integer
          example: 100
          description: "Bet amount.<br>Subunits are used: if currency is 'USD' then 100 = 1 USD."

    TransactionWinRequest:
      type: object
      required:
        - player_id
        - token
        - game_code
        - transaction_id
        - round_id
        - currency
        - amount
        - round_closed
      properties:
        operator_player_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Player ID in the Operator’s system."
        operator_token:
          type: string
          example: "64651582b8c355917ec34422"
          description: >-
            Operator's back end generates a token associated with the Player,
            game, Player's current currency and maybe other parameters depending
            on the Operator's preferences. The token acts as an ID parameter for
            the game session. It is important that the currency is not changed
            during the current game session.
        game_code:
          type: string
          example: "the_best_game"
          description: >-
            Unique game identifier in Vegangster system in form of a string. Can
            be obtained from operator/v1/game/list endpoint.
        transaction_id:
          type: string
          example: "fse356yhb3b423rf8s893y33111rff"
          minLength: 3
          description: "Transaction identifier, which you recive from us through API during gameplay."
        round_id:
          type: string
          example: "ffe42346yh-dgr"
          minLength: 3
          description: "Round identifier, which you recive from us through API during gameplay."
        currency:
          $ref: '#/components/schemas/Currency'
        amount:
          type: integer
          example: 100
          description: "Win amount.<br>Subunits are used: if currency is 'USD' then 100 = 1 USD."
        round_closed:
          type: boolean
          example: True
          description: "Inform an operator that round is closed"
        freegames_reference:
          $ref: '#/components/schemas/FreegamesReference'

    TransactionRollbackRequest:
      type: object
      required:
        - player_id
        - token
        - game_code
        - transaction_id
        - reference_transaction_id
        - round_id
      properties:
        operator_player_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Player ID in the Operator’s system."
        operator_token:
          type: string
          example: "64651582b8c355917ec34422"
          description: >-
            Operator's back end generates a token associated with the Player,
            game, Player's current currency and maybe other parameters depending
            on the Operator's preferences. The token acts as an ID parameter for
            the game session. It is important that the currency is not changed
            during the current game session.
        game_code:
          type: string
          example: "the_best_game"
          description: >-
            Unique game identifier in Vegangster system in form of a string. Can
            be obtained from operator/v1/game/list endpoint.
        transaction_id:
          type: string
          example: "fse356yhb3b423rf8s893y33111rff"
          minLength: 3
          description: "Transaction identifier, which you recive from us through API during gameplay."
        round_id:
          type: string
          example: "ffe42346yh-dgr"
          minLength: 3
          description: "Round identifier, which you recive from us through API during gameplay."
        reference_transaction_id:
          type: string
          example: "12315678652123f"
          description: >-
            A unique identifier of the processed transaction to be rollbacked
            (generated on provider's side)


    TransactionSportsBetCommitRequest:
      type: object
      required:
        - operator_transaction_id
        - operator_token
      properties:
        operator_transaction_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Transaction ID in the Operator’s system."
        operator_token:
          type: string
          example: "64651582b8c355917ec34422"
          description: >-
            Operator's back end generates a token associated with the Player,
            game, Player's current currency and maybe other parameters depending
            on the Operator's preferences. The token acts as an ID parameter for
            the game session. It is important that the currency is not changed
            during the current game session.


    TransactionSportsBetSettlementRequest:
      type: object
      required:
        - operator_transaction_id
        - operator_token
        - status
      properties:
        operator_transaction_id:
          type: string
          example: "64651509b8c355917ec34421"
          minLength: 3
          description: "Unique Transaction ID in the Operator’s system."
        operator_token:
          type: string
          example: "64651582b8c355917ec34422"
          description: >-
            Operator's back end generates a token associated with the Player,
            game, Player's current currency and maybe other parameters depending
            on the Operator's preferences. The token acts as an ID parameter for
            the game session. It is important that the currency is not changed
            during the current game session.
        status:
          type: string
          example: 'won'
          description: "Settled status of betslip"
          enum:
            - won
            - lost
            - canceled
            - refund
            - cashed out
            - half-won
            - half-lost

    BetCommitResponse:
      type: object
      example:
        status: OK
      properties:
        status:
          type: string
          description: A status message about the operation. 'OK' if no problem has occured
          example: OK

    FreegamesReference:
      description: '[OPTIONAL] Additional data regarding the freegames'
      type: string
      example: "present_1_for_user_x"
