# IGaming Non-Restrictive Integration Toolkit Ecosystem

## 1. Document change history

***Table 1. Document change history***

<table><thead><tr><th width="151.60157775878906">Date</th><th width="87.5390625">Version</th><th width="102.383544921875">Chapter</th><th>Change Description</th></tr></thead><tbody><tr><td>28.2.2024</td><td>0.1</td><td></td><td>Initial Version</td></tr><tr><td>23.5.2024</td><td>0.2</td><td></td><td>Added <strong>4.5 Navigation</strong></td></tr><tr><td>1.12.2024</td><td>0.3</td><td></td><td>Added <strong>4.5.3 onDomEvent</strong></td></tr><tr><td>24.2.2025</td><td>0.9</td><td></td><td>Casino integrations, revamped structure.</td></tr><tr><td>15.07.2025</td><td>1.0</td><td>12.</td><td><strong>Cryptocurrencies</strong> list.</td></tr><tr><td>24.10.2025</td><td>1.1</td><td>8.</td><td><strong>content</strong> and <strong>gameId</strong> added to RollbackRequest</td></tr><tr><td>5.3.2026.</td><td>1.3</td><td>9.</td><td>Added new ActivityTypes.</td></tr></tbody></table>

## 2. Introduction

**iGNITE** (**iG**aming **N**on-restrictive **I**ntegration **T**oolkit **E**cosystem) is a set of tools and systems enabling the standardized integration of Sportradar's game portfolio.

This document is designed for B2B partners **(Operators, PAMs, iGaming Platforms)** who wish to integrate content aggregated by Sportradar's NextGen iGaming Platform.

This includes the following content:

***Table 2. Content***

<table><thead><tr><th width="229.57244873046875">Category</th><th>Games</th></tr></thead><tbody><tr><td>Sportsbook</td><td>Sportradar</td></tr><tr><td>VirtualGames</td><td>Sportradar</td></tr><tr><td>Casino</td><td>Sportradar, Betgames.tv</td></tr></tbody></table>

### 2.1. Glossary

***Table 3. Glossary***

<table><thead><tr><th width="211.31463623046875">Term</th><th>Description</th></tr></thead><tbody><tr><td>Operator</td><td><em>Entity/System/Company that offers iGaming content to the users.</em></td></tr><tr><td>Operator FE App</td><td><em>Application owned by operator, which integrates game content. Web application, mobile application, etc…</em></td></tr><tr><td>Game UI/Game iFrame</td><td><em>Game frontend, e.g. Sportsbook UI, Virtual Game UI, Casino UI</em></td></tr><tr><td>iGNITE Core</td><td><em>Part of</em> Sportradar's <em>NextGen iGaming Platform that is in charge of managing punter accounts and betting transactions</em></td></tr><tr><td>Operators Platform / PAM</td><td><em>Single or multiple systems in charge of handling user sessions and betting transaction flow on Operators end</em></td></tr></tbody></table>

## 3. Integration overview

There are three integration concepts between operators and Sportradar's NextGen iGaming Platform.

#### Game UI integration (Frontend integration)

The standard integration method is to embed the game iframe in the operator’s frontend application.

{% hint style="warning" %}
Alternatively, for the original products, the operator has the option to implement each game's frontend based on its respective API (covered in a different document. Please talk to your Client Success Manager).
{% endhint %}

#### Punter Session integration

Enables seamless session management between *operators'* and Sportradar systems.

#### Bet Acceptance integration

Operators are contacted for every relevant betting action *(DEBIT, CREDIT, ROLLBACK)*.

Bet acceptance integration can be configured in two modes:

* **BASIC**: Only basic wallet transaction data is shared between systems for systems that do not want to consume detailed bet data.
* **RICH\_CONTENT** : Basic wallet transaction data is expanded with **in-depth details** from each bet that occurred within the system.

