diff --git a/pages/hub/apps/guides/freebets/_meta.json b/pages/hub/apps/guides/freebets/_meta.json
index 682aacf..ed21f4b 100644
--- a/pages/hub/apps/guides/freebets/_meta.json
+++ b/pages/hub/apps/guides/freebets/_meta.json
@@ -5,5 +5,7 @@
"type": "hidden",
"display": "hidden"
},
- "use-freebets": "Use Freebets"
+ "use-freebets": "Use Freebets",
+ "third-party": "Admin Third-Party Integration",
+ "types": "Data types"
}
diff --git a/pages/hub/apps/guides/freebets/third-party.mdx b/pages/hub/apps/guides/freebets/third-party.mdx
new file mode 100644
index 0000000..e71e8ab
--- /dev/null
+++ b/pages/hub/apps/guides/freebets/third-party.mdx
@@ -0,0 +1,225 @@
+# Third-Party integration overview
+
+You can manage the configuration and issuance of free bets through our admin panel. Additionally, we provide a special API that allows for third-party integration with your systems without the need to use our admin panel.
+
+Please refer to the **Bonus External** section in the [documentation](https://api.onchainfeed.org/api/v1/public/gateway/docs#/Bonus%20External/BonusExternalController_createFreebetOffer).
+
+
+## Authorization
+Access to the API is provided via an API token, which should be included in the `x-bonus-api-token` header. To obtain a token, please [contact us](https://azuro.typeform.com/to/v80viKml).
+
+Example:
+```bash
+curl -X 'POST' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/offer/freebet/create' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api-token' \
+ -H 'Content-Type: application/json'
+```
+
+## General methods
+
+### Create freebet offer
+**Endpoint:** `/api/v1/public/bonus/external/offer/freebet/create`
+
+**Request:** [CreateFreebetOfferDto](/hub/apps/guides/freebets/types#createfreebetofferdto)
+
+**Response:** [OfferResponse](/hub/apps/guides/freebets/types#offerresponse)
+
+**Example:**
+```bash
+curl -X 'POST' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/offer/freebet/create' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api_token' \
+ -H 'Content-Type: application/json' \
+ -d '{
+ "name": "Offer Name",
+ "key": "offer_key",
+ "publicCustomData": {
+ "color": 2321,
+ "publicName": "Test freebet"
+ },
+ "description": "description text",
+ "settings": {
+ "bonusType": "AllWin",
+ "feeSponsored": true,
+ "betRestriction": {
+ "betType": "All",
+ "minOdds": "1.5",
+ "maxOdds": "2.0"
+ },
+ "eventRestriction": {
+ "eventStatus": "All",
+ "eventFilter": {
+ "exclude": false,
+ "filter": [
+ {
+ "sportId": "1",
+ "leagues": [
+ "Premier League",
+ "La Liga"
+ ],
+ "markets": [
+ {
+ "marketId": 1,
+ "gamePeriodId": 1,
+ "gameTypeId": 1
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "periodOfValidityMs": 86400000
+ }
+}'
+```
+
+### Create bonus by offer
+**Endpoint:** `/api/v1/public/bonus/external/create`
+
+**Request:** [CreateBonusDto](/hub/apps/guides/freebets/types#createbonusdto)
+
+**Response:** [BonusesResponse](/hub/apps/guides/freebets/types#bonusesresponse)
+
+**Example:**
+```bash
+curl -X 'POST' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/create' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api_token' \
+ -H 'Content-Type: application/json' \
+ -d '{
+ "offerId": "f3f2e850-b5d4-11ef-ac7e-96584d5248b5",
+ "poolId": "5cf0db52-1a86-46d3-abbf-df262c5be39c",
+ "recipients": [
+ {
+ "address": "f3f2e850-b5d4-11ef-ac7e-96584d5248b5",
+ "amount": "100"
+ }
+ ],
+ "campaignGroup": "campaign-group-1"
+}'
+```
+
+### Get offers list
+**Endpoint:** `/api/v1/public/bonus/external/offer/list`
+
+**Response:** [OffersResponse](/hub/apps/guides/freebets/types#offersresponse)
+
+**Example:**
+```bash
+curl -X 'GET' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/offer/list' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api_token'
+```
+
+### Get bonuses
+**Endpoint:** `/api/v1/public/bonus/external/list`
+
+**Response:** [BonusesResponse](/hub/apps/guides/freebets/types#bonusesresponse)
+
+**Example:**
+```bash
+curl -X 'GET' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/list' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api_token'
+```
+
+## Statistic methods
+
+These methods display statistics on the bonuses issued
+
+### Get bonus statistics by campaign
+
+**Endpoint:** `/api/v1/public/bonus/external/statistics/freebet/by-campaign`
+
+**Response:** [BonusStatisticsByCampaignResponse](/hub/apps/guides/freebets/types#bonusstatisticsbycampaignresponse)
+
+**Example:**
+```bash
+curl -X 'GET' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/statistics/freebet/by-campaign' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api_token'
+```
+
+### Get bonus statistics by pool
+**Endpoint:** `/api/v1/public/bonus/external/statistics/freebet/by-pool`
+
+**Response:** [BonusStatisticsByPoolResponse](/hub/apps/guides/freebets/types#bonusstatisticsbypoolresponse)
+
+**Example:**
+```bash
+curl -X 'GET' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/statistics/freebet/by-pool' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api_token'
+```
+
+### Get pools list
+**Endpoint:** `/api/v1/public/bonus/external/pool/list`
+
+**Response:** [PoolsResponse](/hub/apps/guides/freebets/types#poolsresponse)
+
+**Example:**
+```bash
+curl -X 'GET' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/pool/list' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api_token'
+```
+
+## Utils methods
+
+These methods function as utilities for collecting supplementary information required when constructing an eventFilter
+
+### Get unique markets combinations
+**Endpoint:** `/api/v1/public/bonus/external/utils/markets-combinations`
+
+**Parameters:**
+- `sportId` (required): Sport ID
+
+**Response:** [SportsUniqueMarketsCombinationsResponse](/hub/apps/guides/freebets/types#sportsuniquemarketscombinationsresponse)
+
+**Example:**
+```bash
+curl -X 'GET' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/utils/markets-combinations?sportId=33' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api_token'
+```
+
+### Get actual sport IDs
+**Endpoint:** `/api/v1/public/bonus/external/utils/markets-combinations/sports`
+
+**Response:** [ActualSportIdsResponse](/hub/apps/guides/freebets/types#actualsportidsresponse)
+
+**Example:**
+```bash
+curl -X 'GET' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/utils/markets-combinations/sports' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api_token'
+```
+
+### Get actual leagues
+**Endpoint:** `/api/v1/public/bonus/external/utils/leagues`
+
+**Parameters:**
+- `sportIds` (optional): Array of sport IDs
+- `startsAtFrom` (optional): From time (timestamp)
+- `startsAtTo` (optional): To time (timestamp)
+
+**Response:** [ActualLeaguesResponse](/hub/apps/guides/freebets/types#actualleaguesresponse)
+
+**Example:**
+```bash
+curl -X 'GET' \
+ 'https://api.onchainfeed.org/api/v1/public/bonus/external/utils/leagues?sportIds=33&startsAtFrom=1742216019000&startsAtTo=1743339219000' \
+ -H 'accept: application/json' \
+ -H 'x-bonus-api-token: api_token'
+```
diff --git a/pages/hub/apps/guides/freebets/types.mdx b/pages/hub/apps/guides/freebets/types.mdx
new file mode 100644
index 0000000..b51841f
--- /dev/null
+++ b/pages/hub/apps/guides/freebets/types.mdx
@@ -0,0 +1,754 @@
+import { Callout } from 'components'
+import { Tab, Tabs } from 'nextra-theme-docs'
+
+# Data types
+
+
+ This diagram serves as a supplement to the api documentation.
+ The up-to-date diagrams can be found in the documentation.
+
+
+#### Development
+https://dev-api.onchainfeed.org/api/v1/public/gateway/docs
+#### Production
+https://api.onchainfeed.org/api/v1/public/gateway/docs
+
+
+## Enums
+
+### BonusType
+
+
+| Value | Description |
+|-------|-------------|
+| **FreeBet** | Represents a free bet bonus type |
+
+
+ ```typescript
+ enum BonusType {
+ FreeBet = 'FreeBet'
+ }
+ ```
+
+
+
+### BonusStatus
+
+
+| Value | Description |
+|-------|-------------|
+| **Used** | The bonus has been used |
+| **Available** | The bonus is available for use |
+
+
+ ```typescript
+ enum BonusStatus {
+ Used = 'Used',
+ Available = 'Available'
+ }
+ ```
+
+
+
+### FreebetBonusType
+
+
+| Value | Description |
+|-------|-------------|
+| **OnlyWin** | The bettor receives only the winnings; the stake amount is returned to the pool. `isSponsoredBetReturnable = true` |
+| **AllWin** | The bettor receives both the full stake and the winnings; the stake amount is not returned to the pool. `isSponsoredBetReturnable = false` |
+
+
+ ```typescript
+ enum FreebetBonusType {
+ OnlyWin = 'OnlyWin',
+ AllWin = 'AllWin'
+ }
+ ```
+
+
+
+### BetRestrictionBetType
+
+
+| Value | Description |
+|-------|-------------|
+| **All** | All bet types are allowed |
+| **Ordinar** | Only ordinar bets are allowed |
+| **Combo** | Only combo bets are allowed |
+
+
+ ```typescript
+ enum BetRestrictionBetType {
+ All = 'All',
+ Ordinar = 'Ordinar',
+ Combo = 'Combo'
+ }
+ ```
+
+
+
+### EventRestrictionEventStatus
+
+
+| Value | Description |
+|-------|-------------|
+| **All** | All event statuses are allowed |
+| **Live** | Only live events are allowed |
+| **Prematch** | Only prematch events are allowed |
+
+
+ ```typescript
+ enum EventRestrictionEventStatus {
+ All = 'All',
+ Live = 'Live',
+ Prematch = 'Prematch'
+ }
+ ```
+
+
+
+## Common types
+
+### FreebetSettings
+
+
+| Field | Type | Description | Required |
+|-------|------|-------------|----------|
+| **bonusType** | [FreebetBonusType](#freebetbonustype) | Type of the freebet bonus | Yes |
+| **feeSponsored** | boolean | Indicates if fee is sponsored | Yes |
+| **betRestriction** | [BetRestriction](#betrestriction) | Restrictions applied to bets | Yes |
+| **eventRestriction** | [EventRestriction](#eventrestriction) | Restrictions applied to events | Yes |
+| **periodOfValidityMs** | number | Period of validity in milliseconds | Yes |
+
+
+ ```typescript
+ interface FreebetSettings {
+ bonusType: FreebetBonusType;
+ feeSponsored: boolean;
+ betRestriction: BetRestriction;
+ eventRestriction: EventRestriction;
+ periodOfValidityMs: number;
+ }
+ ```
+
+
+
+### BetRestriction
+
+
+| Field | Type | Description | Required |
+|-------|------|-------------|----------|
+| **betType** | [BetRestrictionBetType](#betrestrictionbettype) | Type of bet restriction | Yes |
+| **minOdds** | string | Minimum odds allowed | Yes |
+| **maxOdds** | string | Maximum odds allowed | No |
+
+
+ ```typescript
+ interface BetRestriction {
+ betType: BetRestrictionBetType;
+ minOdds: string;
+ maxOdds?: string;
+ }
+ ```
+
+
+
+### EventRestriction
+
+
+| Field | Type | Description | Required |
+|-------|------|-------------|----------|
+| **eventStatus** | [EventRestrictionEventStatus](#eventrestrictioneventstatus) | Status of event restriction | Yes |
+| **eventFilter** | [EventFilter](#eventfilter) | Filter for events | No |
+
+
+ ```typescript
+ interface EventRestriction {
+ eventStatus: EventRestrictionEventStatus;
+ eventFilter?: EventFilter;
+ }
+ ```
+
+
+
+### EventFilter
+
+
+| Field | Type | Description | Required |
+|-------|------|-------------|----------|
+| **exclude** | boolean | If `exclude = true`, it means `"allow all, except."`. If `exclude = false`, it means `"deny all, except."` | Yes |
+| **filter** | [FilterItem](#filteritem)[] | List of filter items | Yes |
+
+
+ ```typescript
+ interface EventFilter {
+ exclude: boolean;
+ filter: FilterItem[];
+ }
+ ```
+
+
+
+### FilterItem
+
+
+| Field | Type | Description | Required |
+|-------|------|-------------|----------|
+| **sportId** | string | ID of the sport | Yes |
+| **leagues** | string[] | List of leagues | No |
+| **markets** | [Market](#market)[] | List of markets | No |
+
+
+ ```typescript
+ interface FilterItem {
+ sportId: string;
+ leagues?: string[];
+ markets?: Market[];
+ }
+ ```
+
+
+
+### Market
+
+
+| Field | Type | Description | Required |
+|-------|------|-------------|----------|
+| **marketId** | number | ID of the market | Yes |
+| **gamePeriodId** | number | ID of the game period | Yes |
+| **gameTypeId** | number | ID of the game type | Yes |
+
+
+ ```typescript
+ interface Market {
+ marketId: number;
+ gamePeriodId: number;
+ gameTypeId: number;
+ }
+ ```
+
+
+
+## Public types
+
+### GetClientBonusesResponse
+
+
+| Field | Type | Description | Required |
+|-------|------|-------------|----------|
+| **bonuses** | [ClientBonus](#clientbonus)[] | Array of bonus objects | Yes |
+
+
+ ```typescript
+ interface GetClientBonusesResponse {
+ bonuses: ClientBonus[];
+ }
+ ```
+
+
+
+### ClientBonus
+
+
+| Field | Type | Description | Required |
+|-------|------|-------------|----------|
+| **id** | string | Unique identifier of the bonus | Yes |
+| **bonusType** | [BonusType](#bonustype) | Type of the bonus | Yes |
+| **freebetParam** | [FreebetParam](#freebetparam) | Parameters specific to freebet | Yes |
+| **publicCustomData** | object | This field is custom and arbitrary, meaning it is defined by the offer creators. It is used for any additional technical information that may be needed for integration with your systems. It prohibits dangerous constructs such as `