{% hint style="warning" %}
For **RICH\_CONTENT** mode, there is also the option of integrating a special [Auxiliary API ](https://docs.sportradar.com/nextgen-igaming/ignite/auxiliary-api)that enables operators to consume data beyond DEBIT, CREDIT & ROLLBACK actions. E.g., track status changes for each bet selection, or to consume lost bets, etc.
{% endhint %}

{% hint style="warning" %}
Since **RICH\_CONTENT** mode provides bet identifiers rather than sending full localized data of each bet or round parameter, content beyond IDs can be shared with operators via specially designed pull (KAFKA) and push (HTTP) APIs.
{% endhint %}

Technically, high-level integration covers:

* **Frontend integration:** (chapters 4, 5)

UI integration via Chatty iFrame or Simple URL launcher

* **Backend integration:** (chapters 6+)

Connection between Sportradar's iGNITE Core and Operator Platform.

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FXwG5HsHWFJtokGiYAyIZ%2Fintegration-overview-dark.jpg?alt=media&#x26;token=829fb2df-94b1-4eda-a8d1-97cbef83b033" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/yCcJcVCADQUUg0RpIW5G/Unknown%20image" alt="Figure1: Integration Overview"></picture>

{% hint style="warning" %}
Integration of all concepts is HIGHLY recommended.
{% endhint %}

For seamless types of integration, the following subsequent chapters are key:

* [6. iGNITE Core (Backend Integration)](#id-6.-ignite-core-backend-integration)
* [7. Punter Session Integration (backend)](#id-7.-punter-session-integration-backend)

Additionally, core subsequent chapters for Casino content integrations are of value:

* [4.1. Simple URL Launcher](#id-4.1.-simple-url-launcher)
* [10. Casino RICH\_CONTENT Integration](#id-10.-casino-rich_content-integration)

Core subsequent chapters for Betslip content integrations are of value:

* [4.2. Chatty iFrame](#id-4.2.-chatty-iframe)
* [5. Punter Session Integration (Chatty iFrame)](#id-5.-punter-session-integration-chatty-iframe)
* [9. Betslip RICH\_CONTENT Integration](#id-9.-betslip-rich_content-integration)

For the transfer wallet type of integration following chapters are key:

* [7. Punter Session Integration (backend)](#id-7.-punter-session-integration-backend)
* [11. Transfer Wallet Integration](#id-11.-transfer-wallet-integration)

## 4. Game UI integration (Frontend integration)

Depending on the type of content being integrated, UI integration can be done in two ways:

* **Simple URL Launcher:** Typically used for **casino** content where, after loading the game, there is little to no interaction between *Operators Front End* and *Game Content*. The game is loaded via URL, and after that, there is no interaction between the two frontends.
* **Chatty iFrame/Web Component:** Typically used for **sportsbook** and **virtual games** scenarios that allow more interactivity between *Operators Front End* and *Game Content.* Offers a system of JavaScript events and messages that are constantly exchanged between the two frontends.

In practice, the difference between the two approaches is subtle. Chatty iFrame provides the Operator FE App with more control (for content that supports it).

***Simple URL Launcher:***

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FQS2otiP6EhxYGzdAxBGO%2Fsimple-url-launcher-dark.jpg?alt=media&#x26;token=220177c5-9535-4820-b04b-36edf41baef4" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/ioqR1olQsHdz1pS3ISRC/Unknown%20image" alt="Figure 2: Simple URL Launcher"></picture>

***Chatty iFrame/Web Component:***

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2F15LvOf30WFK4126Jhxwb%2Fchatty-iframe-dark.jpg?alt=media&#x26;token=41728a3f-5b12-4948-84ee-6f252a85a07a" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/gjN8KH9b8S5nxOF6czFD/Unknown%20image" alt="Figure 3: Chatty iFrame"></picture>

### 4.1. Simple URL Launcher

Game content is loaded by using the game URL when a session for a specific game starts. After that, everything is delegated to the backend integration.

Along with the base URL, the following URL parameters are required for each game load:

* **x\_\_token**: Punter’s session token&#x20;
* **x\_\_externalId**: Punter’s unique identifier in the operator’s system&#x20;
* **x\_\_linkId**: Provided at integration, different for each game&#x20;
* **x\_\_gameId**: Provided at integration, different for each game&#x20;
* **x\_\_tenantId**: Provided at integration&#x20;
* **x\_\_activeCurrency**: ISO 4217 currency code&#x20;
* **x\_\_activeLocale**: ISO 639-1 alpha-2 language code&#x20;
* **x\_\_playMode**: `[REAL, DEMO]`

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FUpRCSEpJ6EEf2HFNH2jU%2Fopening-launch-url-dark.jpg?alt=media&#x26;token=3de57253-801f-4bda-aa30-e37791b7c274" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/FRQY6kAvSWB6WUxXheXF/Unknown%20image" alt="Figure 4: Opening Launch URL"></picture>

### 4.2. Chatty iFrame/Web Component

The central piece of integration is the JavaScript SDK **iGNITE.js**, designed to act as a standardized communication bridge between *Operator FE App* and various *Game iFrames.*

#### 4.2.1. iGNITE.js Overview

iGNITE.js is a JavaScript SDK designed to act as a standardized communication bridge between *Operator FE App* and various *Game iFrames.* The SDK comes in two modes:

* **Parent**: To be used by *Operator FE App* in order to feed necessary data to games.
* **Child**: To be used by *Game iFrame* to communicate with *Operator FE App.*

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FlY9V7a5iibOqBHYr2na7%2Foperator-fe-app-dark.jpg?alt=media&#x26;token=2e7ad8eb-9ce9-479c-a95d-1402f56cf8b5" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/LFaCYNGGOcvffp4QbYJS/Unknown%20image" alt="Figure 5: Operator FE App"></picture>

#### 4.2.2 Prerequisites

At the integration start, the operator will get the following details to be used through the integration process:

**4.2.2.1 sdkParentUrl**

Endpoint from which the iGNITE.js SDK should be loaded.

**4.2.2.2. tenantId**

A unique identifier representing the tenant within Sportradar systems. The tenant is the boundary that separates one operator from another.

On special occasions, a single operator may operate under multiple tenants for various reasons (e.g., different user pools, different platforms across countries).

**4.2.2.3. gameId**

A unique identifier representing the game within Sportradar systems.

**4.2.2.4. gameUrl**

URL to load game HTML `<iframe>` . Each gameId has its own gameUrl.\
The preferred method for integrating the Frontend is using a **Web Component**. More details are available in [this document](https://docs.sportradar.com/nextgen-igaming/ignite/web-component-sportsbook-integration-guide).

**4.2.2.5. env**

Represents the integration environment. One of:

* staging: Used for the pre-production stage and testing.
* production: Used for production.

#### 4.2.3. iFrame Integration

**4.2.3.1  SDK Injection to Index File**

Inject `<script>` element into your index file:

```
<script src="{sdkParentUrl}"></script
```

{% hint style="warning" %}
It is highly recommended to initialize iGNITE.js SDK early on the homepage or as part of the game lobby, long before the punter navigates to the integrated game page. Certain products have various punter-based customization benefits and will have faster loading times if they can acquire punter details early.
{% endhint %}

**4.2.3.2. Integrator Parent Creation**

After the script is loaded, the global variable *igniteIntegrator* becomes available, and it is used to initialize the integrator. The integrator must be initialized before the iframe source is set. It should be done in the following manner:

```javascript
const integratorParent = igniteIntegrator.createIntegratorParent({
    context: {
      tenantId: 'th1sIsS0m3Sess10nFr0mOp3r@t0rsPam',
      env: 'staging',
      debug: true,
    },
    externalId: 'a1234a31aaCuiL!Q$dasllP',
    feToken: 'b12124ropDad412213aaRtad',
    settings: {
      activeCurrency: {
        code: 'EUR', symbol: '€'
      },
      activeLocale: 'en',
      oddsOption: 'DECIMAL',
      manualWalletsUpdate: false,
      b2bVal: 'foo:bar;baz:qux'
     },
     children: [
       {
         frameId: 'my-iframe-1',
         childId: 'sportsbook',
         gameOptions: {},
         b2bVal: ''
       },
       {
         frameId: 'my-iframe-2',
         childId: 'lottery',
         gameOptions: {},
         b2bVal: ''
       },
       {
         frameId: 'my-iframe-3',
         childId: 'luckysix',
         gameOptions: {},
         b2bVal: ''
       }
     ],
     events: {
       onNavigationChanged: (data) => {},
       onNavigationRequested: (data) => {},
       onLoginRequested: () => {},
       onDomEvent: (data) => {},
       onBalanceChanged: () => {}
     }
});
```

* **tenantId** - *(UUID)* Unique tenant identifier. Provided at integration start.
* **externalId** - *(string\[100])* Unique punter identifier in the *Operator's* system
* **feToken** - *(string\[1000])* Session token in the *Operator's* system
* **env** - staging vs production
* **debug** - (de)activates different debug features (like logs, etc.). Always true on staging env
* **settings** - object containing settings that will be used in all child nodes
  * **activeCurrency** - object containing details regarding the currency used. Available currencies must be exchanged before integration starts
    * **code** - ISO 4217 currency code
    * **symbol** - Currency symbol to be displayed
  * **activeLocale** - ISO 639-1 alpha-2 language code
  * **oddsOption** - *oneOf:* DECIMAL, FRACTIONAL, AMERICAN
  * **manualWalletsUpdate** - (*boolean*)\[*optional*] - Refresh balance in frame
* **b2bVal** - \[optional] *(string\[1000])* Value to propagate on every punter-initiated action from Operator FE App to Operator Platform
* **children** - collection of objects that represent integrated games, with parameters:
  * **frameId** - Unique frame identifier assigned by Operator
  * **childId** - Parameter assigned at integration start for each game integration.
  * **gameOptions** - \[optional] Object reserved for propagating options specific to each game to the specific *Game iFrame*. Possible options are communicated at integration start (if available)
  * **b2bVal** - \[optional] *(string\[1000])* Value to propagate on every punter-initiated action from Operator FE App to Operator Platform. Has precedence over the global value set in the root settings node.
* **events** - \[optional] object containing a list of event handlers
  * **onNavigationChanged** - \[optional] (function) Event handler that gets triggered when in-product navigation occurs, e.g., navigation to tournament/match details in the case of a sport product. See [navigation](#id-4.2.5.-events)
  * **onNavigationRequested** - \[optional] (function) Event handler that gets triggered when external navigation is requested from a child, e.g., browser history actions back/forward, external site navigation. See [navigation](#id-4.2.5.-events)
  * **onLoginRequested** - \[optional]\(function) Event handler that gets triggered when a user attempts to do an action for which they need to be logged in
  * **onBalanceChanged** - \[optional]\(function) Event handler that gets triggered when a child detects there has been a change in active currency balance (e.g., after a bet is placed). This only works when **manualWalletsUpdate** is set to true

**4.2.3.3. Iframe setup**

For each integrated game, the operator must set the iframe element source to the provided **gameUrl** for the appropriate product.

**iframe id** must be unique since it represents the basis of communication between `iGNITE.js` parent and children.

```javascript
<iframe id="{frameId}" src="{gameUrl}"></iframe>
```

#### 4.2.4. Message exchange between parent and iframe child

**4.2.4.1. setSession / destroySession**

See [Punter Session Integration (Chatty iFrame)](#id-5.-punter-session-integration-chatty-iframe) for in-depth details.

**4.2.4.2. updateWallets**

*Game iFrame* must be aware of the punter’s balance in order to facilitate bet placement. *Game iFrame* will regularly collect this data from the backend via *iGNITE Core,* but for an optimal experience, additional frontend implementation is required.

```javascript
integratorParent.updateWallets([
  {
    id: '01HQ5TBKSE27CPR95YXKHQEF95',
    type: 'REAL',
    balance: '55000.25',
    currency: 'EUR',
    version: 22003,
    options: null
  },
  {
    id: '01HQ5TXCXZQGREJYH0GBQBB4CD',
    type: 'REAL',
    balance: '30000.11',
    currency: 'CHF',
    version: 22003,
    options: null
  }
])
```

* **id**\* - *(string\[100])* Wallet identifier. If not available in the Operator system, any random string value should be set.
* **type** - *(oneOf: REAL, BONUS)* Differentiates between real and bonus money wallets.
* **balance** - *(string)* *See* [*Amount*](#id-12.-common-data-types)
* **currency** - *(string)* *See* [*Currency*](#id-12.-common-data-types)
* **version** - Balance version. If unavailable, set the UNIX timestamp when the request was generated. This value handles race conditions between frontend and backend balances.
* **options** - Node reserved for special bonus scenarios *(Out of scope of this document)*.

**4.2.4.3. updateSettings**

Ability to update any **settings** set while the SDK parent is initialized ([Integrator Parent Creation).](#id-4.2.3.-iframe-integration)

```javascript
integratorParent.updateSettings({
  activeLocale: {localeISOCode},
  oddsOption: {}
})
```

**4.2.4.4. updateGameOptions**

Ability to update any **gameOptions** set while the SDK parent is initialized ([Integrator Parent Creation).](#id-4.2.3.-iframe-integration)

```javascript
integratorParent.updateGameOptions({
  ...
}, {childId})
```

**4.2.4.5. navigateBack/Forward**

Notify child(ren) about navigation through history on the Operator’s app that should be reflected inside the child as well. E.g., the user navigates with the browser back action from event details to a full offer.

```javascript
integratorParent.navigateBack(childId)
```

**4.2.4.6. navigationChanged**

Notify a child about navigation in the Operator’s app that should be reflected inside the child as well. E.g., user navigates to live sport offer.

```cjs
integratorParent.navigationChanged({
  path. "/live",
}, {childId})
```

**4.2.4.7. sendMessage**

When there is a need for a specific message to be sent to a specific child *(or all of them, if childId is omitted)*, the following can be used:

```javascript
integratorParent.sendMessage({
  action: '',
  data: {}
}, {childId})
```

*Action* and *data* structure will be agreed upon on a case-by-case basis, depending on what needs to be communicated.

#### 4.2.5. Events

**4.2.5.1. onNavigationChanged**

This handler enables the Operator’s URL updating and preserving a certain product view after a page reload. It will be triggered every time navigation occurs in the child app. It receives a data parameter that looks like the following:

```javascript
{
  path: '/d_friday/t_45',
  params: {}
}
```

* **path** - *(string(1000))* Represents the pathname part of the child app.
* **params** - *\[optional]* Object containing product-dependent data.

*Use-case:*

A player navigates to a specific tournament view inside the sports child application. The Operator’s application uses the provided path and updates its own URL. On page reload, the same path should be used as a pathname for `gameUrl` in order to activate the same tournament view:

```html
<iframe id="{frameId}" src="{gameUrl}/d_friday/t_45"></iframe>
```

**4.2.5.2. onNavigationRequested**

This handler is used when external navigation is required. It receives a data parameter that looks like the following:&#x20;

```javascript
{
  type: '',
  data: {
    url: '',
    target: ''
  }
}
```

* **type** - *(oneOf: GO, BACK, FORWARD)* Represent request type of the navigation. GO is used for external URLs, e.g. marketing banners get clicked and the operator’s page should redirect to a certain URL or open it in a new tab. BACK and FORWARD are used when simple browser history navigation is requested.
* **data** - *\[optional]* Contains additional information when navigation type GO is used.
  * **url** - *(string)* URL that is requested to be opened.
  * **target** - *(oneOf: `_blank`)* If provided, it will have the value `_blank`, indicating that the URL should be opened in a new tab.

**4.2.5.3. onDomEvent**

This handler is used when there’s a need to listen to certain DOM events happening in the child. It receives a data parameter that looks like the following:

```javascript
{
  type: 'scroll',
  params: {
    direction: "UP|DOWN",
    offsetTop: 10,
    ...
  }
}
```

* **type** - represents the name of the DOM event that occurred.
* **params** - different sets of data that additionally describe the DOM event. The structure is entirely dependent on the event in question. The example above shows what will be sent for the *scroll* event.

## 5. Punter Session Integration (Chatty iFrame)

{% hint style="warning" %}
Backend integration is identical in all use cases.
{% endhint %}

In order to place bets, punters must be authenticated to the *iGNITE Core.*

*iGNITE Core* supports on-the-fly punter registration and authentication.

Session identifiers are propagated from the *Operator FE App* via iGNITE.js SDK.

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2F0Bvv01nBVeY5UFsjrQrp%2Fpunter-session-integration-dark.jpg?alt=media&#x26;token=37a8fa9b-ed18-48d4-9cda-68dcdd7d1ce5" media="(prefers-color-scheme: dark)"><img src="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FV9daEUnv1OuSqjaNuygD%2Fpunter-session-integration-v2.jpg?alt=media&#x26;token=3c6d1aed-8015-4172-8316-e114b0d2df80" alt="Figure 6: Punter Session Integration"></picture>

Steps necessary from operators POV:

1. Operator FE App invokes *setSession* via *iGNITE.js SDK*

```javascript
integratorParent.setSession({
  feToken: "th1sIsS0m3Sess10nFr0mOp3r@t0rsPam",
  externalId: "a1234a31aaCuiL!Q$dasllP"
});
```

{% hint style="warning" %}
***setSession*** method is used for both the initial session and for any session changes. Each session change within the Operator system should trigger *setSession* invocation with a fresh \_feToken\_set.
{% endhint %}

{% hint style="warning" %}
***feToken*** represents a token that is generated by the *Operator FE App*. It will be validated by the operator and exchanged for *sessionToken* which will be used for all backend actions. Operators are free to use the same value for both *feToken* and *sessionToken*.
{% endhint %}

2\. iGNITE Core invokes *SessionCheckRequest*. *Operator Platform* is expected to validate if the ***feToken*** matches the one issued to the *Operator FE App.* *Operator Platform* is expected to return ***sessionToken*** *(can be the same or a different value as **feToken**)*

Please refer to [Punter Session Integration (backend)](#id-7.-punter-session-integration-backend) for in-depth API details.

3\. The operator can trigger a logout action by invoking the destroySession method.

```javascript
integratorParent.destroySession()
```

## 6. iGNITE Core (Backend Integration)

### 6.1. Overview

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FaN2ckrDRhnOiJEHSFpbX%2Fbackend-integration-dark.jpg?alt=media&#x26;token=7136c186-6c11-412f-95ff-92941878e0a4" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/hORnXlyPnsqaA0fGmmcW/Unknown%20image" alt="Figure 7: Backend Integration"></picture>

All backend APIs follow the same principle. Requests are generated on *iGNITE Core*, and the Operator needs to build a service that responds to these requests in a documented fashion.

In-depth details of the integration will be described in Punter Session Integration(backend) chapter and onwards.

Within this chapter, we’ll mention general guidelines and requirements.

### 6.2. API Integration URLs

The operator platform must provide a URL when integration is ready for testing:

* SessionCheck (POST)
* SessionRefresh (POST)
* FetchPunterDetails (POST)
* Debit (POST)
* Credit (POST)
* Rollback (POST)
* FetchWallets (POST)

Details of each method are described in Chapter 7 and onwards.

### 6.3. API - API authentication

The operator platform is expected to protect integration URLs with Basic HTTP authentication.

### 6.4. HTTP Headers

Standard HTTP headers will be generated on each request.

### 6.5. Respond with HTTP 200/OK only

The Operator platform is expected to respond with an HTTP 200/OK response as documented.

### 6.6. Performance requirements

{% hint style="warning" %}
The operator must ensure that the total response time between *iGNITE Core* and \_Operator Platform\_is below 200ms and must be below 400ms at all times. This includes network latency between systems.
{% endhint %}

### 6.7. Idempotency

{% hint style="warning" %}
All methods must be implemented as [idempotent (repeat safe)](https://restfulapi.net/idempotent-rest-apis/) by the Operator Platform.
{% endhint %}

The operator must return an identical response to any retried transaction as it would have been returned by the first call.

A retry can take place several seconds, minutes, hours, or days after the initial try.

### 6.8. Security

If not agreed otherwise, the operator must provide SSL/TLS URLs for all backend endpoints.

### 6.9. Session Validation

When received, the original **sessionToken** propagated from the Operator FE App must be validated by the Operator Platform.

### 6.10. Backwards compatibility

New features and functionality will constantly be added to *iGNITE Core*, which can lead to the addition of new parameters not included in this documentation.

*Operator Platform* must ignore, without failure, the presence of new or additional non-documented parameters.

## 7. Punter Session Integration (backend)

[Chapter Punter Session Integration (frontend)](#id-5.-punter-session-integration-chatty-iframe) describes the authentication flow that starts in the Operator FE App and concludes with operator session validation on the backend via the Operator Platform. Please refer to it for a larger context.

The Operator Platform is expected to respond to the following HTTP requests triggered by the iGNITE Core.

| ***Name***     | ***Description***          |
| -------------- | -------------------------- |
| SessionCheck   | *Validates punter session* |
| SessionRefresh | *Refresh punter session*   |
| PunterDetails  | *Retrieves punter details* |

### 7.1. SessionCheck (POST)

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2Fan5KBTYYIt1uwQX7XrSC%2Ffe-token-validation-dark.jpg?alt=media&#x26;token=f35b6854-80a0-4d01-b779-2e7b27c00784" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/qhiIqIQsRtahnqjvu7c9/Unknown%20image" alt="Figure 8: fe Token Validation"></picture>

Operator Platform validates if the feToken matches the one being propagated by the Game iFrame.

***Table 4. SessionCheckRequest***

<table><thead><tr><th width="165.3331298828125">Parameter</th><th width="148.81890869140625">Type</th><th>Description</th></tr></thead><tbody><tr><td>feToken</td><td><em>string(1000)</em></td><td><p><em>Session token propagated by frontend application</em> </p><p>This value can be the same as sessionToken to be returned if the operator uses the same session id for frontend and backend.</p></td></tr><tr><td>externalId</td><td><em>string(100)</em></td><td><em>Punter identifier in operator’s system</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>clientIp</td><td><a href="#id-12.-common-data-types"><em>IP</em></a></td><td><em>IP address from which punter originated. See</em> <a href="#id-12.-common-data-types"><em>IP.</em></a></td></tr><tr><td>clientUserAgent</td><td><em>string(1000)</em></td><td><em>User-agent used by the punter</em></td></tr><tr><td>b2bVal*</td><td><em>string(1000)</em></td><td><em>Contains details provided inside b2bVal iframe parameter. See</em> <a href="#id-4.2.3.-iframe-integration"><em>iFrame integration</em></a></td></tr></tbody></table>

\*Optional

***Table 5. SessionCheckResponse***

<table><thead><tr><th width="170.024169921875">Parameter</th><th width="153.05108642578125">Type</th><th>Description</th></tr></thead><tbody><tr><td>isValid</td><td><em>boolean</em></td><td><em>true/false. Does feToken value match the one provided to the Operator FE App?</em></td></tr><tr><td>sessionToken</td><td><em>string(1000)</em></td><td><p><em>Session Token to be used in Betting Acceptance Integration.</em> </p><p><em>This value can be the same as feToken if the operator uses the same session id for frontend and backend.</em></p></td></tr><tr><td>clientErrorMessage*</td><td><em>string(1000)</em></td><td><em>Error message to be presented to Punter in case of isValid:false. Applicable to selected providers.</em></td></tr><tr><td>punterDetails*</td><td><a href="#id-7.3.-fetchpunterdetails-post">PunterDetailsResponse</a></td><td>See <em><strong>Table 9.</strong></em> <a href="#id-7.3.-fetchpunterdetails-post">PunterDetailsResponse</a></td></tr></tbody></table>

### 7.2. SessionRefresh (POST)

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FQSwzqaSwXwFoMmRbRU8G%2Fsession-refresh-dark.jpg?alt=media&#x26;token=b429631a-5f31-4dd5-bc6a-c4101f5451f7" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/atVfl7d0taHIW8pLZlsy/Unknown%20image" alt="Figure 9: Session Refresh"></picture>

Operator Platform generates a valid SessionToken.

***Table 6. SessionRefreshRequest***

<table><thead><tr><th width="161.06109619140625">Parameter</th><th width="147.47369384765625">Type</th><th>Description</th></tr></thead><tbody><tr><td>SessionToken</td><td><em>string(1000)</em></td><td><p><em>Session token to be used in Betting Acceptance Integration</em> </p><p><em>This value can be the same as feToken if the operator uses the same session id for frontend and backend.</em></p></td></tr><tr><td>externalId</td><td><em>string(100)</em></td><td><em>Punter identifier in operator’s system</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>clientIp</td><td><a href="#id-12.-common-data-types"><em>IP</em></a></td><td><em>IP address from which punter originated. See</em> <a href="#id-12.-common-data-types"><em>IP.</em></a></td></tr><tr><td>clientUserAgent</td><td><em>string(1000)</em></td><td><em>User-agent used by the punter</em></td></tr><tr><td>b2bVal*</td><td><em>string(1000)</em></td><td><em>Contains details provided inside b2bVal iframe parameter. See</em> <a href="#id-4.2.3.-iframe-integration"><em>iFrame integration</em></a></td></tr></tbody></table>

\*Optional

***Table 7. SessionRefreshResponse***

<table><thead><tr><th width="165.59234619140625">Parameter</th><th width="141.16259765625">Type</th><th>Description</th></tr></thead><tbody><tr><td>isValid</td><td><em>boolean</em></td><td><em>true/false. Does sessionToken value match the one provided to the Operator FE App?</em></td></tr><tr><td>sessionToken</td><td><em>string(1000)</em></td><td><em>Newly generated Session Token</em></td></tr><tr><td>clientErrorMessage*</td><td><em>string(1000)</em></td><td>Error message to be presented to Punter in case of isValid:false. <em>Applicable on selected providers.</em></td></tr><tr><td>punterDetails*</td><td><a href="#id-7.3.-fetchpunterdetails-post">PunterDetailsResponse</a></td><td>See <em><strong>Table 9.</strong></em> <a href="#id-7.3.-fetchpunterdetails-post">PunterDetailsResponse</a></td></tr></tbody></table>

\*Optional

### 7.3. FetchPunterDetails (POST)

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FrfIu5gJXeAgQQ6gkMKP6%2Fiframe-returning-information.jpg?alt=media&#x26;token=f6f2f185-cae1-4eb0-82cc-5253e269471f" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/RWwM3uBxIWmJ2CYr4Fqe/Unknown%20image" alt="Figure 10: Iframe Returning Information"></picture>

Game iFrame and returns information regarding the punter.

***Table 8. PunterDetailsRequest***

<table><thead><tr><th width="154.985107421875">Parameter</th><th width="126.5496826171875">Type</th><th>Description</th></tr></thead><tbody><tr><td>feToken*</td><td><em>string(1000)</em></td><td><em>Session token propagated by frontend application</em></td></tr><tr><td>externalId</td><td><em>string(100)</em></td><td><em>Punter identifier in operator’s system</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>clientIp*</td><td><em>IP</em></td><td><em>IP address from which punter originated. See</em><a href="#id-12.-common-data-types"> <em>IP.</em></a></td></tr><tr><td>clientUserAgent*</td><td><em>string(1000)</em></td><td><em>User-agent used by the punter</em></td></tr><tr><td>b2bVal</td><td><em>string(1000)</em></td><td><em>Contains details provided inside b2bVal iframe parameter. See</em> <a href="#id-4.2.3.-iframe-integration"><em>iFrame integration</em></a></td></tr></tbody></table>

\*Optional

***Table 9. PunterDetailsResponse***

<table><thead><tr><th width="161.84588623046875">Parameter</th><th width="163.74505615234375">Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td><em>enum</em></td><td><p><em>oneOf:</em></p><ul><li><em>PLAYER: Online player</em></li></ul></td></tr><tr><td>externalId</td><td><em>string(1000)</em></td><td><em>Punter identifier in Operator Platform</em></td></tr><tr><td>nickname</td><td><em>string(200)</em></td><td><em>Nickname</em></td></tr><tr><td>brandId*</td><td><em>string(32)</em></td><td><em>Brand identifier in Operator Platform</em></td></tr><tr><td>agentId*</td><td><em>string(32)</em></td><td><em>Agent identifier in Operator Platform</em></td></tr><tr><td>affiliateId*</td><td><em>string(32)</em></td><td><em>Affiliate identifier in Operator Platform</em></td></tr><tr><td>dob*</td><td><em>date</em></td><td><em>Date of birth</em></td></tr><tr><td>email*</td><td><em>string(200)</em></td><td><em>Email</em></td></tr><tr><td>personal- Number*</td><td><em>string(200)</em></td><td><em>Personal number provided by jurisdiction.</em></td></tr><tr><td>sex*</td><td><em>enum</em></td><td><p><em>One of:</em></p><ul><li><em>M: Male</em></li><li><em>F: Female</em></li></ul></td></tr><tr><td>firstName*</td><td><em>string(200)</em></td><td><em>First name</em></td></tr><tr><td>lastName*</td><td><em>string(200)</em></td><td><em>Last name</em></td></tr><tr><td>mobileNum*</td><td><em>string(200)</em></td><td><em>Mobile number</em></td></tr><tr><td>resAddress*</td><td><em>string(200)</em></td><td><em>Residential Address</em></td></tr><tr><td>resCity*</td><td><em>string(200)</em></td><td><em>Residential City</em></td></tr><tr><td>resPostal- Code*</td><td><em>string(200)</em></td><td><em>Residential Postal Code</em></td></tr><tr><td>resCountry*</td><td><em>string(200)</em></td><td><em>Country of residence</em></td></tr><tr><td>taxCategory*</td><td><em>string(200)</em></td><td><em>Tax Category</em></td></tr><tr><td>taxRegion*</td><td><em>string(200)</em></td><td><em>Tax Region</em></td></tr><tr><td>rcPeriod*</td><td><em>Integer</em></td><td><em>Realty check period (in minutes)</em></td></tr><tr><td>Parameter</td><td>Type</td><td>Description</td></tr><tr><td>isTesting*</td><td><em>boolean</em></td><td><em>Marks test user</em></td></tr><tr><td>tags*</td><td><em>Tags</em></td><td><em>List of Tags assigned to a Punter. See table 10 below</em></td></tr></tbody></table>

\*Optional

***Table 10. Tags***

| Parameter | Type           | Description |
| --------- | -------------- | ----------- |
| tagCode   | *string(1000)* | *Tag Code.* |
| tagName   | *string(1000)* | *Tag Name.* |

## 8. Bet Acceptance BASIC Integration

BASIC bet acceptance integration is the foundation of Bet Acceptance and is enough for *Operators* that do not require in-depth bet information consumption.

Integration is done via 4 HTTP endpoints:

<table><thead><tr><th width="169.9261474609375">Name</th><th>Description</th></tr></thead><tbody><tr><td>Debit</td><td><em>Debit (takes funds) from punters wallet/balance</em></td></tr><tr><td>Credit</td><td><em>Credit (award funds) to punters wallet/balance</em></td></tr><tr><td>Rollback</td><td><em>Rollback of debit or credit transaction</em></td></tr><tr><td>FetchWallets</td><td><em>Retrieves punter wallets and balances</em></td></tr></tbody></table>

### 8.1. Debit & Credit (POST)

{% hint style="warning" %}
Both **DEBIT & CREDIT** must be implemented as **idempotent (repeat-safe)** (read more [HERE](https://restfulapi.net/idempotent-rest-apis/)).
{% endhint %}

{% hint style="warning" %}
**CREDIT** call must respond with status **OK**, and will be repeated until an **OK** status is received.
{% endhint %}

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FvFMqTIcsEyUSGH6CocbS%2Fdebit-and-credit-(post)-dark.jpg?alt=media&#x26;token=68263ffb-f9de-43ad-9b65-646453549f63" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/lgTZIk1jfboLAG3aNHFc/Unknown%20image" alt="Figure 11: Debit and Credit (POST)"></picture>

***Table 11. DebitRequest / CreditRequest***

<table><thead><tr><th width="139.65838623046875">Parameter</th><th width="137.813232421875">Type</th><th>Description</th></tr></thead><tbody><tr><td>Id</td><td><em>ULID</em></td><td><em>Unique transaction identifier</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>gameId</td><td><em>integer</em></td><td><em>Unique Game identifier defined on integration start</em></td></tr><tr><td>amount</td><td><em>Amount</em></td><td>Amount to be taken from user wallets/balances. <em>See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>punter</td><td><em>Punter</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Punter</em></a></td></tr><tr><td>occurredAt</td><td><em>DateTime</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>DateTime</em></a></td></tr><tr><td>contentType</td><td><em>enum</em></td><td><p><em>One of:</em> </p><ul><li>BETSLIP: Betslip based games (e.g., Casino, Virtuals) </li><li>CASINO: Casino games</li></ul></td></tr><tr><td>content*</td><td><em>RichContent</em></td><td><em>Non-null if <strong>RICH_CONTENT</strong></em> mode is activated.</td></tr><tr><td>b2bVal*</td><td><em>string(1000)</em></td><td><em>Value propagated from Operator FE App</em></td></tr></tbody></table>

\*Optional

***Table 12. DebitResponse / CreditResponse***

<table><thead><tr><th width="166.06817626953125">Parameter</th><th width="133.24713134765625">Type</th><th>Description</th></tr></thead><tbody><tr><td>status</td><td>RsStatus</td><td><em>RsStatus (see Table 62 in</em> <a href="#id-12.-common-data-types"><em>Common Data Types)</em></a></td></tr><tr><td>wallets</td><td>[ Wallet ]</td><td><em>Collection of punter wallets (see Table 68 in</em> <a href="#id-12.-common-data-types"><em>Common Data Types)</em></a></td></tr><tr><td>occurredAt</td><td><em>DateTime</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>DateTime</em></a></td></tr><tr><td>errorMessage*</td><td><em>string(1000)</em></td><td><em>Error message in case of NON-OK status</em></td></tr><tr><td>clientErrorMessage*</td><td><em>string(1000)</em></td><td><em>Error message to be presented to Punter in case of NON-OK status.</em></td></tr></tbody></table>

\*Optional

### 8.2. Rollback (POST)

{% hint style="warning" %}
Must be implemented as **idempotent (repeat-safe)** (read more [HERE](https://restfulapi.net/idempotent-rest-apis/)).
{% endhint %}

{% hint style="warning" %}
Must respond with status OK, and will be repeated until an OK status is received.
{% endhint %}

Rollback is used to reverse any Debit or Credit request.

* In case of Rollback of Credit, funds should be taken from punters *(Operators reserve the right not to do so, but still have to respond with status request OK)*
* In case of Rollback of Debit, funds should be given to the punters

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FkXtHC946AaWTSjdg7tt8%2Fdebit-and-credit-rollback-dark.jpg?alt=media&#x26;token=6916e683-8588-4d0a-8b04-717b1cea4572" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/iGjiXLXBVdusbcXQgHwC/Unknown%20image" alt="Figure 12: Debit and Credit Rollback"></picture>

***Table 13. RollbackRequest***

<table><thead><tr><th width="128.6214599609375">Parameter</th><th width="134.59234619140625">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>ULID</em></td><td><em>Unique transaction identifier</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier defined on integration start</em></td></tr><tr><td>punter</td><td><em>Punter</em></td><td><em>See Table 63 in</em> <a href="#id-12.-common-data-types"><em>Common Data Types</em></a></td></tr><tr><td>occurredAt</td><td><em>DateTime</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>DateTime</em></a></td></tr><tr><td>gameId</td><td><em>integer</em></td><td><em>Unique Game identifier defined on integration start</em></td></tr><tr><td>contentType</td><td><em>enum</em></td><td><p><em>One of:</em> </p><ul><li>BETSLIP: Betslip based games (e.g., Casino, Virtuals) </li><li>CASINO: Casino games</li></ul></td></tr><tr><td>content*</td><td><em>RichContent</em></td><td><em>Non-null if <strong>RICH_CONTENT</strong> mode is activated.</em></td></tr></tbody></table>

\*Optional

***Table 14. RollbackResponse***

<table><thead><tr><th width="149.5731201171875">Parameter</th><th width="139.12005615234375">Type</th><th>Description</th></tr></thead><tbody><tr><td>status</td><td>RsStatus</td><td>RsStatus (s<em>ee Table 66. in</em> <a href="#id-12.-common-data-types"><em>Common Data Types</em></a><em>)</em></td></tr><tr><td>wallets</td><td>[ Wallet ]</td><td><em>Collection of punter wallets (see Table 68 in</em> <a href="#id-12.-common-data-types"><em>Common Data Types)</em></a></td></tr><tr><td>occurredAt</td><td><em>DateTime</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>DateTime</em></a></td></tr><tr><td>errorMessage*</td><td><em>string(1000)</em></td><td><em>Error message in case of NON-OK status</em></td></tr></tbody></table>

\*Optional

### 8.3. FetchWallets (POST)

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2Fhq5ohxNOKsQZnQ4jbZkI%2Ffetchwallets-(post)-dark.jpg?alt=media&#x26;token=04515e80-46d9-4326-a831-c40c89379cff" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/lvpFNG5ALvGf0AZl8QmK/Unknown%20image" alt="Figure 13: Fetch Wallets (POST)"></picture>

Used to retrieve the state of punter wallets/balances.

***Table 15. FetchWalletsRequest***

<table><thead><tr><th width="134.97088623046875">Parameter</th><th width="125.99578857421875">Type</th><th>Description</th></tr></thead><tbody><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier defined on integration start</em></td></tr><tr><td>punter</td><td><em>Punter</em></td><td><em>See Table 64.</em></td></tr><tr><td>occurredAt</td><td><em>DateTime</em></td><td><em>Time when request is generated. See</em> <a href="#id-12.-common-data-types"><em>DateTime</em></a></td></tr><tr><td>currency*</td><td><em>Currency</em></td><td>Filter out only wallets/balances in a specific currency. <em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>gameInfo</td><td><em>GameInfo</em></td><td><em>GameInfo (see Table 69 in</em> <a href="#id-12.-common-data-types"><em>Common Data Types)</em></a></td></tr></tbody></table>

\*Optional

***Table 16. FetchWalletsResponse***

<table><thead><tr><th width="142.28973388671875">Parameter</th><th width="121.66900634765625">Type</th><th>Description</th></tr></thead><tbody><tr><td>status</td><td>RsStatus</td><td>RsStatus <em>(see Table 66 in</em> <a href="#id-12.-common-data-types"><em>Common Data Types)</em></a></td></tr><tr><td>wallets</td><td>[ Wallet ]</td><td><em>Collection of punter wallets (see Table 68 in</em> <a href="#id-12.-common-data-types"><em>Common Data Types)</em></a></td></tr><tr><td>occurredAt</td><td><em>DateTime</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>DateTime</em></a></td></tr><tr><td>errorMessage*</td><td><em>string(1000)</em></td><td><em>Error message in case of NON-OK status</em></td></tr></tbody></table>

\*Optional

## 9. Betslip RICH\_CONTENT Integration

{% hint style="warning" %}
Betslip type games include Sportsbook, Virtual, and Lottery games
{% endhint %}

{% hint style="warning" %}
Rich content integration is designed for operators that require more than basic betting details. If this is not the case BASIC integration should suffice.
{% endhint %}

### 9.1. What is a Betslip?

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2F6d5tMfJ8ZKW0rYDG1U4C%2Fbetslip-dark.jpg?alt=media&#x26;token=f9ceaed7-d99e-47dc-bdf0-e2765d341aa9" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/n043gAJJ1UcbrhLKCcpg/Unknown%20image" alt="Figure 14: Betslip"></picture>

* A betslip represents a collection of Bets.&#x20;
* Betslip is only a container for bets, so it is unaware of data such as stake or payout amounts and is not subject to tax regulations. This data is part of each bet.
* Each betslip has its own identifier.
* Most betslips placed will be betslips with one bet only. But multi-bet scenarios are present in a variety of sportsbooks and virtual games scenarios.

### 9.2. What is a Bet?

* A bet represents a set of selections and their predicted outcome
* A bet is always a part of the betslip container.
* Bets on the same betslip are independent of each other, which means that their life cycle can be in different phases.

### 9.3. What is a Selection?

* A selection is part of a bet.
* A selection is associated with the market and outcome that punters try to predict.

### 9.4. Systems bets (selectedSystems)

System Bet is a mixture of several accumulator bets that make it possible to lose one or more bets and still win part of the bet. All bets are communicated as systems bets. **selectedSystems** node gives context to the bet.

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2Fb1mpybHrl4dclKw4MGOI%2Fsystem-bet-dark.jpg?alt=media&#x26;token=66981d88-333f-4e1d-a874-fcedb02ad50a" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/QTNnMmLRvVyvCO0aKFe6/Unknown%20image" alt="Figure 15: System bet"></picture>

The Bet above is made of 8 selections.

By altering selectedSystems nodes, these bets become different accumulators. E.g.:

<table><thead><tr><th width="167.08380126953125">selectedSystems value</th><th width="136.60797119140625">Number of combinations</th><th>Description</th></tr></thead><tbody><tr><td>[8]</td><td>1</td><td>1 Eightfold accumulator bet</td></tr><tr><td>[7]</td><td>8</td><td>8 Sevenfolds accumulator bets</td></tr><tr><td>[6]</td><td>28</td><td>28 Sixfolds accumulator bets</td></tr><tr><td>[5]</td><td>56</td><td>56 Fivefolds accumulator bets</td></tr><tr><td>[1]</td><td>8</td><td>8 Single bets</td></tr><tr><td>[2,3,4,5,6,7,8]</td><td>247</td><td>“Goliath'' made up of 247 bets. 28 Doubles, 56 Trebles, 70 Fourfolds, 56 Fivefolds, 28 Sixfolds, 8 Sevenfolds and one Eightfold.</td></tr></tbody></table>

### 9.5. Selection Category

Each selection is placed into a certain category. **categoryId** is represented by a single string and using the formula:

categoryId = “cat\_lvl\_1” + “/” + “cat\_lvl\_2” + “/” + “cat\_lvl\_3” + “/” + "cat\_lvl\_4"

Where each integrated game/product has its own category hierarchy.&#x20;

E.g., Sportradar's Sportsbook uses the following logic:

* cat\_level\_1 = live vs prematch identifier&#x20;
* cat\_level\_2 = {sport ID} *(e.g., Soccer, Basketball)*
* cat\_level\_3 = {subcategory ID} *(e.g., England, Finland, International, International clubs )*
* cat\_level\_4 = {tournament ID} *(e.g., Premier League, World Cup, FA Cup )*

### 9.6. Bet Activity

Bet activity adds additional context to the basic CREDIT, DEBIT, and ROLLBACK methods' basic payloads.

Operators can utilize this data to get information about every detail of every bet placed.

activityId serves as an index to go down further inside bet details.

A simplified JSON example can be found below:

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FHBSX7W15vQWg0Ruvd0zf%2Fbet-activity-json-dark.jpg?alt=media&#x26;token=fd7e2a12-8ad7-4f6c-beff-e31e829cad33" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/m6NBLGrhPKViIlvkqLI0/Unknown%20image" alt="Figure 16: Bet Activity JSON"></picture>

{% hint style="warning" %}
A sequence diagram depicting different bet activities can be found below:
{% endhint %}

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2Fv10x7VFRSbEYjXKk9gnS%2Fbet-flow-sequence-diagram-part-1-dark.jpg?alt=media&#x26;token=d14e8ecb-c924-4a63-b90d-508be1f45117" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/tw5UHvQpjnAWu1Gsn3mE/Unknown%20image" alt="Bet Flow Sequence diagram"></picture>

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FuPN9JLel5QxrvXAw5TKe%2Fbet-flow-sequence-diagram-part-2-dark.jpg?alt=media&#x26;token=99a3881e-c445-4df5-9518-fda032d05982" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/SeCzp5EU4fsPNUbLZl6W/Unknown%20image" alt=""></picture>

An in-depth overview of each activity can be found in the chapters below.

#### 9.6.1. Betslip Placement (PREPARE\_PLACE\_BETSLIP)

{% hint style="warning" %}
Expected Operator Platform Behavior: DEBIT (remove) funds from punters wallet(s).
{% endhint %}

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FGfWhAzNHr0766eWtC50Z%2Fdebit-remove-funds-dark.jpg?alt=media&#x26;token=e1217fe8-e968-4057-8875-e6e0b601931e" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/ayIQEaZ5v4uTnELkswNq/Unknown%20image" alt="Figure 17: Debit Remove Funds"></picture>

#### 9.6.2. Part of bets are rejected (REJECT\_PLACE\_BETS)

{% hint style="warning" %}
**Expected Operator Platform Behavior:** CREDIT (add) funds to punters wallet(s).
{% endhint %}

<figure><picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FQUDtrlTFwJS34nx8uodM%2Freject-place-bets-dark.png?alt=media&#x26;token=617166a9-cfc2-4801-9067-eb6dcceebb24" media="(prefers-color-scheme: dark)"><img src="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FpUvQC3IYFBqOPdffUMHg%2Freject-place-bets.png?alt=media&#x26;token=85314728-4a41-4b52-b72d-2076bb02652c" alt=""></picture><figcaption></figcaption></figure>

#### 9.6.3.New bets are created (PREPARE\_PLACE\_BETS)

{% hint style="warning" %}
&#x20;**Expected Operator Platform Behavior:** DEBIT (remove) funds from punters wallet(s).
{% endhint %}

<figure><picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2Fg9ltRV1tGmg9BmZZTeEu%2Fprepare-place-bets-dark.png?alt=media&#x26;token=2191191e-bad2-4e13-b25c-5c34d9430eda" media="(prefers-color-scheme: dark)"><img src="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FevKJdnc7OFMmp3Jc18jz%2Fprepare-place-bets.png?alt=media&#x26;token=d55bf8dd-0da2-459c-b609-ceac13622bd6" alt=""></picture><figcaption></figcaption></figure>

#### 9.6.4. Part of bets are rejected (CONFIRM\_PLACE\_BETSLIP)

{% hint style="warning" %}
This activity is optional, and a request will be triggered only in scenarios where at least one of the bets from the betslip is rejected.
{% endhint %}

{% hint style="warning" %}
**Expected Operator Platform Behavior:** CREDIT (add) funds to punters' wallet(s), in order to compensate funds taken during PREPARE\_PLACE\_BETSLIP action.
{% endhint %}

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2F3Kz6T4lmk9pmeJqWG4YV%2Fcredit-add-funds-dark.jpg?alt=media&#x26;token=6920b2cf-a533-4604-9ecc-51b475ef1eed" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/Yq3KbIvqMBrNNOL2tcYL/Unknown%20image" alt="Figure 18: Credit Add Funds"></picture>

#### 9.6.5. Cashout (CASHOUT\_BETS)

The Cashout functionality enables punters to get money back on their bet at any time during the event they’ve bet on, not just when the event is over. This is most common, but not exclusive to, sportsbook betting games.

{% hint style="warning" %}
This activity is optional and the request will be triggered only in scenarios where at least one of the bets from the betslip is cashed out.
{% endhint %}

**Expected Operator Platform Behavior:** CREDIT (add) funds to punters' wallet(s).

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FskCpDDSiKhWdb22bnAJp%2Fcashout-bets-dark.jpg?alt=media&#x26;token=a2169383-8fc4-4cb1-8872-f2c7de34b9b1" media="(prefers-color-scheme: dark)"><img src="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FlZB8PEIUeUj4USS3ZJ8p%2Fcashout-bets.jpg?alt=media&#x26;token=b5479859-b042-4544-a17e-0064517bca22" alt="Figure 19: Credit Add Funds"></picture>

#### 9.6.6. Bet Cancellation (CANCEL\_BETS)

{% hint style="warning" %}
This activity is optional and the request will be triggered only in scenarios where at least one of the bets from the betslip is canceled, either by the punter (for games that support this functionality) or by the game provider.
{% endhint %}

{% hint style="warning" %}
**Expected Operator Platform Behavior:** CREDIT (add) funds to punters' wallet(s), compensating for the cancellation.
{% endhint %}

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2Fh3J5pEikIJLtwHku0Roa%2Fcredit-cancel-bets-dark.jpg?alt=media&#x26;token=f7cb068a-8da7-4636-8d62-ddcf021db8ed" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/Ut8g5XjFK1k21wGGvWrh/Unknown%20image" alt="Figure 20: Credit Cancel Bets"></picture>

#### 9.6.7. Bet Payout (PAYOUT\_BETS)

{% hint style="warning" %}
This activity is optional and the request will be triggered only in scenarios where at least one of the bets from the betslip is winning.
{% endhint %}

{% hint style="warning" %}
**Expected Operator Platform Behavior:** CREDIT (add) funds to punters' wallet(s).
{% endhint %}

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FyfWqJnXosmtB0R26lsbm%2Fcredit-payout-bets-dark.jpg?alt=media&#x26;token=14845535-1474-4953-a194-3ab79703ead2" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/Y8xaW3N9rgHN9sQrCklZ/Unknown%20image" alt="Figure 21: Credit Payout Bets"></picture>

#### 9.6.8. Bet Resettle (RESETTLE\_BETS)

There are rare instances where certain game providers support “recalculation” for bets. This may occur after an incorrect sports or lottery draw result is reported or due to a punter complaint, etc.

{% hint style="warning" %}
This activity is optional and the request will be triggered only in scenarios where at least one of the bets from the betslip has to be resettled.
{% endhint %}

{% hint style="warning" %}
**Expected Operator Platform Behavior:** Depending on the method received, the operator needs to CREDIT (add) or DEBIT (remove) funds from/to punters' wallet(s).
{% endhint %}

{% hint style="warning" %}
If the Operator Platform does not support DEBIT (removal) of funds from punters' wallets after they have already been awarded, or cannot process these requests because the punter’s balance would go negative, the Operator Platform reserves the right not to process these requests internally. Regardless of what has been done on the Operator Platform end, it is mandatory that the response generated from the operator is successful.
{% endhint %}

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FbPYL4GD8ZnSU8akbSuJZ%2Fdebit-resettle-bets-dark.jpg?alt=media&#x26;token=965e9875-5e3c-446a-9467-1c19ecb33b54" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/U6iD9HaOOZwXLgZV63aF/Unknown%20image" alt="Figure 22: Debit Resettle Bets"></picture>

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FgHINRk3iwtnAxr0Qaasj%2Fcredit-resettle-bets-dark.jpg?alt=media&#x26;token=1fc3573e-5f5c-475b-ae28-9d6fe58a68ff" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/3R2WAWYoiR6mNhHG8CwF/Unknown%20image" alt="Figure 23: Credit Resettle Bets"></picture>

### 9.7. RICH\_CONTENT::Betslip

{% hint style="warning" %}
OpenAPI spec available [HERE](https://gist.github.com/dragocavar/717339cb4b4a24ddb5f537ad197c6c25)
{% endhint %}

***Table 17. content node (Betslip)***

<table><thead><tr><th width="135.336669921875">Parameter</th><th width="193.5703125">Type</th><th>Description</th></tr></thead><tbody><tr><td>activityType</td><td><em>BsActivityTyp eEnum</em></td><td><em>Type of activity that occurred. See BsActivityTypeEnum (see Table 18 below)</em></td></tr><tr><td>activityId</td><td><em>ULID</em></td><td><em>Id of activity from betslip activities node</em></td></tr><tr><td>betslipId</td><td><em>ULID</em></td><td><em>Betslip identifier</em></td></tr><tr><td>betslip</td><td><em>Betslip</em></td><td><em>See Betslip (see Table 19 below)</em></td></tr></tbody></table>

OneOf:

***Table 18. BsActivityTypeEnum***

<table><thead><tr><th width="238.828857421875">Constant</th><th>Description (Part of the method)</th></tr></thead><tbody><tr><td>PREPARE_PLACE_BETSLIP</td><td><em>All bets, part of the betslip, are placed (initial bet placement) or rolled back. (<strong>DEBIT</strong>,<strong>ROLLBACK</strong>)</em></td></tr><tr><td>REJECT_PLACE_BETS</td><td><em>Selected bets are rejected.</em></td></tr><tr><td>PREPARE_PLACE_BETS</td><td><em>New bets are created.</em></td></tr><tr><td>CONFIRM_PLACE_BETSLIP</td><td><em>Confirms placement of part of the bets and part of the bets are rejected. (<strong>CREDIT</strong> / return funds of rejected bets). <strong>Invoked only in case there are rejected bets.</strong></em></td></tr><tr><td>SETTLE_BETS*</td><td><em>Selected bets are settled. *Part of the</em> <a href="auxiliary-api"><em>Auxiliary API</em></a></td></tr><tr><td>CASHOUT_BETS</td><td><em>Selected bets are cashed-out (<strong>CREDIT</strong>)</em></td></tr><tr><td>PAYOUT_BETS</td><td><em>Selected bets are paid out (<strong>CREDIT</strong>)</em></td></tr><tr><td>CANCEL_BETS</td><td><em>Selected bets are canceled (<strong>CREDIT</strong>)</em></td></tr><tr><td>RESETTLE_BETS</td><td><em>Bet altered after settlement (<strong>DEBIT</strong>,<strong>CREDIT</strong>)</em></td></tr></tbody></table>

***Table 19. Betslip***

<table><thead><tr><th width="154.45245361328125">Parameter</th><th width="133.5206298828125">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>ULID</em></td><td><em>Betslip identifier. (Same value as in content node (Betslip), see Table 17 above)</em></td></tr><tr><td>context</td><td><em>BsContext</em></td><td><em>Adds fixed metadata for the whole betslip. See BsContext, see Table 20 above</em></td></tr><tr><td>bets</td><td><em>[ BsBet ]</em></td><td><em>Collection of bets. See</em> <a href="#id-13.-examples-betslip"><em>Bet Data Type</em></a></td></tr><tr><td>activities</td><td><em>[ BsActivity ]</em></td><td><p><em>Collection of all historical activities that occurred on betslip.</em></p><p><em>See</em> <a href="#id-9.6.-bet-activity"><em>Bet Activity chapter</em></a></p><p><em>See BsActivity (Table 21 below)</em></p></td></tr><tr><td>origins</td><td><em>object</em></td><td><em>Used for omnichannel integration scenarios.</em></td></tr><tr><td>punterIdentities</td><td><em>object</em></td><td><em>Used for omnichannel integration scenarios.</em></td></tr><tr><td>status</td><td><em>object</em></td><td><em>Debugging value</em></td></tr></tbody></table>

***Table 20. BsContext***

<table><thead><tr><th width="194.2890625">Parameter</th><th width="132.42755126953125">Type</th><th>Description</th></tr></thead><tbody><tr><td>providerBetslipId</td><td><em>ULID</em></td><td><em>Betslip identifier in provider system.</em></td></tr><tr><td>providerId</td><td><em>Integer</em></td><td><em>Game provider identifier.</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Unique tenant identifier</em></td></tr><tr><td>gameId</td><td><em>Integer</em></td><td><em>Unique game identifier.</em></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a><em>.</em></td></tr></tbody></table>

***Table 21. BsActivity***

<table><thead><tr><th width="176.22442626953125">Parameter</th><th width="188.149169921875">Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td><em>BsActivityTyp eEnum</em></td><td><em>See BsActivityTypeEnum (see Table 18 above)</em></td></tr><tr><td>id</td><td><em>ULID</em></td><td><em>Unique activity identifier</em></td></tr><tr><td>acceptedBet- Ids</td><td><em>[ ULID ]</em></td><td><em>Present if type = CONFIRM_PLACE_BETSLIP Ids of bets that have been accepted.</em></td></tr><tr><td>rejectedBet- Ids</td><td><em>[ ULID ]</em></td><td><em>Present if type = CONFIRM_PLACE_BETSLIP Ids of bets that have been rejected.</em></td></tr><tr><td>payoutBetIds</td><td><em>[ ULID ]</em></td><td><em>Present if type = PAYOUT_BETS__Ids of bets that have been paid out.</em></td></tr><tr><td>cashoutBet- Ids</td><td><em>[ ULID ]</em></td><td><em>Present if type = CASHOUT_BETS__Ids of bets that have been cashed-out.</em></td></tr><tr><td>betIds</td><td><em>[ ULID ]</em></td><td><em>Present if type = RESETTLE_BETS__Ids of bets that have been resettled.</em><br><em>Present if type = PREPARE_PLACE_BETSLIP, REJECT_PLACE_BETS</em></td></tr><tr><td>originId</td><td><em>integer</em></td><td><em>Debugging value</em></td></tr><tr><td>initiatorOccuredAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>startedAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>finishedAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>currentState</td><td><em>string</em></td><td><em>Debugging value</em></td></tr><tr><td>state</td><td><em>object</em></td><td><em>Debugging value</em></td></tr></tbody></table>

***Table 22. Bet***

<table><thead><tr><th width="176.4801025390625">Parameter</th><th width="165.7379150390625">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Bet identifier</em></td></tr><tr><td>selections</td><td><em>[ Selection ]</em></td><td><em>List of selections. See Table 23 below</em></td></tr><tr><td>selectedSystems</td><td><em>[ integer ]</em></td><td><a href="#id-9.4.-systems-bets-selectedsystems">System bets (selectedSystems)</a></td></tr><tr><td>bonusWal- lets</td><td><em>[ BonusWallet</em>]</td><td><em>List of possible bonus wallets that can be applied for the bet. See Table 29 below</em></td></tr><tr><td>payin</td><td><em>[ Payin ]</em></td><td><em>Bet payin. See Table 30 below</em></td></tr><tr><td>pWinnings</td><td><em>PWinnings</em></td><td><em>Possible winnings after placement.</em></td></tr><tr><td>transactions</td><td><em>object</em></td><td><em>Wallet transactions that occurred during the bet. Used for debugging.</em></td></tr><tr><td>winnings</td><td><em>Winnings</em></td><td><em>Bet winnings. See Table 34 below</em></td></tr><tr><td>status</td><td><em>BetStatus</em></td><td><em>Bet status. See Table 35 below</em></td></tr><tr><td>combinations*</td><td>[ combinations ]</td><td></td></tr></tbody></table>

Table 23. Combinations

<table><thead><tr><th width="177.75">Parameter</th><th width="160">Type</th><th>Description</th></tr></thead><tbody><tr><td>selections</td><td>integer</td><td>Selection index reference to bet selections.</td></tr><tr><td>resolutionStatus</td><td>enum</td><td>Combination's resolution status (OPEN, WON, LOST)</td></tr><tr><td>odds</td><td>integer</td><td>Total combination odds</td></tr><tr><td>payin</td><td>BetCombinationPayin</td><td>Combination payin</td></tr><tr><td>winnings*</td><td>BetCombinationWinning</td><td>Combination winnings</td></tr></tbody></table>

***Table 24. BetCombinationPayin***

<table><thead><tr><th width="172.75">Parameter</th><th width="160.75">Type</th><th>Description</th></tr></thead><tbody><tr><td>paymentAmount</td><td>Amount</td><td>Amount debited from player's wallet</td></tr><tr><td>bonusAmount</td><td>Amount</td><td>Bonus amount</td></tr><tr><td>taxAmount</td><td>Amount</td><td>Tax amount</td></tr><tr><td>totalAmount</td><td>Amount</td><td>Total amount after bonuses and taxes are applied</td></tr></tbody></table>

Table 25. BetCombinationWinnings

<table><thead><tr><th width="167.75">Parameter</th><th width="165">Type</th><th>Description</th></tr></thead><tbody><tr><td>winAmount</td><td>Amount</td><td>Winning amount</td></tr><tr><td>bonusAmount</td><td>Amount</td><td>Bonus amount</td></tr><tr><td>taxAmount</td><td>Amount</td><td>Tax amount</td></tr><tr><td>totalAmount</td><td>Amount</td><td>Total amount after bonuses and taxes are applied</td></tr></tbody></table>

***Table 26. Selection***

<table><thead><tr><th width="150.3402099609375">Parameter</th><th width="112.78619384765625">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Selection identifier</em></td></tr><tr><td>phase</td><td><em>enum</em></td><td><p><em>Defines one of the 3 phases of each selection,</em></p><p><em>oneOf:</em> </p><ul><li>OPEN: Selection is open, outcome is not determined</li><li>SETTLED: Outcome is determined</li><li>LIVE: Selection during cashout</li></ul></td></tr><tr><td>event</td><td><em>object</em></td><td><em>Unique Event identifier</em></td></tr><tr><td>category</td><td><em>object</em></td><td><em>See</em> <a href="#id-9.5.-selection-category"><em>Selection Category</em></a></td></tr><tr><td>markets</td><td><em>[ Market ]</em></td><td><em>Selected markets. Most bets have a single market; multiple markets are reserved for Betbuilder/Custom bet functionalities. See Table 27 below</em></td></tr><tr><td>isBanker</td><td><em>boolean</em></td><td><em>Is selection a banker?</em></td></tr><tr><td>odds</td><td><em>integer</em></td><td><em>Odds at bet placement</em></td></tr><tr><td>oddsResolve*</td><td><em>integer</em></td><td><em>Odds at bet resolve</em></td></tr><tr><td>status*</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>WON </li><li>LOST</li><li>VOID </li><li>HALF_WON</li><li>HALF_LOST</li></ul></td></tr></tbody></table>

***Table 27. Market***

<table><thead><tr><th width="141.8316650390625">Parameter</th><th width="124.07525634765625">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><p>Market identifier.</p><p></p><p><em>NOTE: Each game/product has its own market IDs.</em></p></td></tr><tr><td>baseName</td><td>string</td><td><em>Market name in English.</em></td></tr><tr><td>derivedName</td><td>string</td><td><em>Market name in the language in which the bet was placed.</em></td></tr><tr><td>tenantName</td><td>string</td><td><em>Market name in the main language configured for the tenant.</em></td></tr><tr><td>outcome</td><td>Outcome</td><td><em>Market outcome.</em></td></tr></tbody></table>

***Table 28. Outcome***

<table><thead><tr><th width="154.14703369140625">Parameter</th><th width="113.7109375">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><p>Outcome identifier.</p><p></p><p><em>NOTE: Each game/product has its own market IDs.</em></p></td></tr><tr><td>baseName</td><td>string</td><td><em>Outcome name in English.</em></td></tr><tr><td>derivedName</td><td>string</td><td><em>Outcome name in the language in which the bet was placed.</em></td></tr><tr><td>tenantName</td><td>string</td><td><em>Outcome name in the main language configured for the tenant.</em></td></tr></tbody></table>

***Table 29. BonusWallet***

<table><thead><tr><th width="155.336669921875">Parameter</th><th width="117.37713623046875">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>ULID</em></td><td><em>Bonus wallet identifier</em></td></tr><tr><td>bonusId</td><td><em>ULID</em></td><td><em>Bonus promotion identifier</em></td></tr></tbody></table>

***Table 30. Payin***

<table><thead><tr><th width="157.19744873046875">Parameter</th><th width="136.4339599609375">Type</th><th>Description</th></tr></thead><tbody><tr><td>stake</td><td><em>Amount</em></td><td><em>Stake placed by punter. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>bonuses</td><td><em>[ BonusBoost]</em></td><td><em>See Table 31 below</em></td></tr><tr><td>taxes</td><td><em>[ Tax]</em></td><td><em>See Table 32 below</em></td></tr><tr><td>total</td><td><em>Amount</em></td><td><em>Total stake after bonuses &#x26; taxes application. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>payment</td><td><em>object</em></td><td><p>Based on the type property.</p><ul><li>RealMoneyBetPayment (<em>Table 36 below)</em></li><li>GameFreebetBetPayment (<em>Table 37 below)</em></li><li>BonusBetPayment (<em>Table 38 below)</em></li><li>BonusBetCreditsBetPayment (<em>Table 39 below)</em></li></ul></td></tr></tbody></table>

***Table 31. BonusBoost***

<table><thead><tr><th width="156.483642578125">Parameter</th><th width="146.0589599609375">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>ULID</em></td><td><em>Bonus wallet identifier</em></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Bonus amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr></tbody></table>

***Table 32. Tax***

<table><thead><tr><th width="157.58807373046875">Parameter</th><th width="143.9410400390625">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Tax identifier</em></td></tr><tr><td>consignee</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>PLAYER: Tax charged to the player.</li><li>COMPANY: Tax to be paid by the operator.</li></ul></td></tr><tr><td>value</td><td>Amount</td><td><em>Tax to be charged. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr></tbody></table>

***Table 33. PWinnings***

<table><thead><tr><th width="158.13140869140625">Parameter</th><th width="141.02203369140625">Type</th><th>Description</th></tr></thead><tbody><tr><td>min</td><td><em>Winnings</em></td><td><em>Min possible winnings. See Table 34 below</em></td></tr><tr><td>max</td><td><em>Winnings</em></td><td><em>Max possible winnings. See Table 34 below</em></td></tr></tbody></table>

***Table 34. Winnings***

<table><thead><tr><th width="156.2989501953125">Parameter</th><th width="147.07318115234375">Type</th><th>Description</th></tr></thead><tbody><tr><td>win</td><td><em>[ Amount]</em></td><td>Winning amount. See <a href="#id-12.-common-data-types">Amount</a></td></tr><tr><td>bonuses</td><td><em>[ BonusBoost]</em></td><td>See <em>Table 31 above</em></td></tr><tr><td>taxes</td><td><em>[ Tax]</em></td><td>See <em>Table 32 above</em></td></tr><tr><td>total</td><td><em>[ Amount]</em></td><td><em>Total winnings after bonuses &#x26; taxes application. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a><em>.</em></td></tr></tbody></table>

***Table 35. BetStatus***

<table><thead><tr><th width="162.87213134765625">Parameter</th><th width="144.70526123046875">Type</th><th>Description</th></tr></thead><tbody><tr><td>phase</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>STARTED </li><li>PLACED</li><li>REJECTED</li><li>CANCELLED</li><li>SETTLED</li><li>PAID_OUT</li><li>CASHED_OUT</li></ul></td></tr><tr><td>resolution- Status</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>OPEN</li><li>WON</li><li>LOST</li></ul></td></tr></tbody></table>

***Table 36. RealMoneyBetPayment***

<table><thead><tr><th width="161.07171630859375">Parameter</th><th width="149.977294921875">Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>REAL</li></ul></td></tr><tr><td>distribution</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>BET</li><li>COMBINATION</li></ul></td></tr><tr><td>amount</td><td><a href="#id-12.-common-data-types"><em>Amount</em></a></td><td><em>Real money bet payment amount</em></td></tr></tbody></table>

***Table 37. GameFreebetBetPayment***

<table><thead><tr><th width="160.48931884765625">Parameter</th><th width="146.5255126953125">Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>GAME_FREE_BET</li></ul></td></tr><tr><td>id</td><td><em>string</em></td><td><em>Game freebet identifier.</em></td></tr><tr><td>amount</td><td><a href="#id-12.-common-data-types"><em>Amount</em></a></td><td><em>Game freebet amount.</em></td></tr></tbody></table>

***Table 38. BonusBetPayment***

<table><thead><tr><th width="157.82244873046875">Parameter</th><th width="151.06463623046875">Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>BONUS_BET</li></ul></td></tr><tr><td>wallet</td><td><em>BonusBetWallet</em></td><td><em>Bonus bet wallet object.</em></td></tr><tr><td>amount</td><td><a href="#id-12.-common-data-types"><em>Amount</em></a></td><td><em>Bonus bet amount.</em></td></tr></tbody></table>

***Table 39. BonusBetCreditsPayment***

<table><thead><tr><th width="156.54754638671875">Parameter</th><th width="170.961669921875">Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td><em>enum</em></td><td><p><em>oneOf:</em></p><ul><li>BONUS_BET_CREDITS</li></ul></td></tr><tr><td>wallet</td><td>[BonusBet-<em>Wallet]</em></td><td><em>Collection of bonus bbet credits wallets</em></td></tr><tr><td>amount</td><td><a href="#id-12.-common-data-types"><em>Amount</em></a></td><td><em>Bonus bet amount.</em></td></tr></tbody></table>

***Table 40. BonusBetWallet***

<table><thead><tr><th width="155.4573974609375">Parameter</th><th width="164.99078369140625">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Bonus bet wallet identifier. Ulid type.</em></td></tr><tr><td>bonusid</td><td><em>string</em></td><td><em>Bonus bet bonus identifier. Ulid type.</em></td></tr></tbody></table>

## 10. Casino RICH\_CONTENT integration

{% hint style="warning" %}
Rich content integration is designed for operators that require more than basic betting details. If this is not the case, BASIC integration should suffice.
{% endhint %}

Casino content consists of “transactions” that represent users “spins” or any other mechanic of various casino games.

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FhkaUKC7wkKNTxHFNhFs4%2Fcasino-rich-content-integration-dark.jpg?alt=media&#x26;token=b062e508-7af3-4e10-aa56-8f44ca035538" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/8epjtGJAWfFnclSf9ZC4/Unknown%20image" alt="Figure 24: Simplified Sequence Diagram"></picture>

Casino transactions are separated into *"`In Session`"* transactions that occur during gameplay, and *"`Out of Session`"* transactions that happen after the playing session (**round**) has been completed. For “In Session” transactions, punter tokens and round data will be available, whereas for *"`Out of Session`"* transactions, there is no such information.

<picture><source srcset="https://3839004948-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDkauK0C2WfKWZ6elg1ZV%2Fuploads%2FMHt8VM0LaqVX7W2ELw3B%2Fin-and-out-of-session-transactions-dark.jpg?alt=media&#x26;token=b3f8cf24-0ef3-4a02-85e3-676d7db2dc64" media="(prefers-color-scheme: dark)"><img src="https://content.gitbook.com/content/DkauK0C2WfKWZ6elg1ZV/blobs/4uXvakcR1iDRFy2CyqPT/Unknown%20image" alt="Figure 25: In and Out of Session Transactions"></picture>

### 10.1. RICH\_CONTENT::Casino

***Table 41. content node (Casino)***

<table><thead><tr><th width="115.3402099609375">Parameter</th><th width="132.95526123046875">Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td><em>CsnTransacti onTypeEnum</em></td><td><em>Type of activity that occurred. See CsnTransactionTypeEnum</em> (<em>Table 39 below)</em></td></tr><tr><td>transaction</td><td><em>object</em></td><td><p>Based on the type property.</p><p><em>BET -> CasinoBetTransaction</em> (<em>Table 43 below)</em></p><p><em>WIN -> CasinoWinTransaction</em> (<em>Table 44 below)</em></p><p><em>BATCH -> CasinoBatchTransaction</em> (<em>Table 46 below)</em></p><p><em>JACKPOT_WIN -> CasinoJackpotWinTransaction</em> (<em>Table 47 below)</em></p><p><em>BET_ROLLBACK -> CasinoBetTransaction</em> (<em>Table 43 below)</em></p><p><em>WIN_ROLLBACK -> CasinoWinTransaction</em> (<em>Table 44 below)</em></p><p><em>PROMO_WIN -> CasinoPromoWinTransaction</em> (<em>Table 45 below)</em></p><p><em>ADJUST -> CasinoAdjustTransaction</em> (<em>Table 48 below)</em></p></td></tr></tbody></table>

OneOf:

***Table 42. CsnTransactionTypeEnum***

<table><thead><tr><th width="176.45672607421875">Constant</th><th>Description (Part of the method)</th></tr></thead><tbody><tr><td>BET</td><td><em>Bet transaction (<strong>DEBIT</strong>)</em></td></tr><tr><td>WIN</td><td><em>Win transaction (<strong>CREDIT</strong>)</em></td></tr><tr><td>BATCH</td><td><em>Batch of multiple BET and/or WIN transactions (<strong>DEBIT</strong>,<strong>CREDIT</strong>)</em></td></tr><tr><td>JACKPOT_WIN</td><td><em>Jackpot Win transaction (<strong>CREDIT</strong>)</em></td></tr><tr><td>BET_ROLLBACK</td><td><em>Rollback of Bet transaction (<strong>CREDIT</strong>)</em></td></tr><tr><td>WIN_ROLLBACK</td><td><em>Rollback of Win transaction (<strong>DEBIT</strong>)</em></td></tr><tr><td>PROMO_WIN</td><td><em>Promo Win transaction (<strong>CREDIT</strong>)</em></td></tr><tr><td>ADJUST</td><td><em>Adjustment transaction (<strong>DEBIT</strong>,<strong>CREDIT</strong>)</em></td></tr></tbody></table>

***Table 43. CasinoBetTransaction***

<table><thead><tr><th width="169.8785400390625">Parameter</th><th width="167.02484130859375">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s transaction identifier</em></td></tr><tr><td>platformId</td><td><em>ULID</em></td><td><em>Unique platform transaction identifier (across all content)</em></td></tr><tr><td>round</td><td><em>CasinoTxRound</em></td><td><em>Round details. See CasinoTxRound</em> (<em>Table 49 below)</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>punterId</td><td><em>ULID</em></td><td><em>Punter’s unique identifier in the operator’s system</em></td></tr><tr><td>game</td><td><em>CasinoTxRound</em></td><td><em>Game details. See CasinoTxRound</em> (<em>Table 49 below)</em></td></tr><tr><td>type</td><td><em>oneOf:</em></td><td><ul><li><strong>REGULAR_BET:</strong> Bet placed using wallet funds during regular gameplay.</li><li><strong>FREE_ROUND_BET:</strong> Bet placed as a free spin/free bet. Will not deduct any real money funds.</li><li><strong>BONUS_ROUND_BET:</strong> Bet placed using wallet funds during bonus round gameplay.</li><li><strong>BONUS_BUY:</strong> Wallet funds used to buy bonus round bets</li></ul></td></tr><tr><td>jackpotContributions</td><td><em>[ CasinoTxJpc ]</em></td><td><p><em>Collection of Jackpot contributions.</em> </p><p><em>See CasinoTxJpc (Table 51 below)</em></p></td></tr><tr><td>bonus</td><td><em>CasinoTxBonus</em></td><td><p><em>Bonus info.</em> </p><p><em>See CasinoTxBonus</em> (<em>Table 52 below)</em></p></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><p><em>Amount that should be deducted from the user’s wallet.</em> </p><p><em>See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></p></td></tr><tr><td>absolute- Amount</td><td><em>Amount</em></td><td><em>In cases of free bets, <strong>absoluteAmount</strong> can contain the value of the free bet, while amount value stays zero (0). See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>promo*</td><td><em>CasinoTxPromo</em></td><td><em>Promo information</em></td></tr><tr><td>vendorData*</td><td><em>string</em></td><td><em>Raw transaction data for casino vendor.</em></td></tr><tr><td>creationActivity</td><td><em>object</em></td><td><em>Debugging value</em></td></tr><tr><td>createdAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>updatedAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr></tbody></table>

***Table 44. CasinoWinTransaction***

<table><thead><tr><th width="170.35299682617188">Parameter</th><th width="168.1207275390625">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s transaction identifier</em></td></tr><tr><td>platformId</td><td><em>ULID</em></td><td><em>Unique platform transaction identifier (across all content)</em></td></tr><tr><td>round</td><td><em>CasinoTxRound</em></td><td><em>Round details. See CasinoTxRound</em> (<em>Table 49 below)</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>punterId</td><td><em>ULID</em></td><td><em>Punter’s unique identifier in the operator’s system</em></td></tr><tr><td>game</td><td><em>CasinoTxRound</em></td><td><em>Game details. See CasinoTxRound</em> (<em>Table 49 below)</em></td></tr><tr><td>type</td><td><em>oneOf:</em></td><td>REGULAR_WIN: Win as a result of a regular bet. FREE_ROUND_WIN: Win as a result of a free round, free spin. BONUS_ROUND_WIN: Win as a result of a bonus round.</td></tr><tr><td>bonus</td><td><em>CasinoTxBon us</em></td><td><em>Bonus info. See CasinoTxBonus</em> (<em>Table 52 below)</em></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>promo*</td><td><em>CasinoTxPromo</em></td><td><em>Promo information</em></td></tr><tr><td>vendorData*</td><td><em>string</em></td><td><em>Raw transaction data for casino vendor.</em></td></tr><tr><td>creationActivity</td><td><em>object</em></td><td><em>Debugging value</em></td></tr><tr><td>createdAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>updatedAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>refBet*</td><td>CasinoTxRefBet</td><td>Collection of identifiers for origin Bet.</td></tr></tbody></table>

***Table 45. CasinoPromoWinTransaction***

<table><thead><tr><th width="172.211669921875">Parameter</th><th width="171.51983642578125">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s transaction identifier</em></td></tr><tr><td>platformId</td><td><em>ULID</em></td><td><em>Unique platform transaction identifier (across all content)</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>punterId</td><td><em>ULID</em></td><td><em>Punter’s unique identifier in the operator’s system</em></td></tr><tr><td>game</td><td><em>CasinoTxRound</em></td><td><p><em>Game details.</em> </p><p><em>See CasinoTxRound</em> (<em>Table 49 below)</em></p></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>promo</td><td><em>CasinoTxPromo</em></td><td><em>Promo information</em></td></tr><tr><td>creationActivity</td><td><em>object</em></td><td><em>Debugging value</em></td></tr><tr><td>vendorData*</td><td><em>string</em></td><td><em>Raw transaction data for casino vendor.</em></td></tr><tr><td>createdAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>updatedAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr></tbody></table>

***Table 46. CasinoBatchTransaction***

<table><thead><tr><th width="170.421875">Parameter</th><th width="164.2457275390625">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s transaction identifier</em></td></tr><tr><td>platformId</td><td><em>ULID</em></td><td><em>Unique platform transaction identifier (across all content)</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>punterId</td><td><em>ULID</em></td><td><em>Punter’s unique identifier in the operator’s system</em></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Calculated amount to debit or credit. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>bets</td><td><em>[ CasinoBetInBatch ]</em></td><td><em>Collection of bet transactions</em></td></tr><tr><td>wins</td><td><em>[ CasinoWinInBatch ]</em></td><td><em>Collection of win transactions</em></td></tr><tr><td>vendorData*</td><td><em>string</em></td><td><em>Raw transaction data for casino vendor.</em></td></tr><tr><td>creationActivity</td><td><em>object</em></td><td><em>Debugging value</em></td></tr><tr><td>createdAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>updatedAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr></tbody></table>

***Table 47. CasinoJackpotWinTransaction***

<table><thead><tr><th width="162.343017578125">Parameter</th><th width="172.14129638671875">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s transaction identifier</em></td></tr><tr><td>platformId</td><td><em>ULID</em></td><td><em>Unique platform transaction identifier (across all content)</em></td></tr><tr><td>round</td><td><em>CasinoTxRound</em></td><td><em>Round details. See CasinoTxRound</em> (<em>Table 49 below)</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>punterId</td><td><em>ULID</em></td><td><em>Punter’s unique identifier in the operator’s system</em></td></tr><tr><td>game</td><td><em>CasinoTxRound</em></td><td><em>Game details. See CasinoTxRound</em> (<em>Table 49 below)</em></td></tr><tr><td>jackpotId</td><td><em>string</em></td><td><em>Unique jackpot identifier in the game provider system.</em></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>vendorData*</td><td><em>object</em></td><td><em>Raw transaction data for casino vendor.</em></td></tr><tr><td>creationActivity</td><td><em>object</em></td><td><em>Debugging value</em></td></tr><tr><td>createdAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>updatedAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>refBet*</td><td>CasinoTxRefBet</td><td>Collection of identifiers for origin Bet.</td></tr></tbody></table>

***Table 48. CasinoAdjustTransaction***

<table><thead><tr><th width="164.34234619140625">Parameter</th><th width="170.3778076171875">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s transaction identifier</em></td></tr><tr><td>platformId</td><td><em>ULID</em></td><td><em>Unique platform transaction identifier (across all content)</em></td></tr><tr><td>round</td><td><em>CasinoTxRound</em></td><td><em>Round details. See CasinoTxRound</em> (<em>Table 49 below)</em></td></tr><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>punterId</td><td><em>ULID</em></td><td><em>Punter’s unique identifier in the operator’s system</em></td></tr><tr><td>game</td><td><em>CasinoTxGame</em></td><td><em>Game details. See CasinoTxGame</em> (<em>Table 50 below)</em></td></tr><tr><td>reason</td><td></td><td><ul><li>TIP_THE_DEALER</li><li>GAME_LOGIC_ERROR</li></ul></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>vendorData*</td><td><em>object</em></td><td><em>Raw transaction data for casino vendor.</em></td></tr><tr><td>creationActivity</td><td><em>object</em></td><td><em>Debugging value</em></td></tr><tr><td>createdAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr><tr><td>updatedAt</td><td><a href="#id-12.-common-data-types"><em>DateTime</em></a></td><td><em>Debugging value</em></td></tr></tbody></table>

***Table 49. CasinoTxRound***

<table><thead><tr><th width="160.78976440429688">Parameter</th><th width="176.678955078125">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s transaction identifier</em></td></tr><tr><td>platformId</td><td><em>ULID</em></td><td><em>Unique platform round identifier (across all content)</em></td></tr><tr><td>status</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>OPEN: Round is open and subsequent transactions can be expected</li><li>CLOSED: Round is closed</li></ul></td></tr></tbody></table>

***Table 50. CasinoTxGame***

<table><thead><tr><th width="165.46090698242188">Parameter</th><th width="123.6363525390625">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s transaction identifier</em></td></tr><tr><td>platformId</td><td><em>integer</em></td><td><em>Unique platform game identifier (across all content)</em></td></tr><tr><td>code</td><td><em>string</em></td><td><em>Provider’s game code</em></td></tr><tr><td>platformCode</td><td><em>string</em></td><td><em>Provider’s code</em></td></tr></tbody></table>

***Table 51. CasinoTxJpc***

<table><thead><tr><th width="152.50994873046875">Parameter</th><th width="102.13067626953125">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Unique jackpot identifier in game provider system.</em></td></tr><tr><td>name</td><td><em>string</em></td><td><em>Unique jackpot name in game provider system.</em></td></tr><tr><td>amount</td><td><em>string</em></td><td><em>Jackpot contribution amount. 10 decimals, in “cents”.</em></td></tr></tbody></table>

***Table 52. CasinoTxBonus***

<table><thead><tr><th width="154.34588623046875">Parameter</th><th width="96.2762451171875">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s bonus identifier</em></td></tr><tr><td>platformId*</td><td><em>integer</em></td><td><em>Unique platform bonus identifier (across all content)</em></td></tr></tbody></table>

***Table 53. CasinoTxPromoWin***

<table><thead><tr><th width="158.02490234375">Parameter</th><th width="104.321044921875">Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td><em>enum</em></td><td><p><em>Type of promotional campaign. One of:</em></p><ul><li>TOURNAMENT</li><li>BONUS_AWARD</li></ul></td></tr><tr><td>campaignId</td><td><em>string</em></td><td><em>The unique promo campaign identifier.</em></td></tr><tr><td>reference</td><td><em>string</em></td><td><em>Unique promo win reference in game provider system.</em></td></tr><tr><td>winAmount</td><td><em>Amount</em></td><td><em>Amount of the prize. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr></tbody></table>

***Table 54. CasinoTxPromoBet***

<table><thead><tr><th width="168.0284423828125">Parameter</th><th width="90.93328857421875">Type</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td><em>enum</em></td><td><p><em>Type of promotional campaign. One of:</em> </p><ul><li>FREE_ROUND</li></ul></td></tr><tr><td>campaignId</td><td><em>string</em></td><td><em>The unique promo campaign identifier.</em></td></tr><tr><td>reference</td><td><em>string</em></td><td><em>Unique promo win reference in game provider system.</em></td></tr><tr><td>betAmount</td><td><em>Amount</em></td><td><em>Amount of the prize. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>freeRounds-Left*</td><td><em>integer</em></td><td><em>Number of free rounds left in promotion.</em></td></tr><tr><td>freeRounds-Assigned*</td><td><em>integer</em></td><td><em>Number of free rounds assigned in promotion.</em></td></tr></tbody></table>

***Table 55. CasinoTxRefBet***

<table><thead><tr><th width="167.75">Parameter</th><th width="91.25">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Provider's BET transaction identifier</td></tr><tr><td>platformId*</td><td>ULID</td><td>Unique platform BET transaction identifier (across all content)</td></tr></tbody></table>

* Optional

***Table 56. CasinoBetInBatch***

<table><thead><tr><th width="140.16973876953125">Parameter</th><th width="154.15911865234375">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s transaction identifier.</em></td></tr><tr><td>platformId</td><td><em>ULID</em></td><td><em>Unique platform transaction identifier (across all content).</em></td></tr><tr><td>round</td><td><em>CasinoTxRound</em></td><td><em>Round details. See CasinoTxRound</em> (<em>Table 49 above)</em></td></tr><tr><td>game</td><td><em>CasinoTxGame</em></td><td><em>Game details. See CasinoTxGame</em> (<em>Table 50 above)</em></td></tr><tr><td>type</td><td><em>oneOf:</em></td><td><ul><li><strong>REGULAR_BET</strong>: Bet placed using wallet funds during regular gameplay.</li><li><strong>FREE_ROUND_BET</strong>: Bet placed as free spin/free bet. Will not deduct any real money funds.</li><li><strong>BONUS_ROUND_BET</strong>: Bet placed using wallet funds during bonus round gameplay.</li><li><strong>BONUS_BUY</strong>: Wallet funds used to buy bonus round bets_</li></ul></td></tr><tr><td>jackpotContributions</td><td><em>CasinoTxJpc</em></td><td><em>Collection of Jackpot contributions. See CasinoTxJpc</em> (<em>Table 48 above)</em></td></tr><tr><td>bonus</td><td><em>CasinoTxBonus</em></td><td><em>Bonus info. See CasinoTxBonus</em> (<em>Table 52 above)</em></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Raw bet amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>absolute- Amount</td><td><em>Amount</em></td><td>In cases of free bets, <strong>absoluteAmount</strong> can contain the value of the free bet, while amount value stays zero (0) See <a href="#id-12.-common-data-types">Amount</a></td></tr><tr><td>vendorData*</td><td><em>string</em></td><td><em>Raw transaction data for casino vendor.</em></td></tr></tbody></table>

***Table 57. CasinoWinInBatch***

<table><thead><tr><th width="142.39630126953125">Parameter</th><th width="158.65057373046875">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string</em></td><td><em>Provider’s transaction identifier.</em></td></tr><tr><td>platformId</td><td><em>ULID</em></td><td><em>Unique platform transaction identifier (across all content).</em></td></tr><tr><td>round</td><td><em>CasinoTxRound</em></td><td><em>Round details. See CasinoTxRound</em> (<em>Table 49 above)</em></td></tr><tr><td>game</td><td><em>CasinoTxGame</em></td><td><em>Game details. See CasinoTxGame</em> (<em>Table 50 above)</em></td></tr><tr><td>type</td><td><em>oneOf:</em></td><td><ul><li><strong>REGULAR_WIN</strong>: Win as a result of a regular bet.</li><li><strong>FREE_ROUND_WIN</strong>: Win as a result of a free round, free spin.</li><li><strong>BONUS_ROUND_WIN</strong>: Win as a result of a bonus round.</li></ul></td></tr><tr><td>bonus</td><td><em>CasinoTxBonus</em></td><td><em>Bonus info. See CasinoTxBonus</em> (<em>Table 52 above)</em></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>promo*</td><td><em>CasinoTxPromo</em></td><td><em>Promo information.</em></td></tr><tr><td>vendorData*</td><td><em>string</em></td><td><em>Raw transaction data for casino vendor.</em></td></tr><tr><td>refBet*</td><td>CasinoTxRefBet</td><td>Collection of identifiers for origin Bet.</td></tr></tbody></table>

## 11. Transfer Wallet Integration

{% hint style="warning" %}
Designed for operators not using **Bet Acceptance integration** and relying on transfer wallet integration.
{% endhint %}

{% hint style="warning" %}
For player registration between two systems, refer to the[ Punter Session Integration (backend)](#id-7.-punter-session-integration-backend) chapter.
{% endhint %}

### 11.1. Fetch Wallets (GET)

Used to check the status of the wallet transfer. Initiated by the Operators system.

```http
GET /tenants/tenantId/punters/punterExternalId/wallets
```

***Table 58. Path Parameters***

<table><thead><tr><th width="155.2265625">Parameter</th><th width="122.49432373046875">Type</th><th>Description</th></tr></thead><tbody><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>punterExternalId</td><td><em>string(100)</em></td><td><em>Punter identifier in operator’s system</em></td></tr></tbody></table>

***Table 59. FetchWalletsResponse***

<table><thead><tr><th width="151.75714111328125">Parameter</th><th width="124.77838134765625">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>ULID</em></td><td><em>Wallet id</em></td></tr><tr><td>balance</td><td><em>Amount</em></td><td><em>Transfer amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>punterExternalId</td><td><em>string(100)</em></td><td><em>Punter identifier in operator’s system</em></td></tr></tbody></table>

### 11.2. Wallet Transfer (POST)

Used to transfer funds between systems. Initiated by the Operators system.

```http
POST /tenants/{tenantId}/transfers
```

***Table 60. Path Parameters***

<table><thead><tr><th width="140.78765869140625">Parameter</th><th width="141.4652099609375">Type</th><th>Description</th></tr></thead><tbody><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr></tbody></table>

***Table 61. WalletTransferRequest***

<table><thead><tr><th width="158.234375">Parameter</th><th width="123.04046630859375">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>ULID</em></td><td><em>Transfer identifier generated by integrator</em></td></tr><tr><td>punterExternalId</td><td><em>string(100)</em></td><td><em>Punter identifier in operator’s system</em></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Transfer amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>transferType</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>DEPOSIT</li><li>WITHDRAW</li></ul></td></tr></tbody></table>

***Table 62. WalletTransferResponse***

<table><thead><tr><th width="161.61859130859375">Parameter</th><th width="118.819580078125">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>ULID</em></td><td><em>Transfer identifier generated by integrator</em></td></tr><tr><td>punterExternalId</td><td><em>string(100)</em></td><td><em>Punter identifier in operator’s system</em></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Transfer amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>transferType</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>DEPOSIT</li><li>WITHDRAW</li></ul></td></tr><tr><td>walletId</td><td><em>ULID</em></td><td><em>Wallet identifier</em></td></tr></tbody></table>

### 11.3. Check Wallet Transfer (GET)

Used to check the status of the wallet transfer. Initiated by the Operators system.&#x20;

```http
GET /tenants/{tenantId}/transfers/{transferId}
```

***Table 63. Path Parameters***

<table><thead><tr><th width="130.8515625">Parameter</th><th width="122.7315673828125">Type</th><th>Description</th></tr></thead><tbody><tr><td>tenantId</td><td><em>UUID</em></td><td><em>Tenant identifier agreed on integration start</em></td></tr><tr><td>transferId</td><td><em>UUID</em></td><td><em>Transfer identifier generated by integrator</em></td></tr></tbody></table>

***Table 64. CheckWalletTransferResponse***

<table><thead><tr><th width="147.609375">Parameter</th><th width="107.67327880859375">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>ULID</em></td><td><em>Transfer identifier generated by integrator</em></td></tr><tr><td>punterExternalId</td><td><em>string(100)</em></td><td><em>Punter identifier in operator’s system</em></td></tr><tr><td>amount</td><td><em>Amount</em></td><td><em>Transfer amount. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>transferType</td><td><em>enum</em></td><td><p><em>oneOf:</em> </p><ul><li>DEPOSIT</li><li>WITHDRAW</li></ul></td></tr><tr><td>walletid</td><td><em>ULID</em></td><td><em>Wallet identifier</em></td></tr></tbody></table>

## 12. Common Data Types

**IP**

String in the form of IPv4 or IPv6.

**Amount**

Monetary amounts are sent as strings and rounded based on the rules defined by each currency.

E.g., EUR 3.3311 will be sent as “3.33”.

**Currency**

Fiat: ISO 4217 Alpha-3 currency code.

***Table 65. Cryptocurrencies***

| Currency     | Code      | Fraction digits |
| ------------ | --------- | --------------- |
| miliBitcoin  | *xmBTC*   | *6*             |
| Tether       | *xUSDT*   | *6*             |
| Bitcoin      | *xBTC*    | *8*             |
| Ethereum     | *xETH*    | *8*             |
| XRP          | *xXRP*    | *6*             |
| Tron         | *xTRX*    | *6*             |
| Litecoin     | *xLTC*    | *8*             |
| Solana       | xSOL      | 6               |
| USD Coin     | xUSDC     | 6               |
| Binance Coin | xBNC      | 8               |
| TON          | xTON      | 6               |
| DOGE         | xDOGE     | 6               |
| BNB          | xBNB      | 8               |
| DAI          | xDAI      | 6               |
| SHIB         | xSHIB     | 6               |
| PEPE         | xPEPE     | 6               |
| BONK         | xBONK     | 6               |
| MOG          | xMOG      | 6               |
| FARTCOIN     | xFARTCOIN | 6               |
| TRUMP        | xTRUMP    | 6               |
| AVAX         | xAVAX     | 6               |
| HYPE         | xHYPE     | 6               |
| UBTC         | xUBTC     | 6               |

**DateTime**

ISO 8601 date and time in UTC, e.g., 2024-03-11T11:39:20.596Z&#x20;

*OneOf:*

***Table 66. RsStatus***

| Constant                             | Description (Part of the method)                                   |
| ------------------------------------ | ------------------------------------------------------------------ |
| OK                                   | *Request is successful*                                            |
| INSUFFICIENT\_FUNDS\*                | *Action failed due to insufficient funds.*                         |
| RISK\_VALIDATION                     | *Action failed due to operator risk validation.*                   |
| INVALID\_SESSION                     | *Invalid punter session.*                                          |
| PUNTER\_SUSPENDED                    | *Punter suspended from bet placement.*                             |
| ACCOUNT\_RESTRICTION\_LIMIT\_REACHED | *Punter reached daily wagering limits.*                            |
| INTERNAL\_ERROR                      | *Reserved for errors that cannot be matched with statuses above.*  |
| DEBIT\_REJECTED                      | *Debit rejected for reason cannot be matched with statuses above.* |

***Table 67. Punter***

<table><thead><tr><th width="140.90484619140625">Parameter</th><th width="124.49432373046875">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>ULID</em></td><td><em>Unique punter identifier in iGNITE system</em></td></tr><tr><td>externalId</td><td><em>string(100)</em></td><td><em>Punter identifier in operator’s system</em></td></tr><tr><td>sessionToken*</td><td><em>string(1000)</em></td><td><em>Session identifier in operator’s system (if applicable)</em></td></tr></tbody></table>

***Table 68. Wallet***

<table><thead><tr><th width="142.83306884765625">Parameter</th><th width="120.2449951171875">Type</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td><em>string(100)</em></td><td><em>Wallet identifier. If not available in the Operator system any random string value should be set</em></td></tr><tr><td>type</td><td><em>enum</em></td><td><p>oneOf:</p><ul><li><em>REAL: Holds real money funds</em></li><li><em>BONUS: Holds bonus money or other bonus funds</em></li></ul></td></tr><tr><td>balance</td><td><em>Amount</em></td><td><em>Remaining balance. See</em> <a href="#id-12.-common-data-types"><em>Amount</em></a></td></tr><tr><td>currency</td><td><em>Currency</em></td><td><em>See</em> <a href="#id-12.-common-data-types"><em>Currency</em></a></td></tr><tr><td>version</td><td><em>Integer</em></td><td><em>Balance version. If not available, set a UNIX timestamp of when the request is generated. Value is used to handle race conditions between frontend and backend passed balances</em></td></tr><tr><td>options*</td><td><em>string(1000)</em></td><td><em>Node reserved for special bonus scenarios</em></td></tr></tbody></table>

***Table 69. GameInfo***

<table><thead><tr><th width="145.16619873046875">Parameter</th><th width="115.2109375">Type</th><th>Description</th></tr></thead><tbody><tr><td>gameId</td><td><em>Integer</em></td><td><em>Unique Game identifier defined at integration start.</em></td></tr></tbody></table>

## 13. Examples (Betslip)

Examples of **requests** to be received by the operator platform in case of **betslip** contentType

<details>

<summary><strong>[Sportsbook] Bet {One Selection} (Debit)</strong></summary>

```json
{
  "uri": "http://49.13.122.222:8080/test/debit/success1",
  "requestId": "09eef629-836c-4e59-a5e3-0b6323c18475",
  "body": {
    "id": "01KCK3XWJG9HWK99R62DFX4H83",
    "tenantId": "7198602f-fb94-4368-ad2c-d4c45b121b88",
    "gameId": 1,
    "contentType": "BETSLIP",
    "amount": "1000",
    "currency": "xUSDT",
    "punter": {
      "id": "01KA3XWWXXDKN5371J5P469EVR",
      "externalId": "30002",
      "sessionToken": "k72GvcHZQAawyPh4De5kEDKAzKwtshsEv4ew52rGHX2GhD2GtPbQeEMIGOH6s1CE"
    },
    "occurredAt": "2025-12-16T08:20:18.128441838Z",
    "content": {
      "activityType": "PREPARE_PLACE_BETSLIP",
      "activityId": "01KCK3XWJG9HWK99R62DFX4H83",
      "betslipId": "01KCK3XWJ5M0DM4937PNVMKK15",
      "betslip": {
        "id": "01KCK3XWJ5M0DM4937PNVMKK15",
        "context": {
          "providerBetslipId": "01KCK3XWF3FQCGD1FZRB1SWCR3",
          "providerId": 3,
          "tenantId": "7198602f-fb94-4368-ad2c-d4c45b121b88",
          "gameId": 1,
          "currency": "xUSDT"
        },
        "bets": [
          {
            "id": "01KCK3XWF65ZR2YAH3BRKFB155",
            "selections": [
              {
                "phase": "OPEN",
                "id": "01KCK3XWF3FQB34F8ZPP59VMZB",
                "event": {
                  "id": "E:267463120502620160",
                  "baseName": "Michnev, Petr vs. Knesl, David",
                  "derivedName": "Michnev, Petr vs. Knesl, David",
                  "tenantName": "Michnev, Petr vs. Knesl, David",
                  "startTime": "2025-12-16T07:30:00Z"
                },
                "category": {
                  "id": "PS:LIVE/S:126431648077053953/C:202506539776376832/T:267462955146313728",
                  "baseName": "Live/Tennis/UTR Men/UTR PTT Olomouc Men 08",
                  "derivedName": "Live/Tennis/UTR Men/UTR PTT Olomouc Men 08",
                  "tenantName": "Live/Tennis/UTR Men/UTR PTT Olomouc Men 08"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:156871925992259584/EM:268027928030445569",
                    "baseName": "Xth set - Total games/Set 1 - Total games",
                    "derivedName": "Xth set - Total games/Set 1 - Total games",
                    "tenantName": "Xth set - Total games/Set 1 - Total games",
                    "outcome": {
                      "id": "O:156872145035591680/EMO:268170497321828390",
                      "baseName": "Under/Under 12.5",
                      "derivedName": "Under/Under 12.5",
                      "tenantName": "Under/Under 12.5"
                    }
                  }
                ],
                "odds": 20000,
                "isBanker": false,
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 17,
                      "feedType": 2,
                      "marketId": "M:156871925992259584/EM:268027928030445569",
                      "feedEventId": "sr:match:66707988",
                      "feedSportId": "sr:sport:5"
                    }
                  ],
                  "category": {}
                }
              }
            ],
            "selectedSystems": [
              1
            ],
            "bonusWallets": [],
            "payin": {
              "stake": "1000",
              "gameBonuses": [],
              "total": "1000"
            },
            "pWinnings": {
              "min": {
                "win": "2000",
                "bonuses": [],
                "taxes": [],
                "total": "2000"
              },
              "max": {
                "win": "2000",
                "bonuses": [],
                "taxes": [],
                "total": "2000"
              }
            },
            "transactions": [
              {
                "type": "STAKE_TRANSACTION",
                "id": "01KCK3XWJQW5CFFYCYC1ZMDS1H",
                "activityId": "01KCK3XWJG9HWK99R62DFX4H83",
                "status": "CANCELLED",
                "walletId": "01KA3XWWYKRV7409WAE85HPWP1",
                "walletGroupType": "REAL",
                "amount": "1000"
              }
            ],
            "status": {
              "phase": "REJECTED",
              "resolutionStatus": "OPEN"
            },
            "gameContext": {}
          }
        ],
        "b2b": [
          {
            "transactionType": "DEBIT",
            "id": "01KCK3XWJG9HWK99R62DFX4H83",
            "amount": "1000",
            "b2bOccurredAt": "2025-12-16T08:20:18.251Z",
            "b2bDuration": 126
          },
          {
            "transactionType": "CREDIT",
            "id": "01KCK3Y2HWSTT7KWBNGY58QESR",
            "amount": "1000",
            "b2bOccurredAt": "2025-12-16T08:20:24.430Z",
            "b2bDuration": 176
          }
        ],
        "codes": [
          {
            "type": "BARCODE",
            "id": "C75g9LYkVj"
          }
        ],
        "origins": [
          {
            "type": "PUNTER_IDENTITY",
            "id": 1,
            "punterIdentityId": 1
          },
          {
            "type": "PROVIDER",
            "id": 2,
            "providerId": 3
          }
        ],
        "punterIdentities": [
          {
            "type": "ONLINE_PLAYER_WEB",
            "id": 1,
            "player": {
              "type": "THIRD_PARTY_PLAYER",
              "punterId": "01KA3XWWXXDKN5371J5P469EVR",
              "nickname": "Achikva1995",
              "b2b": {
                "id": "30002",
                "sessionToken": "eyJhbGciOiJFUzI1NiJ9.eyJwZXJtaXNzaW9ucyI6W10sInVzZXJJZCI6IjMwMDAyIiwic3ViIjoiMzAwMDIiLCJpc3MiOiJ5ZWV0LXBsYXRmb3JtIiwiYXVkIjoidXNlci1jbGllbnQiLCJleHAiOjE3NjU4NzQ5ODN9.-3slJZ65_Z3QtHRwW7fhsWeXacKA2f5F82YB9KC5P3IAGem32lt1mSzooklyDhOHKWMwFIM_GybBE1EisTweag"
              }
            },
            "sys": {
              "ip": "83.97.115.19",
              "agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/122.0.6261.89 Mobile/15E148 Safari/604.1"
            }
          }
        ],
        "status": {
          "phase": "REJECTED"
        },
        "activities": [
          {
            "type": "PREPARE_PLACE_BETSLIP",
            "id": "01KCK3XWJG9HWK99R62DFX4H83",
            "originId": 1,
            "initiatorOccurredAt": "2025-12-16T08:20:18.085Z",
            "configuration": {
              "autoConfirm": false
            },
            "startedAt": "2025-12-16T08:20:18.128441838Z",
            "finishedAt": "2025-12-16T08:20:18.269341170Z",
            "betIds": [
              "01KCK3XWF65ZR2YAH3BRKFB155"
            ],
            "currentState": "PREPARE_PLACE_BETSLIP_FINISHED",
            "states": [
              {
                "state": "PREPARE_PLACE_BETSLIP_STARTED",
                "occurredAt": "2025-12-16T08:20:18.128439178Z"
              },
              {
                "state": "PREPARE_PLACE_BETSLIP_FINISHED",
                "occurredAt": "2025-12-16T08:20:18.269340613Z"
              }
            ]
          },
          {
            "type": "CONFIRM_PLACE_BETSLIP",
            "id": "01KCK3Y2HWSTT7KWBNGY58QESR",
            "originId": 2,
            "initiatorOccurredAt": "2025-12-16T08:20:24.214Z",
            "startedAt": "2025-12-16T08:20:24.252049503Z",
            "finishedAt": "2025-12-16T08:20:24.502535034Z",
            "acceptedBetIds": [],
            "rejectedBetIds": [
              "01KCK3XWF65ZR2YAH3BRKFB155"
            ],
            "currentState": "CONFIRM_PLACE_BETSLIP_FINISHED",
            "states": [
              {
                "state": "CONFIRM_PLACE_BETSLIP_STARTED",
                "occurredAt": "2025-12-16T08:20:24.252045678Z"
              },
              {
                "state": "CONFIRM_PLACE_BETSLIP_FINISHED",
                "occurredAt": "2025-12-16T08:20:24.502533932Z"
              }
            ]
          }
        ],
        "currencyConversions": {
          "exchangeRatesUpdatedAt": "2025-12-16T08:02:00.706057Z",
          "baseCurrency": "xUSDT",
          "entries": [
            {
              "baseAmount": "1000",
              "convertedAmounts": {
                "EUR": "850.97",
                "USD": "1000.11"
              }
            },
            {
              "baseAmount": "2000",
              "convertedAmounts": {
                "EUR": "1701.94",
                "USD": "2000.22"
              }
            }
          ]
        }
      }
    },
    "b2bVal": ""
  }
}
```

</details>

<details>

<summary><strong>[Sportsbook] System bet with bankers (Debit)</strong></summary>

```json
{
  "uri": "http://49.13.122.222:8080/b2b/debit/success1",
  "requestId": "3bb865b4-72b6-406b-975c-c684ff895e8a",
  "body": {
    "id": "01KCKE6NDHY1KFCNJBR7CF7XRS",
    "tenantId": "5556ccf6-ea0c-46a5-a777-e532237012de",
    "gameId": 1,
    "contentType": "BETSLIP",
    "amount": "3",
    "currency": "EUR",
    "punter": {
      "id": "01KCK5BVAAMEVKJ2091HABJFDV",
      "externalId": "mm",
      "sessionToken": "uiqMPZIb6v8B5yJ442JLYjEvpRU199eYX7FwmmqWaP2ZVvCTxCzIVI1gXJv5EvxD"
    },
    "occurredAt": "2025-12-16T11:19:51.473079205Z",
    "content": {
      "activityType": "PREPARE_PLACE_BETSLIP",
      "activityId": "01KCKE6NDHY1KFCNJBR7CF7XRS",
      "betslipId": "01KCKE6ND7QT0K3X3RJ089DHTR",
      "betslip": {
        "id": "01KCKE6ND7QT0K3X3RJ089DHTR",
        "context": {
          "providerBetslipId": "01KCKE6N787TVH2ZJD2A74GVVB",
          "providerId": 3,
          "tenantId": "5556ccf6-ea0c-46a5-a777-e532237012de",
          "gameId": 1,
          "currency": "EUR"
        },
        "bets": [
          {
            "id": "01KCKE6N7ETGZHBTP5VKM3YHXR",
            "selections": [
              {
                "phase": "OPEN",
                "id": "01KCKE6N770WVPWG14FKDSH3BG",
                "event": {
                  "id": "E:267053649058037760",
                  "baseName": "Club Deportivo Eldense vs. Real Sociedad San Sebastian",
                  "derivedName": "Club Deportivo Eldense vs. Real Sociedad San Sebastian",
                  "tenantName": "Club Deportivo Eldense vs. Real Sociedad San Sebastian",
                  "startTime": "2025-12-16T20:00:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160788407886315521/T:170790018772041728",
                  "baseName": "Prematch/Soccer/Spain/Copa del Rey",
                  "derivedName": "Prematch/Soccer/Spain/Copa del Rey",
                  "tenantName": "Prematch/Soccer/Spain/Copa del Rey"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:157802194434031616/EM:267963707530903552",
                    "baseName": "1X2/1X2",
                    "derivedName": "1X2/1X2",
                    "tenantName": "1X2/1X2",
                    "outcome": {
                      "id": "O:157802342610305024/EMO:267963707530805250",
                      "baseName": "Home/Eldense",
                      "derivedName": "Home/Eldense",
                      "tenantName": "Home/Eldense"
                    }
                  }
                ],
                "odds": 50000,
                "isBanker": false,
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:157802194434031616/EM:267963707530903552",
                      "feedEventId": "sr:match:66609712",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "ESP"
                  }
                }
              },
              {
                "phase": "OPEN",
                "id": "01KCKE6N787TKQNHTGMASA5C72",
                "event": {
                  "id": "E:267077217691074560",
                  "baseName": "CD Guadalajara vs. FC Barcelona",
                  "derivedName": "CD Guadalajara vs. FC Barcelona",
                  "tenantName": "CD Guadalajara vs. FC Barcelona",
                  "startTime": "2025-12-16T20:00:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160788407886315521/T:170790018772041728",
                  "baseName": "Prematch/Soccer/Spain/Copa del Rey",
                  "derivedName": "Prematch/Soccer/Spain/Copa del Rey",
                  "tenantName": "Prematch/Soccer/Spain/Copa del Rey"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:157802194434031616/EM:267963926574235648",
                    "baseName": "1X2/1X2",
                    "derivedName": "1X2/1X2",
                    "tenantName": "1X2/1X2",
                    "outcome": {
                      "id": "O:157802572391055360/EMO:267963926574137344",
                      "baseName": "Away/Barcelona",
                      "derivedName": "Away/Barcelona",
                      "tenantName": "Away/Barcelona"
                    }
                  }
                ],
                "odds": 11000,
                "isBanker": false,
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:157802194434031616/EM:267963926574235648",
                      "feedEventId": "sr:match:66609708",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "ESP"
                  }
                }
              },
              {
                "phase": "OPEN",
                "id": "01KCKE6N787TMRZ8VN3JMR3Z96",
                "event": {
                  "id": "E:267082051676766208",
                  "baseName": "Sporting Gijon vs. Valencia CF",
                  "derivedName": "Sporting Gijon vs. Valencia CF",
                  "tenantName": "Sporting Gijon vs. Valencia CF",
                  "startTime": "2025-12-16T20:00:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160788407886315521/T:170790018772041728",
                  "baseName": "Prematch/Soccer/Spain/Copa del Rey",
                  "derivedName": "Prematch/Soccer/Spain/Copa del Rey",
                  "tenantName": "Prematch/Soccer/Spain/Copa del Rey"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:169666038715285504/EM:267985435771502650",
                    "baseName": "1st half - Total/1st half - Total",
                    "derivedName": "1st half - Total/1st half - Total",
                    "tenantName": "1st half - Total/1st half - Total",
                    "outcome": {
                      "id": "O:169666216956592128/EMO:267985435771044087",
                      "baseName": "Over/Over 0.5",
                      "derivedName": "Over/Over 0.5",
                      "tenantName": "Over/Over 0.5"
                    }
                  }
                ],
                "odds": 14500,
                "isBanker": false,
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:169666038715285504/EM:267985435771502650",
                      "feedEventId": "sr:match:66609728",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "ESP"
                  }
                }
              },
              {
                "phase": "OPEN",
                "id": "01KCKE6N787TNVN9Q9M7H4RWB5",
                "event": {
                  "id": "E:263980232738668544",
                  "baseName": "Heracles Almelo vs. VV Hoogeveen",
                  "derivedName": "Heracles Almelo vs. VV Hoogeveen",
                  "tenantName": "Heracles Almelo vs. VV Hoogeveen",
                  "startTime": "2025-12-16T17:45:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160844626860736512/T:177107065260539904",
                  "baseName": "Prematch/Soccer/Netherlands/KNVB beker",
                  "derivedName": "Prematch/Soccer/Netherlands/KNVB beker",
                  "tenantName": "Prematch/Soccer/Netherlands/KNVB beker"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:169662843259617280/EM:267882358703882240",
                    "baseName": "Total goals/Total goals",
                    "derivedName": "Total goals/Total goals",
                    "tenantName": "Total goals/Total goals",
                    "outcome": {
                      "id": "O:169662974256185344/EMO:267882369440154075",
                      "baseName": "Under/Under 2.5",
                      "derivedName": "Under/Under 2.5",
                      "tenantName": "Under/Under 2.5"
                    }
                  }
                ],
                "odds": 32500,
                "isBanker": false,
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:169662843259617280/EM:267882358703882240",
                      "feedEventId": "sr:match:65266832",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "NLD"
                  }
                }
              }
            ],
            "selectedSystems": [
              2
            ],
            "bonusWallets": [],
            "payin": {
              "stake": "1.8",
              "gameBonuses": [],
              "total": "1.8"
            },
            "pWinnings": {
              "min": {
                "win": "0.48",
                "bonuses": [],
                "taxes": [],
                "total": "0.48"
              },
              "max": {
                "win": "11.66",
                "bonuses": [],
                "taxes": [],
                "total": "11.66"
              }
            },
            "transactions": [
              {
                "type": "STAKE_TRANSACTION",
                "id": "01KCKE6NDS46JPKFZABCATTHX5",
                "activityId": "01KCKE6NDHY1KFCNJBR7CF7XRS",
                "status": "CONFIRMED",
                "walletId": "01KCK5BVB0TZGZG7C9WY8KV9ZZ",
                "walletGroupType": "REAL",
                "amount": "1.8"
              }
            ],
            "status": {
              "phase": "PLACED",
              "resolutionStatus": "OPEN"
            },
            "gameContext": {}
          },
          {
            "id": "01KCKE6N7ED703GQW7R9GMKGSQ",
            "selections": [
              {
                "phase": "OPEN",
                "id": "01KCKE6N787TQ212GJT1RYQTQQ",
                "event": {
                  "id": "E:267053649058037760",
                  "baseName": "Club Deportivo Eldense vs. Real Sociedad San Sebastian",
                  "derivedName": "Club Deportivo Eldense vs. Real Sociedad San Sebastian",
                  "tenantName": "Club Deportivo Eldense vs. Real Sociedad San Sebastian",
                  "startTime": "2025-12-16T20:00:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160788407886315521/T:170790018772041728",
                  "baseName": "Prematch/Soccer/Spain/Copa del Rey",
                  "derivedName": "Prematch/Soccer/Spain/Copa del Rey",
                  "tenantName": "Prematch/Soccer/Spain/Copa del Rey"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:157802194434031616/EM:267963707530903552",
                    "baseName": "1X2/1X2",
                    "derivedName": "1X2/1X2",
                    "tenantName": "1X2/1X2",
                    "outcome": {
                      "id": "O:157802342610305024/EMO:267963707530805250",
                      "baseName": "Home/Eldense",
                      "derivedName": "Home/Eldense",
                      "tenantName": "Home/Eldense"
                    }
                  }
                ],
                "odds": 50000,
                "isBanker": false,
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:157802194434031616/EM:267963707530903552",
                      "feedEventId": "sr:match:66609712",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "ESP"
                  }
                }
              },
              {
                "phase": "OPEN",
                "id": "01KCKE6N787TR268Q6NNAYXXKR",
                "event": {
                  "id": "E:267077217691074560",
                  "baseName": "CD Guadalajara vs. FC Barcelona",
                  "derivedName": "CD Guadalajara vs. FC Barcelona",
                  "tenantName": "CD Guadalajara vs. FC Barcelona",
                  "startTime": "2025-12-16T20:00:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160788407886315521/T:170790018772041728",
                  "baseName": "Prematch/Soccer/Spain/Copa del Rey",
                  "derivedName": "Prematch/Soccer/Spain/Copa del Rey",
                  "tenantName": "Prematch/Soccer/Spain/Copa del Rey"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:157802194434031616/EM:267963926574235648",
                    "baseName": "1X2/1X2",
                    "derivedName": "1X2/1X2",
                    "tenantName": "1X2/1X2",
                    "outcome": {
                      "id": "O:157802572391055360/EMO:267963926574137344",
                      "baseName": "Away/Barcelona",
                      "derivedName": "Away/Barcelona",
                      "tenantName": "Away/Barcelona"
                    }
                  }
                ],
                "odds": 11000,
                "isBanker": false,
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:157802194434031616/EM:267963926574235648",
                      "feedEventId": "sr:match:66609708",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "ESP"
                  }
                }
              },
              {
                "phase": "OPEN",
                "id": "01KCKE6N787TSC80FJ9R8B39KF",
                "event": {
                  "id": "E:267082051676766208",
                  "baseName": "Sporting Gijon vs. Valencia CF",
                  "derivedName": "Sporting Gijon vs. Valencia CF",
                  "tenantName": "Sporting Gijon vs. Valencia CF",
                  "startTime": "2025-12-16T20:00:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160788407886315521/T:170790018772041728",
                  "baseName": "Prematch/Soccer/Spain/Copa del Rey",
                  "derivedName": "Prematch/Soccer/Spain/Copa del Rey",
                  "tenantName": "Prematch/Soccer/Spain/Copa del Rey"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:169666038715285504/EM:267985435771502650",
                    "baseName": "1st half - Total/1st half - Total",
                    "derivedName": "1st half - Total/1st half - Total",
                    "tenantName": "1st half - Total/1st half - Total",
                    "outcome": {
                      "id": "O:169666216956592128/EMO:267985435771044087",
                      "baseName": "Over/Over 0.5",
                      "derivedName": "Over/Over 0.5",
                      "tenantName": "Over/Over 0.5"
                    }
                  }
                ],
                "odds": 14500,
                "isBanker": false,
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:169666038715285504/EM:267985435771502650",
                      "feedEventId": "sr:match:66609728",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "ESP"
                  }
                }
              },
              {
                "phase": "OPEN",
                "id": "01KCKE6N787TTEHHD6MQV36B7K",
                "event": {
                  "id": "E:263980232738668544",
                  "baseName": "Heracles Almelo vs. VV Hoogeveen",
                  "derivedName": "Heracles Almelo vs. VV Hoogeveen",
                  "tenantName": "Heracles Almelo vs. VV Hoogeveen",
                  "startTime": "2025-12-16T17:45:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160844626860736512/T:177107065260539904",
                  "baseName": "Prematch/Soccer/Netherlands/KNVB beker",
                  "derivedName": "Prematch/Soccer/Netherlands/KNVB beker",
                  "tenantName": "Prematch/Soccer/Netherlands/KNVB beker"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:169662843259617280/EM:267882358703882240",
                    "baseName": "Total goals/Total goals",
                    "derivedName": "Total goals/Total goals",
                    "tenantName": "Total goals/Total goals",
                    "outcome": {
                      "id": "O:169662974256185344/EMO:267882369440154075",
                      "baseName": "Under/Under 2.5",
                      "derivedName": "Under/Under 2.5",
                      "tenantName": "Under/Under 2.5"
                    }
                  }
                ],
                "odds": 32500,
                "isBanker": false,
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:169662843259617280/EM:267882358703882240",
                      "feedEventId": "sr:match:65266832",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "NLD"
                  }
                }
              }
            ],
            "selectedSystems": [
              3
            ],
            "bonusWallets": [],
            "payin": {
              "stake": "1.2",
              "gameBonuses": [],
              "total": "1.2"
            },
            "pWinnings": {
              "min": {
                "win": "1.56",
                "bonuses": [],
                "taxes": [],
                "total": "1.56"
              },
              "max": {
                "win": "16.38",
                "bonuses": [],
                "taxes": [],
                "total": "16.38"
              }
            },
            "transactions": [
              {
                "type": "STAKE_TRANSACTION",
                "id": "01KCKE6NDSH9P5JT0W4B8V8PRS",
                "activityId": "01KCKE6NDHY1KFCNJBR7CF7XRS",
                "status": "CONFIRMED",
                "walletId": "01KCK5BVB0TZGZG7C9WY8KV9ZZ",
                "walletGroupType": "REAL",
                "amount": "1.2"
              }
            ],
            "status": {
              "phase": "PLACED",
              "resolutionStatus": "OPEN"
            },
            "gameContext": {}
          }
        ],
        "b2b": [
          {
            "transactionType": "DEBIT",
            "id": "01KCKE6NDHY1KFCNJBR7CF7XRS",
            "amount": "3",
            "b2bOccurredAt": "2025-12-16T11:19:51.496Z",
            "b2bDuration": 7
          }
        ],
        "codes": [
          {
            "type": "BARCODE",
            "id": "C7fJSfEth5"
          }
        ],
        "origins": [
          {
            "type": "PUNTER_IDENTITY",
            "id": 1,
            "punterIdentityId": 1
          },
          {
            "type": "PROVIDER",
            "id": 2,
            "providerId": 3
          }
        ],
        "punterIdentities": [
          {
            "type": "ONLINE_PLAYER_WEB",
            "id": 1,
            "player": {
              "type": "THIRD_PARTY_PLAYER",
              "punterId": "01KCK5BVAAMEVKJ2091HABJFDV",
              "nickname": "mm-nickname",
              "b2b": {
                "id": "mm",
                "sessionToken": "680210d253fb6"
              },
              "brandId": "538ba1e5-f038-4437-a9d3-ae0038492aaf",
              "agentId": "e662f3c4-fabc-43e8-95eb-7849428421b7"
            },
            "sys": {
              "ip": "77.77.212.86",
              "agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"
            }
          }
        ],
        "status": {
          "phase": "PLACED"
        },
        "activities": [
          {
            "type": "PREPARE_PLACE_BETSLIP",
            "id": "01KCKE6NDHY1KFCNJBR7CF7XRS",
            "originId": 1,
            "initiatorOccurredAt": "2025-12-16T11:19:51.422Z",
            "configuration": {
              "autoConfirm": false
            },
            "startedAt": "2025-12-16T11:19:51.473079205Z",
            "finishedAt": "2025-12-16T11:19:51.499982473Z",
            "betIds": [
              "01KCKE6N7ETGZHBTP5VKM3YHXR",
              "01KCKE6N7ED703GQW7R9GMKGSQ"
            ],
            "currentState": "PREPARE_PLACE_BETSLIP_FINISHED",
            "states": [
              {
                "state": "PREPARE_PLACE_BETSLIP_STARTED",
                "occurredAt": "2025-12-16T11:19:51.473074612Z"
              },
              {
                "state": "PREPARE_PLACE_BETSLIP_FINISHED",
                "occurredAt": "2025-12-16T11:19:51.499981714Z"
              }
            ]
          },
          {
            "type": "CONFIRM_PLACE_BETSLIP",
            "id": "01KCKE6R8PC2QM3K9GQRF520QC",
            "originId": 2,
            "initiatorOccurredAt": "2025-12-16T11:19:54.343Z",
            "startedAt": "2025-12-16T11:19:54.390109170Z",
            "finishedAt": "2025-12-16T11:19:54.418419378Z",
            "acceptedBetIds": [
              "01KCKE6N7ED703GQW7R9GMKGSQ",
              "01KCKE6N7ETGZHBTP5VKM3YHXR"
            ],
            "rejectedBetIds": [],
            "currentState": "CONFIRM_PLACE_BETSLIP_FINISHED",
            "states": [
              {
                "state": "CONFIRM_PLACE_BETSLIP_STARTED",
                "occurredAt": "2025-12-16T11:19:54.390105627Z"
              },
              {
                "state": "CONFIRM_PLACE_BETSLIP_FINISHED",
                "occurredAt": "2025-12-16T11:19:54.418418452Z"
              }
            ]
          }
        ],
        "currencyConversions": {
          "exchangeRatesUpdatedAt": "2025-12-16T11:02:00.679097Z",
          "baseCurrency": "EUR",
          "entries": [
            {
              "baseAmount": "0.48",
              "convertedAmounts": {
                "EUR": "0.48"
              }
            },
            {
              "baseAmount": "1.2",
              "convertedAmounts": {
                "EUR": "1.2"
              }
            },
            {
              "baseAmount": "16.38",
              "convertedAmounts": {
                "EUR": "16.38"
              }
            },
            {
              "baseAmount": "11.66",
              "convertedAmounts": {
                "EUR": "11.66"
              }
            },
            {
              "baseAmount": "1.56",
              "convertedAmounts": {
                "EUR": "1.56"
              }
            },
            {
              "baseAmount": "1.8",
              "convertedAmounts": {
                "EUR": "1.8"
              }
            }
          ]
        }
      }
    },
    "b2bVal": ""
  }
}
```

</details>

<details>

<summary><strong>[Sportsbook] Cashout {One Selection} (Credit)</strong></summary>

```json
{
  "uri": "http://49.13.122.222:8080/test/credit/success1",
  "requestId": "063a0729-9482-4d7e-bd79-209f06b31270",
  "body": {
    "id": "01KCK3W21J6X41MVS0A7A0GP6X",
    "tenantId": "7198602f-fb94-4368-ad2c-d4c45b121b88",
    "gameId": 1,
    "contentType": "BETSLIP",
    "amount": "3069.977258",
    "currency": "xUSDC",
    "punter": {
      "id": "01KA061EYM0GDE3RG8BJMY4J13",
      "externalId": "15418"
    },
    "occurredAt": "2025-12-16T08:19:18.194425274Z",
    "content": {
      "activityType": "CASHOUT_BETS",
      "activityId": "01KCK3W21J6X41MVS0A7A0GP6X",
      "betslipId": "01KCK2TZ3MFHNHRDHCDXAQ44P3",
      "betslip": {
        "id": "01KCK2TZ3MFHNHRDHCDXAQ44P3",
        "context": {
          "providerBetslipId": "01KCK2TZ0M9R8P61NQGPG53A7X",
          "providerId": 3,
          "tenantId": "7198602f-fb94-4368-ad2c-d4c45b121b88",
          "gameId": 1,
          "currency": "xUSDC"
        },
        "bets": [
          {
            "id": "01KCK2TZ0PBJYQ3K17S6AJVQ2F",
            "selections": [
              {
                "phase": "LIVE",
                "id": "01KCK2TZ0M9R75VV18KJ4XRXJ1",
                "event": {
                  "id": "E:266264633501286401",
                  "baseName": "Laos vs. Singapore",
                  "derivedName": "Laos vs. Singapore",
                  "tenantName": "Laos vs. Singapore",
                  "startTime": "2025-12-16T08:00:00Z"
                },
                "category": {
                  "id": "PS:LIVE/S:126431675994341376/C:160789333451767812/T:266264633500893184",
                  "baseName": "Live/Volleyball/International/SEA Games",
                  "derivedName": "Live/Volleyball/International/SEA Games",
                  "tenantName": "Live/Volleyball/International/SEA Games"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:127753237431320576/EM:268080530642403352",
                    "baseName": "Winner/Winner",
                    "derivedName": "Winner/Winner",
                    "tenantName": "Winner/Winner",
                    "outcome": {
                      "id": "O:127754519479222272/EMO:268080530642010173",
                      "baseName": "Away/Singapore",
                      "derivedName": "Away/Singapore",
                      "tenantName": "Away/Singapore"
                    }
                  }
                ],
                "odds": 11000,
                "isBanker": false,
                "currentOdds": 13500,
                "probability": {
                  "type": "DEFAULT",
                  "value": "0.69766"
                },
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 17,
                      "feedType": 2,
                      "marketId": "M:127753237431320576/EM:268080530642403352",
                      "feedEventId": "sr:match:66384180",
                      "feedSportId": "sr:sport:23"
                    }
                  ],
                  "category": {}
                }
              }
            ],
            "selectedSystems": [
              1
            ],
            "bonusWallets": [],
            "payin": {
              "stake": "4000.356071",
              "gameBonuses": [],
              "total": "4000.356071"
            },
            "pWinnings": {
              "min": {
                "win": "4400.391678",
                "bonuses": [],
                "taxes": [],
                "total": "4400.391678"
              },
              "max": {
                "win": "4400.391678",
                "bonuses": [],
                "taxes": [],
                "total": "4400.391678"
              }
            },
            "transactions": [
              {
                "type": "STAKE_TRANSACTION",
                "id": "01KCK2TZ46CC8ENET6FYKKG2D2",
                "activityId": "01KCK2TZ3Z56MC7B36KKV1M273",
                "status": "CONFIRMED",
                "walletId": "01KA061EZ8E3EGSX0D8G5BMDPQ",
                "walletGroupType": "REAL",
                "amount": "4000.356071"
              },
              {
                "type": "PAYOUT_TRANSACTION",
                "id": "01KCK3W222ZNQZ91QVZ3S9147V",
                "activityId": "01KCK3W21J6X41MVS0A7A0GP6X",
                "status": "CONFIRMED",
                "walletId": "01KA061EZ8E3EGSX0D8G5BMDPQ",
                "walletGroupType": "REAL",
                "amount": "3069.977258"
              }
            ],
            "winnings": {
              "win": "3069.977258",
              "gameBonuses": [],
              "total": "3069.977258"
            },
            "status": {
              "phase": "CASHED_OUT",
              "resolutionStatus": "OPEN"
            },
            "gameContext": {}
          }
        ],
        "b2b": [
          {
            "transactionType": "DEBIT",
            "id": "01KCK2TZ3Z56MC7B36KKV1M273",
            "amount": "4000.356071",
            "b2bOccurredAt": "2025-12-16T08:01:13.983Z",
            "b2bDuration": 130
          },
          {
            "transactionType": "CREDIT",
            "id": "01KCK3W21J6X41MVS0A7A0GP6X",
            "amount": "3069.977258",
            "b2bOccurredAt": "2025-12-16T08:19:18.411Z",
            "b2bDuration": 209
          }
        ],
        "codes": [
          {
            "type": "BARCODE",
            "id": "C749yzHWyQ"
          }
        ],
        "origins": [
          {
            "type": "PUNTER_IDENTITY",
            "id": 1,
            "punterIdentityId": 1
          },
          {
            "type": "PROVIDER",
            "id": 2,
            "providerId": 3
          }
        ],
        "punterIdentities": [
          {
            "type": "ONLINE_PLAYER_WEB",
            "id": 1,
            "player": {
              "type": "THIRD_PARTY_PLAYER",
              "punterId": "01KA061EYM0GDE3RG8BJMY4J13",
              "nickname": "gladiatoryield",
              "b2b": {
                "id": "15418",
                "sessionToken": "6BTwISwAvbUu9ePrhB8t4zIm32dDKSlJECgIcgrAk901hI6aMOoJCV3PlWkThQGy"
              }
            },
            "sys": {
              "ip": "193.36.237.49",
              "agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"
            }
          }
        ],
        "status": {
          "phase": "PLACED"
        },
        "activities": [
          {
            "type": "PREPARE_PLACE_BETSLIP",
            "id": "01KCK2TZ3Z56MC7B36KKV1M273",
            "originId": 1,
            "initiatorOccurredAt": "2025-12-16T08:01:13.820Z",
            "configuration": {
              "autoConfirm": false
            },
            "startedAt": "2025-12-16T08:01:13.855023713Z",
            "finishedAt": "2025-12-16T08:01:14.001091628Z",
            "betIds": [
              "01KCK2TZ0PBJYQ3K17S6AJVQ2F"
            ],
            "currentState": "PREPARE_PLACE_BETSLIP_FINISHED",
            "states": [
              {
                "state": "PREPARE_PLACE_BETSLIP_STARTED",
                "occurredAt": "2025-12-16T08:01:13.855019612Z"
              },
              {
                "state": "PREPARE_PLACE_BETSLIP_FINISHED",
                "occurredAt": "2025-12-16T08:01:14.001090849Z"
              }
            ]
          },
          {
            "type": "CONFIRM_PLACE_BETSLIP",
            "id": "01KCK2V1K45C0TRXVA9XWPNQNK",
            "originId": 2,
            "initiatorOccurredAt": "2025-12-16T08:01:16.355Z",
            "startedAt": "2025-12-16T08:01:16.388239186Z",
            "finishedAt": "2025-12-16T08:01:16.537835134Z",
            "acceptedBetIds": [
              "01KCK2TZ0PBJYQ3K17S6AJVQ2F"
            ],
            "rejectedBetIds": [],
            "currentState": "CONFIRM_PLACE_BETSLIP_FINISHED",
            "states": [
              {
                "state": "CONFIRM_PLACE_BETSLIP_STARTED",
                "occurredAt": "2025-12-16T08:01:16.388235514Z"
              },
              {
                "state": "CONFIRM_PLACE_BETSLIP_FINISHED",
                "occurredAt": "2025-12-16T08:01:16.537834347Z"
              }
            ]
          },
          {
            "type": "CASHOUT_BETS",
            "id": "01KCK3W21J6X41MVS0A7A0GP6X",
            "originId": 2,
            "initiatorOccurredAt": "2025-12-16T08:19:18.165Z",
            "startedAt": "2025-12-16T08:19:18.194425274Z",
            "finishedAt": "2025-12-16T08:19:18.430588735Z",
            "cashoutBetIds": [
              "01KCK2TZ0PBJYQ3K17S6AJVQ2F"
            ],
            "currentState": "CASHOUT_BETS_FINISHED",
            "states": [
              {
                "state": "CASHOUT_BETS_STARTED",
                "occurredAt": "2025-12-16T08:19:18.194420663Z"
              },
              {
                "state": "CASHOUT_BETS_FINISHED",
                "occurredAt": "2025-12-16T08:19:18.430587599Z"
              }
            ]
          }
        ],
        "currencyConversions": {
          "exchangeRatesUpdatedAt": "2025-12-16T08:19:18.194428763Z",
          "baseCurrency": "xUSDC",
          "entries": [
            {
              "baseAmount": "4400.391678",
              "convertedAmounts": {
                "EUR": "3744.22",
                "USD": "4400.44"
              }
            },
            {
              "baseAmount": "4000.356071",
              "convertedAmounts": {
                "EUR": "3403.83",
                "USD": "4000.4"
              }
            },
            {
              "baseAmount": "3069.977258",
              "convertedAmounts": {
                "EUR": "2612.78"
              }
            }
          ]
        }
      }
    }
  }
}
```

</details>

<details>

<summary><strong>[Sportsbook] Cashout {Single Bet Cashout in Multi Bet} (Credit)</strong></summary>

```json
{
  "uri": "http://49.13.122.222:8080/b2b/credit/success1",
  "requestId": "e8329f2d-abe2-407a-a2c4-04f4d880fcff",
  "body": {
    "id": "01KCKENAHG7FS2896GMSN0WHCW",
    "tenantId": "5556ccf6-ea0c-46a5-a777-e532237012de",
    "gameId": 1,
    "contentType": "BETSLIP",
    "amount": "5.88",
    "currency": "EUR",
    "punter": {
      "id": "01KCK5BVAAMEVKJ2091HABJFDV",
      "externalId": "mm"
    },
    "occurredAt": "2025-12-16T11:27:51.856356639Z",
    "content": {
      "activityType": "PAYOUT_BETS",
      "activityId": "01KCKENAHG7FS2896GMSN0WHCW",
      "betslipId": "01KCKECQ0WB9BTT14JNSC7KJHS",
      "betslip": {
        "id": "01KCKECQ0WB9BTT14JNSC7KJHS",
        "context": {
          "providerBetslipId": "01KCKECPMJ27G00R68C8130YXR",
          "providerId": 3,
          "tenantId": "5556ccf6-ea0c-46a5-a777-e532237012de",
          "gameId": 1,
          "currency": "EUR"
        },
        "bets": [
          {
            "id": "01KCKECPMRPX3TN25XBH5EPZ2X",
            "selections": [
              {
                "phase": "LIVE",
                "id": "01KCKECPMH564NEZ3APCEKMZND",
                "event": {
                  "id": "E:268002699391762432",
                  "baseName": "Congo DR vs. Zambia",
                  "derivedName": "Congo DR vs. Zambia",
                  "tenantName": "Congo DR vs. Zambia",
                  "startTime": "2025-12-16T15:00:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160784355584638980/T:160975662018166784",
                  "baseName": "Prematch/Soccer/International/Int. Friendly Games",
                  "derivedName": "Prematch/Soccer/International/Int. Friendly Games",
                  "tenantName": "Prematch/Soccer/International/Int. Friendly Games"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:157802194434031616/EM:268149520701620224",
                    "baseName": "1X2/1X2",
                    "derivedName": "1X2/1X2",
                    "tenantName": "1X2/1X2",
                    "outcome": {
                      "id": "O:157802342610305024/EMO:268149520701554690",
                      "baseName": "Home/Congo DR",
                      "derivedName": "Home/Congo DR",
                      "tenantName": "Home/Congo DR"
                    }
                  }
                ],
                "odds": 20500,
                "isBanker": false,
                "currentOdds": 20500,
                "probability": {
                  "type": "DEFAULT",
                  "value": "0.454646"
                },
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:157802194434031616/EM:268149520701620224",
                      "feedEventId": "sr:match:66759046",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "INT"
                  }
                }
              }
            ],
            "selectedSystems": [
              1
            ],
            "bonusWallets": [],
            "payin": {
              "stake": "3",
              "gameBonuses": [],
              "total": "3"
            },
            "pWinnings": {
              "min": {
                "win": "6.15",
                "bonuses": [],
                "taxes": [],
                "total": "6.15"
              },
              "max": {
                "win": "6.15",
                "bonuses": [],
                "taxes": [],
                "total": "6.15"
              }
            },
            "transactions": [
              {
                "type": "STAKE_TRANSACTION",
                "id": "01KCKECQ1E54FA6YSFMY0TN3YV",
                "activityId": "01KCKECQ167B1MQ3VPD00VKWMA",
                "status": "CONFIRMED",
                "walletId": "01KCK5BVB0TZGZG7C9WY8KV9ZZ",
                "walletGroupType": "REAL",
                "amount": "3"
              },
              {
                "type": "PAYOUT_TRANSACTION",
                "id": "01KCKEDE009MFRVYSJBDVDCR5M",
                "activityId": "01KCKEDDZG1CZ2E8XCAY20RHQK",
                "status": "CONFIRMED",
                "walletId": "01KCK5BVB0TZGZG7C9WY8KV9ZZ",
                "walletGroupType": "REAL",
                "amount": "2.8"
              }
            ],
            "winnings": {
              "win": "2.8",
              "gameBonuses": [],
              "total": "2.8"
            },
            "status": {
              "phase": "CASHED_OUT",
              "resolutionStatus": "OPEN"
            },
            "gameContext": {}
          },
          {
            "id": "01KCKECPMRTW3JS7MJZW7XVE8Q",
            "selections": [
              {
                "phase": "SETTLED",
                "id": "01KCKECPMJ27BW5P0DHDYERV2G",
                "event": {
                  "id": "E:267496200340733952",
                  "baseName": "Egypt vs. Nigeria",
                  "derivedName": "Egypt vs. Nigeria",
                  "tenantName": "Egypt vs. Nigeria",
                  "startTime": "2025-12-16T18:00:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160784355584638980/T:160975662018166784",
                  "baseName": "Prematch/Soccer/International/Int. Friendly Games",
                  "derivedName": "Prematch/Soccer/International/Int. Friendly Games",
                  "tenantName": "Prematch/Soccer/International/Int. Friendly Games"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:157802194434031616/EM:268001299232751616",
                    "baseName": "1X2/1X2",
                    "derivedName": "1X2/1X2",
                    "tenantName": "1X2/1X2",
                    "outcome": {
                      "id": "O:157802342610305024/EMO:268001299232686082",
                      "baseName": "Home/Egypt",
                      "derivedName": "Home/Egypt",
                      "tenantName": "Home/Egypt"
                    }
                  }
                ],
                "odds": 19600,
                "isBanker": false,
                "oddsResolve": 19600,
                "status": "WON",
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:157802194434031616/EM:268001299232751616",
                      "feedEventId": "sr:match:66632702",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "INT"
                  }
                }
              }
            ],
            "selectedSystems": [
              1
            ],
            "bonusWallets": [],
            "payin": {
              "stake": "3",
              "gameBonuses": [],
              "total": "3"
            },
            "pWinnings": {
              "min": {
                "win": "5.88",
                "bonuses": [],
                "taxes": [],
                "total": "5.88"
              },
              "max": {
                "win": "5.88",
                "bonuses": [],
                "taxes": [],
                "total": "5.88"
              }
            },
            "transactions": [
              {
                "type": "STAKE_TRANSACTION",
                "id": "01KCKECQ1EGNG4VPDSNSM5Y6W1",
                "activityId": "01KCKECQ167B1MQ3VPD00VKWMA",
                "status": "CONFIRMED",
                "walletId": "01KCK5BVB0TZGZG7C9WY8KV9ZZ",
                "walletGroupType": "REAL",
                "amount": "3"
              },
              {
                "type": "PAYOUT_TRANSACTION",
                "id": "01KCKENAJ1ZRRKP6DGZMQJK1R4",
                "activityId": "01KCKENAHG7FS2896GMSN0WHCW",
                "status": "CONFIRMED",
                "walletId": "01KCK5BVB0TZGZG7C9WY8KV9ZZ",
                "walletGroupType": "REAL",
                "amount": "5.88"
              }
            ],
            "winnings": {
              "win": "5.88",
              "gameBonuses": [],
              "total": "5.88"
            },
            "status": {
              "phase": "PAID_OUT",
              "resolutionStatus": "WON"
            },
            "gameContext": {}
          },
          {
            "id": "01KCKECPMRDEYBADP9T03ZMQY9",
            "selections": [
              {
                "phase": "SETTLED",
                "id": "01KCKECPMJ27D4DAG5VW335CVY",
                "event": {
                  "id": "E:259379191040016384",
                  "baseName": "Cardiff City vs. Chelsea FC",
                  "derivedName": "Cardiff City vs. Chelsea FC",
                  "tenantName": "Cardiff City vs. Chelsea FC",
                  "startTime": "2025-12-16T20:00:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160788440098570240/T:168777450784260096",
                  "baseName": "Prematch/Soccer/England/EFL Cup",
                  "derivedName": "Prematch/Soccer/England/EFL Cup",
                  "tenantName": "Prematch/Soccer/England/EFL Cup"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:157802194434031616/EM:266192860303196160",
                    "baseName": "1X2/1X2",
                    "derivedName": "1X2/1X2",
                    "tenantName": "1X2/1X2",
                    "outcome": {
                      "id": "O:157802342610305024/EMO:266192860303392770",
                      "baseName": "Home/Cardiff",
                      "derivedName": "Home/Cardiff",
                      "tenantName": "Home/Cardiff"
                    }
                  }
                ],
                "odds": 74000,
                "isBanker": false,
                "oddsResolve": 0,
                "status": "LOST",
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:157802194434031616/EM:266192860303196160",
                      "feedEventId": "sr:match:65068196",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "ENG"
                  }
                }
              }
            ],
            "selectedSystems": [
              1
            ],
            "bonusWallets": [],
            "payin": {
              "stake": "3",
              "gameBonuses": [],
              "total": "3"
            },
            "pWinnings": {
              "min": {
                "win": "22.2",
                "bonuses": [],
                "taxes": [],
                "total": "22.2"
              },
              "max": {
                "win": "22.2",
                "bonuses": [],
                "taxes": [],
                "total": "22.2"
              }
            },
            "transactions": [
              {
                "type": "STAKE_TRANSACTION",
                "id": "01KCKECQ1EAT419Z6TMARX6264",
                "activityId": "01KCKECQ167B1MQ3VPD00VKWMA",
                "status": "CONFIRMED",
                "walletId": "01KCK5BVB0TZGZG7C9WY8KV9ZZ",
                "walletGroupType": "REAL",
                "amount": "3"
              }
            ],
            "winnings": {
              "win": "0",
              "gameBonuses": [],
              "total": "0"
            },
            "status": {
              "phase": "SETTLED",
              "resolutionStatus": "LOST"
            },
            "gameContext": {}
          },
          {
            "id": "01KCKECPMR33GSSA5C6HAY5YKQ",
            "selections": [
              {
                "phase": "SETTLED",
                "id": "01KCKECPMJ27EYXSJF69N2RTX0",
                "event": {
                  "id": "E:267230612448051200",
                  "baseName": "RC Deportivo La Coruna vs. RCD Mallorca",
                  "derivedName": "RC Deportivo La Coruna vs. RCD Mallorca",
                  "tenantName": "RC Deportivo La Coruna vs. RCD Mallorca",
                  "startTime": "2025-12-16T18:00:00Z"
                },
                "category": {
                  "id": "PS:PREMATCH/S:126431650224537600/C:160788407886315521/T:170790018772041728",
                  "baseName": "Prematch/Soccer/Spain/Copa del Rey",
                  "derivedName": "Prematch/Soccer/Spain/Copa del Rey",
                  "tenantName": "Prematch/Soccer/Spain/Copa del Rey"
                },
                "competitors": [],
                "markets": [
                  {
                    "id": "M:157802194434031616/EM:267963713974403072",
                    "baseName": "1X2/1X2",
                    "derivedName": "1X2/1X2",
                    "tenantName": "1X2/1X2",
                    "outcome": {
                      "id": "O:157802342610305024/EMO:267963713973944322",
                      "baseName": "Home/Deportivo La Coruna",
                      "derivedName": "Home/Deportivo La Coruna",
                      "tenantName": "Home/Deportivo La Coruna"
                    }
                  }
                ],
                "odds": 26500,
                "isBanker": false,
                "oddsResolve": 10000,
                "status": "VOID",
                "gameContext": {
                  "event": {},
                  "feeds": [
                    {
                      "feedId": 1,
                      "feedType": 2,
                      "marketId": "M:157802194434031616/EM:267963713974403072",
                      "feedEventId": "sr:match:66609722",
                      "feedSportId": "sr:sport:1"
                    }
                  ],
                  "category": {
                    "code": "ESP"
                  }
                }
              }
            ],
            "selectedSystems": [
              1
            ],
            "bonusWallets": [],
            "payin": {
              "stake": "3",
              "gameBonuses": [],
              "total": "3"
            },
            "pWinnings": {
              "min": {
                "win": "7.95",
                "bonuses": [],
                "taxes": [],
                "total": "7.95"
              },
              "max": {
                "win": "7.95",
                "bonuses": [],
                "taxes": [],
                "total": "7.95"
              }
            },
            "transactions": [
              {
                "type": "STAKE_TRANSACTION",
                "id": "01KCKECQ1EPHKJZ16TXEPT1HH7",
                "activityId": "01KCKECQ167B1MQ3VPD00VKWMA",
                "status": "CONFIRMED",
                "walletId": "01KCK5BVB0TZGZG7C9WY8KV9ZZ",
                "walletGroupType": "REAL",
                "amount": "3"
              },
              {
                "type": "PAYOUT_TRANSACTION",
                "id": "01KCKEMS3BJ3YX5NSZ86E7VXPF",
                "activityId": "01KCKEMS2QHFDHNT4Y3J1QV3VM",
                "status": "CONFIRMED",
                "walletId": "01KCK5BVB0TZGZG7C9WY8KV9ZZ",
                "walletGroupType": "REAL",
                "amount": "3"
              }
            ],
            "winnings": {
              "win": "3",
              "gameBonuses": [],
              "total": "3"
            },
            "status": {
              "phase": "PAID_OUT",
              "resolutionStatus": "WON"
            },
            "gameContext": {}
          }
        ],
        "b2b": [
          {
            "transactionType": "DEBIT",
            "id": "01KCKECQ167B1MQ3VPD00VKWMA",
            "amount": "12",
            "b2bOccurredAt": "2025-12-16T11:23:09.755Z",
            "b2bDuration": 5
          },
          {
            "transactionType": "CREDIT",
            "id": "01KCKEDDZG1CZ2E8XCAY20RHQK",
            "amount": "2.8",
            "b2bOccurredAt": "2025-12-16T11:23:33.257Z",
            "b2bDuration": 6
          },
          {
            "transactionType": "CREDIT",
            "id": "01KCKEMS2QHFDHNT4Y3J1QV3VM",
            "amount": "3",
            "b2bOccurredAt": "2025-12-16T11:27:34.008Z",
            "b2bDuration": 6
          },
          {
            "transactionType": "CREDIT",
            "id": "01KCKENAHG7FS2896GMSN0WHCW",
            "amount": "5.88",
            "b2bOccurredAt": "2025-12-16T11:27:51.883Z",
            "b2bDuration": 5
          }
        ],
        "codes": [
          {
            "type": "BARCODE",
            "id": "C7fW35hDpo"
          }
        ],
        "origins": [
          {
            "type": "PUNTER_IDENTITY",
            "id": 1,
            "punterIdentityId": 1
          },
          {
            "type": "PROVIDER",
            "id": 2,
            "providerId": 3
          },
          {
            "type": "INTERNAL",
            "id": 3
          }
        ],
        "punterIdentities": [
          {
            "type": "ONLINE_PLAYER_WEB",
            "id": 1,
            "player": {
              "type": "THIRD_PARTY_PLAYER",
              "punterId": "01KCK5BVAAMEVKJ2091HABJFDV",
              "nickname": "mm-nickname",
              "b2b": {
                "id": "mm",
                "sessionToken": "680210d253fb6"
              },
              "brandId": "538ba1e5-f038-4437-a9d3-ae0038492aaf",
              "agentId": "e662f3c4-fabc-43e8-95eb-7849428421b7"
            },
            "sys": {
              "ip": "77.77.212.86",
              "agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"
            }
          }
        ],
        "status": {
          "phase": "PLACED"
        },
        "activities": [
          {
            "type": "PREPARE_PLACE_BETSLIP",
            "id": "01KCKECQ167B1MQ3VPD00VKWMA",
            "originId": 1,
            "initiatorOccurredAt": "2025-12-16T11:23:09.691Z",
            "configuration": {
              "autoConfirm": false
            },
            "startedAt": "2025-12-16T11:23:09.734578756Z",
            "finishedAt": "2025-12-16T11:23:09.758168247Z",
            "betIds": [
              "01KCKECPMRPX3TN25XBH5EPZ2X",
              "01KCKECPMRTW3JS7MJZW7XVE8Q",
              "01KCKECPMRDEYBADP9T03ZMQY9",
              "01KCKECPMR33GSSA5C6HAY5YKQ"
            ],
            "currentState": "PREPARE_PLACE_BETSLIP_FINISHED",
            "states": [
              {
                "state": "PREPARE_PLACE_BETSLIP_STARTED",
                "occurredAt": "2025-12-16T11:23:09.734575275Z"
              },
              {
                "state": "PREPARE_PLACE_BETSLIP_FINISHED",
                "occurredAt": "2025-12-16T11:23:09.758167407Z"
              }
            ]
          },
          {
            "type": "CONFIRM_PLACE_BETSLIP",
            "id": "01KCKECSXSV4XRW6SE2YJ87HG5",
            "originId": 2,
            "initiatorOccurredAt": "2025-12-16T11:23:12.664Z",
            "startedAt": "2025-12-16T11:23:12.697248037Z",
            "finishedAt": "2025-12-16T11:23:12.718667673Z",
            "acceptedBetIds": [
              "01KCKECPMRPX3TN25XBH5EPZ2X",
              "01KCKECPMR33GSSA5C6HAY5YKQ",
              "01KCKECPMRTW3JS7MJZW7XVE8Q",
              "01KCKECPMRDEYBADP9T03ZMQY9"
            ],
            "rejectedBetIds": [],
            "currentState": "CONFIRM_PLACE_BETSLIP_FINISHED",
            "states": [
              {
                "state": "CONFIRM_PLACE_BETSLIP_STARTED",
                "occurredAt": "2025-12-16T11:23:12.697244640Z"
              },
              {
                "state": "CONFIRM_PLACE_BETSLIP_FINISHED",
                "occurredAt": "2025-12-16T11:23:12.718666987Z"
              }
            ]
          },
          {
            "type": "CASHOUT_BETS",
            "id": "01KCKEDDZG1CZ2E8XCAY20RHQK",
            "originId": 2,
            "initiatorOccurredAt": "2025-12-16T11:23:33.098Z",
            "startedAt": "2025-12-16T11:23:33.232079397Z",
            "finishedAt": "2025-12-16T11:23:33.260572658Z",
            "cashoutBetIds": [
              "01KCKECPMRPX3TN25XBH5EPZ2X"
            ],
            "currentState": "CASHOUT_BETS_FINISHED",
            "states": [
              {
                "state": "CASHOUT_BETS_STARTED",
                "occurredAt": "2025-12-16T11:23:33.232075442Z"
              },
              {
                "state": "CASHOUT_BETS_FINISHED",
                "occurredAt": "2025-12-16T11:23:33.260571851Z"
              }
            ]
          },
          {
            "type": "SETTLE_BETS",
            "id": "01KCKEKX73Y8KS2NV22015X65Q",
            "originId": 2,
            "initiatorOccurredAt": "2025-12-16T11:27:05.405Z",
            "startedAt": "2025-12-16T11:27:05.443300517Z",
            "finishedAt": "2025-12-16T11:27:05.465267758Z",
            "settleBetIds": [
              "01KCKECPMRDEYBADP9T03ZMQY9"
            ],
            "currentState": "SETTLE_BETS_FINISHED",
            "states": [
              {
                "state": "SETTLE_BETS_STARTED",
                "occurredAt": "2025-12-16T11:27:05.443297731Z"
              },
              {
                "state": "SETTLE_BETS_FINISHED",
                "occurredAt": "2025-12-16T11:27:05.465266890Z"
              }
            ]
          },
          {
            "type": "SETTLE_BETS",
            "id": "01KCKEMS1120QWKM5GAQQE9NZD",
            "originId": 2,
            "initiatorOccurredAt": "2025-12-16T11:27:33.888Z",
            "startedAt": "2025-12-16T11:27:33.921337642Z",
            "finishedAt": "2025-12-16T11:27:33.940535094Z",
            "settleBetIds": [
              "01KCKECPMR33GSSA5C6HAY5YKQ"
            ],
            "currentState": "SETTLE_BETS_FINISHED",
            "states": [
              {
                "state": "SETTLE_BETS_STARTED",
                "occurredAt": "2025-12-16T11:27:33.921337045Z"
              },
              {
                "state": "SETTLE_BETS_FINISHED",
                "occurredAt": "2025-12-16T11:27:33.940534430Z"
              }
            ]
          },
          {
            "type": "PAYOUT_BETS",
            "id": "01KCKEMS2QHFDHNT4Y3J1QV3VM",
            "originId": 3,
            "initiatorOccurredAt": "2025-12-16T11:27:33.973705330Z",
            "startedAt": "2025-12-16T11:27:33.975839216Z",
            "finishedAt": "2025-12-16T11:27:34.010748317Z",
            "payoutBetIds": [
              "01KCKECPMR33GSSA5C6HAY5YKQ"
            ],
            "currentState": "PAYOUT_BETS_FINISHED",
            "states": [
              {
                "state": "PAYOUT_BETS_FINISHED",
                "occurredAt": "2025-12-16T11:27:34.010747674Z"
              },
              {
                "state": "PAYOUT_BETS_STARTED",
                "occurredAt": "2025-12-16T11:27:33.975836683Z"
              }
            ]
          },
          {
            "type": "SETTLE_BETS",
            "id": "01KCKENAFQRMS78ZYFW9205VP6",
            "originId": 2,
            "initiatorOccurredAt": "2025-12-16T11:27:51.764Z",
            "startedAt": "2025-12-16T11:27:51.799958774Z",
            "finishedAt": "2025-12-16T11:27:51.821450949Z",
            "settleBetIds": [
              "01KCKECPMRTW3JS7MJZW7XVE8Q"
            ],
            "currentState": "SETTLE_BETS_FINISHED",
            "states": [
              {
                "state": "SETTLE_BETS_STARTED",
                "occurredAt": "2025-12-16T11:27:51.799957719Z"
              },
              {
                "state": "SETTLE_BETS_FINISHED",
                "occurredAt": "2025-12-16T11:27:51.821450299Z"
              }
            ]
          },
          {
            "type": "PAYOUT_BETS",
            "id": "01KCKENAHG7FS2896GMSN0WHCW",
            "originId": 3,
            "initiatorOccurredAt": "2025-12-16T11:27:51.850301864Z",
            "startedAt": "2025-12-16T11:27:51.856356639Z",
            "finishedAt": "2025-12-16T11:27:51.885986999Z",
            "payoutBetIds": [
              "01KCKECPMRTW3JS7MJZW7XVE8Q"
            ],
            "currentState": "PAYOUT_BETS_FINISHED",
            "states": [
              {
                "state": "PAYOUT_BETS_FINISHED",
                "occurredAt": "2025-12-16T11:27:51.885986516Z"
              },
              {
                "state": "PAYOUT_BETS_STARTED",
                "occurredAt": "2025-12-16T11:27:51.856354161Z"
              }
            ]
          }
        ],
        "currencyConversions": {
          "exchangeRatesUpdatedAt": "2025-12-16T11:27:51.799960949Z",
          "baseCurrency": "EUR",
          "entries": [
            {
              "baseAmount": "5.88",
              "convertedAmounts": {
                "EUR": "5.88"
              }
            },
            {
              "baseAmount": "3",
              "convertedAmounts": {
                "EUR": "3"
              }
            },
            {
              "baseAmount": "22.2",
              "convertedAmounts": {
                "EUR": "22.2"
              }
            },
            {
              "baseAmount": "6.15",
              "convertedAmounts": {
                "EUR": "6.15"
              }
            },
            {
              "baseAmount": "7.95",
              "convertedAmounts": {
                "EUR": "7.95"
              }
            },
            {
              "baseAmount": "2.8",
              "convertedAmounts": {
                "EUR": "2.8"
              }
            },
            {
              "baseAmount": "0",
              "convertedAmounts": {
                "EUR": "0"
              }
            }
          ]
        }
      }
    }
  }
}
```

</details>

<details>

<summary><strong>Rollback</strong></summary>

```json
{
"uri": "https://example.com/api/Rollback",
  "requestId": "4346664-7a36-437f-a462-f8637ggg0e93",
  "body": {
  "id": "01K6MW5CEDJPS6D3DA1923GY40",
  "occurredAt": "2025-10-03T11:08:53.098346165Z",
  "punter": {
    "id": "01K6M9E751N96VZ11JQY91MTXB",
    "externalId": "w2"
  },
  "tenantId": "5997b951-c503-412f-91fb-c5226c8b767e",
  "gameId": 3,
  "contentType": "BETSLIP",
  "content": {
    "activityType": "PREPARE_PLACE_BETSLIP",
    "activityId": "01K6MW5CEDJPS6D3DA1923GY40",
    "betslipId": "01K6MW5CAXXTBR136WME6S02ZB",
    "betslip": {
      "id": "01K6MW5CAXXTBR136WME6S02ZB",
      "context": {
        "providerBetslipId": "01K6MW5C6GK2S2PKXMKXXPTYGW",
        "providerId": 4340,
        "tenantId": "5997b951-c503-412f-91fb-c5226c8b767e",
        "gameId": 3,
        "currency": "BAM"
      },
      "bets": [
        {
          "id": "01K6MW5CDF3S0BJH1816K4GZ3Y",
          "selections": [
            {
              "phase": "OPEN",
              "id": "1",
              "event": {
                "id": "E:212563622310871040",
                "baseName": "Cardiff City vs. Hull City",
                "derivedName": "Cardiff City vs. Hull City",
                "tenantName": "abc",
                "startTime": "2025-02-25T19:45:00Z"
              },
              "category": {
                "id": "PS:PREMATCH/S:126431650224537600/C:126431779073556481/T:160589462852829184",
                "baseName": "Prematch/Soccer/England/Championship",
                "derivedName": "Prematch/Soccer/England/Championship",
                "tenantName": "abc"
              },
              "competitors": [],
              "markets": [
                {
                  "id": "M:157802194434031616/EM:213094469531402242",
                  "baseName": "1x2/1x2",
                  "derivedName": "1x2/1x2",
                  "tenantName": "abc",
                  "outcome": {
                    "id": "O:157802518703833089/EMO:213094469531402247",
                    "baseName": "X/D",
                    "derivedName": "X/D",
                    "tenantName": "abc"
                  }
                }
              ],
              "odds": 20000,
              "isBanker": false,
              "gameContext": {
                "event": {},
                "feeds": [
                  {
                    "feedId": 1,
                    "feedType": 2,
                    "marketId": "M:157802194434031616/EM:242822278944260098",
                    "feedEventId": "sr:match:62201956",
                    "feedSportId": "sr:sport:1"
                  }
                ],
                "category": {
                  "code": "INT"
                }
              }
            }
          ],
          "selectedSystems": [
            1
          ],
          "bonusWallets": [],
          "payin": {
            "stake": "1",
            "gameBonuses": [],
            "total": "1"
          },
          "pWinnings": {
            "min": {
              "win": "2",
              "bonuses": [],
              "taxes": [],
              "total": "2"
            },
            "max": {
              "win": "2",
              "bonuses": [],
              "taxes": [],
              "total": "2"
            }
          },
          "status": {
            "phase": "STARTED",
            "resolutionStatus": "OPEN"
          },
          "gameContext": {}
        }
      ],
      "b2b": [],
      "codes": [
        {
          "type": "BARCODE",
          "id": "Ag2FWYLzeb"
        }
      ],
      "origins": [
        {
          "type": "PUNTER_IDENTITY",
          "id": 1,
          "punterIdentityId": 1
        }
      ],
      "punterIdentities": [
        {
          "type": "ONLINE_PLAYER_WEB",
          "id": 1,
          "player": {
            "type": "THIRD_PARTY_PLAYER",
            "punterId": "01K6M9E751N96VZ11JQY91MTXB",
            "nickname": "w2-nickname",
            "b2b": {
              "id": "w2",
              "sessionToken": "680210d253fb6"
            },
            "brandId": "c885621b-1569-4c8e-a5c0-35dea0125aa2",
            "agentId": "9956a4d8-f79e-435c-b7aa-fe32d4301978",
            "affiliateId": "e7aa4acf-5882-4116-9bbb-e2916f68a7d3"
          },
          "sys": {
            "ip": "77.77.212.86",
            "agent": "PostmanRuntime/7.48.0"
          }
        }
      ],
      "status": {
        "phase": "REJECTED"
      },
      "activities": [
        {
          "type": "PREPARE_PLACE_BETSLIP",
          "id": "01K6MW5CEDJPS6D3DA1923GY40",
          "originId": 1,
          "initiatorOccurredAt": "2025-10-03T11:08:52.511Z",
          "valsBag": {
            "b2bVal": "test"
          },
          "configuration": {
            "autoConfirm": false
          },
          "startedAt": "2025-10-03T11:08:53.069016430Z",
          "betIds": [
            "01K6MW5CDF3S0BJH1816K4GZ3Y"
          ],
          "currentState": "PREPARE_PLACE_BETSLIP_REJECT_STARTED",
          "states": [
            {
              "state": "PREPARE_PLACE_BETSLIP_STARTED",
              "occurredAt": "2025-10-03T11:08:53.069009988Z"
            },
            {
              "state": "PREPARE_PLACE_BETSLIP_REJECT_STARTED",
              "occurredAt": "2025-10-03T11:08:53.090286324Z"
            }
          ]
        }
      ],
      "currencyConversions": {
        "exchangeRatesUpdatedAt": "2025-10-03T10:02:00.886242Z",
        "baseCurrency": "BAM",
        "entries": [
          {
            "baseAmount": "1",
            "convertedAmounts": {
              "EUR": "0.51"
            }
          },
          {
            "baseAmount": "2",
            "convertedAmounts": {
              "EUR": "1.02"
            }
          }
        ]
      }
    }
  }
}
```

</details>

## 14. Examples (Casino)

Examples of **requests** to be received by the operator platform in case of **casino** contentType

<details>

<summary><strong>BET (Debit)</strong></summary>

```json
{
  "id": "01JMKN0C7GR5AF9QG86C06BFJJ",
  "tenantId": "aa3d20bf-e0e0-4a8e-ad9f-dd4c663227c4",
  "gameId": 1,
  "contentType": "CASINO",
  "amount": "15",
  "currency": "EUR",
  "punter": {
    "id": "01JMKN7PGRHK548QDNHQRBWA2E",
    "externalId": "111222333",
    "sessionToken": "UpFIEz4VePCuvSGBOpjRZITxCYyG3Muo0DD5SXeMqUQR2CJRXLmAtu4JWDKL6mcL"
  },
  "occurredAt": "2025-02-21T07:02:02.063236142Z",
  "content": {
    "type": "BET",
    "transaction": {
      "id": "01JMKN0C7F9RR5N3XJ1YPWQ4P9",
      "platformId": "01JMKN0C7GR5AF9QG86C06BFJJ",
      "round": {
        "id": "01JMKN0C9RYHBQQ0G8A8JS4GPX",
        "platformId": "01JMKN0C9RZH0SAND32DYCHSYV",
        "status": "OPEN"
      },
      "tenantId": "aa3d20bf-e0e0-4a8e-ad9f-dd4c663227c4",
      "punterId": "01JMKN0C7HJSMDRJ488PNCTN3V",
      "game": {
        "id": "01JMKN7PH9S6Q1DVMRKMRKZ7B6",
        "platformId": 1011,
        "code": "Horus Treasure",
        "providerCode": "Nsoft"
      },
      "type": "REGULAR_BET",
      "jackpotContributions": [
        {
          "id": "1",
          "name": "a",
          "amount": "0.0000002001"
        }
      ],
      "bonus": {
        "id": "01JMKN0C9N6ZKMQ0KNH7RVZ1CW",
        "platformId": "01JMKN0C9N89WWZZG7NP02VCVV"
      },
      "amount": "15",
      "deductibleAmount": "15",
      "currency": "EUR",
      "creationActivity": {
        "id": "01JMKN0C9QDRWC85GM3QHC79ZF",
        "state": "STARTED",
        "occurredAtOnProvider": "2025-02-21T07:02:01.783897435Z"
      },
      "vendorData": "",
      "createdAt": "2025-02-21T07:02:02.063236142Z",
      "updatedAt": "2025-02-21T07:02:02.063236142Z"
    }
  },
  "b2bVal": "b2bval"
}
```

</details>

<details>

<summary><strong>WIN (Credit)</strong></summary>

```json
{
  "id": "01JMKN7PGQVWXPWBQZVX9T19X9",
  "tenantId": "149d2c97-0f21-4120-b144-0ddd2bab75f8",
  "gameId": 1,
  "contentType": "CASINO",
  "amount": "15",
  "currency": "EUR",
  "punter": {
    "id": "01JMKN7PGRHK548QDNHQRBWA2E",
    "externalId": "111222333",
    "sessionToken": "UpFIEz4VePCuvSGBOpjRZITxCYyG3Muo0DD5SXeMqUQR2CJRXLmAtu4JWDKL6mcL"
  },
  "occurredAt": "2025-02-21T07:06:01.707852766Z",
  "content": {
    "type": "WIN",
    "transaction": {
      "id": "01JMKN7PGMMGEK0PYH3KHMTXWT",
      "platformId": "01JMKN7PGQVWXPWBQZVX9T19X9",
      "round": {
        "id": "01JMKN7PK9B75X70EHNCZMC3YH",
        "platformId": "01JMKN7PK9C1D7Z99HHFVFW9QS",
        "status": "OPEN"
      },
      "tenantId": "149d2c97-0f21-4120-b144-0ddd2bab75f8",
      "punterId": "01JMKN7PGRHK548QDNHQRBWA2E",
      "game": {
        "id": "01JMKN7PH9S6Q1DVMRKMRKZ7B6",
        "platformId": 1011,
        "code": "Horus Treasure",
        "providerCode": "Nsoft"
      },
      "type": "REGULAR_WIN",
      "bonus": {
        "id": "01JMKN7PK71MXD7N3A952YEGHF",
        "platformId": "01JMKN7PK7979QABTP93WD0XYA"
      },
      "amount": "15",
      "currency": "EUR",
      "promo": {
        "type": "CASH_DROP",
        "campaignId": "1",
        "reference": "33208532-3f83-4c99-9dd9-53a01ddf0305",
        "winAmount": "12.32"
      },
      "creationActivity": {
        "id": "01JMKN7PK9WV7579PCV87EEB2G",
        "state": "STARTED",
        "occurredAtOnProvider": "2025-02-21T07:06:01.705039918Z"
      },
      "vendorData": "",
      "createdAt": "2025-02-21T07:06:01.707852766Z",
      "updatedAt": "2025-02-21T07:06:01.707852766Z"
    }
  },
  "b2bVal": "b2bval"
}
```

</details>

<details>

<summary><strong>BATCH (Debit or Credit)</strong></summary>

```json
{
  "id": "01JMKN7PGQVWXPWBQZVX9T19X9",
  "tenantId": "149d2c97-0f21-4120-b144-0ddd2bab75f8",
  "gameId": 1,
  "contentType": "CASINO",
  "amount": "15",
  "currency": "EUR",
  "punter": {
    "id": "01JMKN7PGRHK548QDNHQRBWA2E",
    "externalId": "111222333",
    "sessionToken": "UpFIEz4VePCuvSGBOpjRZITxCYyG3Muo0DD5SXeMqUQR2CJRXLmAtu4JWDKL6mcL"
  },
  "occurredAt": "2025-02-21T07:06:01.707852766Z",
  "content": {
    "type": "BATCH",
    "transaction": {
      "platformId": "01JMKN0C7F9RR5N3XJ1YPWQ4P9",
      "tenantId": "149d2c97-0f21-4120-b144-0ddd2bab75f8",
      "punterId": "01JMKN7PGRHK548QDNHQRBWA2E",
      "amount": "25",
      "currency": "EUR",
      "bets": [
        {
          "id": "01JMKN0C7F9RR5N3XJ1YPWQ4P9",
          "platformId": "01JMKN0C7GR5AF9QG86C06BFJJ",
          "round": {
            "id": "01JMKN0C9RYHBQQ0G8A8JS4GPX",
            "platformId": "01JMKN0C9RZH0SAND32DYCHSYV",
            "status": "OPEN"
          },
          "game": {
            "id": "01JMKN7PH9S6Q1DVMRKMRKZ7B6",
            "platformId": 1011,
            "code": "Horus Treasure",
            "providerCode": "Nsoft"
          },
          "type": "REGULAR_BET",
          "jackpotContributions": [
            {
              "id": "1",
              "name": "a",
              "amount": "0.0000002001"
            }
          ],
          "bonus": {
            "id": "01JMKN0C9N6ZKMQ0KNH7RVZ1CW",
            "platformId": "01JMKN0C9N89WWZZG7NP02VCVV"
          },
          "amount": "15",
          "absoluteAmount": "15",
          "vendorData": ""
        }
      ],
      "wins": [
        {
          "id": "01JMKN7PGMMGEK0PYH3KHMTXWT",
          "platformId": "01JMKN7PGQVWXPWBQZVX9T19X9",
          "round": {
            "id": "01JMKN7PK9B75X70EHNCZMC3YH",
            "platformId": "01JMKN7PK9C1D7Z99HHFVFW9QS",
            "status": "OPEN"
          },
          "game": {
            "id": "01JMKN7PH9S6Q1DVMRKMRKZ7B6",
            "platformId": 1011,
            "code": "Horus Treasure",
            "providerCode": "Nsoft"
          },
          "type": "REGULAR_WIN",
          "bonus": {
            "id": "01JMKN7PK71MXD7N3A952YEGHF",
            "platformId": "01JMKN7PK7979QABTP93WD0XYA"
          },
          "amount": "15",
          "vendorData": ""
        }
      ],
      "creationActivity": {
        "id": "01JMKN0C9QDRWC85GM3QHC79ZF",
        "state": "STARTED",
        "occurredAtOnProvider": "2025-02-21T07:02:01.783897435Z"
      },
      "vendorData":{},
      "createdAt": "2025-02-21T07:02:02.063236142Z",
      "updatedAt": "2025-02-21T07:02:02.063236142Z"
    }
  },
  "b2bVal": "b2bval"
}
```

</details>

<details>

<summary><strong>BET_ROLLBACK (Credit)</strong></summary>

```json
{
  "id": "01JMKN62D6M0MQTY9305CGWQ3E",
  "tenantId": "070e103b-a86a-4d83-be3a-48bbef285946",
  "gameId": 1,
  "contentType": "CASINO",
  "amount": "15",
  "currency": "EUR",
  "punter": {
    "id": "01JMKN7PGRHK548QDNHQRBWA2E",
    "externalId": "111222333",
    "sessionToken": "UpFIEz4VePCuvSGBOpjRZITxCYyG3Muo0DD5SXeMqUQR2CJRXLmAtu4JWDKL6mcL"
  },
  "occurredAt": "2025-02-21T07:05:08.263001198Z",
  "content": {
    "type": "BET_ROLLBACK",
    "transaction": {
      "id": "01JMKN620AN1ET9E860PCRHVAC",
      "platformId": "01JMKN620BR1G37KEKV9ZX07VD",
      "round": {
        "id": "01JMKN623AH35R57TAS8HDNNCX",
        "platformId": "01JMKN623AC6MVM5A6D9JGA5T7",
        "status": "OPEN"
      },
      "tenantId": "070e103b-a86a-4d83-be3a-48bbef285946",
      "punterId": "01JMKN620CV509BAZEA3JHN8Z0",
      "game": {
        "id": "01JMKN7PH9S6Q1DVMRKMRKZ7B6",
        "platformId": 1011,
        "code": "Horus Treasure",
        "providerCode": "Nsoft"
      },
      "type": "REGULAR_BET",
      "jackpotContributions": [
        {
          "id": "1",
          "name": "a",
          "amount": "0.0000002001"
        }
      ],
      "bonus": {
        "id": "01JMKN6235D8K01WAVM9K86059",
        "platformId": "01JMKN6235SH735K8JZJKETY03"
      },
      "amount": "15",
      "deductibleAmount": "15",
      "currency": "EUR",
      "creationActivity": {
        "id": "01JMKN62383CFX0J0A65JDACEH",
        "state": "FINISHED",
        "occurredAtOnProvider": "2025-02-21T07:05:07.944327587Z"
      },
      "rollbackActivity": {
        "id": "01JMKN62D6M0MQTY9305CGWQ3E",
        "state": "STARTED",
        "occurredAtOnProvider": "2025-02-21T07:05:08.262876960Z",
        "createdAt": "2025-02-21T07:05:08.263001198Z"
      },
      "vendorData":"",
      "createdAt": "2025-02-21T07:05:08.261966221Z",
      "updatedAt": "2025-02-21T07:05:08.261966221Z"
    }
  },
  "b2bVal": "b2bval"
}
```

</details>

<details>

<summary><strong>WIN_ROLLBACK (Debit)</strong></summary>

```json
{
  "id": "01JMKN7PGQVWXPWBQZVX9T19X9",
  "tenantId": "149d2c97-0f21-4120-b144-0ddd2bab75f8",
  "gameId": 1,
  "contentType": "CASINO",
  "amount": "15",
  "currency": "EUR",
  "punter": {
    "id": "01JMKN7PGRHK548QDNHQRBWA2E",
    "externalId": "111222333",
    "sessionToken": "UpFIEz4VePCuvSGBOpjRZITxCYyG3Muo0DD5SXeMqUQR2CJRXLmAtu4JWDKL6mcL"
  },
  "occurredAt": "2025-02-21T07:06:01.707852766Z",
  "content": {
    "type": "WIN_ROLLBACK",
    "transaction": {
      "id": "01JMKN7PGMMGEK0PYH3KHMTXWT",
      "platformId": "01JMKN7PGQVWXPWBQZVX9T19X9",
      "round": {
        "id": "01JMKN7PK9B75X70EHNCZMC3YH",
        "platformId": "01JMKN7PK9C1D7Z99HHFVFW9QS",
        "status": "OPEN"
      },
      "tenantId": "149d2c97-0f21-4120-b144-0ddd2bab75f8",
      "punterId": "01JMKN7PGRHK548QDNHQRBWA2E",
      "game": {
        "id": "01JMKN7PH9S6Q1DVMRKMRKZ7B6",
        "platformId": 1011,
        "code": "Horus Treasure",
        "providerCode": "Nsoft"
      },
      "type": "REGULAR_WIN",
      "bonus": {
        "id": "01JMKN7PK71MXD7N3A952YEGHF",
        "platformId": "01JMKN7PK7979QABTP93WD0XYA"
      },
      "amount": "15",
      "currency": "EUR",
      "creationActivity": {
        "id": "01JMKN7PK9WV7579PCV87EEB2G",
        "state": "FINISHED",
        "occurredAtOnProvider": "2025-02-21T07:06:01.705039918Z"
      },
      "rollbackActivity": {
        "id": "01JMKN62D6M0MQTY9305CGWQ3E",
        "state": "STARTED",
        "occurredAtOnProvider": "2025-02-21T07:05:08.262876960Z",
        "createdAt": "2025-02-21T07:05:08.263001198Z"
      },
      "vendorData": "",
      "createdAt": "2025-02-21T07:06:01.707852766Z",
      "updatedAt": "2025-02-21T07:06:01.707852766Z"
    }
  },
  "b2bVal": "b2bval"
}
```

</details>

<details>

<summary><strong>Rollback</strong></summary>

```json
{
  "id": "01JMKN42VDSRYP0YWQ4YG0M3TZ",
  "occurredAt": "2025-02-21T07:04:03.628520914Z",
  "punter": {
    "id": "01JMKN7PGRHK548QDNHQRBWA2E",
    "externalId": "111222333",
    "sessionToken": "UpFIEz4VePCuvSGBOpjRZITxCYyG3Muo0DD5SXeMqUQR2CJRXLmAtu4JWDKL6mcL"
  },
  "tenantId": "92b7672a-2f99-46d3-b33e-02820ee458f5"
}
```

</details>

se
