{
  "openapi": "3.1.0",
  "info": {
    "description": "# Overview\n\n* **Version:** 2.0.0\n* **Servers**: `https://store.xsolla.com/api`\n* **[Contact Us by Email](mailto:integration@xsolla.com)**\n* **Contact URL:** https://xsolla.com/\n* **Required TLS version:** 1.2\n\nLiveOps is a toolkit for driving ongoing player engagement through promotions and personalized offers.\n\nUse the API to manage the following features:\n\n* **Promotions** — create and manage coupons, promo codes, discounts, and bonus campaigns.\n* **Personalization** — specify the conditions for displaying the item catalog and applying promotions only for certain authorized users.\n* **Promotion limits** — set a limit on how many times a promotion can be used by a user and configure scheduled resets for these limits.\n* **Reward chains & Value points** — configure reward progressions tied to value point accumulation.\n* **Daily chains** — set up recurring daily rewards to motivate regular logins.\n* **Offer chains** — build sequential purchase offers with per-step pricing and free reward options.\n* **Upsell** — a sales method in which the user is offered to buy an item with additional value.\n\n## API calls\n\nThe API is divided into the **following groups**:\n\n* **<nt>Admin</nt>** — calls for creating, updating, activating, and deleting campaigns and chain configurations. Authenticated via [basic access authentication](https://developers.xsolla.com/payment-ui-and-flow/payment-ui/how-to-get-payment-token/#payments_solution_get_user_auth_token_basic_auth) with your merchant or project credentials.\n* **<nt>Client</nt>** — calls for retrieving available promotions, getting active chains, redeeming codes, and claiming rewards on behalf of authenticated end users. Authenticated via user JWT.\n\n# Authentication\n\nAPI calls require authentication either on behalf of a user or on behalf of a project. The authentication scheme used is specified in the **Security** section in the description of each call.\n\n## Authentication using user's JWT\n\nUser's JWT authentication is used when a request is sent from a browser, mobile application, or game. By default, the `XsollaLoginUserJWT` scheme is applied. For details on how to create a token, see the [Xsolla Login API documentation](/api/login/authentication-schemes#getting-user-token).\n\nThe token is passed in the `Authorization` header in the following format: `Authorization: Bearer <user_JWT>`, where `<user_JWT>` is the user token. The token identifies the user and provides access to personalized data. You can try this call using the following test token:\n```\neyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI\n```\nAlternatively, you can use a [token for opening the payment UI](/api/pay-station/token/create-token).\n\n## Basic HTTP authentication\n\nBasic HTTP authentication is used for server-to-server interactions, when an API call is sent directly from your server rather than from a user's browser or mobile application. HTTP Basic authentication with an [API key](/api/getting-started/#api_keys_overview) is typically used.\n\n<div class=\"note\"><b>Note</b><br><br>The API key is confidential and must not be stored or used in client applications.</div>\n\nWith basic server-side authentication, all API requests must include the following header:\n\n- for `basicAuth` — `Authorization: Basic <your_authorization_basic_key>`, where `your_authorization_basic_key` is the `project_id:api_key` pair encoded in Base64\n- for `basicMerchantAuth` — `Authorization: Basic <your_authorization_basic_key>`, where `your_authorization_basic_key` is the `merchant_id:api_key` pair encoded in Base64\n\nYou can find the parameter values in [Publisher Account](https://publisher.xsolla.com/):\n\n- `merchant_id` is displayed:\n  - In **Company settings > Company**.\n  - In the URL in the browser address bar on any Publisher Account page. The URL has the following format: `https://publisher.xsolla.com/<merchant_id>`.\n- `project_id` is displayed:\n  - Next to the project name in Publisher Account.\n  - In the URL in the browser address bar when working on a project in Publisher Account. The URL has the following format: `https://publisher.xsolla.com/<merchant_id>/projects/<project_id>`.\n- `api_key` is shown in Publisher Account only at the time of creation and must be stored securely on your side. You can create an API key in the following sections:\n  - [Company settings > API keys](https://publisher.xsolla.com/0/settings/api_key)\n  - [Project settings > API key](https://publisher.xsolla.com/0/projects/0/edit/api_key)\n\n<div class=\"notice\"><b>Notice</b><br><br>If a required API call doesn't include the <code>project_id</code> path parameter, use an API key that is valid across all company projects for authorization.</div>\n\nFor more information about working with API keys, see the [API references](/api/getting-started/#api_keys_overview).\n\n## Authentication with guest access support\n\nThe `AuthForCart` authentication scheme is used for cart purchases and supports two modes:\n\n1. **Authentication with a user's JWT.** The token is passed in the `Authorization` header in the following format: `Authorization: Bearer <user_JWT>`, where `<user_JWT>` is the user token. The token identifies the user and provides access to personalized data. You can try this call using the following test token:\n```\neyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI\n```\nAlternatively, you can use a [token for opening the payment UI](/api/pay-station/token/create-token).\n\n2. **Simplified mode without Authorization header.** This mode is used only for unauthorized users and can be applied only for [game key sales](/doc/buy-button/how-to/set-up-authentication/#guides_buy_button_selling_items_not_authenticated_users). Instead of a token, the request must include the following headers:\n   - `x-unauthorized-id` with a request ID\n   - `x-user` with the user's email address encoded in Base64\n\n## Useful links\n\n- [API calls by interaction model](https://developers.xsolla.com/api/catalog/)\n- [Endpoint types](https://developers.xsolla.com/api/catalog/)\n- [Errors handling](https://developers.xsolla.com/api/catalog/)\n- [API keys](https://developers.xsolla.com/api/catalog/)\n\n# Core entity structure\n\nItems of all types (virtual items, bundles, virtual currency, and keys) use a similar data structure. Understanding the basic structure simplifies working with the API and helps you navigate the documentation more easily.\n\n<div class=\"note\"><b>Note</b><br><br>Some calls may include additional fields but they don't change the basic structure.</div>\n\n**Identification**\n\n- `merchant_id` — company ID in [Publisher Account](https://publisher.xsolla.com/)\n- `project_id` — project ID in Publisher Account\n- `sku` — item SKU, unique within the project\n\n**Store display**\n\n- `name` — item name\n- `description` — item description\n- `image_url` — image URL\n- `is_enabled` — item availability\n- `is_show_in_store` — whether the item is displayed in the catalog\n\nFor more information about managing item availability in the catalog, see the [documentation](/items-catalog/catalog-features/items-availability/).\n\n**Organization**\n\n- `type` — item type, for example, a virtual item (`virtual_item`) or bundle (`bundle`)\n- `groups` — groups the item belongs to\n- `order` — display order in the catalog\n\n**Sale conditions**\n\n- `prices` — prices in real or virtual currency\n- `limits` — purchase limits\n- `periods` — availability periods\n- `regions` — regional restrictions\n\n**Example of core entity structure:**\n\n```json\n{\n  \"attributes\": [],\n  \"bundle_type\": \"virtual_currency_package\",\n  \"content\": [\n    {\n      \"description\": {\n        \"en\": \"Main in-game currency\"\n      },\n      \"image_url\": \"https://.../image.png\",\n      \"name\": {\n        \"en\": \"Crystals\",\n        \"de\": \"Kristalle\"\n      },\n      \"quantity\": 500,\n      \"sku\": \"com.xsolla.crystal_2\",\n      \"type\": \"virtual_currency\"\n    }\n  ],\n  \"description\": {\n    \"en\": \"Crystals x500\"\n  },\n  \"groups\": [],\n  \"image_url\": \"https://.../image.png\",\n  \"is_enabled\": true,\n  \"is_free\": false,\n  \"is_show_in_store\": true,\n  \"limits\": {\n    \"per_item\": null,\n    \"per_user\": null,\n    \"recurrent_schedule\": null\n  },\n  \"long_description\": null,\n  \"media_list\": [],\n  \"name\": {\n    \"en\": \"Medium crystal pack\"\n  },\n  \"order\": 1,\n  \"periods\": [\n    {\n      \"date_from\": null,\n      \"date_until\": \"2020-08-11T20:00:00+03:00\"\n    }\n  ],\n  \"prices\": [\n    {\n      \"amount\": 20,\n      \"country_iso\": \"US\",\n      \"currency\": \"USD\",\n      \"is_default\": true,\n      \"is_enabled\": true\n    }\n  ],\n  \"regions\": [],\n  \"sku\": \"com.xsolla.crystal_pack_2\",\n  \"type\": \"bundle\",\n  \"vc_prices\": []\n}\n```\n\n# Basic purchase flow\n\nThe Xsolla API allows you to implement in-game store logic, including retrieving the item catalog, managing the cart, creating orders, and tracking their status. Depending on the integration scenario, API calls are divided into **Admin** and **Catalog** subsections, which use different [authentication schemes](/api/catalog/section/authentication).\n\nThe following example shows a basic flow for setting up and operating a store, from item creation to purchase.\n\n## Create items and groups (Admin)\n\nCreate an item catalog for your store, such as virtual items, bundles, or virtual currency.\n\nExample API calls:\n- [Create virtual item](/api/catalog/virtual-items-currency-admin/admin-create-virtual-item)\n- [Create bundle](/api/catalog/bundles-admin/admin-create-bundle)\n- [Create virtual currency](/api/catalog/virtual-items-currency-admin/admin-create-virtual-currency)\n\n## Set up promotions, chains, and limits (Admin)\n\nConfigure user acquisition and monetization tools, such as discounts, bonuses, daily rewards, or offer chains.\n\nExample API calls:\n- [Create bonus promotion](/api/liveops/promotions-bonuses/create-bonus-promotion)\n- [Create daily reward](/api/liveops/daily-chain-admin/admin-create-daily-chain)\n- [Create unique catalog offer promotion](/api/liveops/promotions-unique-catalog-offers/admin-create-unique-catalog-offer)\n\n## Get item information (Client)\n\nConfigure item display in your application.\n\n<div class=\"notice\">\n  <b>Notice</b><br><br>\n    Do not use API calls from the Admin subsection to build a user catalog. These API calls have <a href=\"https://developers.xsolla.com/api/getting-started/#api_rate_limits\" target=\"_blank\">rate limits</a> and aren't intended for user traffic.\n</div>\n<br>\n\nExample API calls:\n- [Get virtual items list](/api/catalog/virtual-items-currency-catalog/get-virtual-items)\n- [Get item group list](/api/catalog/virtual-items-currency-catalog/get-item-groups)\n- [Get list of bundles](/api/catalog/bundles-catalog/get-bundle-list)\n- [Get sellable items list](/api/catalog/common-catalog/get-sellable-items)\n\n<div class=\"note\">\n  <b>Note</b><br><br>\n    By default, catalog API calls return items that are currently available in the store at the time of the request. To retrieve items that are not yet available or are no longer available, include the parameter <code>\"show_inactive_time_limited_items\": 1</code> in the catalog request.\n</div>\n\n## Sell items\n\nYou can sell items using the following methods:\n- Fast purchase — sell one SKU multiple times.\n- Cart purchase — the user adds items to the cart, removes items, and updates quantities within a single order.\n\nIf an item is purchased using virtual currency instead of real money, use the [Create order with specified item purchased by virtual currency](/api/catalog/virtual-payment/create-order-with-item-for-virtual-currency) API call. The payment UI is not required, as the charge is processed when the API call is executed.\n\nFor free item purchase, use the [Create order with specified free item](/api/catalog/free-item/create-free-order-with-item) API call or the [Create order with free cart](/api/catalog/free-item/create-free-order) API call. The payment UI is not required — the order is immediately set to the <code>done</code> status.\n\n### Fast purchase\n\nUse the client-side API call to [create an order with a specified item](/api/catalog/payment-client-side/create-order-with-item). The call returns a token used to open the payment UI.\n\n<div class=\"note\">\n  <b>Note</b><br><br>\n    Discount information is available to the user only in the payment UI. Promo codes are not supported.\n</div>\n\n### Cart purchase\n\nCart setup and purchase can be performed on the client or on the server side.\n\n**Set up and purchase a cart on the client**\n\nImplement the logic of adding and removing items by yourself. Before calling the API for setting up a cart, you will not have information about which promotions will be applied to the purchase. This means that the total cost and details of the added bonus items will not be known.\n\nImplement the following cart logic:\n1. After the player has filled a cart, use the [Fill cart with items](/api/shop-builder/operation/cart-fill/) API call. The call returns the current information about the selected items (prices before and after discounts, bonus items).\n2. Update the cart contents based on user actions:\n   - To add an item or change item quantity, use the [Update cart item by cart ID](/api/shop-builder/operation/put-item-by-cart-id/) API call.\n   - To remove an item, use the [Delete cart item by cart ID](/api/shop-builder/operation/delete-item-by-cart-id/) API call.\n\n<div class=\"note\">\n  <b>Note</b><br><br>\n    To get the current status of the cart, use the Get current user's cart API call.\n</div>\n\n3. Use the [Create order with all items from current cart](/api/shop-builder/operation/create-order/) API call. The call returns the order ID and payment token. The newly created order is set to <code>new</code> status by default.\n\n**Set up and purchase a cart on the server**\n\nThis setup option may take longer for setting the cart up, since each change to the cart must be accompanied by API calls.\n\nImplement the following cart logic:\n1. After the player has filled a cart, use the [Fill cart with items](/api/catalog/cart-server-side) API call. The call returns current information about the selected items (prices before and after discounts, bonus items).\n2. Use the [Create order with all items from current cart](/api/shop-builder/operation/create-order/) API call. The call returns the order ID and payment token. The newly created order is set to <code>new</code> status by default.\n\n## Open payment UI\n\nUse the returned token to open the payment UI in a new window. Other ways to open the payment UI are described in the [documentation](/payment-ui-and-flow/payment-ui/how-to-open-payment-ui/#open_payment_ui).\n\n| Action                          | Endpoint                                                                  |\n|:--------------------------------|:--------------------------------------------------------------------------|\n| Open in production environment. | <code>https://secure.xsolla.com/paystation4/?token={token}</code>         |\n| Open in sandbox mode.           | <code>https://sandbox-secure.xsolla.com/paystation4/?token={token}</code> |\n\n<div class=\"note\">\n  <b>Note</b><br><br>\n    Use sandbox mode during development and testing. Test purchases don't charge real accounts. You can use <a href=\"https://developers.xsolla.com/dev-resources/testing/test-cards/\">test bank cards</a>.\n\n    After the first real payment is made, a strict sandbox payment policy takes effect. A payment in sandbox mode is available only to users specified in [Publisher Account > Company settings > Users](https://publisher.xsolla.com/0/settings/users).\n\n    Buying virtual currency and items for real currency is possible only after signing a license agreement with Xsolla. To do this, in [Publisher Account](https://publisher.xsolla.com/), go to **Agreements & Taxes > Agreements**, complete the agreement form, and wait for confirmation. It may take up to 3 business days to review the agreement.\n</div>\n\nTo enable or disable sandbox mode, change the value of the `sandbox` parameter in the request for fast purchase and cart purchase. Sandbox mode is off by default.\n\nPossible order statuses:\n- `new` — order created\n- `paid` — payment received\n- `done` — item delivered\n- `canceled` — order canceled\n- `expired` — payment expired\n\nTrack order status using one of the following methods:\n- [webhooks configured on your server](/virtual-goods/own-ui/server-side-token-generation/set-up-order-tracking/#payments_integration_order_tracking)\n- [short-polling](/virtual-goods/own-ui/client-side-token-generation/set-up-order-tracking/#guides_shop_builder_integrate_store_get_order_status_via_short_polling)\n- [WebSocket API](/virtual-goods/own-ui/client-side-token-generation/set-up-order-tracking/#guides_shop_builder_integrate_store_get_order_status_via_websocket_api)\n\n## Useful links\n\n- Authentication\n- [API calls by interaction model](/api/catalog/section/authentication)\n- [Payment testing](/dev-resources/testing/general-info/#general_overview)\n- [Set up order status tracking](/virtual-goods/own-ui/client-side-token-generation/set-up-order-tracking/?link=200-api#payments_integration_order_tracking)\n- [Webhooks](/webhooks/overview)\n- [Rate limits](/api/login/rate-limits)\n- [Errors handling](/api/getting-started/#api_errors_handling)\n- [API keys](/api/getting-started/#api_keys_overview)\n\n# Pagination\n\nAPI calls that return large sets of records (for example, when building a catalog) return data in pages. Pagination is a mechanism that limits the number of items returned in a single API response and allows you to retrieve subsequent pages sequentially.\n\nUse the following parameters to control the number of returned items:\n\n- `limit` — number of items per page\n- `offset` — index of the first item on the page (numbering starts from 0)\n- `has_more` — indicates whether another page is available\n- `total_items_count` — total number of items\n\nExample request:\n\n```\nGET /items?limit=20&offset=40\n```\n\nResponse example:\n\n```json\n{\n  \"items\": [...],\n  \"has_more\": true,\n  \"total_items_count\": 135\n}\n```\n\nIt is recommended to send subsequent requests until the response returns `has_more = false`.\n\n# Date and time format\n\nDates and time values are passed in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.\n\nThe following are supported:\n\n- UTC offset\n- `null` value when there is no time restriction for displaying an item\n- [Unix timestamp](https://www.unixtimestamp.com/) (in seconds) used in some fields\n\nFormat: `YYYY-MM-DDTHH:MM:SS±HH:MM`\n\nExample: `2026-03-16T10:00:00+03:00`\n\n# Localization\n\nXsolla supports localization of user-facing fields such as item name and description. Localized values are passed as an object where the language code is used as the key. The full list of supported languages is available in the [documentation](/doc/shop-builder/references/supported-languages/).\n\n**Supported fields**\n\nLocalization can be specified for the following parameters:\n\n- `name`\n- `description`\n- `long_description`\n\n**Locale format**\n\nThe locale key can be specified in one of the following formats:\n\n- Two-letter language code: `en`, `ru`\n- Five-letter language code: `en-US`, `ru-RU`, `de-DE`\n\n**Examples**\n\nExample with a two-letter language code:\n\n```json\n{\n  \"name\": {\n    \"en\": \"Starter Pack\",\n    \"ru\": \"Стартовый набор\"\n  }\n}\n```\n\nExample with a five-letter language code:\n\n```json\n{\n  \"description\": {\n    \"en-US\": \"Premium bundle\",\n    \"de-DE\": \"Premium-Paket\"\n  }\n}\n```\n\n# Error response format\n\nIf an error occurs, the API returns an HTTP status and a JSON response body. The full list of store-related errors is available in the [documentation](/dev-resources/references/errors/store-errors/).\n\n**Response example:**\n\n```json\n{\n  \"errorCode\": 1102,\n  \"errorMessage\": \"Validation error\",\n  \"statusCode\": 422,\n  \"transactionId\": \"c9e1a...\"\n}\n```\n\n- `errorCode` — error code.\n- `errorMessage` — short error description.\n- `statusCode` — HTTP response status.\n- `transactionId` — request ID. Returned only in some cases.\n- `errorMessageExtended` — additional error details, such as request parameters. Returned only in some cases.\n\n**Extended response example:**\n\n```json\n{\n  \"errorCode\": 7001,\n  \"errorMessage\": \"Chain not found\",\n  \"errorMessageExtended\": {\n    \"chain_id\": \"test_chain_id\",\n    \"project_id\": \"test_project_id\",\n    \"step_number\": 2\n  },\n  \"statusCode\": 404\n}\n```\n\n**Common HTTP status codes**\n\n- `400` — invalid request\n- `401` — authentication error\n- `403` — insufficient permissions\n- `404` — resource not found\n- `422` — validation error\n- `429` — rate limit exceeded\n\n**Recommendations**\n\n- Handle the HTTP status and the response body together.\n- Use `errorCode` to process errors related to application logic.\n- Use `transactionId` to identify requests more quickly when analyzing errors.\n",
    "version": "2.0.0",
    "title": "LiveOps API"
  },
  "servers": [
    {
      "url": "https://store.xsolla.com/api"
    }
  ],
  "tags": [
    {
      "name": "promotions-overview",
      "x-displayName": "Overview",
      "description": "Promotions are marketing tools designed to attract new users and increase sales. Using Xsolla API, you can configure the following promotions:\n\n* Discounts — reduced prices on selected items.\n* Bonuses — items granted to users along with their purchase.\n* Coupons — codes that allow users to receive one or more bonus items when redeeming.\n* Promo codes — codes that allow users to receive bonus items, a discount on a specific item, or a discount on the entire cart. Unlike coupons that are redeemed after the user enters them, promo codes are redeemed during a purchase (at checkout).\n* Unique offers — hidden items displayed in the catalog to users who have entered a unique offer code. If the code is not entered, the items are not displayed.\n\nExample flow for configuring a discount promotion:\n1. Create items using the calls from the **Admin** subsection of the [Virtual items and currency](/api/catalog/virtual-items-currency-admin/admin-get-virtual-items-list/), [Bundles](/api/catalog/bundles-admin/admin-create-bundle), or [Game keys](/api/catalog/game-keys-admin) groups.\n2. Create a promotion using the [Create discount promotion for item](/api/liveops/promotions-discounts/create-item-promotion/) call. In the `items` array, pass the necessary item SKUs.\n3. Set up promotion validity periods. To do this, call the [Create discount promotion for item](/api/liveops/promotions-discounts/create-item-promotion/) or [Update item promotion](/api/liveops/promotions-discounts/update-item-promotion/) methods, and pass the `promotion_periods` field as an array of objects where `date_from` defines the start, and `date_until` defines the end date of the validity period.\n4. Activate a promotion using the [Update item promotion](/api/liveops/promotions-discounts/update-item-promotion/) call. Pass the `\"is_enabled\": true` parameter.\n5. To get information about item prices, including discounted prices, call the client API methods for getting an item catalog from the [Common > Catalog](/api/catalog/tag/common-catalog/), [Virtual Items and Currency > Catalog](/api/catalog/virtual-items-currency-catalog/get-virtual-items/), and [Bundles > Catalog](/api/catalog/bundles-catalog/get-bundle-list/) subsections.\n\n![Promotion configuration example](https://cdn.xsolla.net/developers/current/images/api_docs/promo-overview.svg)\n\nRefer to our documentation for detailed information about configuring promotions:\n* [Discounts](https://developers.xsolla.com/liveops/promotion-tools/discounts/)\n* [Bonuses](https://developers.xsolla.com/liveops/promotion-tools/bonuses/)\n* [Coupons](https://developers.xsolla.com/liveops/promotion-tools/coupons/)\n* [Promo codes](https://developers.xsolla.com/liveops/promotion-tools/promo-codes/)\n* [Unique catalog offers](https://developers.xsolla.com/liveops/promotion-tools/unique-offer/)\n"
    },
    {
      "name": "promotions-common",
      "x-displayName": "Common API calls",
      "description": "You can call API methods from this subsection to manage different types of promotions."
    },
    {
      "name": "promotions-coupons",
      "x-displayName": "Coupons",
      "description": "Call API methods from this subsection to configure and manage coupon promotions.\n\n<div class=\"note\">\n  <p><b>Note</b></p>\n  <p>Refer to our <a href=\"https://developers.xsolla.com/liveops/promotion-tools/coupons/\">documentation</a> for detailed information about coupons.</p>\n</div>\n"
    },
    {
      "name": "promotions-promo-codes",
      "x-displayName": "Promo codes",
      "description": "Call API methods from this subsection to configure and manage promo code promotions.\n\n<div class=\"note\">\n  <p><b>Note</b></p>\n  <p>Refer to our <a href=\"https://developers.xsolla.com/liveops/promotion-tools/promo-codes/\">documentation</a> for detailed information about promo codes.</p>\n</div>\n"
    },
    {
      "name": "promotions-unique-catalog-offers",
      "x-displayName": "Unique catalog offers",
      "description": "Call API methods from this subsection to configure and manage unique catalog offers.\n\n<div class=\"note\">\n  <p><b>Note</b></p>\n  <p>Refer to our <a href=\"https://developers.xsolla.com/liveops/promotion-tools/unique-offer/\">documentation</a> for detailed information about unique offers.</p>\n</div>\n"
    },
    {
      "name": "promotions-discounts",
      "x-displayName": "Discounts",
      "description": "Call API methods from this subsection to configure and manage discount promotions.\n\n<div class=\"note\">\n  <p><b>Note</b></p>\n  <p>Refer to our <a href=\"https://developers.xsolla.com/liveops/promotion-tools/discounts/\">documentation</a> for detailed information about discounts.</p>\n</div>\n"
    },
    {
      "name": "promotions-bonuses",
      "x-displayName": "Bonuses",
      "description": "Call API methods from this subsection to configure and manage bonus promotions.\n\n<div class=\"note\">\n  <p><b>Note</b></p>\n  <p>Refer to our <a href=\"https://developers.xsolla.com/liveops/promotion-tools/bonuses/\">documentation</a> for detailed information about bonuses.</p>\n</div>\n"
    },
    {
      "name": "personalized-catalog",
      "x-displayName": "Personalized catalog",
      "description": "Personalization allows you to specify the conditions for displaying the item catalog and applying promotions only for specific authorized users. Conditions are defined based on user attributes and allow you to offer items and promotions that are most relevant to particular users.\n\nThe following personalization types are available:\n\n\n* [Xsolla-side personalization](/liveops/promotion-tools/personalization/#guides_personalization_on_xsolla_side). Personalization rules and logic are configured and stored on the Xsolla side. You pass user attributes, and Xsolla uses them to generate a personalized catalog.\n* [Partner-side personalization](/liveops/promotion-tools/personalization/#guides_personalization_on_partner_side). You configure personalization rules and logic on your side and send a final catalog payload for a specific user to Xsolla.\n\n<div class=\"note\">\n  <b>Note</b><br><br>\n  You can use only one personalization type. To change it, follow the\n  <a href=\"/liveops/promotion-tools/personalization/#guides_personalization_change\">instructions</a>.\n</div>\n\n\nTo configure personalization on the Xsolla side using the Xsolla API:\n\n1. Create items using the API calls from the **Admin** subsection of the [Virtual items and currency](/api/catalog/virtual-items-currency-admin/admin-get-virtual-items-list/), [Bundles](/api/catalog/bundles-admin/admin-create-bundle) or [Game keys](/api/catalog/game-keys-admin) groups.\n2. [Set up user attributes using the Xsolla Login API](/liveops/promotion-tools/personalization/#web_shop_guide_personalization_setting_attributes) and keep them synchronized by updating data in Xsolla whenever changes occur in your game.\n3. Configure personalization for items or promotions:\n    * To personalize the item catalog, define catalog display rules using the [Create catalog filter rule](/api/liveops/personalized-catalog/create-filter-rule) API call:\n        * In the [attribute_conditions](/api/liveops/personalized-catalog/create-filter-rule#personalized-catalog/create-filter-rule/t=request&path=attribute_conditions) array, specify the conditions that determine item availability based on user attributes.\n        * In the [items](/api/liveops/personalized-catalog/create-filter-rule#personalized-catalog/create-filter-rule/t=request&path=items) array, provide the list of items that should be visible to the user if their attributes match the specified conditions.\n    * To configure personalized promotions, use the [create and update API calls for the required promotion type](/api/liveops/promotions-discounts/create-item-promotion). In the [attribute_conditions](/api/liveops/promotions-discounts/create-item-promotion) array, specify the conditions that determine promotion availability based on user attributes.\n\n4. Pass the [user JWT](/api/login/getting-user-token?#getting-user-token) with user attributes to the [catalog retrieval API calls](https://developers.xsolla.com/api/catalog/virtual-items-currency-catalog/get-virtual-items) to receive a personalized catalog.\n\n**Sequence for configuring and applying Xsolla-side personalization for item catalog:**\n\n![Personalization for item catalog](https://cdn.xsolla.net/developers/current/images/api_docs/personalization-catalog.png)\n\n**Sequence for configuring and applying Xsolla-side personalization for promotions:**\n\n![Personalization for promotions](https://cdn.xsolla.net/developers/current/images/api_docs/personalization-liveops.png)\n\n<div class=\"note\">\n<b>Note</b><br><br>\nDetailed information is provided:\n<ul>\n  <li>in the <a href=\"/liveops/promotion-tools/personalization/\">guide to configuring personalization on the Xsolla side and the partner side</a></li>\n  <li>in the step-by-step tutorial on <a href=\"/doc/shop-builder/tutorials/personalization-tutorial/\">item catalog personalization on the Xsolla side</a></li>\n</ul>\n</div>\n"
    },
    {
      "name": "user-limits-admin",
      "x-displayName": "Management"
    },
    {
      "name": "reward-chain-value-points-admin",
      "x-displayName": "Admin"
    },
    {
      "name": "reward-chain-client",
      "x-displayName": "Client"
    },
    {
      "name": "clan-reward-chain-client",
      "x-displayName": "Clans client"
    },
    {
      "name": "daily-chain-admin",
      "x-displayName": "Admin"
    },
    {
      "name": "daily-chain-client",
      "x-displayName": "Client"
    },
    {
      "name": "offer-chain-admin",
      "x-displayName": "Admin"
    },
    {
      "name": "offer-chain-client",
      "x-displayName": "Client"
    },
    {
      "name": "upsell-admin",
      "x-displayName": "Admin"
    },
    {
      "name": "upsell-client",
      "x-displayName": "Client"
    }
  ],
  "paths": {
    "/v3/project/{project_id}/admin/promotion": {
      "get": {
        "summary": "Get all promotion list",
        "description": "Gets the list of promotions of a project.",
        "operationId": "get-promotion-list",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          },
          {
            "$ref": "#/components/parameters/enabled-query-param"
          }
        ],
        "tags": [
          "promotions-common"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-get-promotions"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          }
        },
        "security": [
          {
            "basicAuth": []
          }
        ]
      }
    },
    "/v2/project/{project_id}/admin/promotion/{promotion_id}/activate": {
      "put": {
        "summary": "Activate promotion",
        "description": "Activates a promotion.",
        "operationId": "activate-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "tags": [
          "promotions-common"
        ],
        "responses": {
          "204": {
            "description": "Promotion was successfully activated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-activate-deactivate-promotion"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/promotion/{promotion_id}/deactivate": {
      "put": {
        "summary": "Deactivate promotion",
        "description": "Deactivates a promotion.",
        "operationId": "deactivate-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "tags": [
          "promotions-common"
        ],
        "responses": {
          "204": {
            "description": "Promotion was successfully deactivated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-activate-deactivate-promotion"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/promotion/redeemable/code/{code}": {
      "get": {
        "summary": "Get redeemable promotion by code",
        "description": "Gets the promotion by a promo code or coupon code.",
        "operationId": "get-redeemable-promotion-by-code",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/code-path-param"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "tags": [
          "promotions-common"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-redeemable-by-code"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-code-not-found"
          },
          "405": {
            "$ref": "#/components/responses/405-method-not-found"
          }
        }
      }
    },
    "/v2/project/{project_id}/coupon/redeem": {
      "post": {
        "summary": "Redeem coupon code",
        "description": "Redeems a coupon code. The user gets a bonus after a coupon is redeemed. <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "operationId": "redeem-coupon",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "promotions-coupons"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_redeem-coupon-model"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-coupon-redeemed"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "403": {
            "$ref": "#/components/responses/Promotions_403-auth-header"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-coupon"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-redeem-coupon"
          }
        },
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ]
      }
    },
    "/v2/project/{project_id}/coupon/code/{coupon_code}/rewards": {
      "get": {
        "summary": "Get coupon rewards",
        "description": "Gets coupons rewards by its code.\nCan be used to allow users to choose one of many items as a bonus.\nThe usual case is choosing a DRM if the coupon contains a game as a bonus (`type=unit`). <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "operationId": "get-coupon-rewards-by-code",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/coupon_code-path-param"
          }
        ],
        "tags": [
          "promotions-coupons"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-coupon-rewards"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "403": {
            "$ref": "#/components/responses/Promotions_403-auth-header"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-coupon"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-rewards"
          }
        },
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ]
      }
    },
    "/v3/project/{project_id}/admin/coupon": {
      "post": {
        "summary": "Create coupon promotion",
        "description": "Creates a coupon promotion.\n",
        "operationId": "admin-create-coupon",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_coupon-create"
        },
        "responses": {
          "201": {
            "description": "Coupon was successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "external_id": {
                      "$ref": "#/components/schemas/Promotions_coupon-external_id"
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "external_id": "coupon_external_id"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-invalid-coupon"
          }
        }
      },
      "get": {
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-coupons",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Get list of coupon promotions",
        "description": "Gets the list of coupon promotions of a project.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-get-coupons"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/coupon/{external_id}": {
      "put": {
        "summary": "Update coupon promotion",
        "description": "Updates a coupon promotion.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "update-coupon-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_coupon-update"
        },
        "responses": {
          "204": {
            "description": "Coupon was successfully updated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-invalid-coupon"
          }
        }
      },
      "get": {
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-coupon",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Get coupon promotion",
        "description": "Gets a specified coupon promotion.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "Coupon was successfully received.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/admin-promotions_200-get-coupon-promotion-model"
                },
                "examples": {
                  "response": {
                    "value": {
                      "external_id": "summer20221",
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        },
                        {
                          "date_from": "2020-05-15T18:16:00+05:00",
                          "date_until": "2020-05-25T18:16:00+05:00"
                        }
                      ],
                      "name": {
                        "en-US": "Coupon name",
                        "ru-RU": "Название купона"
                      },
                      "is_enabled": true,
                      "bonus": [
                        {
                          "sku": "com.xsolla.diamonds_1",
                          "quantity": 100
                        }
                      ],
                      "redeem_user_limit": null,
                      "redeem_total_limit": 100,
                      "redeem_code_limit": null,
                      "total_limit_state": {
                        "available": 50,
                        "reserved": 10,
                        "used": 40
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          }
        }
      },
      "delete": {
        "summary": "Delete coupon promotion",
        "description": "Deletes [coupon promotion](https://developers.xsolla.com/doc/shop-builder/features/coupons/). The deleted promotion:\n* Disappears from the list of promotions set up in your project.\n* Is no longer applied to the item catalog. User can’t get bonus items with this promotion.\n\nAfter deletion, the promotion can’t be restored.\nCoupon codes from the deleted promotion can be [added](https://developers.xsolla.com/api/shop-builder/operation/create-coupon-code/) to existing promotions.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "delete-coupon-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "responses": {
          "204": {
            "description": "Coupon promotion was successfully deleted."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/coupon/{external_id}/activate": {
      "put": {
        "summary": "Activate coupon promotion",
        "description": "Activates a coupon promotion.\nCreated coupon promotion is disabled by default.\nIt will not be ready for redemption until you activate it.\nUse this endpoint to enable and activate a coupon promotion.\n",
        "operationId": "activate-coupon",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "Coupon was successfully activated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-admin-promotion-error"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/coupon/{external_id}/deactivate": {
      "put": {
        "summary": "Deactivate coupon promotion",
        "description": "Deactivates a coupon promotion.\nCreated coupon promotion is disabled by default.\nIt will not be ready for redemption until you activate it.\nUse this endpoint to disable and deactivate a coupon promotion.\n",
        "operationId": "deactivate-coupon",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "Coupon was successfully deactivated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-admin-promotion-error"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/coupon/{external_id}/code": {
      "post": {
        "operationId": "create-coupon-code",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Create coupon code",
        "description": "Creates coupon code.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_create-coupon-promocode-code"
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/Promotions_201-coupon-promocode-code-created"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-coupon-promocode-same-code-exists"
          }
        }
      },
      "get": {
        "operationId": "get-coupon-codes",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Get coupon codes",
        "description": "Gets coupon codes.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-coupon-code-list"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/coupon/{external_id}/code/generate": {
      "put": {
        "summary": "Generate coupon codes",
        "description": "Generates coupon codes.\n",
        "operationId": "generate-coupon-codes",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "count": {
                    "$ref": "#/components/schemas/Promotions_coupon-generate-count"
                  }
                },
                "required": [
                  "count"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Codes were successfully generated.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "$ref": "#/components/schemas/Promotions_coupon-generate-count"
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "count": 10
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promocode"
          }
        }
      }
    },
    "/v2/project/{project_id}/promocode/redeem": {
      "post": {
        "summary": "Redeem promo code",
        "description": "Redeems a code of promo code promotion.\nAfter redeeming a promo code, the user will get free items and/or the price of the cart and/or particular items will be decreased.\n",
        "operationId": "redeem-promo-code",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_redeem-promo-code-model"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-promo-code-redeemed"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "403": {
            "$ref": "#/components/responses/Promotions_403-auth-header"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-promo-code"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-redeem-coupon"
          }
        },
        "security": [
          {
            "AuthForCart": []
          }
        ]
      }
    },
    "/v2/project/{project_id}/promocode/remove": {
      "put": {
        "summary": "Remove promo code from cart",
        "description": "Removes a promo code from a cart.\nAfter the promo code is removed, the total price of all items in the cart will be recalculated without bonuses and discounts provided by a promo code.\n",
        "operationId": "remove-cart-promo-code",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_cancel-promo-code-model"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-promo-code-canceled"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "403": {
            "$ref": "#/components/responses/Promotions_403-auth-header"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-cancel-promo-code"
          }
        },
        "security": [
          {
            "AuthForCart": []
          }
        ]
      }
    },
    "/v2/project/{project_id}/promocode/code/{promocode_code}/rewards": {
      "get": {
        "summary": "Get promo code rewards",
        "description": "Gets promo code rewards by its code.\nCan be used to allow users to choose one of many items as a bonus.\nThe usual case is choosing a DRM if the promo code contains a game as a bonus (`type=unit`). <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "operationId": "get-promo-code-rewards-by-code",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promocode_code-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-promocode-rewards"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "403": {
            "$ref": "#/components/responses/Promotions_403-auth-header"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-promo-code"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-rewards"
          }
        },
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ]
      }
    },
    "/v3/project/{project_id}/admin/promocode": {
      "post": {
        "operationId": "create-promo-code",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Create promo code promotion",
        "description": "Creates a promo code promotion.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_promocode-create"
        },
        "responses": {
          "201": {
            "description": "Promo code was successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "external_id": {
                      "$ref": "#/components/schemas/Promotions_coupon-external_id"
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "external_id": "coupon_external_id"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-invalid-coupon"
          }
        }
      },
      "get": {
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-promo-codes",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Get list of promo code promotions",
        "description": "Gets the list of promo codes of a project.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-get-promocodes"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/promocode/{external_id}": {
      "put": {
        "summary": "Update promo code promotion",
        "description": "Updates a promo code promotion.\n",
        "operationId": "update-promo-code",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_promocode-update"
        },
        "responses": {
          "204": {
            "description": "Promo code was successfully updated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promocode"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-invalid-coupon"
          }
        }
      },
      "get": {
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-promo-code",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Get promo code promotion",
        "description": "Gets a specified promo code promotion.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "Promo code was successfully received.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Promotions_200-get-promocode-promotion-model"
                },
                "examples": {
                  "simple": {
                    "value": {
                      "external_id": "summer20221",
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        },
                        {
                          "date_from": "2020-05-15T18:16:00+05:00",
                          "date_until": "2020-05-25T18:16:00+05:00"
                        }
                      ],
                      "name": {
                        "en-US": "Coupon name",
                        "ru-RU": "Название купона"
                      },
                      "is_enabled": true,
                      "bonus": [
                        {
                          "sku": "com.xsolla.diamonds_1",
                          "quantity": 100
                        }
                      ],
                      "redeem_user_limit": null,
                      "redeem_total_limit": 100,
                      "redeem_code_limit": 1,
                      "discount": {
                        "percent": "10.99"
                      },
                      "discounted_items": null,
                      "total_limit_state": {
                        "available": 50,
                        "reserved": 10,
                        "used": 40
                      },
                      "excluded_promotions": [
                        23,
                        45
                      ]
                    }
                  },
                  "with price conditions": {
                    "value": {
                      "external_id": "summer20221",
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        }
                      ],
                      "name": {
                        "en-US": "Coupon name",
                        "ru-RU": "Название купона"
                      },
                      "is_enabled": true,
                      "bonus": [
                        {
                          "sku": "com.xsolla.diamonds_2",
                          "quantity": 100
                        }
                      ],
                      "redeem_user_limit": null,
                      "redeem_total_limit": 100,
                      "redeem_code_limit": 1,
                      "discount": {
                        "percent": "10.99"
                      },
                      "discounted_items": null,
                      "total_limit_state": {
                        "available": 50,
                        "reserved": 10,
                        "used": 40
                      },
                      "price_conditions": [
                        {
                          "operator": "gt",
                          "value": "10.0000"
                        },
                        {
                          "operator": "lt",
                          "value": "50.0000"
                        }
                      ]
                    }
                  },
                  "with item price conditions": {
                    "value": {
                      "external_id": "summer20221",
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        }
                      ],
                      "name": {
                        "en-US": "Coupon name",
                        "ru-RU": "Название купона"
                      },
                      "is_enabled": true,
                      "bonus": [
                        {
                          "sku": "com.xsolla.diamonds_3",
                          "quantity": 100
                        }
                      ],
                      "redeem_user_limit": null,
                      "redeem_total_limit": 100,
                      "redeem_code_limit": 1,
                      "discount": {
                        "percent": "10.99"
                      },
                      "discounted_items": null,
                      "total_limit_state": {
                        "available": 50,
                        "reserved": 10,
                        "used": 40
                      },
                      "item_price_conditions": [
                        {
                          "operator": "gt",
                          "value": "10.0000"
                        },
                        {
                          "operator": "lt",
                          "value": "50.0000"
                        }
                      ],
                      "excluded_promotions": [
                        23,
                        45
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promocode"
          }
        }
      },
      "delete": {
        "summary": "Delete promo code promotion",
        "description": "Deletes [promo code promotion](https://developers.xsolla.com/doc/shop-builder/features/promo-codes/). The deleted promotion:\n* Disappears from the list of promotions set up in your project.\n* Is no longer applied to the item catalog and the cart. User can’t get bonus items or purchase items using this promotion.\n\nAfter deletion, the promotion can’t be restored.\nPromo codes from the deleted promotion can be [added](https://developers.xsolla.com/api/shop-builder/operation/create-promo-code-code/) to existing promotions.\n",
        "operationId": "delete-promo-code",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "Promo code promotion was successfully deleted."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promocode"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/promocode/{external_id}/activate": {
      "put": {
        "summary": "Activate promo code promotion",
        "description": "Activates a promo code promotion.\n\nCreated promo code promotion is disabled by default.\nIt will not be ready for redemption until you activate it.\nUse this endpoint to enable and activate a promo code promotion.\n",
        "operationId": "activate-promo-code",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "Promo code was successfully activated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promocode"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-admin-promotion-error"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/promocode/{external_id}/deactivate": {
      "put": {
        "summary": "Deactivate promo code promotion",
        "description": "Deactivates a promo code promotion.\n\nCreated promo code promotion is disabled by default.\nIt will not be ready for redemption until you activate it.\nUse this endpoint to disable and deactivate a promo code promotion.\n",
        "operationId": "deactivate-promo-code",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "Coupon was successfully deactivated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promocode"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-admin-promotion-error"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/promocode/{external_id}/code": {
      "post": {
        "operationId": "create-promo-code-code",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Create code for promo code promotion",
        "description": "Creates code for a promo code promotion.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_create-coupon-promocode-code"
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/Promotions_201-coupon-promocode-code-created"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promocode"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-coupon-promocode-same-code-exists"
          }
        }
      },
      "get": {
        "operationId": "get-promocode-codes",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Get codes of promo code promotion",
        "description": "Gets codes of a promo code promotion.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-promocode-code-list"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promocode"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/promocode/{external_id}/code/generate": {
      "put": {
        "summary": "Generate codes for promo code promotion",
        "description": "Generates codes for a promo code promotion.\n",
        "operationId": "generate-promo-code-codes",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "count": {
                    "$ref": "#/components/schemas/Promotions_coupon-generate-count"
                  }
                },
                "required": [
                  "count"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Codes were successfully generated.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "$ref": "#/components/schemas/Promotions_coupon-generate-count"
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "count": 10
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promocode"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/promotion/item": {
      "post": {
        "summary": "Create discount promotion for item",
        "description": "Creates a discount promotion for an item.\n\nPromotions provide a discount (%) on items.\nThe discount will be applied to all prices of the specified items.\n",
        "operationId": "create-item-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "promotions-discounts"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_create-update-item-promotion"
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/Promotions_201-create-promotion"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-admin-promotion-missed-items-property"
          }
        }
      },
      "get": {
        "tags": [
          "promotions-discounts"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-item-promotion-list",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Get list of item promotions",
        "description": "Get the list of item promotions of a project.\n\nPromotions provide a discount (%) on items.\nThe discount will be applied to all prices of the specified items.\n",
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "description": "Project ID.",
            "schema": {
              "type": "integer",
              "default": 59080
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Limit for the number of elements on the page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Number of the element from which the list is generated (the count starts from 0).",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-get-item-promotions"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/promotion/{promotion_id}/item": {
      "put": {
        "tags": [
          "promotions-discounts"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "update-item-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Update item promotion",
        "description": "Updates the promotion.\n\n<div class='note'><b>Note</b><br><br>New data will replace old data. If you want to update only a part of a promotion, you should transfer all required data in request as well.</div>\n\nPromotions provide a discount (%) on items.\nThe discount will be applied to all prices of the specified items.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "responses": {
          "204": {
            "description": "Promotion was successfully updated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promotion"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-admin-promotion-missed-items-property"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_create-update-item-promotion"
        }
      },
      "get": {
        "tags": [
          "promotions-discounts"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-item-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "summary": "Get item promotion",
        "description": "Gets the promotion applied to particular items.\n\nPromotions provide a discount (%) on items.\nThe discount will be applied to all prices of the specified items.\n",
        "responses": {
          "200": {
            "description": "Item promotion was successfully received.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "description": "Promotion ID. Unique promotion identifier within the project."
                    },
                    "promotion_periods": {
                      "$ref": "#/components/schemas/promotion_periods"
                    },
                    "is_enabled": {
                      "$ref": "#/components/schemas/Promotions_is_enabled"
                    },
                    "name": {
                      "type": "object",
                      "description": "Name of promotion. Should contain key/value pairs,\nwhere key is locale with format \"^[a-z]{2}-[A-Z]{2}$\", value is string.\n",
                      "additionalProperties": {
                        "type": "string",
                        "example": {
                          "en-US": "Promotion",
                          "ru-RU": "Акция"
                        }
                      }
                    },
                    "discount": {
                      "type": "object",
                      "properties": {
                        "percent": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Percent discount.\nThe price of item will be decreased using a value which was calculated using this percent.",
                          "default": "10.00"
                        }
                      }
                    },
                    "items": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "description": "The list of items which will be affected by discount.",
                        "type": "object",
                        "properties": {
                          "sku": {
                            "type": "string",
                            "description": "Item SKU.",
                            "default": "elven_sword"
                          }
                        }
                      }
                    },
                    "attribute_conditions": {
                      "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-get"
                    },
                    "limits": {
                      "$ref": "#/components/schemas/Promotions_promotion_limits_response"
                    },
                    "price_conditions": {
                      "$ref": "#/components/schemas/price_conditions_discount"
                    },
                    "excluded_promotions": {
                      "$ref": "#/components/schemas/excluded_promotions"
                    }
                  },
                  "example": {
                    "id": 1,
                    "promotion_periods": [
                      {
                        "date_from": "2020-04-15T18:16:00+05:00",
                        "date_until": "2020-04-25T18:16:00+05:00"
                      }
                    ],
                    "is_enabled": true,
                    "discount": {
                      "percent": "15.00"
                    },
                    "items": [
                      {
                        "sku": "com.xsolla.elven_sword_1"
                      },
                      {
                        "sku": "com.xsolla.elven_helmet_1"
                      },
                      {
                        "sku": "com.xsolla.elven_armor_1"
                      }
                    ],
                    "name": {
                      "en-US": "Promotion",
                      "ru-RU": "Акция"
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "id": 1,
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        }
                      ],
                      "is_enabled": true,
                      "discount": {
                        "percent": "20.00"
                      },
                      "items": [
                        {
                          "sku": "com.xsolla.elven_helmet_1"
                        },
                        {
                          "sku": "com.xsolla.elven_armor_1"
                        }
                      ],
                      "name": {
                        "en-US": "Promotion",
                        "ru-RU": "Акция"
                      },
                      "limits": {
                        "per_user": {
                          "total": 10
                        },
                        "per_item": null,
                        "recurrent_schedule": {
                          "per_user": {
                            "interval_type": "daily",
                            "day_of_week": null,
                            "day_of_month": null,
                            "time": "11:00:00+08:00",
                            "reset_next_date": 1677553200,
                            "displayable_reset_start_date": "2023-02-28T11:00:00+08:00",
                            "displayable_reset_next_date": "2023-02-28T11:00:00+08:00"
                          }
                        }
                      },
                      "price_conditions": [
                        {
                          "operator": "ge",
                          "value": "10.0000"
                        },
                        {
                          "operator": "le",
                          "value": "50.0000"
                        }
                      ],
                      "excluded_promotions": [
                        23,
                        45
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "description": "Promotion not found. Make sure `promotion_id` is correct.",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "statusCode": {
                      "type": "integer",
                      "example": 404
                    },
                    "errorCode": {
                      "type": "integer",
                      "example": 9502
                    },
                    "errorMessage": {
                      "type": "string",
                      "example": "[0401-9502]: Can not find promotion with ID = 111425 in project 59080"
                    }
                  },
                  "type": "object"
                },
                "examples": {
                  "response": {
                    "value": {
                      "statusCode": 404,
                      "errorCode": 9502,
                      "errorMessage": "[0401-9502]: Can not find promotion with ID = 111425 in project 59080"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete item promotion",
        "tags": [
          "promotions-discounts"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "delete-item-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "description": "Deletes [discount promotion](https://developers.xsolla.com/doc/shop-builder/features/discounts/). The deleted promotion:\n* Disappears from the list of promotions set up in your project.\n* Is no longer applied to the item catalog and the cart. User can’t buy items with this promotion.\n\nAfter deletion, the promotion can’t be restored.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "responses": {
          "204": {
            "description": "Promotion was successfully deleted."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promotion"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/promotion/bonus": {
      "post": {
        "summary": "Create bonus promotion",
        "description": "Creates the bonus promotion.\n\nPromotion adds free bonus items to the purchase made by a user.\nThe promotion can be applied to every purchase within a project or to a purchase that includes particular items.\n",
        "operationId": "create-bonus-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "promotions-bonuses"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_create-update-bonus-promotion"
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/Promotions_201-create-promotion"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-admin-promotion-missed-bonus-property"
          }
        }
      },
      "get": {
        "tags": [
          "promotions-bonuses"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-bonus-promotion-list",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Get list of bonus promotions",
        "description": "Gets the list of bonus promotions of a project.\n\nPromotion adds free bonus items to the purchase made by a user.\nThe promotion can be applied to every purchase within a project or to a purchase that includes particular items.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-get-bonus-promotions"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/promotion/{promotion_id}/bonus": {
      "put": {
        "summary": "Update bonus promotion",
        "description": "Updates the promotion.\n\n<div class='note'><b>Note</b><br><br>New data will replace old data. If you want to update only a part of a promotion, you should transfer all required data in request as well.</div>\n\nPromotion adds free bonus items to the purchase made by a user.\nThe promotion can be applied to every purchase within a project or to a purchase that includes particular items.\n",
        "operationId": "update-bonus-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "tags": [
          "promotions-bonuses"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_create-update-bonus-promotion"
        },
        "responses": {
          "204": {
            "description": "Promotion was successfully updated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-admin-promotion-missed-bonus-property"
          }
        }
      },
      "get": {
        "tags": [
          "promotions-bonuses"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-bonus-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Get bonus promotion",
        "description": "Gets the bonus promotion.\n\nPromotion adds free bonus items to the purchase made by a user.\nThe promotion can be applied to every purchase within a project or to a purchase that includes particular items.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-admin-get-bonus-promotion"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promotion"
          }
        }
      },
      "delete": {
        "summary": "Delete bonus promotion",
        "tags": [
          "promotions-bonuses"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "delete-bonus-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "description": "Deletes [bonus promotion](https://developers.xsolla.com/doc/shop-builder/features/bonuses/). The deleted promotion:\n* Disappears from the list of promotions set up in your project.\n* Is no longer applied to the item catalog and the cart. User can’t get bonus items with this promotion.\n\nAfter deletion, the promotion can’t be restored.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "responses": {
          "204": {
            "description": "Promotion was successfully deleted."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promotion"
          }
        }
      }
    },
    "/v2/project/{project_id}/promotion/code/{code}/verify": {
      "get": {
        "summary": "Verify promotion code",
        "description": "Determines if the code is a promo code or coupon code and if the user can apply it. <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "operationId": "verify-promotion-code",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/code-path-param"
          }
        ],
        "tags": [
          "promotions-common"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-verify-promo-code"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "403": {
            "$ref": "#/components/responses/Promotions_403-auth-header"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-verify-promo-code"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-verify-promo-code"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/unique_catalog_offer": {
      "post": {
        "operationId": "admin-create-unique-catalog-offer",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Create unique catalog offer promotion",
        "description": "Creates a unique catalog offer promotion.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "promotions-unique-catalog-offers"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_unique_catalog_offer-create"
        },
        "responses": {
          "201": {
            "description": "Unique catalog offer was successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "external_id": {
                      "$ref": "#/components/schemas/Promotions_coupon-external_id"
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "external_id": "coupon_external_id"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-invalid-coupon"
          }
        }
      },
      "get": {
        "operationId": "get-unique-catalog-offers",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "tags": [
          "promotions-unique-catalog-offers"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "summary": "Get list of unique catalog offer promotions",
        "description": "Gets the list of unique catalog offer promotions of a project.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-get-unique-catalog-offers"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/unique_catalog_offer/{external_id}": {
      "put": {
        "operationId": "update-unique-catalog-offer-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Update unique catalog offer promotion",
        "description": "Updates the unique catalog offer promotion.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-unique-catalog-offers"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_unique_catalog_offer-update"
        },
        "responses": {
          "204": {
            "description": "Unique catalog offer was successfully updated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-invalid-coupon"
          }
        }
      },
      "get": {
        "operationId": "get-unique-catalog-offer",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "tags": [
          "promotions-unique-catalog-offers"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "summary": "Get unique catalog offer promotion",
        "description": "Gets the specified unique catalog offer promotion.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "Unique catalog offer was successfully received.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Promotions_200-get-unique-catalog-offer-promotion-model"
                },
                "examples": {
                  "response": {
                    "value": {
                      "external_id": "secret_shop",
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        },
                        {
                          "date_from": "2020-05-15T18:16:00+05:00",
                          "date_until": "2020-05-25T18:16:00+05:00"
                        }
                      ],
                      "name": {
                        "en-US": "Secret shop",
                        "ru-RU": "Секретный магазин"
                      },
                      "items": [
                        "helmet",
                        "sword",
                        "shield"
                      ],
                      "is_enabled": true,
                      "redeem_user_limit": 1,
                      "redeem_total_limit": 100,
                      "redeem_code_limit": 1,
                      "total_limit_state": {
                        "available": 50,
                        "reserved": 10,
                        "used": 40
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          }
        }
      },
      "delete": {
        "operationId": "delete-unique-catalog-offer-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Delete unique catalog offer promotion",
        "description": "Deletes [unique catalog offer promotion](https://developers.xsolla.com/doc/shop-builder/features/unique-offer/). The deleted promotion:\n* Disappears from the list of promotions set up in your project.\n* Is no longer applied to the item catalog and the cart. User can’t buy items with this promotion.\n\nAfter deletion, the promotion can’t be restored.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-unique-catalog-offers"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "Unique catalog offer was successfully deleted."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/unique_catalog_offer/{external_id}/activate": {
      "put": {
        "operationId": "activate-unique-catalog-offer",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Activate unique catalog offer promotion",
        "description": "Activates a unique catalog offer promotion.\nThe created unique catalog offer promotion is disabled by default.\nIt cannot be redeemed until you activate it.\nUse this endpoint to enable and activate a coupon promotion.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-unique-catalog-offers"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "Unique catalog offer was successfully activated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-admin-promotion-error"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/unique_catalog_offer/{external_id}/deactivate": {
      "put": {
        "operationId": "deactivate-unique-catalog-offer",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Deactivate unique catalog offer promotion",
        "description": "Deactivates a unique catalog offer promotion.\nThe created unique catalog offer promotion is disabled by default.\nIt cannot be redeemed until you activate it.\nUse this endpoint to disable and deactivate a coupon promotion.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-unique-catalog-offers"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "Unique catalog offer was successfully deactivated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-admin-promotion-error"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/unique_catalog_offer/{external_id}/code": {
      "post": {
        "operationId": "create-unique-catalog-offer-code",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Create unique catalog offer code",
        "description": "Creates unique catalog offer code.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-unique-catalog-offers"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_create-coupon-promocode-code"
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/Promotions_201-coupon-promocode-code-created"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          },
          "422": {
            "$ref": "#/components/responses/Promotions_422-coupon-promocode-same-code-exists"
          }
        }
      },
      "get": {
        "operationId": "get-unique-catalog-offer-codes",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Get unique catalog offer codes",
        "description": "Gets unique catalog offer codes.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "tags": [
          "promotions-unique-catalog-offers"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Promotions_200-unique-catalog-offer-code-list"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-coupon"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/unique_catalog_offer/{external_id}/code/generate": {
      "put": {
        "operationId": "generate-unique-catalog-offer-codes",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "summary": "Generate unique catalog offer codes",
        "description": "Generates unique catalog offer codes.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "tags": [
          "promotions-unique-catalog-offers"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "count": {
                    "$ref": "#/components/schemas/Promotions_coupon-generate-count"
                  }
                },
                "required": [
                  "count"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The codes were successfully generated.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "$ref": "#/components/schemas/Promotions_coupon-generate-count"
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "count": 10
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/Promotions_404-admin-promocode"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/user/limit/promocode/external_id/{external_id}": {
      "get": {
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-promo-code-user-limit",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          },
          {
            "$ref": "#/components/parameters/user_external_id-query-param"
          }
        ],
        "summary": "Get promo code limit for specified user",
        "description": "Gets the remaining number of times the specified user can use the promo code.\n\nUser limit API allows you to limit the number of times users can use a promo code. For configuring the user limit itself, go to the Admin section:\n* [Promo Codes](https://developers.xsolla.com/api/shop-builder/tag/promotions-promo-codes/)\n",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-promo-code-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "Item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Promo code not found": {
                    "$ref": "#/components/examples/404-coupon-not-found"
                  },
                  "User not found": {
                    "$ref": "#/components/examples/404-user-not-found"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Invalid request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "errorMessageExtended": {
                      "type": "array"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Invalid user_external_id": {
                    "$ref": "#/components/examples/Promotions_422-invalid-coupon"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/user/limit/coupon/external_id/{external_id}": {
      "get": {
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-coupon-user-limit",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          },
          {
            "$ref": "#/components/parameters/user_external_id-query-param"
          }
        ],
        "summary": "Get coupon limit for specified user",
        "description": "Gets the remaining number of times the specified user can use the coupon.\n\nUser limit API allows you to limit the number of times users can use a coupon. For configuring the user limit itself, go to the Admin section:\n* [Coupons](https://developers.xsolla.com/api/shop-builder/tag/promotions-coupons/)\n",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-coupon-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "Item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Coupon not found": {
                    "$ref": "#/components/examples/404-coupon-not-found"
                  },
                  "User not found": {
                    "$ref": "#/components/examples/404-user-not-found"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Invalid request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "errorMessageExtended": {
                      "type": "array"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Invalid user_external_id": {
                    "$ref": "#/components/examples/Promotions_422-invalid-coupon"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/code/limit/promocode/external_id/{external_id}": {
      "get": {
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-promo-code-code-limit",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          },
          {
            "$ref": "#/components/parameters/codes-query-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "summary": "Get promo code limit for codes",
        "description": "Gets the remaining number of times codes can be used. For filtering the codes, use the `codes` query parameter.\n\nFor configuring the code limit itself, go to the Admin section:\n* [Promo Codes](https://developers.xsolla.com/api/shop-builder/tag/promotions-promo-codes/)\n",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-code-promo-code-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "Item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Promo code not found": {
                    "$ref": "#/components/examples/404-coupon-not-found"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Invalid request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "errorMessageExtended": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/code/limit/coupon/external_id/{external_id}": {
      "get": {
        "tags": [
          "promotions-coupons"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-coupon-code-limit",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          },
          {
            "$ref": "#/components/parameters/codes-query-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "summary": "Get unique coupon code limits",
        "description": "Gets the remaining number of times codes can be used. For filtering the codes, use the `codes` query parameter.\n\nFor configuring the code limit itself, go to the Admin section:\n* [Coupons](https://developers.xsolla.com/api/shop-builder/tag/promotions-coupons/)\n",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-code-coupon-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "Item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Coupon not found": {
                    "$ref": "#/components/examples/404-coupon-not-found"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Invalid request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "errorMessageExtended": {
                      "type": "array"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/user/attribute/rule": {
      "get": {
        "tags": [
          "personalized-catalog"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-filter-rules",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          },
          {
            "$ref": "#/components/parameters/is_enabled-query-param"
          }
        ],
        "summary": "Get list of catalog filter rules",
        "description": "Gets all rules applying to user attributes.\n",
        "responses": {
          "200": {
            "description": "Rules were successfully received.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/user-attribute_personalized-catalog"
                      }
                    },
                    "total_items_count": {
                      "type": "number",
                      "description": "Total number of rules."
                    },
                    "has_more": {
                      "type": "boolean",
                      "description": "If another page with rules exists."
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "items": [
                        {
                          "rule_id": 1,
                          "name": "Ork race armor rule",
                          "is_enabled": true,
                          "is_satisfied_for_unauth": false,
                          "attribute_conditions": [
                            {
                              "attribute": "race",
                              "operator": "eq",
                              "value": "ork",
                              "type": "string",
                              "can_be_missing": false
                            }
                          ],
                          "items": [
                            {
                              "item_id": 1,
                              "sku": "com.xsolla.ork_armor_1",
                              "name": "Ork Armor",
                              "type": "virtual_good"
                            },
                            {
                              "item_id": 2,
                              "sku": "com.xsolla.potion_pack_1",
                              "name": "Potion pack",
                              "type": "bundle",
                              "bundle_type": "standard"
                            }
                          ]
                        }
                      ],
                      "total_items_count": 20,
                      "has_more": true
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Common_401-complex"
          },
          "403": {
            "$ref": "#/components/responses/403-auth-header-not-sent"
          }
        }
      },
      "post": {
        "tags": [
          "personalized-catalog"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "create-filter-rule",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "summary": "Create catalog filter rule",
        "description": "Create rule for user attributes.\n",
        "responses": {
          "201": {
            "description": "Rule was successfully created.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "rule_id": {
                      "type": "number",
                      "description": "Rule ID."
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "rule_id": 1
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Common_401-complex"
          },
          "422": {
            "$ref": "#/components/responses/Common_422-body-validation"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/personalized-catalog_create-update-body"
        }
      }
    },
    "/v2/project/{project_id}/admin/user/attribute/rule/all": {
      "get": {
        "tags": [
          "personalized-catalog"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-all-filter-rules",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "summary": "Get all catalog rules for searching on client-side",
        "description": "Gets a list of all catalog rules for searching on the client-side.\n<div class=\"notice\"><strong>Attention</strong><br><br>Returns only rule id, name and is_enabled</div>\n",
        "responses": {
          "200": {
            "description": "Rules were successfully received.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/user-attribute_personalized-catalog_all"
                      }
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "items": [
                        {
                          "rule_id": 1,
                          "name": "Ork race armor rule",
                          "is_enabled": true,
                          "is_satisfied_for_unauth": false
                        },
                        {
                          "rule_id": 2,
                          "name": "Age",
                          "is_enabled": false,
                          "is_satisfied_for_unauth": false
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Common_401-complex"
          },
          "403": {
            "$ref": "#/components/responses/403-auth-header-not-sent"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/user/attribute/rule/{rule_id}": {
      "get": {
        "tags": [
          "personalized-catalog"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-filter-rule-by-id",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/personalized-catalog-rule_id-path-param"
          }
        ],
        "summary": "Get catalog filter rule",
        "description": "Get specific rule applying to user attributes.\n",
        "responses": {
          "200": {
            "description": "Rule was successfuly recieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/user-attribute_personalized-catalog"
                },
                "examples": {
                  "response": {
                    "value": {
                      "rule_id": 1,
                      "name": "Ork race armor rule",
                      "is_enabled": true,
                      "is_satisfied_for_unauth": true,
                      "attribute_conditions": [
                        {
                          "attribute": "race",
                          "operator": "eq",
                          "value": "ork",
                          "type": "string",
                          "can_be_missing": false
                        }
                      ],
                      "items": [
                        {
                          "item_id": 1,
                          "sku": "com.xsolla.ork_armor_1",
                          "name": "Ork Armor"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Common_401-complex"
          }
        }
      },
      "put": {
        "tags": [
          "personalized-catalog"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "update-filter-rule-by-id",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/personalized-catalog-rule_id-path-param"
          }
        ],
        "summary": "Update catalog filter rule",
        "description": "Updates a specific rule applying to user attributes. The default value will be used for a not specified property (if property is not required).\n",
        "responses": {
          "204": {
            "description": "Successful update."
          },
          "401": {
            "$ref": "#/components/responses/Common_401-complex"
          },
          "422": {
            "$ref": "#/components/responses/Common_422-body-validation"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/personalized-catalog_create-update-body"
        }
      },
      "patch": {
        "tags": [
          "personalized-catalog"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "patch-filter-rule-by-id",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/personalized-catalog-rule_id-path-param"
          }
        ],
        "summary": "Patch catalog filter rule",
        "description": "Updates a specific rule applying to user attributes. The current value will be used for a not specified property.\n",
        "responses": {
          "204": {
            "description": "Update was successful."
          },
          "401": {
            "$ref": "#/components/responses/Common_401-complex"
          },
          "422": {
            "$ref": "#/components/responses/Common_422-body-validation"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/user-attribute_personalized-catalog-body"
              },
              "example": {
                "is_enabled": false
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "personalized-catalog"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "delete-filter-rule-by-id",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/personalized-catalog-rule_id-path-param"
          }
        ],
        "summary": "Delete catalog filter rule",
        "description": "Deletes a specific rule.\n",
        "responses": {
          "204": {
            "description": "Delete was successful."
          },
          "401": {
            "$ref": "#/components/responses/Common_401-complex"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/user/limit/promotion/all": {
      "delete": {
        "tags": [
          "user-limits-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "reset-all-user-promotions-limit",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "summary": "Refresh all promotion limits for specified user",
        "description": "Refreshes all limits across all promotions for the specified user so they can use these promotions again.\n\nUser limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:\n* [Discount Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-discounts/)\n* [Bonus Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-bonuses/)\n",
        "responses": {
          "200": {
            "description": "The promotion limit was successfully refreshed."
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "Item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "User not found": {
                    "$ref": "#/components/examples/404-user-not-found"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Invalid request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "errorMessageExtended": {
                      "type": "array"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Invalid user_external_id": {
                    "$ref": "#/components/examples/422-user_external_id_invalid"
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/reset-user-limits"
        }
      }
    },
    "/v2/project/{project_id}/admin/user/limit/promotion/id/{promotion_id}/all": {
      "delete": {
        "tags": [
          "user-limits-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "reset-user-promotion-limit",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "summary": "Refresh promotion limit for users",
        "description": "Refreshes the promotion limit so a user can use this promotion again. If the *user* parameter is `null`, this call refreshes this limit for all users.\n\nUser limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:\n* [Discount Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-discounts/)\n* [Bonus Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-bonuses/)\n",
        "responses": {
          "200": {
            "description": "The promotion limit was successfully refreshed."
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "Item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Item not found": {
                    "$ref": "#/components/examples/404-promotion-by-id-not-found"
                  },
                  "User not found": {
                    "$ref": "#/components/examples/404-user-not-found"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Invalid request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "errorMessageExtended": {
                      "type": "array"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Invalid user_external_id": {
                    "$ref": "#/components/examples/422-user_external_id_invalid"
                  },
                  "Promotion does not have configured user limits": {
                    "$ref": "#/components/examples/422-promotion-without-user-limit"
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/reset-user-limits-flexible"
        }
      }
    },
    "/v2/project/{project_id}/admin/user/limit/promotion/id/{promotion_id}": {
      "get": {
        "tags": [
          "user-limits-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "get-user-promotion-limit",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          },
          {
            "$ref": "#/components/parameters/user_external_id-query-param"
          }
        ],
        "summary": "Get promotion limit for specified user",
        "description": "Gets the remaining number of times the specified user can use the promotion within the limit applied.\n\nUser limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:\n* [Discount Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-discounts/)\n* [Bonus Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-bonuses/)\n",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-promotion-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "Item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Item not found": {
                    "$ref": "#/components/examples/404-promotion-by-id-not-found"
                  },
                  "User not found": {
                    "$ref": "#/components/examples/404-user-not-found"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Invalid request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "errorMessageExtended": {
                      "type": "array"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Invalid user_external_id": {
                    "$ref": "#/components/examples/422-user_external_id_invalid"
                  },
                  "Promotion does not have configured user limits": {
                    "$ref": "#/components/examples/422-promotion-without-user-limit"
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "user-limits-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "add-user-promotion-limit",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "summary": "Increase promotion limit for specified user",
        "description": "Increases the remaining number of times the specified user can use the promotion within the limit applied.\n\nUser limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:\n* [Discount Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-discounts/)\n* [Bonus Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-bonuses/)\n",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-promotion-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "Item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Item not found": {
                    "$ref": "#/components/examples/404-promotion-by-id-not-found"
                  },
                  "User not found": {
                    "$ref": "#/components/examples/404-user-not-found"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Invalid request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "errorMessageExtended": {
                      "type": "array"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Invalid user_external_id": {
                    "$ref": "#/components/examples/422-user_external_id_invalid"
                  },
                  "Promotion does not have configured user limits": {
                    "$ref": "#/components/examples/422-promotion-without-user-limit"
                  },
                  "Available promotion limit is out of range": {
                    "$ref": "#/components/examples/422-promotion-out-of-range-available-user-limit"
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/update-user-limits-strict"
        }
      },
      "put": {
        "tags": [
          "user-limits-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "set-user-promotion-limit",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "summary": "Set promotion limit for specified user",
        "description": "Sets the number of times the specified user can use a promotion within the limit applied after it was increased or decreased.\n\nUser limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:\n* [Discount Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-discounts/)\n* [Bonus Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-bonuses/)\n",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-promotion-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "Item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Item not found": {
                    "$ref": "#/components/examples/404-promotion-by-id-not-found"
                  },
                  "User not found": {
                    "$ref": "#/components/examples/404-user-not-found"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Invalid request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "errorMessageExtended": {
                      "type": "array"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Invalid user_external_id": {
                    "$ref": "#/components/examples/422-user_external_id_invalid"
                  },
                  "Promotion does not have configured user limits": {
                    "$ref": "#/components/examples/422-promotion-without-user-limit"
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/update-user-limits-flexible"
        }
      },
      "delete": {
        "tags": [
          "user-limits-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "remove-user-promotion-limit",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "summary": "Decrease promotion limit for specified user",
        "description": "Decreases the remaining number of times the specified user can use a promotion within the limit applied.\n\nUser limit API allows you to limit the number of times users can use a promotion. For configuring the user limit itself, go to the Admin section of the desired promotion type:\n* [Discount Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-discounts/)\n* [Bonus Promotions](https://developers.xsolla.com/api/shop-builder/tag/promotions-bonuses/)\n",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-promotion-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "Item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Item not found": {
                    "$ref": "#/components/examples/404-promotion-by-id-not-found"
                  },
                  "User not found": {
                    "$ref": "#/components/examples/404-user-not-found"
                  }
                }
              }
            }
          },
          "422": {
            "description": "Invalid request.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "errorCode": {
                      "type": "integer"
                    },
                    "errorMessage": {
                      "type": "string"
                    },
                    "errorMessageExtended": {
                      "type": "array"
                    },
                    "transactionId": {
                      "type": "string"
                    }
                  }
                },
                "examples": {
                  "Invalid user_external_id": {
                    "$ref": "#/components/examples/422-user_external_id_invalid"
                  },
                  "Promotion does not have configured user limits": {
                    "$ref": "#/components/examples/422-promotion-without-user-limit"
                  },
                  "Available promotion limit is out of range": {
                    "$ref": "#/components/examples/422-promotion-out-of-range-available-user-limit"
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/update-user-limits-strict"
        }
      }
    },
    "/v2/project/{project_id}/admin/items/value_points": {
      "get": {
        "summary": "Get list of value points",
        "description": "Gets the list of value points within a project for administration.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "operationId": "admin-get-value-points-list",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-value-points"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      },
      "post": {
        "summary": "Create value point",
        "description": "Creates a value point.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "operationId": "admin-create-value-points",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/create-value-point"
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/201-admin-create-value-point"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/422-admin-create-update-rc-vp-invalid-request"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/items/value_points/sku/{item_sku}": {
      "get": {
        "summary": "Get value point",
        "description": "Gets a value point by the SKU within a project for administration.\n",
        "operationId": "admin-get-value-point",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/item_sku-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-value-point"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      },
      "put": {
        "summary": "Update value point",
        "description": "Updates a value point identified by an SKU.\n",
        "operationId": "admin-update-value-point",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/item_sku-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/create-value-point"
        },
        "responses": {
          "204": {
            "description": "Value point was successfully updated.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/422-admin-create-update-rc-vp-invalid-request"
          }
        }
      },
      "delete": {
        "summary": "Delete value points",
        "description": "Deletes a value point identified by an SKU.\n",
        "operationId": "admin-delete-value-point",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/item_sku-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "responses": {
          "204": {
            "description": "Value point was successfully deleted.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/items/{value_point_sku}/value_points/rewards": {
      "get": {
        "summary": "Get list of items with value points",
        "description": "Gets list of all items with value points within a project for administration.\n",
        "operationId": "admin-get-items-value-point-reward",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/value_point_sku-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-list-value-point-rewards"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      },
      "put": {
        "summary": "Set value points for items",
        "description": "Assigns value points to one or several items by an SKU. Users receive value points after they purchase these items.\n\nNote that this PUT request overwrites all previously set value points for items in the project.\n\nTo avoid unintentional deletion of value points, include all items and their respective value points in each PUT request.\n\nIf you only want to update the value points for a specific item while preserving the value points of other items, you should retrieve the current set of value points using a GET request, modify the desired item's value points, and then send the modified set of value points back with the updated value points for the specific item.\n",
        "operationId": "admin-set-items-value-point-reward",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/value_point_sku-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/set-item-value-point-reward"
        },
        "responses": {
          "204": {
            "description": "Value point rewards for items were successfully updated.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/sellable-item-by-sku_404"
          }
        }
      },
      "patch": {
        "summary": "Partially update value points for items",
        "description": "Partially updates the number of value points for one or more items by the item’s SKU. Users receive these value points after purchasing the specified items.\n\nPrinciples of updating value points:\n  * If an item does not yet have value points, sending a non-zero value in the `amount` field creates them.\n  * If an item already has value points, sending a non-zero value in the `amount` field updates them.\n  * If `amount` is set to 0, the existing value points for that item are deleted.\n\nUnlike the `PUT` method ([Set value points for items](https://developers.xsolla.com/api/shop-builder/operation/admin-set-items-value-point-reward/)), this `PATCH` method does not overwrite all existing value points for items in the project, it only updates the specified items.\n\nA single request can update up to 100 items. Duplicate item SKUs cannot be included in the same request.\n",
        "operationId": "admin-patch-items-value-point-reward",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/value_point_sku-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/set-item-value-point-reward-for-patch"
        },
        "responses": {
          "204": {
            "description": "Value point rewards for items were successfully updated.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/sellable-item-by-sku_404"
          }
        }
      },
      "delete": {
        "summary": "Delete value points from items",
        "description": "Removes value point rewards from ALL items.\n",
        "operationId": "admin-delete-items-value-point-reward",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/value_point_sku-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "responses": {
          "204": {
            "description": "Value point rewards for items were successfully deleted.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      }
    },
    "/v2/project/{project_id}/user/reward_chain": {
      "get": {
        "tags": [
          "reward-chain-client"
        ],
        "operationId": "get-reward-chains-list",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "summary": "Get current user's reward chains",
        "description": "Client endpoint. Gets the current user’s reward chains.\n<div class=\"notice\">\n  <strong>Attention</strong><br><br>\n    All projects have the limitation to the number of items that you can\n    get in the response. The default and maximum value is <strong>50 items\n    per response.</strong> To get more data page by page, use <b>limit</b>\n    and <b>offset</b> fields.\n</div> <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-client-get-reward-chains-list"
          }
        }
      }
    },
    "/v2/project/{project_id}/user/reward_chain/{reward_chain_id}/balance": {
      "get": {
        "tags": [
          "reward-chain-client"
        ],
        "operationId": "get-user-reward-chain-balance",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "summary": "Get current user's value point balance",
        "description": "Client endpoint. Gets the current user’s value point balance. <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/reward_chain_id-path-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-client-get-user-reward-chain-balance"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          }
        }
      }
    },
    "/v2/project/{project_id}/user/reward_chain/{reward_chain_id}/step/{step_id}/claim": {
      "post": {
        "tags": [
          "reward-chain-client"
        ],
        "operationId": "claim-user-reward-chain-step-reward",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "summary": "Claim step reward",
        "description": "Client endpoint. Claims the current user’s step reward from a reward chain. <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/reward_chain_id-path-param"
          },
          {
            "$ref": "#/components/parameters/reward_chain_step_id-path-param"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully claimed the current user's step reward from a reward chain."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-reward-chain-step-not-found"
          },
          "422": {
            "$ref": "#/components/responses/422-reward-chain-step-reward-can-not-claimed"
          }
        }
      }
    },
    "/v2/project/{project_id}/user/clan/contributors/{reward_chain_id}/top": {
      "get": {
        "tags": [
          "clan-reward-chain-client"
        ],
        "operationId": "get-user-clan-top-contributors",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "responses": {
          "200": {
            "description": "The top 10 list of contributors to the clan's reward chain.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "example": "Rocket",
                        "description": "User ID. This is the ID sending to Xsolla during authorization and links the user to your Xsolla Login project."
                      },
                      "contributed_amount": {
                        "type": "integer",
                        "example": 100,
                        "description": "The amount of value points contributed by the user."
                      }
                    }
                  }
                },
                "examples": {
                  "clan": {
                    "summary": "User has a clan",
                    "value": [
                      {
                        "name": "winner",
                        "contributed_amount": 555
                      },
                      {
                        "name": "Rocket",
                        "contributed_amount": 398
                      },
                      {
                        "name": "MrJoe",
                        "contributed_amount": 201
                      },
                      {
                        "name": "beginner",
                        "contributed_amount": 1
                      }
                    ]
                  },
                  "without-clan": {
                    "summary": "User doesn't belong to a clan",
                    "value": []
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "description": "Project ID.",
            "schema": {
              "type": "integer",
              "example": 44056
            }
          },
          {
            "name": "reward_chain_id",
            "in": "path",
            "required": true,
            "description": "Reward chain ID.",
            "schema": {
              "type": "integer",
              "example": 101
            }
          }
        ],
        "summary": "Get top 10 contributors to reward chain under clan",
        "description": "Retrieves the list of top 10 contributors to the specific reward chain under the current user's clan. If a user doesn't belong to a clan, the call returns an empty array. <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>"
      }
    },
    "/v2/project/{project_id}/user/clan/update": {
      "put": {
        "tags": [
          "clan-reward-chain-client"
        ],
        "operationId": "user-clan-update",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-client-update-user-clan"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          }
        },
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "description": "Project ID.",
            "schema": {
              "type": "integer",
              "default": 44056
            }
          }
        ],
        "summary": "Update current user's clan",
        "description": "Updates a current user's clan via user attributes. Claims all rewards from reward chains that were not claimed for a previous clan and returns them in the response. If the user was in a clan and now is not — their inclusion in the clan will be revoked. If the user changed the clan — the clan will be changed. <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n"
      }
    },
    "/v3/project/{project_id}/admin/reward_chain": {
      "get": {
        "summary": "Get list of reward chains",
        "description": "Gets list of reward chains.\n\n<div class=\"notice\"><strong>Attention</strong><br><br>All projects have the limitation to the number of items that you can get in the response. The default and maximum value is <strong>10 items per response.</strong> To get more data page by page, use <b>limit</b> and <b>offset</b> fields.</div>\n",
        "operationId": "admin-get-reward-chains",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          },
          {
            "$ref": "#/components/parameters/enabled-query-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-list-reward-chains"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      },
      "post": {
        "summary": "Create reward chain",
        "description": "Creates reward chain.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-create-reward-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/create-reward-chain"
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/201-admin-create-reward-chain"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/422-admin-create-update-rc-vp-invalid-request"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/reward_chain/id/{reward_chain_id}": {
      "get": {
        "summary": "Get reward chain",
        "description": "Gets particular reward chain.\n",
        "operationId": "admin-get-reward-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/reward_chain_id-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-reward-chain"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-admin-reward-chain-not-found"
          }
        }
      },
      "put": {
        "summary": "Update reward chain",
        "description": "Updates particular reward chain.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-update-reward-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/reward_chain_id-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/update-reward-chain"
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204-admin-update-reward-chain"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-admin-reward-chain-not-found"
          },
          "422": {
            "$ref": "#/components/responses/422-admin-create-update-rc-vp-invalid-request"
          }
        }
      },
      "delete": {
        "summary": "Delete reward chain",
        "description": "Deletes particular reward chain.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-delete-reward-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/reward_chain_id-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/204-admin-delete-reward-chain"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/reward_chain/id/{reward_chain_id}/toggle": {
      "put": {
        "summary": "Toggle reward chain",
        "description": "Enable/disable reward chain.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-toggle-reward-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/reward_chain_id-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/204-admin-toggle-reward-chain"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      }
    },
    "/v3/project/{project_id}/admin/reward_chain/id/{reward_chain_id}/reset": {
      "post": {
        "summary": "Reset reward chain",
        "description": "Resets the value points balance and progress of all users in the reward chain.<br> The balance is tied to the value points type, not to a specific reward chain. If these value points are used in other chains, the balance will be reset in all chains that use these value points.<br> After the reset, you can update the reward chain’s validity period, and users will be able to progress through it again.<br> The clan balance is calculated as the sum of its members’ balances. Therefore, after the reset, the clan balance is also reset.<br> This request is irreversible and applies to all users of the project.\n\n<div class=\"notice\"><strong>Notice</strong>\n  <br><br>\n  You should not reset the reward chain during its validity period. In this case, users may lose earned value points before they claim their reward.\n</div>\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-reset-reward-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/reward_chain_id-path-param"
          }
        ],
        "tags": [
          "reward-chain-value-points-admin"
        ],
        "responses": {
          "204": {
            "$ref": "#/components/responses/204-admin-reset-reward-chain"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/daily_chain": {
      "get": {
        "summary": "Get list of daily rewards",
        "description": "Gets a list of daily rewards for administration.\n<div class=\"notice\"><strong>Notice</strong><br><br>A method returns a paginated list of items. The maximum and default value is <strong>50 items per response.</strong> To get more items from the list, use the `limit` and `offset` parameters and fetch more pages. For example, when calling a method with `limit = 25` and `offset = 100`, the response returns 25 items starting from the 101st item in the overall list.</div>\n",
        "operationId": "admin-get-daily-chains",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          },
          {
            "$ref": "#/components/parameters/enabled-query-param"
          },
          {
            "$ref": "#/components/parameters/is_expired-daily-chain-query-param"
          },
          {
            "$ref": "#/components/parameters/type-daily-chain-query-param"
          }
        ],
        "tags": [
          "daily-chain-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-list-daily-chains"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      },
      "post": {
        "summary": "Create daily reward",
        "description": "Creates a daily reward.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-create-daily-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "daily-chain-admin"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/create-daily-chain"
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/201-admin-create-daily-chain"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/422-admin-create-error-list"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/daily_chain/id/{daily_chain_id}": {
      "get": {
        "summary": "Get daily reward",
        "description": "Gets a particular daily reward for administration.",
        "operationId": "admin-get-daily-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/daily_chain_id-path-param"
          }
        ],
        "tags": [
          "daily-chain-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-daily-chain"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-daily-chain-not-found"
          }
        }
      },
      "put": {
        "summary": "Update daily reward",
        "description": "Updates a particular daily reward.",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-update-daily-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/daily_chain_id-path-param"
          }
        ],
        "tags": [
          "daily-chain-admin"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/update-daily-chain"
        },
        "responses": {
          "204": {
            "description": "Daily reward was successfully updated.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-daily-chain-not-found"
          },
          "422": {
            "$ref": "#/components/responses/422-admin-update-error-list"
          }
        }
      },
      "delete": {
        "summary": "Delete daily reward",
        "description": "Deletes a particular daily reward.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-delete-daily-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/daily_chain_id-path-param"
          }
        ],
        "tags": [
          "daily-chain-admin"
        ],
        "responses": {
          "204": {
            "description": "Daily reward was successfully deleted.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-daily-chain-not-found"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/daily_chain/id/{daily_chain_id}/toggle": {
      "put": {
        "summary": "Toggle daily reward",
        "description": "Enables or disables a daily reward.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-toggle-daily-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/daily_chain_id-path-param"
          }
        ],
        "tags": [
          "daily-chain-admin"
        ],
        "responses": {
          "204": {
            "description": "The daily reward has been disabled or enabled.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-daily-chain-not-found"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/daily_chain/id/{daily_chain_id}/reset": {
      "post": {
        "summary": "Reset daily reward",
        "description": "Resets progress for all users in the daily reward. Applies only to daily rewards of the `rolling` type.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-reset-daily-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/daily_chain_id-path-param"
          }
        ],
        "tags": [
          "daily-chain-admin"
        ],
        "responses": {
          "204": {
            "description": "The daily reward has been reset.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-daily-chain-not-found"
          }
        }
      }
    },
    "/v2/project/{project_id}/user/daily_chain": {
      "get": {
        "tags": [
          "daily-chain-client"
        ],
        "operationId": "get-daily-chains-list",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "summary": "Get current user's daily rewards",
        "description": "Client endpoint. Gets the current user's daily rewards.\n<div class=\"notice\"><strong>Notice</strong><br><br>A method returns a paginated list of items. The maximum and default value is <strong>50 items per response.</strong> To get more items from the list, use the <code>limit</code> and <code>offset</code> parameters and fetch more pages. For example, when calling a method with <code>limit = 25</code> and <code>offset = 100</code>, the response returns 25 items starting from the 101st item in the overall list.</div> <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-client-get-daily-chains-list"
          },
          "401": {
            "$ref": "#/components/responses/401-client-auth-error"
          }
        }
      }
    },
    "/v2/project/{project_id}/user/daily_chain/{daily_chain_id}": {
      "get": {
        "tags": [
          "daily-chain-client"
        ],
        "operationId": "get-user-daily-chain-by-id",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "summary": "Get current user's daily reward by its ID",
        "description": "Client endpoint. Gets the current user’s daily reward by its ID. <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/daily_chain_id-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "The user’s daily reward was successfully retrieved.",
            "content": {
              "application/json": {
                "examples": {
                  "response": {
                    "$ref": "#/components/examples/200-client-daily-chain"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/client-daily-chain-model"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/404-daily-chain-not-found"
          }
        }
      }
    },
    "/v2/project/{project_id}/user/daily_chain/{daily_chain_id}/step/number/{step_number}/claim": {
      "post": {
        "tags": [
          "daily-chain-client"
        ],
        "operationId": "claim-user-daily-chain-step-reward",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "summary": "Claim daily reward step",
        "description": "Client endpoint. Claims the current user's step reward from a daily reward. All steps can only be claimed in sequential order. The reward for a missed step cannot be obtained for virtual or real currency, or by watching an ad <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/daily_chain_id-path-param"
          },
          {
            "$ref": "#/components/parameters/daily_chain_step_number-path-param"
          }
        ],
        "responses": {
          "204": {
            "description": "Successfully claimed the current user's step reward for a daily reward step."
          },
          "401": {
            "$ref": "#/components/responses/401-client-auth-error"
          },
          "404": {
            "$ref": "#/components/responses/404-daily-chain-step-not-found"
          },
          "422": {
            "description": "Step can't be claimed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/daily-chain-error-model"
                },
                "examples": {
                  "invalid-step": {
                    "$ref": "#/components/examples/422-daily-chain-claim-error-invalid-step"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/project/{project_id}/user/offer_chain": {
      "get": {
        "tags": [
          "offer-chain-client"
        ],
        "operationId": "get-offer-chains-list",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "summary": "Get current user's offer chains",
        "description": "Gets the current user’s offer chains.\n<div class=\"notice\"><strong>Notice</strong><br><br>All projects have a limit on the number of items that can be returned in a single response. The default and maximum value is <strong>30 items per response</strong>. To get more data, use the <code>limit</code> and <code>offset</code> query parameters for pagination.</div> <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-client-get-offer-chains-list"
          }
        }
      }
    },
    "/v2/project/{project_id}/user/offer_chain/{offer_chain_id}": {
      "get": {
        "tags": [
          "offer-chain-client"
        ],
        "operationId": "get-user-offer-chain-by-id",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "summary": "Get current user's offer chain by ID",
        "description": "Gets the current user’s offer chain by the offer chain's ID. <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/offer_chain_id-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "The user’s offer chain was successfully retrieved.",
            "content": {
              "application/json": {
                "examples": {
                  "response": {
                    "$ref": "#/components/examples/200-client-offer-chain"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/client-offer-chain-model"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/404-offer-chain-not-found"
          }
        }
      }
    },
    "/v2/project/{project_id}/user/offer_chain/{offer_chain_id}/step/number/{step_number}/claim": {
      "post": {
        "tags": [
          "offer-chain-client"
        ],
        "operationId": "claim-user-offer-chain-step-reward",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "summary": "Claim free offer chain step",
        "description": "Completes the current user’s progression through the offer chain step and grants the associated reward.\n<div class=\"notice\">\n  <strong>Notice</strong><br><br>\n    Use this call only for free steps in the offer chain.\n    For steps that require payment in real currency, use the <a href=\"/api/shop-builder/operation/order-user-offer-chain-step-reward\">Create order for paid offer chain step</a> call instead.\n</div> <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/offer_chain_id-path-param"
          },
          {
            "$ref": "#/components/parameters/offer_chain_step_number-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "The free step was successfully claimed and the reward granted.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "order_id": {
                      "type": "integer",
                      "description": "Order ID."
                    }
                  }
                },
                "examples": {
                  "response": {
                    "value": {
                      "order_id": 641
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-offer-chain-step-not-found"
          },
          "422": {
            "description": "The step cannot be claimed. Ensure all previous steps are completed and the step is marked as free.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/offer-chain-error-model"
                },
                "examples": {
                  "invalid-step": {
                    "$ref": "#/components/examples/422-offer-chain-claim-error-invalid-step"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/project/{project_id}/user/offer_chain/{offer_chain_id}/step/number/{step_number}/order": {
      "post": {
        "tags": [
          "offer-chain-client",
          "payment-client-side"
        ],
        "operationId": "order-user-offer-chain-step-reward",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "summary": "Create order for paid offer chain step",
        "description": "Creates an order for the item associated with the specified paid offer chain step. The created order gets the `new` order status.\n\nTo open the payment UI in a new window, use the following link: `https://secure.xsolla.com/paystation4/?token={token}`, where `{token}` is the received token.\n\nFor testing purposes, use this URL: `https://sandbox-secure.xsolla.com/paystation4/?token={token}`.\n\n<div class=\"notice\">\n  <strong>Notice</strong> <br><br>\n    This method must be used on the client side. The user's IP address is used to determine the country, which affects the currency and available payment methods. Using this method from the server side may result in incorrect currency detection and affect payment methods in <a href=\"https://developers.xsolla.com/doc/pay-station/\">Pay Station</a>.\n</div><br>\n\n<div class=\"notice\">\n  <strong>Notice</strong><br><br>\n    Use this call only for paid offer chain steps.\n    For free steps, use the <a href=\"/api/shop-builder/operation/claim-user-offer-chain-step-reward\">Claim free offer chain step</a> call instead.\n</div>\n<br>\n<div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/offer_chain_id-path-param"
          },
          {
            "$ref": "#/components/parameters/offer_chain_step_number-path-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Cart-Payment_200-order-created"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-offer-chain-step-not-found"
          },
          "422": {
            "description": "The step cannot be purchased.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/offer-chain-error-model"
                },
                "examples": {
                  "invalid-step": {
                    "$ref": "#/components/examples/422-offer-chain-claim-error-invalid-step"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/offer_chain": {
      "get": {
        "summary": "Get list of offer chains",
        "description": "Gets list of offer chains for administration.\n<div class=\"notice\"><strong>Notice</strong><br><br>All projects have a limit on to the number of items that can be returned in a single response. The default and maximum value is <strong>10 items per response</strong>. To get more data, use the <code>limit</code> and <code>offset</code> query parameters for pagination.</div>\n",
        "operationId": "admin-get-offer-chains",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/limit-query-param"
          },
          {
            "$ref": "#/components/parameters/offset-query-param"
          },
          {
            "$ref": "#/components/parameters/enabled-query-param"
          }
        ],
        "tags": [
          "offer-chain-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-list-offer-chains"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      },
      "post": {
        "summary": "Create offer chain",
        "description": "Creates an offer chain.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-create-offer-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "offer-chain-admin"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/create-offer-chain"
        },
        "responses": {
          "201": {
            "$ref": "#/components/responses/201-admin-create-offer-chain"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/422-create-error-list"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/offer_chain/id/{offer_chain_id}": {
      "get": {
        "summary": "Get offer chain",
        "description": "Gets a particular offer chain for administration.",
        "operationId": "admin-get-offer-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/offer_chain_id-path-param"
          }
        ],
        "tags": [
          "offer-chain-admin"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-offer-chain"
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-offer-chain-not-found"
          }
        }
      },
      "put": {
        "summary": "Update offer chain",
        "description": "Updates a particular offer chain.",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-update-offer-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/offer_chain_id-path-param"
          }
        ],
        "tags": [
          "offer-chain-admin"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/update-offer-chain"
        },
        "responses": {
          "204": {
            "description": "Offer chain was successfully updated.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-offer-chain-not-found"
          },
          "422": {
            "$ref": "#/components/responses/422-update-error-list"
          }
        }
      },
      "delete": {
        "summary": "Delete offer chain",
        "description": "Deletes a particular offer chain.\n\nAfter deletion:<ul><li>All rewards already received by users are retained.</li><li>Uncompleted steps become unavailable, and their rewards can no longer be obtained.</li></ul>\n\nUnlike disabling the offer chain via the <a href=\"/api/shop-builder/operation/admin-toggle-offer-chain\">Toggle offer chain</a> call, deletion is irreversible and user progress is not preserved.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-delete-offer-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/offer_chain_id-path-param"
          }
        ],
        "tags": [
          "offer-chain-admin"
        ],
        "responses": {
          "204": {
            "description": "Offer chain was successfully deleted.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-offer-chain-not-found"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/offer_chain/id/{offer_chain_id}/toggle": {
      "put": {
        "summary": "Toggle offer chain",
        "description": "Enables or disables an offer chain.\n\nWhen the offer chain is disabled, users temporarily lose access to it, but their progress is preserved.\n\nAfter the offer chain is re-enabled, users can continue from the step where they left off.\n",
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "admin-toggle-offer-chain",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/offer_chain_id-path-param"
          }
        ],
        "tags": [
          "offer-chain-admin"
        ],
        "responses": {
          "204": {
            "description": "The offer chain has been disabled/enabled.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-offer-chain-not-found"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/items/upsell": {
      "get": {
        "tags": [
          "upsell-admin"
        ],
        "operationId": "get-upsell-configurations-for-project-admin",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "responses": {
          "200": {
            "description": "The list of configuration details and items used for upsell in the project.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "is_enabled": {
                        "type": "boolean",
                        "example": true,
                        "description": "Whether upsell is enabled for the project."
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "fixed_list",
                          "most_sellable",
                          "only_promotions"
                        ],
                        "example": "fixed_list",
                        "description": "The type of upsell."
                      },
                      "items": {
                        "type": "array",
                        "example": [
                          {
                            "item_id": 1,
                            "sku": "com.xsolla.booster_mega_1",
                            "name": {
                              "en": "Item's name",
                              "de": "Name des Artikels"
                            },
                            "type": "virtual_good"
                          }
                        ],
                        "description": "The list of items SKU that are a part of the upsell in the project.",
                        "items": {
                          "type": "object",
                          "properties": {
                            "item_id": {
                              "$ref": "#/components/schemas/item_id"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/item_type"
                            },
                            "name": {
                              "$ref": "#/components/schemas/name-localization-object"
                            },
                            "bundle_type": {
                              "$ref": "#/components/schemas/bundle_type"
                            },
                            "unit_type": {
                              "$ref": "#/components/schemas/unit_type"
                            },
                            "unit_items": {
                              "type": "array",
                              "description": "Game keys for different DRMs.",
                              "items": {
                                "type": "object",
                                "description": "Game key item. It represents game on a certain platform (steam, gog, etc.).",
                                "properties": {
                                  "item_id": {
                                    "$ref": "#/components/schemas/item_id"
                                  },
                                  "sku": {
                                    "$ref": "#/components/schemas/sku"
                                  },
                                  "type": {
                                    "$ref": "#/components/schemas/item_type"
                                  },
                                  "name": {
                                    "$ref": "#/components/schemas/name-localization-object"
                                  },
                                  "drm_name": {
                                    "$ref": "#/components/schemas/drm_name"
                                  },
                                  "drm_sku": {
                                    "$ref": "#/components/schemas/drm_sku"
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "upsell": {
                    "summary": "Project has upsell",
                    "value": [
                      {
                        "is_enabled": true,
                        "type": "fixed_list",
                        "items": [
                          {
                            "item_id": 1,
                            "sku": "com.xsolla.booster_mega_1",
                            "name": {
                              "en": "Item's name",
                              "de": "Name des Artikels"
                            },
                            "type": "virtual_good"
                          },
                          {
                            "item_id": 2,
                            "sku": "com.xsolla.booster_mega_2",
                            "name": {
                              "en": "Item's name",
                              "de": "Name des Artikels"
                            },
                            "type": "bundle",
                            "bundle_type": "standard"
                          },
                          {
                            "item_id": 3,
                            "sku": "com.xsolla.mega_game_1",
                            "name": {
                              "en": "Mega game"
                            },
                            "type": "unit",
                            "unit_type": "game",
                            "unit_items": [
                              {
                                "item_id": 4,
                                "sku": "com.xsolla.mega_game_steam_1",
                                "name": {
                                  "en": "Mega game steam"
                                },
                                "drm_name": "Steam",
                                "drm_sku": "steam_key_1"
                              }
                            ]
                          }
                        ]
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          }
        },
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "summary": "Get information about upsell in project",
        "description": "Retrieves the information about upsell in project: whether it's enabled, type of upsell, and the SKU list of items that are a part of this upsell."
      },
      "post": {
        "tags": [
          "upsell-admin"
        ],
        "operationId": "post-upsell",
        "summary": "Create upsell",
        "description": "Creates an upsell for a project. <br> <div class=\"notice\">\n  <strong>Notice</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/create-upsell"
        },
        "responses": {
          "202": {
            "description": "Upsell has been created for the project."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "404": {
            "$ref": "#/components/responses/Upsell-404-item-not-found"
          },
          "422": {
            "$ref": "#/components/responses/Upsell-422-invalid-request"
          }
        }
      },
      "put": {
        "tags": [
          "upsell-admin"
        ],
        "operationId": "put-upsell",
        "summary": "Update upsell",
        "description": "Update an upsell for a project. <br> <div class=\"notice\">\n  <strong>Notice</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>\n",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/update-upsell"
        },
        "responses": {
          "202": {
            "description": "Upsell has been updated for the project."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          },
          "404": {
            "$ref": "#/components/responses/Upsell-404-item-not-found"
          },
          "422": {
            "$ref": "#/components/responses/Upsell-422-invalid-request"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/items/upsell/{toggle}": {
      "put": {
        "tags": [
          "upsell-admin"
        ],
        "operationId": "put-upsell-toggle-active-inactive",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "responses": {
          "202": {
            "description": "An upsell in a project was activated or deactivated."
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          }
        },
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "name": "toggle",
            "in": "path",
            "required": true,
            "description": "Activation status.",
            "schema": {
              "type": "string",
              "example": "activate"
            }
          }
        ],
        "summary": "Activate/Deactivate project's upsell",
        "description": "Changes an upsell’s status in a project to be either active or inactive. <br> <div class=\"notice\">\n  <strong>Notice</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>"
      }
    },
    "/v2/project/{project_id}/items/upsell": {
      "get": {
        "tags": [
          "upsell-client"
        ],
        "operationId": "get-upsell-for-project-client",
        "x-badges": [
          {
            "name": "Client-side",
            "color": "#80eaff"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Upsell-200-get-client-list"
          },
          "401": {
            "$ref": "#/components/responses/Promotions_401-invalid-client-auth"
          }
        },
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "summary": "Get list of upsell items in project",
        "description": "Gets a list of upsell items in a project if they have already been set up. <br> <div class=\"note\">\n  <strong>Note</strong><br><br>\n    This API call uses a user JWT for authorization.<br><br>\n    Include the token in the <code>Authorization</code> header in the following format: <code>Bearer &lt;user_JWT&gt;</code>. For more information about user JWT, see the <strong>Security</strong> block for this call.\n</div>"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "basicAuth": {
        "type": "http",
        "description": "Server-side calls use the `basicAuth` authentication scheme. All requests to API must\ncontain the `Authorization: Basic <your_authorization_basic_key>`\nheader, where `your_authorization_basic_key` is the `project_id:api_key`\npair encoded according to the Base64 standard.\n\nYou can use `merchant_id` instead of `project_id` if you need. It doesn't affect functionality.\n\nGo to [Publisher Account](https://publisher.xsolla.com/) to find values of the parameters:\n\n* `merchant_id` is shown:\n  * In the **Company settings > Company** section\n  * In the URL in the browser address bar on any Publisher Account page. The URL has the following format: `https://publisher.xsolla.com/<merchant_id>`.\n* `api_key` is shown in Publisher Account only once when it is created and must be stored on your side. You can create a new key in the following section:\n  * [Company settings > API keys](https://publisher.xsolla.com/0/settings/api_key)\n  * [Project settings > API keys](https://publisher.xsolla.com/0/projects/0/edit/api_key)\n\n{% html name=\"div\" attrs={\"class\": \"notice\"} %}\n**Notice**\n\nIf a required API call doesn't include the `project_id` path parameter, use an API key that is valid across all company projects for authorization.\n{% /html %}\n\n* `project_id` is shown:\n  * In Publisher Account next to the name of the project.\n  * In the URL in the browser address bar when working on project in Publisher Account. The URL has the following format: `https://publisher.xsolla.com/<merchant_id>/projects/<project_id>`.\n\nFor more information about working with API keys, see the [API reference](https://developers.xsolla.com/api/getting-started/#api_keys_overview).\n",
        "scheme": "basic"
      },
      "XsollaLoginUserJWT": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Client-side calls use the `XsollaLoginUserJWT` authentication scheme. The request must include the user's JWT in the `Authorization` header in the following format: Bearer `<user_JWT>`. The token identifies the user and provides access to personalized data. For details on how to create a token, refer to the [Xsolla Login API documentation](/api/login/authentication-schemes#getting-user-token).\n\nYou can try this call using the following test token: `Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI`.\n\nAlternatively, you can use a [token for opening the payment UI](/api/pay-station/token/create-token).\n"
      },
      "AuthForCart": {
        "type": "http",
        "scheme": "bearer",
        "description": "The `AuthForCart` authentication scheme is used for cart purchases and supports two modes:\n\n1. Authentication with a user's JWT. The token is passed in the Authorization header in the following format: `Authorization: Bearer <user_JWT>`, where `<user_JWT>` is the user token. The token identifies the user and provides access to personalized data. You can try this call using the following test token:`Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI`.\n\nAlternatively, you can use a [token for opening the payment UI](/api/pay-station/token/create-token).\n\n2. Simplified mode without `Authorization` header. This mode is used only for unauthorized users and can be applied only for [selling game keys](/doc/buy-button/how-to/set-up-authentication/#guides_buy_button_selling_items_not_authenticated_users). Instead of a token, the request must include the following headers:\n* `x-unauthorized-id` with a request ID\n* `x-user` with the user’s email address encoded in Base64.\n"
      },
      "basicMerchantAuth": {
        "type": "http",
        "description": "Server-side calls use the `basicMerchantAuth` authentication scheme.  All requests to API must\ncontain the `Authorization: Basic <your_authorization_basic_key>`\nheader, where `your_authorization_basic_key` is the `merchant_id:api_key`\npair encoded according to the Base64 standard.\n\nGo to [Publisher Account](https://publisher.xsolla.com/) to find values of the parameters:\n\n* `merchant_id` is shown:\n  * In the **Company settings > Company** section\n  * In the URL in the browser address bar on any Publisher Account page. The URL has the following format: `https://publisher.xsolla.com/<merchant_id>`\n* `api_key` is shown in Publisher Account only once when it is created and must be stored on your side. You can create a new key in the [Company settings > API keys](https://publisher.xsolla.com/0/settings/api_key) section.\n\nFor more information about working with API keys, see the [API reference](https://developers.xsolla.com/api/getting-started/#api_keys_overview).\n",
        "scheme": "basic"
      }
    },
    "parameters": {
      "project_id-path-param": {
        "name": "project_id",
        "in": "path",
        "required": true,
        "description": "Project ID. You can find this parameter in your [Publisher Account](https://publisher.xsolla.com/0/projects/0/) next to the project name and in the browser address bar when working with a project. The URL has the following format: `https://publisher.xsolla.com/<merchant_id>/projects/<project_id>`.",
        "schema": {
          "type": "integer",
          "example": 44056
        }
      },
      "limit-query-param": {
        "name": "limit",
        "in": "query",
        "example": 50,
        "required": false,
        "description": "Limit for the number of elements on the page.",
        "schema": {
          "type": "integer",
          "example": 50,
          "minimum": 1
        }
      },
      "offset-query-param": {
        "name": "offset",
        "in": "query",
        "required": false,
        "example": 0,
        "description": "Number of the element from which the list is generated (the count starts from 0).",
        "schema": {
          "type": "integer",
          "example": 0,
          "minimum": 0
        }
      },
      "enabled-query-param": {
        "name": "enabled",
        "in": "query",
        "required": false,
        "description": "Filter elements by `is_enabled` flag.",
        "schema": {
          "type": "integer"
        }
      },
      "promotion_id-path-param": {
        "name": "promotion_id",
        "in": "path",
        "required": true,
        "description": "Promotion ID. Unique promotion identifier within the project.",
        "schema": {
          "type": "integer",
          "example": 111425
        }
      },
      "code-path-param": {
        "name": "code",
        "in": "path",
        "required": true,
        "description": "Unique case-sensitive code. Contains letters and numbers.",
        "schema": {
          "type": "string",
          "example": "WINTER2021",
          "minLength": 1,
          "maxLength": 128
        }
      },
      "coupon_code-path-param": {
        "name": "coupon_code",
        "in": "path",
        "required": true,
        "description": "Unique case sensitive code. Contains letters and numbers.",
        "schema": {
          "type": "string",
          "example": "WINTER2021",
          "minLength": 1,
          "maxLength": 128
        }
      },
      "external_id-promotion-path-param": {
        "name": "external_id",
        "in": "path",
        "required": true,
        "description": "Promotion external ID. Unique promotion identifier within the project.",
        "schema": {
          "type": "integer",
          "example": "coupon_44056_1"
        }
      },
      "promocode_code-path-param": {
        "name": "promocode_code",
        "in": "path",
        "required": true,
        "description": "Unique case sensitive code. Contains letters and numbers.",
        "schema": {
          "type": "string",
          "example": "SO6rew99j9",
          "minLength": 1,
          "maxLength": 128
        }
      },
      "user_external_id-query-param": {
        "name": "user_external_id",
        "in": "query",
        "required": true,
        "description": "User external ID",
        "schema": {
          "type": "string",
          "example": "d342dad2-9d59-11e9-a384-42010aa8003f"
        }
      },
      "codes-query-param": {
        "name": "codes[]",
        "in": "query",
        "description": "Unique case-sensitive codes. Contain only letters and numbers.",
        "schema": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          }
        }
      },
      "is_enabled-query-param": {
        "name": "is_enabled",
        "in": "query",
        "required": false,
        "description": "Filter elements by `is_enabled` flag.",
        "schema": {
          "type": "integer"
        }
      },
      "personalized-catalog-rule_id-path-param": {
        "name": "rule_id",
        "in": "path",
        "required": true,
        "description": "Rule ID.",
        "schema": {
          "type": "number",
          "example": 1
        }
      },
      "item_sku-path-param": {
        "name": "item_sku",
        "in": "path",
        "required": true,
        "description": "Item SKU.",
        "schema": {
          "type": "string",
          "example": "booster_mega_1"
        }
      },
      "value_point_sku-path-param": {
        "name": "value_point_sku",
        "in": "path",
        "required": true,
        "description": "Value Point SKU.",
        "schema": {
          "type": "string",
          "example": "value_point_3"
        }
      },
      "reward_chain_id-path-param": {
        "name": "reward_chain_id",
        "in": "path",
        "required": true,
        "description": "Reward chain ID.",
        "schema": {
          "type": "integer",
          "example": 101
        }
      },
      "reward_chain_step_id-path-param": {
        "name": "step_id",
        "in": "path",
        "required": true,
        "description": "Reward chain step ID.",
        "schema": {
          "type": "integer",
          "example": 120
        }
      },
      "is_expired-daily-chain-query-param": {
        "name": "is_expired",
        "in": "query",
        "required": false,
        "description": "Filter daily rewards to show only expired ones.",
        "schema": {
          "type": "integer"
        }
      },
      "type-daily-chain-query-param": {
        "name": "type",
        "in": "query",
        "required": false,
        "description": "Filters daily rewards to return only the specified type.",
        "schema": {
          "type": "string",
          "enum": [
            "calendar_hard",
            "rolling_skippable",
            "rolling_unskippable"
          ]
        }
      },
      "daily_chain_id-path-param": {
        "name": "daily_chain_id",
        "in": "path",
        "required": true,
        "description": "Daily reward ID.",
        "schema": {
          "type": "integer",
          "example": 101
        }
      },
      "daily_chain_step_number-path-param": {
        "name": "step_number",
        "in": "path",
        "required": true,
        "description": "Daily reward step number.",
        "schema": {
          "type": "integer",
          "example": 1
        }
      },
      "offer_chain_id-path-param": {
        "name": "offer_chain_id",
        "in": "path",
        "required": true,
        "description": "Offer chain ID.",
        "schema": {
          "type": "integer",
          "example": 101
        }
      },
      "offer_chain_step_number-path-param": {
        "name": "step_number",
        "in": "path",
        "required": true,
        "description": "Offer chain step number.",
        "schema": {
          "type": "integer",
          "example": 1
        }
      }
    },
    "schemas": {
      "Promotions_promotion_id": {
        "type": "integer",
        "description": "Promotion ID. Unique promotion identifier within the project.",
        "example": 1
      },
      "promotion_periods": {
        "type": "array",
        "nullable": false,
        "description": "Promotion validity periods. If multiple periods are specified, both `date_from` and `date_until` are required.",
        "items": {
          "type": "object",
          "properties": {
            "date_from": {
              "type": "string",
              "format": "date-time",
              "nullable": false,
              "example": "2020-08-11T10:00:00+03:00",
              "description": "Start date for the specified promotion."
            },
            "date_until": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time",
              "example": "2020-08-11T20:00:00+03:00",
              "description": "End date for the specified promotion. If set to `null`, the promotion is indefinite. Can be `null` only if a single validity period is specified."
            }
          },
          "required": [
            "date_from"
          ]
        }
      },
      "Promotions_coupon_name": {
        "type": "object",
        "description": "Name of promotion. Should contain key/value pairs\nwhere key is a locale with \"^[a-z]{2}-[A-Z]{2}$\" format, value is string.\n",
        "additionalProperties": {
          "type": "string"
        },
        "example": {
          "en-US": "Coupon title",
          "de-DE": "Gutscheintitel"
        },
        "default": {
          "en-US": "Coupon title",
          "de-DE": "Gutscheintitel"
        }
      },
      "Promotions_200-coupon-bonus-reward": {
        "type": "object",
        "properties": {
          "item": {
            "type": "object",
            "properties": {
              "sku": {
                "type": "string",
                "example": "game_01",
                "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
              },
              "name": {
                "type": "object",
                "example": {
                  "en": "Game name"
                },
                "description": "Item name."
              },
              "type": {
                "type": "string",
                "example": "unit",
                "description": "Type of item: `virtual_good`/`virtual_currency`/`bundle`/`physical_good`/`unit`."
              },
              "bundle_type": {
                "type": "string",
                "description": "Bundle type. Returned if item type is a bundle.",
                "enum": [
                  "standard",
                  "virtual_currency_package"
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "Game description",
                "description": "Item description."
              },
              "image_url": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                "description": "Image URL."
              },
              "content": {
                "type": "array"
              },
              "unit_items": {
                "description": "If the item has the unit type, it includes all items in the unit. In the most cases the user should choose one of them as a coupon bonus.",
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "sku": {
                      "type": "string",
                      "example": "game_01",
                      "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
                    },
                    "is_free": {
                      "type": "boolean"
                    },
                    "type": {
                      "type": "string",
                      "example": "game_key",
                      "description": "Type of item: `game_key`."
                    },
                    "name": {
                      "type": "string",
                      "example": "Game name",
                      "description": "Item name."
                    },
                    "drm_name": {
                      "type": "string",
                      "example": "Steam",
                      "description": "DRM name."
                    },
                    "drm_sku": {
                      "type": "string",
                      "example": "steam",
                      "description": "Unique DRM ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
                    }
                  }
                }
              }
            }
          },
          "quantity": {
            "type": "number",
            "description": "Item quantity.",
            "default": 1
          }
        }
      },
      "Promotions_sku": {
        "type": "string",
        "example": "booster_mega_1",
        "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
      },
      "Promotions_name": {
        "type": "object",
        "description": "Name of item. Should contain key/value pairs\nwhere key is a locale with \"^[a-z]{2}-[A-Z]{2}$\" format, value is string.\n",
        "additionalProperties": {
          "type": "string"
        },
        "example": {
          "en-US": "Item title",
          "de-DE": "Artikeltitel"
        },
        "default": {
          "en-US": "Item title",
          "de-DE": "Artikeltitel"
        }
      },
      "Promotions_type": {
        "type": "string",
        "description": "Type of item: `virtual_good`/`virtual_currency`/`bundle`/`physical_good`/`unit`."
      },
      "Promotions_redeem_code_limit": {
        "type": [
          "integer",
          "null"
        ],
        "description": "Number of redemptions per code.",
        "example": 10,
        "default": 10
      },
      "Promotions_promotion_condition": {
        "type": [
          "array",
          "null"
        ],
        "items": {
          "description": "The list of items for which the user received a bonus.",
          "type": "object",
          "properties": {
            "item": {
              "type": "object",
              "properties": {
                "sku": {
                  "$ref": "#/components/schemas/Promotions_sku"
                },
                "name": {
                  "$ref": "#/components/schemas/Promotions_name"
                },
                "type": {
                  "$ref": "#/components/schemas/Promotions_type"
                },
                "description": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "example": "Game description",
                  "description": "Item description."
                },
                "image_url": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "example": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                  "description": "Image URL."
                },
                "external_id": {
                  "type": "string",
                  "description": "Promotion external ID. Unique promotion identifier within the project.",
                  "minLength": 1,
                  "maxLength": 255,
                  "pattern": "^[-_.\\d\\w]+$"
                },
                "is_enabled": {
                  "type": "boolean"
                },
                "redeem_total_limit": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "redeem_user_limit": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "redeem_code_limit": {
                  "$ref": "#/components/schemas/Promotions_redeem_code_limit"
                }
              }
            }
          }
        }
      },
      "Promotions_coupon-is_enabled": {
        "type": "boolean",
        "default": true
      },
      "Promotions_promotion_type": {
        "type": "string",
        "description": "Promotion type.",
        "example": "item_discount"
      },
      "Promotions_promotion_discount_percent": {
        "type": [
          "string",
          "null"
        ],
        "description": "Percent discount.\nThe price of cart will be decreased using a value calculated by using this percent and then rounded to 2 decimal places.",
        "default": "10.00",
        "example": "10.00"
      },
      "promotion_recurrent_schedule_response": {
        "type": [
          "object",
          "null"
        ],
        "description": "Limit refresh period.",
        "properties": {
          "per_user": {
            "type": [
              "object",
              "null"
            ],
            "description": "User limit refresh period.",
            "oneOf": [
              {
                "type": "object",
                "title": "interval_type = daily",
                "description": "Daily type of user limits refresh.",
                "properties": {
                  "interval_type": {
                    "type": "string",
                    "description": "Recurrent refresh period type.",
                    "enum": [
                      "daily"
                    ]
                  },
                  "time": {
                    "type": "string",
                    "description": "Time of limit refresh in the desired time zone (rounding to hours).",
                    "format": "full-time",
                    "example": "11:00:00+03:00"
                  },
                  "reset_next_date": {
                    "type": "integer",
                    "description": "Date and time when limits refresh (Unix Timestamp).",
                    "example": 1677553200
                  },
                  "displayable_reset_start_date": {
                    "description": "Date and time of the first limit refresh (ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  },
                  "displayable_reset_next_date": {
                    "description": "Date and time when limits should reset (ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  }
                }
              },
              {
                "type": "object",
                "title": "interval_type = weekly",
                "description": "Weekly type of user limits refresh.",
                "properties": {
                  "interval_type": {
                    "type": "string",
                    "description": "Recurrent refresh period type.",
                    "enum": [
                      "weekly"
                    ]
                  },
                  "day_of_week": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Day of the week when the limits refresh. Where 1 is Monday and 7 is Sunday. Not `null` only for `weekly` limit refresh period type.",
                    "minimum": 1,
                    "maximum": 7
                  },
                  "time": {
                    "type": "string",
                    "description": "Time of limit refresh in the desired time zone (rounding to hours).",
                    "format": "full-time",
                    "example": "11:00:00+03:00"
                  },
                  "reset_next_date": {
                    "type": "integer",
                    "description": "Date and time when limits refresh (Unix Timestamp).",
                    "example": 1677553200
                  },
                  "displayable_reset_start_date": {
                    "description": "Date and time of the first limit refresh (ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  },
                  "displayable_reset_next_date": {
                    "description": "Date and time when limits should reset (ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  }
                }
              },
              {
                "type": "object",
                "title": "interval_type = monthly",
                "description": "Monthly type of refresh of user limits.",
                "properties": {
                  "interval_type": {
                    "type": "string",
                    "description": "Recurrent refresh period type.",
                    "enum": [
                      "monthly"
                    ]
                  },
                  "day_of_month": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Day of the month when limits refresh. If there's no selected day of the month as it's shorter, then the refresh will occur on the last day of the month. Not `null` only for `monthly` limit refresh period type.",
                    "minimum": 1,
                    "maximum": 31
                  },
                  "time": {
                    "type": "string",
                    "description": "Time of limit refresh in the desired time zone (rounding to hours).",
                    "format": "full-time",
                    "example": "11:00:00+03:00"
                  },
                  "reset_next_date": {
                    "type": "integer",
                    "description": "Date and time when limits refresh (Unix Timestamp).",
                    "example": 1677553200
                  },
                  "displayable_reset_start_date": {
                    "description": "Date and time of the first limit refresh (ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  },
                  "displayable_reset_next_date": {
                    "description": "Date and time when limits should reset (ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  }
                }
              }
            ]
          }
        }
      },
      "Promotions_promotion_limits_response": {
        "type": "object",
        "description": "Promotion limits.",
        "properties": {
          "per_user": {
            "type": [
              "object",
              "null"
            ],
            "description": "Promotion limitation for a separate user.",
            "properties": {
              "total": {
                "type": "integer",
                "description": "Total number of items a user can purchase. You can set this number in Publisher Account or use admin endpoints for Store entities (limits object).",
                "example": 5
              }
            }
          },
          "per_item": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Global item limitation.",
            "example": 10
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/promotion_recurrent_schedule_response"
          }
        }
      },
      "Promotions_200-get-promotion-model": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Promotions_promotion_id"
          },
          "promotion_periods": {
            "$ref": "#/components/schemas/promotion_periods"
          },
          "name": {
            "$ref": "#/components/schemas/Promotions_coupon_name"
          },
          "bonus": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Promotions_200-coupon-bonus-reward"
            }
          },
          "condition": {
            "$ref": "#/components/schemas/Promotions_promotion_condition"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/Promotions_coupon-is_enabled"
          },
          "type": {
            "$ref": "#/components/schemas/Promotions_promotion_type"
          },
          "discount": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "percent": {
                "$ref": "#/components/schemas/Promotions_promotion_discount_percent"
              }
            },
            "example": {
              "discount": {
                "percent": "10.99"
              }
            }
          },
          "limits": {
            "$ref": "#/components/schemas/Promotions_promotion_limits_response"
          }
        }
      },
      "total_promotions_count": {
        "type": "integer",
        "description": "Total number of promotions."
      },
      "active_promotions_count": {
        "type": "integer",
        "description": "Number of active promotions."
      },
      "inactive_promotions_count": {
        "type": "integer",
        "description": "Number of deactivated promotions."
      },
      "Promotions_coupon-external_id": {
        "type": "string",
        "example": "coupon_external_id",
        "default": "coupon_external_id",
        "description": "Unique promotion ID. The `external_id` may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
      },
      "Promotions_coupon_bonus": {
        "type": [
          "array",
          "null"
        ],
        "items": {
          "description": "The list of items which will be added into purchase of user as a bonus.",
          "type": "object",
          "properties": {
            "sku": {
              "type": "string",
              "description": "Item SKU.",
              "default": "elven_shield"
            },
            "quantity": {
              "type": "number",
              "description": "Item quantity.",
              "default": 1
            }
          }
        }
      },
      "Promotions_coupon-redeem_total_limit": {
        "type": [
          "integer",
          "null"
        ],
        "description": "Limits total numbers of coupons.",
        "example": 10,
        "default": 10
      },
      "Promotions_coupon-redeem_user_limit": {
        "type": [
          "integer",
          "null"
        ],
        "description": "Limits total numbers of coupons redeemed by single user.",
        "example": 10,
        "default": 10
      },
      "Promotions_coupon_total_limit_state": {
        "type": [
          "object",
          "null"
        ],
        "description": "Limits for each unique coupon code.",
        "properties": {
          "available": {
            "type": "integer",
            "description": "The remaining number of times a coupon can be used.",
            "example": 3
          },
          "reserved": {
            "type": "integer",
            "description": "The reserved number of a coupon.",
            "example": 3
          },
          "used": {
            "type": "integer",
            "description": "The number of times a coupon is used.",
            "example": 5
          }
        }
      },
      "Promotions_cart_item_discount": {
        "type": "string",
        "nullable": false,
        "description": "Percent discount.\n\nThe price of cart item will be decreased using a value\ncalculated by using this percent and then rounded\nto 2 decimal places.\n",
        "default": "10.00",
        "example": "10.00"
      },
      "admin-promotions_200-get-redeemable-coupon-promotion-model": {
        "type": "object",
        "properties": {
          "external_id": {
            "$ref": "#/components/schemas/Promotions_coupon-external_id"
          },
          "promotion_periods": {
            "$ref": "#/components/schemas/promotion_periods"
          },
          "name": {
            "$ref": "#/components/schemas/Promotions_coupon_name"
          },
          "bonus": {
            "$ref": "#/components/schemas/Promotions_coupon_bonus"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/Promotions_coupon-is_enabled"
          },
          "redeem_total_limit": {
            "$ref": "#/components/schemas/Promotions_coupon-redeem_total_limit"
          },
          "redeem_user_limit": {
            "$ref": "#/components/schemas/Promotions_coupon-redeem_user_limit"
          },
          "redeem_code_limit": {
            "$ref": "#/components/schemas/Promotions_redeem_code_limit"
          },
          "total_limit_state": {
            "$ref": "#/components/schemas/Promotions_coupon_total_limit_state"
          },
          "discount": {
            "type": [
              "object",
              "null"
            ],
            "description": "Only for promo codes.",
            "properties": {
              "percent": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Percent discount.\nThe price of cart will be decreased using a value calculated by using this percent and then rounded to 2 decimal places.",
                "default": "10.00",
                "example": "10.00"
              }
            },
            "example": {
              "discount": {
                "percent": "10.99"
              }
            }
          },
          "discounted_items": {
            "type": [
              "array",
              "null"
            ],
            "description": "List of items that are discounted by a promo code. Only for promo codes.",
            "items": {
              "description": "Discount for particular items in the cart.",
              "type": "object",
              "properties": {
                "sku": {
                  "type": "string",
                  "description": "Item SKU.",
                  "default": "elven_shield"
                },
                "discount": {
                  "type": "object",
                  "nullable": false,
                  "properties": {
                    "percent": {
                      "$ref": "#/components/schemas/Promotions_cart_item_discount"
                    }
                  },
                  "required": [
                    "percent"
                  ]
                }
              },
              "required": [
                "sku",
                "discount"
              ],
              "minItems": 1
            }
          }
        }
      },
      "Promotions_selected_unit_items": {
        "type": "object",
        "description": "The reward that is selected by a user.\nObject key is an SKU of a unit, and value is an SKU of one of the items in a unit.\n",
        "additionalProperties": {
          "type": "string"
        },
        "example": {
          "game_1": "game_1_steam",
          "game_2": "game_2_playstation"
        }
      },
      "Promotions_200-coupon-discount-reward": {
        "type": [
          "object",
          "null"
        ],
        "description": "Percent discount.\nThe price of cart will be decreased using a value calculated by using this percent and then rounded to 2 decimal places.",
        "properties": {
          "percent": {
            "type": "string",
            "example": "10.00"
          }
        }
      },
      "Promotions_422_limit_error": {
        "description": "The redemption limit is reached.",
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer",
            "example": 422
          },
          "errorCode": {
            "type": "integer",
            "example": 9804
          },
          "errorMessage": {
            "type": "string",
            "example": "[0401-9804]: You have reached the coupon redemption limit."
          },
          "transactionId": {
            "type": "string",
            "example": "x-x-x-x-transactionId-mock-x-x-x"
          }
        },
        "example": {
          "statusCode": 422,
          "errorCode": 9804,
          "errorMessage": "[0401-9804]: You have reached the coupon redemption limit."
        }
      },
      "Promotions_422_reglock_error": {
        "description": "Coupon is not available in user's region.",
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer",
            "example": 422
          },
          "errorCode": {
            "type": "integer",
            "example": 9808
          },
          "errorMessage": {
            "type": "string",
            "example": "[0401-9808]: Coupon is not available in your region."
          },
          "transactionId": {
            "type": "string",
            "example": "x-x-x-x-transactionId-mock-x-x-x"
          }
        },
        "example": {
          "statusCode": 422,
          "errorCode": 9804,
          "errorMessage": "[0401-9804]: You have reached the coupon redemption limit."
        }
      },
      "user-attribute_conditions_properties_attribute": {
        "type": "string",
        "description": "User attribute code.",
        "minLength": 1,
        "maxLength": 255,
        "pattern": "^[-_.\\d\\w]+$"
      },
      "user-attribute_conditions_properties_type-string": {
        "type": "string",
        "enum": [
          "string"
        ],
        "description": "User attribute type."
      },
      "user-attribute_conditions_properties_operator_string": {
        "type": "string",
        "enum": [
          "eq",
          "ne"
        ],
        "description": "Type of operation performed by condition. For <code>string</code> attribute type.\n\nPossible values:\n- `eq` — Equals\n- `ne` — Not equals"
      },
      "user-attribute_conditions_properties_value": {
        "type": "string",
        "description": "Condition value which user attribute value will be compared to. Type depends on attribute type.\n",
        "maxLength": 255
      },
      "user-attribute_conditions_properties_can_be_missing": {
        "type": "boolean",
        "description": "Indicates that the condition is met even if attribute is missing from user attributes. Pass `true` to show the item to users who don't have this attribute. Users who have the attribute, but the value does not match that specified in the condition, will not see the item. `false` — users who have the attribute, but the value does not match that specified in the condition, or the attribute is missing, will not see the item.\n"
      },
      "user-attribute_condition_string_model-get": {
        "type": "object",
        "title": "type = string",
        "properties": {
          "attribute": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_attribute"
          },
          "type": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_type-string"
          },
          "operator": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_operator_string"
          },
          "value": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_value"
          },
          "can_be_missing": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_can_be_missing"
          }
        }
      },
      "user-attribute_conditions_properties_type-number": {
        "type": "string",
        "enum": [
          "number"
        ],
        "description": "User attribute type."
      },
      "user-attribute_conditions_properties_operator_number": {
        "type": "string",
        "enum": [
          "eq",
          "ne",
          "gt",
          "ge",
          "lt",
          "le"
        ],
        "description": "Type of operation performed by condition. For <code>number</code> attribute type.\n\nPossible values:\n- `eq` — Equals\n- `ne` — Not equals\n- `gt` — Greater\n- `ge` — Greater or equals\n- `lt` — Less\n- `le` — Less or equals"
      },
      "user-attribute_condition_number_model-get": {
        "type": "object",
        "title": "type = number",
        "properties": {
          "attribute": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_attribute"
          },
          "type": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_type-number"
          },
          "operator": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_operator_number"
          },
          "value": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_value"
          },
          "can_be_missing": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_can_be_missing"
          }
        }
      },
      "user-attribute_conditions_properties_type-date": {
        "type": "string",
        "enum": [
          "date"
        ],
        "description": "User attribute type."
      },
      "user-attribute_conditions_properties_operator_date": {
        "type": "string",
        "enum": [
          "eq",
          "ne",
          "lt",
          "gt",
          "le",
          "ge"
        ],
        "description": "Type of operation performed by condition. For <code>date</code> attribute type.\n\nPossible values:\n- `eq` — Equals\n- `ne` — Not equals\n- `lt` — Earlier\n- `gt` — Later\n- `le` — Earlier or equals\n- `ge` — Later or equals"
      },
      "user-attribute_condition_date_model-get": {
        "type": "object",
        "title": "type = date",
        "properties": {
          "attribute": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_attribute"
          },
          "type": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_type-date"
          },
          "operator": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_operator_date"
          },
          "value": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_value"
          },
          "can_be_missing": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_can_be_missing"
          }
        }
      },
      "user-attribute_conditions_model-get": {
        "type": "array",
        "minItems": 1,
        "maxItems": 100,
        "items": {
          "oneOf": [
            {
              "$ref": "#/components/schemas/user-attribute_condition_string_model-get"
            },
            {
              "$ref": "#/components/schemas/user-attribute_condition_number_model-get"
            },
            {
              "$ref": "#/components/schemas/user-attribute_condition_date_model-get"
            }
          ]
        }
      },
      "promotion_user-attribute_conditions_model-get": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-get"
          },
          {
            "description": "Conditions for validating user attributes.\nDetermine promotion availability based on whether user attributes match all specified conditions.\n"
          }
        ]
      },
      "admin-promotions_200-get-coupon-promotion-model": {
        "type": "object",
        "properties": {
          "external_id": {
            "$ref": "#/components/schemas/Promotions_coupon-external_id"
          },
          "promotion_periods": {
            "$ref": "#/components/schemas/promotion_periods"
          },
          "name": {
            "$ref": "#/components/schemas/Promotions_coupon_name"
          },
          "bonus": {
            "$ref": "#/components/schemas/Promotions_coupon_bonus"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/Promotions_coupon-is_enabled"
          },
          "redeem_total_limit": {
            "$ref": "#/components/schemas/Promotions_coupon-redeem_total_limit"
          },
          "redeem_user_limit": {
            "$ref": "#/components/schemas/Promotions_coupon-redeem_user_limit"
          },
          "redeem_code_limit": {
            "$ref": "#/components/schemas/Promotions_redeem_code_limit"
          },
          "total_limit_state": {
            "$ref": "#/components/schemas/Promotions_coupon_total_limit_state"
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-get"
          }
        }
      },
      "user-attribute_condition_string_model-post": {
        "type": "object",
        "title": "type = string",
        "properties": {
          "attribute": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_attribute"
          },
          "type": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_type-string"
          },
          "operator": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_operator_string"
          },
          "value": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_value"
          },
          "can_be_missing": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_can_be_missing"
          }
        },
        "required": [
          "attribute",
          "operator",
          "value",
          "type"
        ]
      },
      "user-attribute_condition_number_model-post": {
        "type": "object",
        "title": "type = number",
        "properties": {
          "attribute": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_attribute"
          },
          "type": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_type-number"
          },
          "operator": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_operator_number"
          },
          "value": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_value"
          },
          "can_be_missing": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_can_be_missing"
          }
        },
        "required": [
          "attribute",
          "operator",
          "value",
          "type"
        ]
      },
      "user-attribute_condition_date_model-post": {
        "type": "object",
        "title": "type = date",
        "properties": {
          "attribute": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_attribute"
          },
          "type": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_type-date"
          },
          "operator": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_operator_date"
          },
          "value": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_value"
          },
          "can_be_missing": {
            "$ref": "#/components/schemas/user-attribute_conditions_properties_can_be_missing"
          }
        },
        "required": [
          "attribute",
          "operator",
          "value",
          "type"
        ]
      },
      "user-attribute_conditions_model-post": {
        "type": "array",
        "minItems": 1,
        "maxItems": 100,
        "items": {
          "oneOf": [
            {
              "$ref": "#/components/schemas/user-attribute_condition_string_model-post"
            },
            {
              "$ref": "#/components/schemas/user-attribute_condition_number_model-post"
            },
            {
              "$ref": "#/components/schemas/user-attribute_condition_date_model-post"
            }
          ]
        }
      },
      "promotion_user-attribute_conditions_model-post": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-post"
          },
          {
            "description": "Conditions for validating user attributes.\nDetermine promotion availability based on whether user attributes match all specified conditions.\n"
          }
        ]
      },
      "Promotions_coupon_code": {
        "type": "string",
        "description": "Unique case sensitive code. Contains letters and numbers.",
        "minLength": 1,
        "maxLength": 128,
        "example": "WINTER2021",
        "default": "WINTER2021",
        "pattern": "^[a-zA-Z0-9]+$"
      },
      "Promotions_coupon-generate-count": {
        "type": "integer",
        "minimum": 1,
        "maximum": 100000,
        "example": 10
      },
      "value-is_free": {
        "type": "boolean",
        "example": false,
        "default": false,
        "description": "Whether the item is free."
      },
      "Catalog_item_promotions": {
        "type": "array",
        "description": "Applied promotions for specific items in the cart. The array is returned in the following cases:\n\n* A discount promotion is configured for a specific item.\n\n* A promo code with the **Discount on selected items** setting is applied.\n\nIf no item-level promotions are applied, an empty array is returned.\n",
        "items": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "date_start": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            },
            "date_end": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time"
            },
            "discount": {
              "type": [
                "object",
                "null"
              ],
              "properties": {
                "percent": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "value": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            },
            "bonus": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "sku": {
                    "type": "string"
                  },
                  "quantity": {
                    "type": "integer"
                  },
                  "type": {
                    "type": "string",
                    "description": "Bonus item type.",
                    "enum": [
                      "virtual_good",
                      "virtual_currency",
                      "bundle",
                      "physical_good",
                      "game_key",
                      "nft"
                    ]
                  },
                  "name": {
                    "type": "string",
                    "description": "Bonus item name. Not available for `physical_good` bonus item type."
                  },
                  "image_url": {
                    "type": "string",
                    "description": "Bonus item image URL. Not available for `physical_good` bonus item type."
                  },
                  "bundle_type": {
                    "type": "string",
                    "description": "Bonus bundle item type. Available only for `bundle` bonus item type.",
                    "enum": [
                      "standard",
                      "virtual_currency_package"
                    ]
                  }
                }
              }
            },
            "limits": {
              "type": "object",
              "properties": {
                "per_user": {
                  "type": "object",
                  "properties": {
                    "available": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "Can_be_bought": {
        "type": "boolean",
        "example": true,
        "description": "If `true`, the user can buy an item."
      },
      "item_id": {
        "type": "integer",
        "example": 1,
        "description": "Internal unique item ID."
      },
      "value-point-sku": {
        "type": "string",
        "description": "Unique value point ID."
      },
      "value-point-amount": {
        "type": "integer",
        "description": "Amount of value points."
      },
      "value-point-name": {
        "type": "string",
        "description": "Value point name."
      },
      "Common_admin-image_url": {
        "type": "string",
        "example": "https://image.example.com",
        "description": "Image URL."
      },
      "is_clan": {
        "type": "boolean",
        "description": "Whether the value point is used in clan reward chains.",
        "example": true
      },
      "client-item-value-point-reward": {
        "type": "array",
        "description": "Value point item reward.",
        "items": {
          "type": "object",
          "properties": {
            "item_id": {
              "$ref": "#/components/schemas/item_id"
            },
            "sku": {
              "$ref": "#/components/schemas/value-point-sku"
            },
            "amount": {
              "$ref": "#/components/schemas/value-point-amount"
            },
            "name": {
              "$ref": "#/components/schemas/value-point-name"
            },
            "image_url": {
              "$ref": "#/components/schemas/Common_admin-image_url"
            },
            "is_clan": {
              "$ref": "#/components/schemas/is_clan"
            }
          }
        }
      },
      "catalog_recurrent_schedule_client_response": {
        "type": [
          "object",
          "null"
        ],
        "description": "Item limits recurrent refresh period for a user.",
        "oneOf": [
          {
            "type": "object",
            "title": "interval_type = daily",
            "description": "Daily type of user limits refresh.",
            "properties": {
              "interval_type": {
                "type": "string",
                "description": "Recurrent refresh period type.",
                "enum": [
                  "daily"
                ]
              },
              "reset_next_date": {
                "type": "integer",
                "description": "Date and time when limits reset (Unix Timestamp).",
                "example": 1677553200
              }
            }
          },
          {
            "type": "object",
            "title": "interval_type = weekly",
            "description": "Weekly type of user limits refresh.",
            "properties": {
              "interval_type": {
                "type": "string",
                "description": "Recurrent refresh period type.",
                "enum": [
                  "weekly"
                ]
              },
              "reset_next_date": {
                "type": "integer",
                "description": "Date and time when limits reset (Unix Timestamp).",
                "example": 1677553200
              }
            }
          },
          {
            "type": "object",
            "title": "interval_type = monthly",
            "description": "Monthly type of refresh of user limits.",
            "properties": {
              "interval_type": {
                "type": "string",
                "description": "Recurrent refresh period type.",
                "enum": [
                  "monthly"
                ]
              },
              "reset_next_date": {
                "type": "integer",
                "description": "Date and time when limits reset (Unix Timestamp).",
                "example": 1677553200
              }
            }
          },
          {
            "type": "object",
            "title": "interval_type = hourly",
            "description": "Reset of the user limits performed at the specified time interval in hours.",
            "properties": {
              "interval_type": {
                "type": "string",
                "description": "Recurrent refresh period type.",
                "enum": [
                  "hourly"
                ]
              },
              "reset_next_date": {
                "type": "integer",
                "description": "Date and time when limits reset (Unix Timestamp).",
                "example": 1677553200
              }
            }
          }
        ]
      },
      "limit_exceeded_visibility": {
        "type": "string",
        "example": "show",
        "enum": [
          "show",
          "hide"
        ],
        "description": "Determines the visibility of the item in the catalog after the purchase limit is reached, until the next limit reset.\n\nApplies to items for which recurring limit resets are configured in the `recurrent_schedule` array.\n\nIf limit resets are not configured, the item doesn't appear in the catalog after the purchase limit is reached,\nregardless of the `limit_exceeded_visibility` value.\n\nPossible values:\n- `show` — The item is returned in catalog retrieval API calls after the purchase limit is reached. In client-side\ncatalog retrieval API calls, once the limit is reached, the item is returned with the `can_be_bought: false` flag. The\nnext reset date is returned in `reset_next_date`.\n- `hide` — The item is not returned in catalog retrieval API calls after the purchase limit is reached, until the\nlimit is reset.",
        "default": "show"
      },
      "Catalog_item_limits": {
        "description": "Item limits.",
        "properties": {
          "per_user": {
            "type": [
              "object",
              "null"
            ],
            "description": "Item limits for a user.",
            "properties": {
              "total": {
                "type": "integer",
                "description": "Maximum number of items a single user can purchase.",
                "example": 5
              },
              "available": {
                "type": "integer",
                "description": "Remaining number of items the current user can purchase.",
                "example": 3
              },
              "recurrent_schedule": {
                "$ref": "#/components/schemas/catalog_recurrent_schedule_client_response"
              },
              "limit_exceeded_visibility": {
                "$ref": "#/components/schemas/limit_exceeded_visibility"
              }
            }
          },
          "per_item": {
            "type": [
              "object",
              "null"
            ],
            "description": "Item limits for an item.",
            "properties": {
              "total": {
                "type": "integer",
                "description": "Maximum number of items all users can purchase.",
                "example": 5
              },
              "available": {
                "type": "integer",
                "description": "Remaining number of items all users can purchase.",
                "example": 3
              }
            }
          }
        },
        "type": [
          "object",
          "null"
        ]
      },
      "item-periods": {
        "type": [
          "array",
          "null"
        ],
        "description": "Item sales period.",
        "items": {
          "type": "object",
          "properties": {
            "date_from": {
              "type": "string",
              "format": "date-time",
              "example": "2020-08-11T10:00:00+03:00",
              "description": "Date when the specified item will be available for sale."
            },
            "date_until": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time",
              "example": "2020-08-11T20:00:00+03:00",
              "description": "Date when the specified item will become unavailable for sale. Can be `null`."
            }
          }
        }
      },
      "Promotions_200-promo-code-bonus-reward": {
        "type": "object",
        "properties": {
          "item": {
            "type": "object",
            "properties": {
              "sku": {
                "type": "string",
                "example": "game_01",
                "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
              },
              "name": {
                "type": "string",
                "example": "Game name",
                "description": "Item name."
              },
              "type": {
                "type": "string",
                "example": "unit",
                "description": "Type of item: `virtual_good`/`virtual_currency`/`bundle`/`physical_good`/`unit`."
              },
              "description": {
                "type": "string",
                "example": "Game description",
                "description": "Item description."
              },
              "image_url": {
                "type": "string",
                "example": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                "description": "Image URL."
              },
              "unit_items": {
                "description": "If the item has the unit type, it includes all items in the unit. In the most cases the user should choose one of them as a promo code bonus.",
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "sku": {
                      "type": "string",
                      "example": "game_01",
                      "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
                    },
                    "type": {
                      "type": "string",
                      "example": "game_key",
                      "description": "Type of item: `game_key`."
                    },
                    "is_free": {
                      "$ref": "#/components/schemas/value-is_free"
                    },
                    "name": {
                      "type": "string",
                      "example": "Game name",
                      "description": "Item name."
                    },
                    "drm_name": {
                      "type": "string",
                      "example": "Steam",
                      "description": "DRM name."
                    },
                    "drm_sku": {
                      "type": "string",
                      "example": "steam",
                      "description": "Unique DRM ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
                    }
                  }
                }
              }
            }
          },
          "quantity": {
            "type": "number",
            "description": "Item quantity.",
            "default": 1
          }
        }
      },
      "Promotions_discounted_items": {
        "type": [
          "array",
          "null"
        ],
        "description": "List of items that are discounted by a promo code.",
        "items": {
          "description": "Discount for particular items in cart.",
          "type": "object",
          "properties": {
            "sku": {
              "type": "string",
              "description": "Item SKU.",
              "default": "elven_shield"
            },
            "discount": {
              "type": "object",
              "nullable": false,
              "properties": {
                "percent": {
                  "$ref": "#/components/schemas/Promotions_cart_item_discount"
                }
              },
              "required": [
                "percent"
              ]
            }
          },
          "required": [
            "sku",
            "discount"
          ],
          "minItems": 1
        }
      },
      "Promo_code_rewards": {
        "type": "object",
        "properties": {
          "bonus": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Promotions_200-promo-code-bonus-reward"
            }
          },
          "discount": {
            "$ref": "#/components/schemas/Promotions_200-coupon-discount-reward"
          },
          "discounted_items": {
            "$ref": "#/components/schemas/Promotions_discounted_items"
          },
          "is_selectable": {
            "type": "boolean",
            "description": "If `true`, the user should choose the bonus before redeeming a promo code."
          }
        }
      },
      "admin-attribute-external_id": {
        "type": "string",
        "minLength": 1,
        "maxLength": 255,
        "pattern": "^[a-zA-Z0-9-_]+$",
        "example": "attribute_1",
        "description": "Unique attribute ID. The `external_id` may contain only lowercase and uppercase Latin alphanumeric characters, dashes, and underscores."
      },
      "value-external_id": {
        "type": "string",
        "minLength": 1,
        "maxLength": 255,
        "pattern": "^[-_.\\d\\w]+$",
        "example": "attribute_value",
        "description": "Unique value ID for an attribute. The `external_id` may only contain lowercase Latin alphanumeric characters, dashes, and underscores."
      },
      "client-attributes": {
        "type": "array",
        "description": "List of attributes and their values corresponding to the item. Can be used for catalog filtering.",
        "example": {
          "value": {
            "external_id": "genre",
            "name": "Жанр",
            "values": [
              {
                "external_id": "genre_e3364991f92e751689a68b96598a5a5a84010b85",
                "value": "Casual"
              },
              {
                "external_id": "genre_eba07bfd0f982940773cba3744d97264dd58acd7",
                "value": "Strategy"
              },
              {
                "external_id": "genre_b8d0c6d8f0524c2b2d79ebb93aa3cd0e8b5199a8",
                "value": "Mobile"
              }
            ]
          }
        },
        "default": [],
        "items": {
          "type": "object",
          "properties": {
            "external_id": {
              "$ref": "#/components/schemas/admin-attribute-external_id"
            },
            "name": {
              "type": "string",
              "description": "Name of attribute.",
              "example": "Genre"
            },
            "values": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "$ref": "#/components/schemas/value-external_id"
                  },
                  "value": {
                    "type": "string",
                    "description": "Value of attribute.",
                    "example": "Strategy"
                  }
                }
              }
            }
          }
        }
      },
      "Promotions_promocode_total_limit_state": {
        "type": [
          "object",
          "null"
        ],
        "description": "Limits for each unique promo code.",
        "properties": {
          "available": {
            "type": "integer",
            "description": "The remaining number of times a promo code can be used.",
            "example": 3
          },
          "reserved": {
            "type": "integer",
            "description": "The reserved number of a promo code.",
            "example": 3
          },
          "used": {
            "type": "integer",
            "description": "The number of times a promo code is used.",
            "example": 5
          }
        }
      },
      "price_conditions_items": {
        "description": "Each object describes a rule the price should be.",
        "type": "object",
        "properties": {
          "operator": {
            "type": "string",
            "description": "Comparison operator for setting the price range for applying the promotion.\n\nPossible values:\n- `ge` — Greater or equal\n- `gt` — Greater than\n- `le` — Less or equal\n- `lt` — Less than\n- `eq` — Equals\n- `ne` — Not equals",
            "enum": [
              "ge",
              "gt",
              "le",
              "lt",
              "eq",
              "ne"
            ]
          },
          "value": {
            "type": "string",
            "description": "Value for determining the price range for applying the promotion.",
            "pattern": "^\\d+(\\.\\d{1,4})?$"
          }
        },
        "required": [
          "operator",
          "value"
        ]
      },
      "price_conditions_promocode": {
        "type": [
          "array",
          "null"
        ],
        "description": "Array of objects with conditions that set the price range for applying the promotion to the entire cart.<br>\nThe total price of all items in the user's cart is compared with the price range specified in the condition. [Bonuses](/api/shop-builder/operation/create-promo-code/#!path=bonus&t=request) and [discounts](/api/shop-builder/operation/create-promo-code/#!path=discount&t=request) are applied to all items in the cart if the price of the cart meets the specified condition.<br>\nIf you pass this array, set the value of the [discounted_items](/api/shop-builder/operation/create-promo-code/#!path=discounted_items&t=request) array to `null`.",
        "items": {
          "$ref": "#/components/schemas/price_conditions_items"
        }
      },
      "item_price_conditions_promocode": {
        "type": [
          "array",
          "null"
        ],
        "description": "Array of objects with conditions that set the price range for applying the promotion to certain items in the cart.<br>\nThe price of each item in the user's cart is compared with the price range specified in the condition. [Bonuses](/api/shop-builder/operation/create-promo-code/#!path=bonus&t=request) and [discounts](/api/shop-builder/operation/create-promo-code/#!path=discount&t=request) are applied only to those items in the cart whose price meets the condition.<br>\nIf you pass this array, set the value of the [discounted_items](/api/shop-builder/operation/create-promo-code/#!path=discounted_items&t=request) array to `null`.",
        "items": {
          "$ref": "#/components/schemas/price_conditions_items"
        }
      },
      "excluded_promotions": {
        "type": "array",
        "items": {
          "type": "integer"
        },
        "example": [
          12,
          789
        ],
        "description": "List of promotion IDs to exclude when applying this promotion. <br>Example: `[12, 789]`"
      },
      "Promotions_200-get-promocode-promotion-model": {
        "type": "object",
        "properties": {
          "external_id": {
            "$ref": "#/components/schemas/Promotions_coupon-external_id"
          },
          "promotion_periods": {
            "$ref": "#/components/schemas/promotion_periods"
          },
          "name": {
            "$ref": "#/components/schemas/Promotions_coupon_name"
          },
          "bonus": {
            "$ref": "#/components/schemas/Promotions_coupon_bonus"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/Promotions_coupon-is_enabled"
          },
          "redeem_total_limit": {
            "$ref": "#/components/schemas/Promotions_coupon-redeem_total_limit"
          },
          "redeem_user_limit": {
            "$ref": "#/components/schemas/Promotions_coupon-redeem_user_limit"
          },
          "redeem_code_limit": {
            "$ref": "#/components/schemas/Promotions_redeem_code_limit"
          },
          "discount": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "percent": {
                "$ref": "#/components/schemas/Promotions_promotion_discount_percent"
              }
            },
            "example": {
              "discount": {
                "percent": "10.99"
              }
            }
          },
          "discounted_items": {
            "$ref": "#/components/schemas/Promotions_discounted_items"
          },
          "total_limit_state": {
            "$ref": "#/components/schemas/Promotions_promocode_total_limit_state"
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-get"
          },
          "price_conditions": {
            "$ref": "#/components/schemas/price_conditions_promocode"
          },
          "item_price_conditions": {
            "$ref": "#/components/schemas/item_price_conditions_promocode"
          },
          "excluded_promotions": {
            "$ref": "#/components/schemas/excluded_promotions"
          }
        }
      },
      "Promotions_is_enabled": {
        "type": "boolean",
        "example": true,
        "description": "Whether promotion is enabled or not."
      },
      "price_conditions_discount": {
        "type": [
          "array",
          "null"
        ],
        "description": "Array of objects with conditions that set the price range for applying the promotion.<br> The promotion applies only to items whose price meets all the conditions in the array. If you pass this array, set the value of the [items](/api/shop-builder/operation/create-item-promotion/#!path=items&t=request) object to `null`.",
        "items": {
          "$ref": "#/components/schemas/price_conditions_items"
        }
      },
      "Promotions_promotion_limits": {
        "type": "object",
        "description": "Promotion limits.",
        "properties": {
          "per_user": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Promotion limitation for a separate user."
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/promotion_recurrent_schedule_response"
          }
        }
      },
      "price_conditions_bonus": {
        "type": [
          "array",
          "null"
        ],
        "description": "Array of objects with conditions that set the price range for applying the promotion.<br> The promotion applies only to items whose price meets all the conditions in the array. If you pass this array, set the value of the [condition](/api/shop-builder/operation/create-bonus-promotion/#!path=condition&t=request) object to `null`.",
        "items": {
          "$ref": "#/components/schemas/price_conditions_items"
        }
      },
      "Promotions_200-get-bonus-promotion-model": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Promotion ID. Unique promotion identifier within the project."
          },
          "promotion_periods": {
            "$ref": "#/components/schemas/promotion_periods"
          },
          "name": {
            "type": "object",
            "description": "Name of promotion. Should contain key/value pairs\nwhere key is a locale with \"^[a-z]{2}-[A-Z]{2}$\" format, value is string.\n",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "en-US": "Summer season bonus",
              "de-DE": "Sommersaison Bonus"
            }
          },
          "is_enabled": {
            "type": "boolean",
            "default": true
          },
          "condition": {
            "type": [
              "array",
              "null"
            ],
            "description": "Set of items required to be included in the purchase for applying a promotion. If this parameters is `null`, a promotion will be applied to any purchases within a project.",
            "items": {
              "type": "object",
              "properties": {
                "sku": {
                  "type": "string",
                  "description": "Item SKU.",
                  "default": "elven_sword"
                }
              }
            }
          },
          "bonus": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "description": "The list of items which will be added into purchase of user as a bonus.\n",
              "type": "object",
              "properties": {
                "sku": {
                  "type": "string",
                  "description": "Item SKU.",
                  "default": "elven_shield"
                },
                "quantity": {
                  "type": "number",
                  "description": "Item quantity.",
                  "default": 1
                }
              }
            }
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-get"
          },
          "limits": {
            "$ref": "#/components/schemas/Promotions_promotion_limits_response"
          },
          "excluded_promotions": {
            "$ref": "#/components/schemas/excluded_promotions"
          },
          "price_conditions": {
            "$ref": "#/components/schemas/price_conditions_bonus"
          }
        }
      },
      "Coupon_rewards": {
        "type": "object",
        "properties": {
          "bonus": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Promotions_200-coupon-bonus-reward"
            }
          },
          "is_selectable": {
            "type": "boolean",
            "description": "If `true`, the user should select a bonus before redeeming a coupon."
          }
        }
      },
      "Promotions_discounted_items_verify": {
        "type": [
          "array",
          "null"
        ],
        "description": "List of items that are discounted by a promo code.",
        "items": {
          "description": "Discount for particular items.",
          "type": "object",
          "properties": {
            "sku": {
              "type": "string",
              "example": "game_01",
              "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
            },
            "name": {
              "type": "string",
              "example": "Game name",
              "description": "Item name."
            },
            "type": {
              "type": "string",
              "example": "unit",
              "description": "Type of item: `virtual_good`/`virtual_currency`/`bundle`/`physical_good`/`unit`."
            },
            "description": {
              "type": "string",
              "example": "Game description",
              "description": "Item description."
            },
            "image_url": {
              "type": "string",
              "example": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
              "description": "Image URL."
            },
            "unit_items": {
              "description": "If the item has the unit type, it includes all items in the unit. In the most cases the user should choose one of them as a promo code bonus.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "sku": {
                    "type": "string",
                    "example": "game_01",
                    "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
                  },
                  "type": {
                    "type": "string",
                    "example": "game_key",
                    "description": "Type of item: `game_key`."
                  },
                  "name": {
                    "type": "string",
                    "example": "Game name",
                    "description": "Item name."
                  },
                  "drm_name": {
                    "type": "string",
                    "example": "Steam",
                    "description": "DRM name."
                  },
                  "drm_sku": {
                    "type": "string",
                    "example": "steam",
                    "description": "Unique DRM ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
                  }
                }
              }
            },
            "discount": {
              "type": "object",
              "nullable": false,
              "properties": {
                "percent": {
                  "$ref": "#/components/schemas/Promotions_cart_item_discount"
                }
              }
            }
          }
        }
      },
      "Promo_code_rewards_verify": {
        "type": "object",
        "properties": {
          "bonus": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Promotions_200-promo-code-bonus-reward"
            }
          },
          "discount": {
            "$ref": "#/components/schemas/Promotions_200-coupon-discount-reward"
          },
          "discounted_items": {
            "$ref": "#/components/schemas/Promotions_discounted_items_verify"
          },
          "is_selectable": {
            "type": "boolean",
            "description": "If `true`, the user should choose the bonus before redeeming a promo code."
          }
        }
      },
      "sku": {
        "type": "string",
        "minLength": 1,
        "maxLength": 255,
        "pattern": "^[a-zA-Z0-9_\\-–.]*$",
        "example": "booster_mega_1",
        "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
      },
      "Promotions_unique_catalog_offer_items": {
        "type": "array",
        "description": "A list of items SKU that are available after using the unique catalog offer.",
        "items": {
          "$ref": "#/components/schemas/sku"
        }
      },
      "Promotions_200-get-unique-catalog-offer-promotion-model": {
        "type": "object",
        "properties": {
          "external_id": {
            "$ref": "#/components/schemas/Promotions_coupon-external_id"
          },
          "promotion_periods": {
            "$ref": "#/components/schemas/promotion_periods"
          },
          "name": {
            "$ref": "#/components/schemas/Promotions_coupon_name"
          },
          "items": {
            "$ref": "#/components/schemas/Promotions_unique_catalog_offer_items"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/Promotions_coupon-is_enabled"
          },
          "redeem_total_limit": {
            "$ref": "#/components/schemas/Promotions_coupon-redeem_total_limit"
          },
          "redeem_user_limit": {
            "$ref": "#/components/schemas/Promotions_coupon-redeem_user_limit"
          },
          "redeem_code_limit": {
            "$ref": "#/components/schemas/Promotions_redeem_code_limit"
          },
          "total_limit_state": {
            "$ref": "#/components/schemas/Promotions_coupon_total_limit_state"
          }
        }
      },
      "Promotions_coupon_date_start": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "default": "2020-04-15T18:16:00+05:00",
        "description": "Date when your promotion will be started."
      },
      "Promotions_coupon_date_end": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "default": "2020-04-15T18:16:00+05:00",
        "description": "Date when your promotion will be finished. Can be `null`.  If `date_end` is `null`, promotion will be unlimited by time."
      },
      "User-limit-promo-code": {
        "type": "object",
        "properties": {
          "per_user": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "example": 10,
                "description": "The maximum number of times a user can use a promo code."
              },
              "available": {
                "type": "integer",
                "example": 9,
                "description": "The remaining number of times a user can use a promo code."
              }
            }
          }
        }
      },
      "User-limit-coupon": {
        "type": "object",
        "properties": {
          "per_user": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "example": 10,
                "description": "The maximum number of times a user can use a coupon."
              },
              "available": {
                "type": "integer",
                "example": 9,
                "description": "The remaining number of times a user can use a coupon."
              }
            }
          }
        }
      },
      "Code-limit-promo-code": {
        "type": "object",
        "properties": {
          "code": {
            "$ref": "#/components/schemas/Promotions_coupon_code"
          },
          "per_code": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "description": "The maximum number of times a promo code can be used."
              },
              "available": {
                "type": "integer",
                "description": "The remaining number of times promo code can be used."
              },
              "used": {
                "type": "integer",
                "description": "The number of times a promo code is used."
              },
              "reserved": {
                "type": "integer",
                "description": "The number of times a promo code is reserved."
              }
            }
          }
        }
      },
      "personalized-catalog_user-attribute_conditions_model-get": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-get"
          },
          {
            "description": "Conditions for validating user attributes.\nDetermine item availability in the catalog based on whether user attributes match all specified conditions.\n"
          }
        ]
      },
      "user-attribute_personalized-catalog": {
        "type": "object",
        "properties": {
          "rule_id": {
            "type": "number",
            "description": "Rule ID."
          },
          "name": {
            "type": "string",
            "description": "Readable name of a rule. Used to display a rule in Publisher Account."
          },
          "is_enabled": {
            "type": "boolean",
            "description": "If rule is enabled."
          },
          "is_satisfied_for_unauth": {
            "type": "boolean",
            "description": "Whether the item is displayed to unauthorized users. If `true`, the item is displayed to the unauthorized user regardless of catalog display rules. `false` by default."
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/personalized-catalog_user-attribute_conditions_model-get"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "Items which will be shown for user if his attribute values meet conditions.",
              "properties": {
                "item_id": {
                  "type": "number",
                  "description": "Item ID."
                },
                "sku": {
                  "type": "string",
                  "description": "Item SKU."
                },
                "name": {
                  "type": "string",
                  "description": "Item name."
                },
                "type": {
                  "type": "string",
                  "description": "Item type.",
                  "enum": [
                    "virtual_good",
                    "virtual_currency",
                    "bundle",
                    "physical_good",
                    "unit"
                  ]
                },
                "bundle_type": {
                  "type": "string",
                  "description": "Bundle type. Returned if item type is a bundle.",
                  "enum": [
                    "standard",
                    "virtual_currency_package"
                  ]
                }
              }
            }
          }
        },
        "required": [
          "rule_id",
          "name",
          "is_enabled",
          "attribute_conditions",
          "items"
        ]
      },
      "personalized-catalog_user-attribute_conditions_model-post": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-post"
          },
          {
            "description": "Conditions for validating user attributes.\nDetermine item availability in the catalog based on whether user attributes match all specified conditions.\n"
          }
        ]
      },
      "user-attribute_personalized-catalog-body-required": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Readable name of a rule. Used to display a rule in Publisher Account.",
            "minLength": 1,
            "maxLength": 255,
            "pattern": "^\\S"
          },
          "is_enabled": {
            "type": "boolean",
            "description": "If rule is enabled."
          },
          "is_satisfied_for_unauth": {
            "type": "boolean",
            "description": "Whether the item is displayed to unauthorized users. If `true`, the item is displayed to the unauthorized user regardless of catalog display rules. `false` by default."
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/personalized-catalog_user-attribute_conditions_model-post"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "description": "Items which are shown to a user if their attribute values meet conditions.",
                  "properties": {
                    "item_id": {
                      "type": "number",
                      "description": "Item ID."
                    }
                  },
                  "required": [
                    "item_id"
                  ]
                },
                {
                  "type": "object",
                  "description": "Items which are shown to a user if their attribute values meet conditions.",
                  "properties": {
                    "sku": {
                      "type": "string",
                      "description": "Item SKU."
                    }
                  },
                  "required": [
                    "sku"
                  ]
                }
              ]
            }
          }
        },
        "required": [
          "name",
          "is_enabled",
          "attribute_conditions",
          "items"
        ]
      },
      "422-invalid-request": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "description": "Response status code.",
            "example": 422
          },
          "errorCode": {
            "type": "number",
            "description": "Error code.",
            "example": 1102
          },
          "errorMessage": {
            "type": "string",
            "description": "Readable error message.",
            "example": "[0401-1102]: Unprocessable Entity. The property `external_id` is required"
          },
          "transactionId": {
            "type": "string",
            "description": "Unique ID of request.",
            "example": "da145238620011eb8e24fe6913ff226a"
          }
        }
      },
      "user-attribute_personalized-catalog_all": {
        "type": "object",
        "properties": {
          "rule_id": {
            "type": "number",
            "description": "Rule ID."
          },
          "name": {
            "type": "string",
            "description": "Readable name of a rule. Used to display a rule in Publisher Account."
          },
          "is_enabled": {
            "type": "boolean",
            "description": "If rule is enabled."
          },
          "is_satisfied_for_unauth": {
            "type": "boolean",
            "description": "Whether the item is displayed to unauthorized users. If `true`, the item is displayed to the unauthorized user regardless of catalog display rules. `false` by default."
          }
        },
        "required": [
          "rule_id",
          "name",
          "is_enabled"
        ]
      },
      "user-attribute_personalized-catalog-body": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Readable name of a rule. Used to display a rule in Publisher Account.",
            "minLength": 1,
            "maxLength": 255,
            "pattern": "^\\S"
          },
          "is_enabled": {
            "type": "boolean",
            "description": "If rule is enabled."
          },
          "is_satisfied_for_unauth": {
            "type": "boolean",
            "description": "Whether the item is displayed to unauthorized users. If `true`, the item is displayed to the unauthorized user regardless of catalog display rules. `false` by default."
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/personalized-catalog_user-attribute_conditions_model-post"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "description": "Items which are shown to a user if their attribute values meet conditions.",
                  "properties": {
                    "item_id": {
                      "type": "number",
                      "description": "Item ID."
                    }
                  },
                  "required": [
                    "item_id"
                  ]
                },
                {
                  "type": "object",
                  "description": "Items which are shown to a user if their attribute values meet conditions.",
                  "properties": {
                    "sku": {
                      "type": "string",
                      "description": "Item SKU."
                    }
                  },
                  "required": [
                    "sku"
                  ]
                }
              ]
            }
          }
        }
      },
      "User-limit_user-external-id": {
        "description": "User external ID.",
        "type": "string",
        "minLength": 1,
        "pattern": "^\\S+$"
      },
      "User-limit_user": {
        "type": "object",
        "properties": {
          "user_external_id": {
            "$ref": "#/components/schemas/User-limit_user-external-id"
          }
        },
        "required": [
          "user_external_id"
        ]
      },
      "User-limit_user_flexible": {
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "user_external_id": {
            "$ref": "#/components/schemas/User-limit_user-external-id"
          }
        }
      },
      "User-limit-promotion": {
        "type": "object",
        "properties": {
          "per_user": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "example": 10,
                "description": "The maximum number of times a user can use a promotion."
              },
              "available": {
                "type": "integer",
                "example": 9,
                "description": "The remaining number of times a user can use a promotion."
              }
            }
          }
        }
      },
      "User-limit_available_flexible": {
        "type": "integer",
        "minimum": 0,
        "description": "Remaining number of items or promotion uses available to the user within the limit applied."
      },
      "User-limit_available": {
        "type": "integer",
        "minimum": 1,
        "description": "Remaining number of items or promotion uses available to the user within the limit applied."
      },
      "two-letter-locale": {
        "type": [
          "object",
          "null"
        ],
        "description": "Two-letter lowercase language codes.",
        "title": "two-letter",
        "properties": {
          "en": {
            "type": [
              "string",
              "null"
            ],
            "description": "English"
          },
          "ar": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arabic"
          },
          "bg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Bulgarian"
          },
          "cn": {
            "type": [
              "string",
              "null"
            ],
            "description": "Chinese (Simplified)"
          },
          "cs": {
            "type": [
              "string",
              "null"
            ],
            "description": "Czech"
          },
          "de": {
            "type": [
              "string",
              "null"
            ],
            "description": "German"
          },
          "es": {
            "type": [
              "string",
              "null"
            ],
            "description": "Spanish (Spain)"
          },
          "fr": {
            "type": [
              "string",
              "null"
            ],
            "description": "French"
          },
          "he": {
            "type": [
              "string",
              "null"
            ],
            "description": "Hebrew"
          },
          "it": {
            "type": [
              "string",
              "null"
            ],
            "description": "Italian"
          },
          "ja": {
            "type": [
              "string",
              "null"
            ],
            "description": "Japanese"
          },
          "ko": {
            "type": [
              "string",
              "null"
            ],
            "description": "Korean"
          },
          "pl": {
            "type": [
              "string",
              "null"
            ],
            "description": "Polish"
          },
          "pt": {
            "type": [
              "string",
              "null"
            ],
            "description": "Portuguese"
          },
          "ro": {
            "type": [
              "string",
              "null"
            ],
            "description": "Romanian"
          },
          "ru": {
            "type": [
              "string",
              "null"
            ],
            "description": "Russian"
          },
          "th": {
            "type": [
              "string",
              "null"
            ],
            "description": "Thai"
          },
          "tr": {
            "type": [
              "string",
              "null"
            ],
            "description": "Turkish"
          },
          "tw": {
            "type": [
              "string",
              "null"
            ],
            "description": "Chinese (Traditional)"
          },
          "vi": {
            "type": [
              "string",
              "null"
            ],
            "description": "Vietnamese"
          },
          "km": {
            "type": [
              "string",
              "null"
            ],
            "description": "Khmer"
          },
          "id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Indonesian"
          },
          "lo": {
            "type": [
              "string",
              "null"
            ],
            "description": "Lao"
          },
          "my": {
            "type": [
              "string",
              "null"
            ],
            "description": "Burmese"
          },
          "ph": {
            "type": [
              "string",
              "null"
            ],
            "description": "Filipino"
          },
          "ne": {
            "type": [
              "string",
              "null"
            ],
            "description": "Nepali"
          }
        }
      },
      "five-letter-locale": {
        "type": [
          "object",
          "null"
        ],
        "description": "Five-character locale codes.",
        "title": "five-letter",
        "properties": {
          "en-US": {
            "type": [
              "string",
              "null"
            ],
            "description": "English"
          },
          "ar-AE": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arabic"
          },
          "bg-BG": {
            "type": [
              "string",
              "null"
            ],
            "description": "Bulgarian"
          },
          "zh-CN": {
            "type": [
              "string",
              "null"
            ],
            "description": "Chinese (Simplified)"
          },
          "cs-CZ": {
            "type": [
              "string",
              "null"
            ],
            "description": "Czech"
          },
          "de-DE": {
            "type": [
              "string",
              "null"
            ],
            "description": "German"
          },
          "es-ES": {
            "type": [
              "string",
              "null"
            ],
            "description": "Spanish (Spain)"
          },
          "fr-FR": {
            "type": [
              "string",
              "null"
            ],
            "description": "French"
          },
          "he-IL": {
            "type": [
              "string",
              "null"
            ],
            "description": "Hebrew"
          },
          "it-IT": {
            "type": [
              "string",
              "null"
            ],
            "description": "Italian"
          },
          "ja-JP": {
            "type": [
              "string",
              "null"
            ],
            "description": "Japanese"
          },
          "ko-KR": {
            "type": [
              "string",
              "null"
            ],
            "description": "Korean"
          },
          "pl-PL": {
            "type": [
              "string",
              "null"
            ],
            "description": "Polish"
          },
          "pt-BR": {
            "type": [
              "string",
              "null"
            ],
            "description": "Portuguese (Brazil)"
          },
          "ro-RO": {
            "type": [
              "string",
              "null"
            ],
            "description": "Romanian"
          },
          "ru-RU": {
            "type": [
              "string",
              "null"
            ],
            "description": "Russian"
          },
          "th-TH": {
            "type": [
              "string",
              "null"
            ],
            "description": "Thai"
          },
          "tr-TR": {
            "type": [
              "string",
              "null"
            ],
            "description": "Turkish"
          },
          "zh-TW": {
            "type": [
              "string",
              "null"
            ],
            "description": "Chinese (Traditional)"
          },
          "vi-VN": {
            "type": [
              "string",
              "null"
            ],
            "description": "Vietnamese"
          },
          "km-KH": {
            "type": [
              "string",
              "null"
            ],
            "description": "Khmer"
          },
          "id-ID": {
            "type": [
              "string",
              "null"
            ],
            "description": "Indonesian"
          },
          "lo-LA": {
            "type": [
              "string",
              "null"
            ],
            "description": "Lao"
          },
          "my-MM": {
            "type": [
              "string",
              "null"
            ],
            "description": "Burmese"
          },
          "ph-PH": {
            "type": [
              "string",
              "null"
            ],
            "description": "Filipino"
          },
          "ne-NP": {
            "type": [
              "string",
              "null"
            ],
            "description": "Nepali"
          }
        }
      },
      "name-localization-object": {
        "type": [
          "object",
          "null"
        ],
        "description": "Object with localizations for item’s name. Accepts value in one of two formats: two-letter lowercase language codes (e.g., `en`) or five-character language codes (e.g., `en-US`). While both formats are accepted as input, responses return two-letter lowercase language codes. When both options for the same language are provided (e.g., `en` and `en-US`), the last provided value is stored. You can find the full list of supported languages in the [documentation](/doc/shop-builder/references/supported-languages/).",
        "anyOf": [
          {
            "$ref": "#/components/schemas/two-letter-locale"
          },
          {
            "$ref": "#/components/schemas/five-letter-locale"
          }
        ]
      },
      "description-localization-object": {
        "type": [
          "object",
          "null"
        ],
        "description": "Object with localizations for item’s description. Accepts value in one of two formats: two-letter lowercase language codes (e.g., `en`) or five-character locale codes (e.g., `en-US`).  While both formats are accepted as input, responses return two-letter lowercase language codes. When both options for the same language are provided (e.g., `en` and `en-US`), the last provided value is stored. You can find the full list of supported languages in the [documentation](/doc/shop-builder/references/supported-languages/).",
        "anyOf": [
          {
            "$ref": "#/components/schemas/two-letter-locale"
          },
          {
            "$ref": "#/components/schemas/five-letter-locale"
          }
        ]
      },
      "long-description-localization-object": {
        "type": [
          "object",
          "null"
        ],
        "description": "Object with localizations for long description of item. Accepts value in one of two formats: two-letter lowercase language codes (e.g., `en`) or five-character locale codes (e.g., `en-US`).  While both formats are accepted as input, responses return two-letter lowercase language codes. When both variants for the same language are provided (e.g., `en` and `en-US`), the last provided value is stored. You can find the full list of supported languages in the [documentation](/doc/shop-builder/references/supported-languages/).",
        "anyOf": [
          {
            "$ref": "#/components/schemas/two-letter-locale"
          },
          {
            "$ref": "#/components/schemas/five-letter-locale"
          }
        ]
      },
      "Value-points-item-model": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "pattern": "^[a-zA-Z0-9_\\-–.]*$",
            "example": "booster_mega_1",
            "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "long_description": {
            "$ref": "#/components/schemas/long-description-localization-object"
          },
          "media_list": {
            "type": "array",
            "example": [
              {
                "type": "image",
                "url": "https://cdn3.xsolla.com/img/misc/images/71ab1e12126f2103e1868076f0acb21a.jpg"
              }
            ],
            "description": "Item's additional assets such as screenshots, gameplay video and so on.",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "image",
                    "video"
                  ],
                  "example": "image",
                  "description": "Type of media: `image`/`video`."
                },
                "url": {
                  "type": "string",
                  "example": "https://cdn3.xsolla.com/img/misc/images/71ab1e12126f2103e1868076f0acb21a.jpg",
                  "description": "Resource file."
                }
              }
            }
          },
          "type": {
            "type": "string",
            "description": "Type of item."
          },
          "image_url": {
            "type": "string"
          },
          "is_enabled": {
            "type": "boolean"
          },
          "order": {
            "type": "integer",
            "example": 1,
            "description": "Defines arrangement order."
          },
          "is_clan": {
            "$ref": "#/components/schemas/is_clan"
          }
        }
      },
      "is_enabled": {
        "type": "boolean",
        "example": true
      },
      "media_list": {
        "type": "array",
        "example": [
          {
            "type": "image",
            "url": "https://cdn3.xsolla.com/img/misc/images/71ab1e12126f2103e1868076f0acb21a.jpg"
          }
        ],
        "description": "Item's additional assets such as screenshots, gameplay video and so on.",
        "items": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "image",
                "video"
              ],
              "example": "image",
              "description": "Type of media: `image`/`video`."
            },
            "url": {
              "type": "string",
              "example": "https://cdn3.xsolla.com/img/misc/images/71ab1e12126f2103e1868076f0acb21a.jpg",
              "description": "Resource file."
            }
          }
        }
      },
      "order": {
        "type": "integer",
        "example": 1,
        "description": "Defines arrangement order."
      },
      "admin_value_points-create": {
        "properties": {
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "image_url": {
            "$ref": "#/components/schemas/Common_admin-image_url"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "long_description": {
            "$ref": "#/components/schemas/long-description-localization-object"
          },
          "media_list": {
            "$ref": "#/components/schemas/media_list"
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "sku": {
            "$ref": "#/components/schemas/sku"
          },
          "is_clan": {
            "$ref": "#/components/schemas/is_clan"
          }
        },
        "type": "object",
        "required": [
          "sku",
          "name"
        ]
      },
      "422-rc-vp-invalid-request": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer",
            "example": 422
          },
          "errorCode": {
            "type": "integer",
            "example": 1102
          },
          "errorMessage": {
            "type": "string",
            "example": "[0401-1102]: Unprocessable Entity. The property `property_name` is required"
          },
          "transactionId": {
            "type": "string",
            "example": "x-x-x-x-transactionId-mock-x-x-x"
          }
        }
      },
      "Value-point-item-model": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "pattern": "^[a-zA-Z0-9_\\-–.]*$",
            "example": "booster_mega_1",
            "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "long_description": {
            "$ref": "#/components/schemas/long-description-localization-object"
          },
          "media_list": {
            "type": "array",
            "example": [
              {
                "type": "image",
                "url": "https://cdn3.xsolla.com/img/misc/images/71ab1e12126f2103e1868076f0acb21a.jpg"
              }
            ],
            "description": "Item's additional assets such as screenshots, gameplay video and so on.",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "image",
                    "video"
                  ],
                  "example": "image",
                  "description": "Type of media: `image`/`video`."
                },
                "url": {
                  "type": "string",
                  "example": "https://cdn3.xsolla.com/img/misc/images/71ab1e12126f2103e1868076f0acb21a.jpg",
                  "description": "Resource file."
                }
              }
            }
          },
          "type": {
            "type": "string",
            "description": "Type of item."
          },
          "image_url": {
            "type": "string"
          },
          "is_enabled": {
            "type": "boolean"
          },
          "order": {
            "type": "integer",
            "example": 1,
            "description": "Defines arrangement order."
          },
          "can_delete": {
            "type": "boolean",
            "description": "Whether a value point can be deleted. If `false`, you can not delete the value point as there are one or more reward chains in which it is used. To delete the value point, first [delete](https://developers.xsolla.com/api/shop-builder/operation/admin-delete-reward-chain/) all reward chains containing it.\n\nIf `true`, the value point is not used in any reward chain and you can [delete](https://developers.xsolla.com/api/shop-builder/operation/admin-delete-value-point/) it.\n"
          },
          "is_clan": {
            "$ref": "#/components/schemas/is_clan"
          }
        }
      },
      "admin-item-value-point-reward": {
        "type": "object",
        "properties": {
          "item_id": {
            "$ref": "#/components/schemas/item_id"
          },
          "sku": {
            "$ref": "#/components/schemas/sku"
          },
          "amount": {
            "type": "integer",
            "description": "Amount of value points."
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "image_url": {
            "$ref": "#/components/schemas/Common_admin-image_url"
          }
        }
      },
      "item-value-point-reward-set": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "sku": {
              "$ref": "#/components/schemas/sku"
            },
            "amount": {
              "type": "integer",
              "description": "Amount of value points."
            }
          },
          "required": [
            "sku",
            "amount"
          ]
        }
      },
      "item-value-point-reward-set-for-patch": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "sku": {
              "$ref": "#/components/schemas/sku"
            },
            "amount": {
              "type": "integer",
              "description": "Amount of value points.",
              "minimum": 0
            }
          },
          "required": [
            "sku",
            "amount"
          ],
          "maxItems": 100
        }
      },
      "image_url": {
        "type": [
          "string",
          "null"
        ],
        "example": "https://image.example.com",
        "description": "Image URL."
      },
      "date_start": {
        "type": "string",
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "Date when your reward chain starts."
      },
      "date_end": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "Date when your reward chain promotion ends. Can be `null`. If `date_end` is `null`, the reward chain will be unlimited by time."
      },
      "clan_type": {
        "type": [
          "string",
          "null"
        ],
        "description": "Clan type.",
        "enum": [
          "clan",
          "guild",
          "faction",
          "community",
          "team",
          "squad",
          "alliance",
          "association",
          "coalition",
          "union",
          "group",
          "civilizations",
          "dynasty",
          "order",
          "league",
          "brotherhood",
          "kingdom",
          "organization",
          "house",
          "empire",
          "tribe",
          "cartel",
          null
        ]
      },
      "top_contributors": {
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "name": {
            "type": "string",
            "example": "Rocket",
            "description": "User ID that is sent to Xsolla during the authorization process. The user ID is used to link the user with your Xsolla Login project and is displayed as a nickname. If you are using authorization by [user ID](https://developers.xsolla.com/solutions/web-shop/create-web-shop/set-up-authentication/?tabs=100-UserIDAuth&link=100-UserIDAuth), we recommend passing the <code>name</code> parameter in [the webhook response](https://developers.xsolla.com/webhooks/operation/user-validation-in-webshop/). This parameter contains the username that will be used as a nickname."
          },
          "contributed_amount": {
            "type": "integer",
            "example": 100,
            "description": "Amount of value points earned by the user."
          }
        }
      },
      "value-point-description": {
        "type": [
          "string",
          "null"
        ],
        "description": "Value point description."
      },
      "value-point-long-description": {
        "type": [
          "string",
          "null"
        ],
        "description": "Value point long description."
      },
      "interval_type_weekly": {
        "type": "string",
        "description": "Frequency of the recurrent reset of the reward chain.",
        "enum": [
          "weekly"
        ]
      },
      "interval_type_monthly": {
        "type": "string",
        "description": "Frequency of the recurrent reset of the reward chain.",
        "enum": [
          "monthly"
        ]
      },
      "interval_type_hourly_rc": {
        "type": "string",
        "description": "Frequency of the recurrent reset of the reward chain.",
        "enum": [
          "hourly"
        ]
      },
      "reset_next_date": {
        "type": "integer",
        "description": "Calculated date and time when the reward chain will be reset next time <a href=\"https://en.wikipedia.org/wiki/Unix_time\" target=\"_blank\">(Unix Timestamp)</a>. <br><br> For example, the reward chain is reset monthly, starting from March 1, 2024, at 01:00 Kuala Lumpur time (GMT+8). The date and time of the next reward chain reset, April 1, 2024 at 01:00 Kuala Lumpur time (GMT+8), which equals March 31, 2024 17:00 GMT+0 or `1711904400000` in the Unix Timestamp format. <br><br> Example: `1711904400000`"
      },
      "recurrent_schedule_client_side": {
        "type": [
          "object",
          "null"
        ],
        "description": "Recurrent reset period of the reward chain.",
        "properties": {
          "interval_type": {
            "oneOf": [
              {
                "title": "interval_type = weekly",
                "$ref": "#/components/schemas/interval_type_weekly"
              },
              {
                "title": "interval_type = monthly",
                "$ref": "#/components/schemas/interval_type_monthly"
              },
              {
                "title": "interval_type = hourly",
                "$ref": "#/components/schemas/interval_type_hourly_rc"
              }
            ]
          },
          "reset_next_date": {
            "$ref": "#/components/schemas/reset_next_date"
          }
        }
      },
      "popup_header-two-letter-locale": {
        "type": [
          "object",
          "null"
        ],
        "description": "Object with localizations for header of a clan reward chain tooltip popup window. Two-letter lowercase [language code](https://developers.xsolla.com/doc/pay-station/features/localization/).",
        "properties": {
          "en": {
            "type": [
              "string",
              "null"
            ],
            "example": "How to unlock rewards"
          },
          "ar": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "bg": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "cn": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "cs": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "de": {
            "type": [
              "string",
              "null"
            ],
            "example": "Wie man Belohnungen freischaltet"
          },
          "es": {
            "type": [
              "string",
              "null"
            ],
            "example": "Cómo desbloquear recompensas"
          },
          "fr": {
            "type": [
              "string",
              "null"
            ],
            "example": "Comment débloquer des récompenses"
          },
          "he": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "it": {
            "type": [
              "string",
              "null"
            ],
            "example": "Come sbloccare ricompense"
          },
          "ja": {
            "type": [
              "string",
              "null"
            ],
            "example": "報酬をアンロックする方法"
          },
          "ko": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "pl": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "pt": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "ro": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "ru": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "th": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "tr": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "tw": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "vi": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          }
        }
      },
      "popup_instruction-two-letter-locale": {
        "type": [
          "object",
          "null"
        ],
        "description": "Object with localizations for instruction of a clan reward chain tooltip popup window. Two-letter lowercase [language code](https://developers.xsolla.com/doc/pay-station/features/localization/).",
        "properties": {
          "en": {
            "type": [
              "string",
              "null"
            ],
            "example": "You must be a clan member to get clan rewards. You join a clan when a clan member invites you to the clan, and you accept the invite. You can also create your own clan."
          },
          "ar": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "bg": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "cn": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "cs": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "de": {
            "type": [
              "string",
              "null"
            ],
            "example": "Du musst ein Clanmitglied sein, um Clananreize zu erhalten. Du trittst einem Clan bei, wenn ein Clanmitglied dich einlädt, und du die Einladung annimmst. Du kannst auch deinen eigenen Clan erstellen."
          },
          "es": {
            "type": [
              "string",
              "null"
            ],
            "example": "Debes ser miembro de un clan para obtener las recompensas del clan. Te unes a un clan cuando un miembro del clan te invita al clan y aceptas la invitación. También puedes crear tu propio clan."
          },
          "fr": {
            "type": [
              "string",
              "null"
            ],
            "example": "Vous devez être membre d'un clan pour obtenir les récompenses du clan. Vous rejoignez un clan lorsque qu'un membre du clan vous invite au clan et que vous acceptez l'invitation. Vous pouvez également créer votre propre clan."
          },
          "he": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "it": {
            "type": [
              "string",
              "null"
            ],
            "example": "Devi essere un membro del clan per ottenere le ricompense del clan. Ti unisci a un clan quando un membro del clan ti invita al clan e accetti l'invito. Puoi anche creare il tuo clan."
          },
          "ja": {
            "type": [
              "string",
              "null"
            ],
            "example": "クランリワードを受け取るには、クランメンバーでなければなりません。 クランメンバーがあなたをクランに招待し、招待を受け入れると、クランに参加できます。 あなた自身のクランを作成することもできます。"
          },
          "ko": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "pl": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "pt": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "ro": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "ru": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "th": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "tr": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "tw": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          },
          "vi": {
            "type": [
              "string",
              "null"
            ],
            "example": null
          }
        }
      },
      "popup_image_url": {
        "type": [
          "string",
          "null"
        ],
        "example": "https://image.example.com",
        "description": "Image for clan reward chain tooltip popup window.",
        "format": "uri"
      },
      "client-reward-chain-item-model": {
        "type": "object",
        "properties": {
          "reward_chain_id": {
            "type": "integer",
            "example": 9,
            "description": "Reward chain ID."
          },
          "name": {
            "type": "string",
            "example": "Weekly quest",
            "description": "Reward chain name."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "example": "Major weekly quest",
            "description": "Reward chain description."
          },
          "long_description": {
            "type": [
              "string",
              "null"
            ],
            "example": "You can get a lot of additional items just by shopping during the week",
            "description": "Reward chain long description."
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "date_start": {
            "$ref": "#/components/schemas/date_start"
          },
          "date_end": {
            "$ref": "#/components/schemas/date_end"
          },
          "clan_type": {
            "$ref": "#/components/schemas/clan_type"
          },
          "top_contributors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/top_contributors"
            }
          },
          "value_point": {
            "type": "object",
            "properties": {
              "sku": {
                "$ref": "#/components/schemas/value-point-sku"
              },
              "name": {
                "$ref": "#/components/schemas/value-point-name"
              },
              "image_url": {
                "$ref": "#/components/schemas/Common_admin-image_url"
              },
              "description": {
                "$ref": "#/components/schemas/value-point-description"
              },
              "long_description": {
                "$ref": "#/components/schemas/value-point-long-description"
              },
              "amount": {
                "$ref": "#/components/schemas/value-point-amount"
              },
              "is_clan": {
                "$ref": "#/components/schemas/is_clan"
              }
            }
          },
          "steps": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "Reward chain step.",
              "properties": {
                "step_id": {
                  "type": "integer",
                  "example": 10,
                  "description": "Step ID."
                },
                "name": {
                  "type": "string",
                  "example": "Level 1",
                  "description": "Step name."
                },
                "is_claimed": {
                  "type": "boolean",
                  "example": false,
                  "description": "Whether the step reward is claimed."
                },
                "image_url": {
                  "$ref": "#/components/schemas/Common_admin-image_url"
                },
                "price": {
                  "type": "object",
                  "properties": {
                    "amount": {
                      "type": "integer",
                      "example": 100,
                      "description": "The number of value points that a user claim for the step."
                    }
                  }
                },
                "reward": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "sku": {
                        "$ref": "#/components/schemas/sku"
                      },
                      "name": {
                        "type": "string",
                        "example": "Super box",
                        "description": "Item name."
                      },
                      "type": {
                        "type": "string",
                        "example": "bundle",
                        "description": "Type of item."
                      },
                      "description": {
                        "type": "string",
                        "example": "Super box with items",
                        "description": "Item description."
                      },
                      "image_url": {
                        "$ref": "#/components/schemas/Common_admin-image_url"
                      },
                      "quantity": {
                        "type": "integer",
                        "example": 2,
                        "description": "Item quantity."
                      }
                    }
                  }
                }
              }
            }
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/recurrent_schedule_client_side"
          },
          "popup_header": {
            "$ref": "#/components/schemas/popup_header-two-letter-locale"
          },
          "popup_instruction": {
            "$ref": "#/components/schemas/popup_instruction-two-letter-locale"
          },
          "popup_image_url": {
            "$ref": "#/components/schemas/popup_image_url"
          }
        }
      },
      "Pagination_has-more": {
        "type": "boolean",
        "example": true,
        "description": "Used as an indicator that there are more pages."
      },
      "reward_chain_id": {
        "type": "integer",
        "example": 9,
        "description": "Unique reward chain ID."
      },
      "periods": {
        "type": "array",
        "nullable": false,
        "description": "Reward chain validity periods. If multiple periods are specified, both `date_from` and `date_until` are required.",
        "items": {
          "type": "object",
          "properties": {
            "date_from": {
              "type": "string",
              "format": "date-time",
              "nullable": false,
              "example": "2020-08-11T10:00:00+03:00",
              "description": "Start date for the specified reward chain."
            },
            "date_until": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time",
              "example": "2020-08-11T20:00:00+03:00",
              "description": "End date for the specified reward chain. Can be `null` only if a single validity period is specified."
            }
          },
          "required": [
            "date_from"
          ]
        }
      },
      "day_of_week": {
        "type": "integer",
        "description": "Day of the week when the reward chain is reset, where `1` is Monday and `7` is Sunday.",
        "minimum": 1,
        "maximum": 7
      },
      "time": {
        "type": "string",
        "description": "Time when the reward chain is reset in the desired time zone (rounding to hours). <br><br> For example, the set time for the reward chain reset is 01:00 for the Kuala Lumpur time zone (GMT+8). In this case, the value of the `time` parameter is `01:00:00+08:00`.",
        "pattern": "((0[0-9]|1[0-9]|2[0-3]):00:00)(\\+|-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])",
        "example": "01:00:00+08:00"
      },
      "displayable_reset_start_date": {
        "description": "Date and time of the first reset of the reward chain. <br><br> For example, the date and time of the first reset of the reward chain is March 1, 2024, at 01:00 Kuala Lumpur time, or `2024-03-01T01:00:00+08:00` in the <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> format. <br><br> Example: `2024-03-01T01:00:00+08:00`",
        "type": "string",
        "format": "date-time"
      },
      "displayable_reset_next_date": {
        "description": "Calculated date and time when the reward chain will be reset next time <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">(ISO 8601)</a>. <br><br> For example, the reward chain is reset monthly, starting from March 1, 2024, at 01:00 Kuala Lumpur time. The date and time of the next reward chain reset: April 1, 2024 at 01:00 Kuala Lumpur time, which equals `2024-04-01T01:00:00+08:00` in the <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> format. <br><br> Example: `2024-04-01T01:00:00+08:00`",
        "type": "string",
        "format": "date-time"
      },
      "day_of_month": {
        "type": "integer",
        "description": "Day of the month when the reward chain is reset. If the number of days in the month is less than the ordinal number of the specified day, then the reward chain reset occurs on the last day of the month.",
        "minimum": 1,
        "maximum": 31
      },
      "reward_chain_hours_interval": {
        "type": "integer",
        "description": "Interval in hours, after which the reward chain is reset. <br><br> The countdown starts from the <a href=\"https://developers.xsolla.com/api/shop-builder/operation/admin-create-reward-chain/#!path=0/date_start&t=request\">date_start</a> parameter. <br><br> For example, if `date_start = \"2025-11-15T18:15:00+05:00\"` and `hours_interval = 2`, the reward chain will reset every 2 hours starting from `\"2025-11-15T20:15:00+05:00\"`.\n",
        "minimum": 1,
        "maximum": 10000
      },
      "admin_recurrent_schedule": {
        "type": [
          "object",
          "null"
        ],
        "description": "Recurrent reset period of the reward chain.",
        "oneOf": [
          {
            "type": "object",
            "title": "interval_type = weekly",
            "description": "Weekly reset of the reward chain.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/interval_type_weekly"
              },
              "day_of_week": {
                "$ref": "#/components/schemas/day_of_week"
              },
              "time": {
                "$ref": "#/components/schemas/time"
              },
              "reset_next_date": {
                "$ref": "#/components/schemas/reset_next_date"
              },
              "displayable_reset_start_date": {
                "$ref": "#/components/schemas/displayable_reset_start_date"
              },
              "displayable_reset_next_date": {
                "$ref": "#/components/schemas/displayable_reset_next_date"
              }
            }
          },
          {
            "type": "object",
            "title": "interval_type = monthly",
            "description": "Monthly reset of the reward chain.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/interval_type_monthly"
              },
              "day_of_month": {
                "$ref": "#/components/schemas/day_of_month"
              },
              "time": {
                "$ref": "#/components/schemas/time"
              },
              "reset_next_date": {
                "$ref": "#/components/schemas/reset_next_date"
              },
              "displayable_reset_start_date": {
                "$ref": "#/components/schemas/displayable_reset_start_date"
              },
              "displayable_reset_next_date": {
                "$ref": "#/components/schemas/displayable_reset_next_date"
              }
            }
          },
          {
            "type": "object",
            "title": "interval_type = hourly",
            "description": "Reset of the reward chain performed at the specified time interval in hours.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/interval_type_hourly_rc"
              },
              "hours_interval": {
                "$ref": "#/components/schemas/reward_chain_hours_interval"
              },
              "time": {
                "$ref": "#/components/schemas/time"
              },
              "reset_next_date": {
                "$ref": "#/components/schemas/reset_next_date"
              },
              "displayable_reset_start_date": {
                "$ref": "#/components/schemas/displayable_reset_start_date"
              },
              "displayable_reset_next_date": {
                "$ref": "#/components/schemas/displayable_reset_next_date"
              }
            }
          }
        ]
      },
      "chain_user-attribute_conditions_model-get": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-get"
          },
          {
            "description": "Conditions for validating user attributes.\nDetermine chain availability based on whether user attributes match all specified conditions.\n"
          }
        ]
      },
      "chain_is_always_visible": {
        "description": "Whether the chain is visible to all users. If `true`, the chain is always displayed, regardless of the user's authentication status or attributes.\n\nTo configure personalization, you need to pass `false`. The logic of the chain display will be the following:\n  * If `false` is passed and the visibility conditions are specified in the `attribute_conditions` array, the chain is considered personalized and is displayed only to authorized users who meet the specified conditions.\n  * If `false` is passed and the `attribute_conditions` array isn’t passed or is empty, the chain is displayed to unauthorized users, as well as in cases when no matching chain is found for the authorized user.\n",
        "type": "boolean",
        "default": true,
        "example": true
      },
      "is_reset_after_end": {
        "description": "Whether to reset the reward chain (value points and progress of all users) after its end date:\n* If `true`, the reward chain will be reset after its end date.\n* If `false`, the reward chain will not be reset after its end date.\n\n<br>\n<div class=\"notice\"><strong>Notice</strong><br><br>\nCan’t be <code>true</code> if: <br>\n<ul>\n  <li>A reset period is set in <code>recurrent_schedule</code>.</li>\n  <li>The <code>null</code> value is passed in <code>periods.date_until</code>.</li>\n</ul>\n</div>\n",
        "type": "boolean",
        "default": false,
        "example": false
      },
      "admin-get-reward-chain-item-basic-model": {
        "type": "object",
        "description": "A reward chain.",
        "properties": {
          "reward_chain_id": {
            "$ref": "#/components/schemas/reward_chain_id"
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "long_description": {
            "$ref": "#/components/schemas/long-description-localization-object"
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "periods": {
            "$ref": "#/components/schemas/periods"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "value_point": {
            "type": "object",
            "properties": {
              "sku": {
                "$ref": "#/components/schemas/value-point-sku"
              },
              "name": {
                "$ref": "#/components/schemas/value-point-name"
              },
              "type": {
                "type": "string",
                "example": "value_point"
              },
              "image_url": {
                "$ref": "#/components/schemas/Common_admin-image_url"
              },
              "description": {
                "$ref": "#/components/schemas/value-point-description"
              },
              "long_description": {
                "$ref": "#/components/schemas/value-point-long-description"
              },
              "amount": {
                "$ref": "#/components/schemas/value-point-amount"
              },
              "is_clan": {
                "$ref": "#/components/schemas/is_clan"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "media_list": {
                "$ref": "#/components/schemas/media_list"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              }
            }
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/admin_recurrent_schedule"
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/chain_user-attribute_conditions_model-get"
          },
          "is_always_visible": {
            "$ref": "#/components/schemas/chain_is_always_visible"
          },
          "is_reset_after_end": {
            "$ref": "#/components/schemas/is_reset_after_end"
          }
        }
      },
      "admin-get-reward-chain-item-clan-basic-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/admin-get-reward-chain-item-basic-model"
          },
          {
            "type": "object",
            "description": "Clan reward chain.",
            "properties": {
              "value_point": {
                "type": "object",
                "description": "A value point configured for a clan reward chain.",
                "properties": {
                  "sku": {
                    "$ref": "#/components/schemas/value-point-sku"
                  },
                  "name": {
                    "$ref": "#/components/schemas/value-point-name"
                  },
                  "type": {
                    "type": "string",
                    "example": "value_point"
                  },
                  "image_url": {
                    "$ref": "#/components/schemas/Common_admin-image_url"
                  },
                  "description": {
                    "$ref": "#/components/schemas/value-point-description"
                  },
                  "long_description": {
                    "$ref": "#/components/schemas/value-point-long-description"
                  },
                  "amount": {
                    "$ref": "#/components/schemas/value-point-amount"
                  },
                  "is_clan": {
                    "$ref": "#/components/schemas/is_clan"
                  },
                  "is_enabled": {
                    "$ref": "#/components/schemas/is_enabled"
                  },
                  "media_list": {
                    "$ref": "#/components/schemas/media_list"
                  },
                  "order": {
                    "$ref": "#/components/schemas/order"
                  }
                },
                "required": [
                  "sku"
                ]
              },
              "popup_header": {
                "$ref": "#/components/schemas/popup_header-two-letter-locale"
              },
              "popup_instruction": {
                "$ref": "#/components/schemas/popup_instruction-two-letter-locale"
              },
              "popup_image_url": {
                "$ref": "#/components/schemas/popup_image_url"
              },
              "clan_type": {
                "$ref": "#/components/schemas/clan_type"
              }
            }
          }
        ]
      },
      "step_price_amount": {
        "type": "integer",
        "example": 100,
        "description": "Step price in value points."
      },
      "reward_step_price": {
        "type": "object",
        "properties": {
          "amount": {
            "$ref": "#/components/schemas/step_price_amount"
          }
        },
        "required": [
          "amount"
        ]
      },
      "reward_item_quantity": {
        "type": "integer",
        "example": 2,
        "description": "Item quantity."
      },
      "reward-chain-step-reward_user-attribute_conditions_model-post": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-post"
          },
          {
            "description": "Conditions for validating user attributes.\nDetermine reward availability for reward chain steps based on whether user attributes match all specified conditions.\n"
          }
        ]
      },
      "create_reward_step": {
        "type": "object",
        "description": "Reward chain step.",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "price": {
            "$ref": "#/components/schemas/reward_step_price"
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "reward": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "sku": {
                  "$ref": "#/components/schemas/sku"
                },
                "quantity": {
                  "$ref": "#/components/schemas/reward_item_quantity"
                },
                "attribute_conditions": {
                  "$ref": "#/components/schemas/reward-chain-step-reward_user-attribute_conditions_model-post"
                }
              },
              "required": [
                "sku",
                "quantity"
              ]
            }
          }
        },
        "required": [
          "name",
          "price",
          "reward"
        ]
      },
      "recurrent_schedule_create_update": {
        "type": [
          "object",
          "null"
        ],
        "description": "Recurrent reset period of the reward chain.",
        "oneOf": [
          {
            "type": "object",
            "title": "interval_type = weekly",
            "description": "Weekly type of reward chain refresh.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/interval_type_weekly"
              },
              "day_of_week": {
                "$ref": "#/components/schemas/day_of_week"
              },
              "time": {
                "$ref": "#/components/schemas/time"
              }
            },
            "required": [
              "interval_type",
              "time",
              "day_of_week"
            ]
          },
          {
            "type": "object",
            "title": "interval_type = monthly",
            "description": "Monthly type of refresh of reward chain.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/interval_type_monthly"
              },
              "day_of_month": {
                "$ref": "#/components/schemas/day_of_month"
              },
              "time": {
                "$ref": "#/components/schemas/time"
              }
            },
            "required": [
              "interval_type",
              "time",
              "day_of_month"
            ]
          },
          {
            "type": "object",
            "title": "interval_type = hourly",
            "description": "Reset of the reward chain performed at the specified time interval in hours.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/interval_type_hourly_rc"
              },
              "hours_interval": {
                "$ref": "#/components/schemas/reward_chain_hours_interval"
              }
            },
            "required": [
              "interval_type",
              "hours_interval"
            ]
          }
        ]
      },
      "chain_user-attribute_conditions_model-post": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-post"
          },
          {
            "description": "Conditions for validating user attributes.\nDetermine chain availability based on whether user attributes match all specified conditions.\n"
          }
        ]
      },
      "create-reward-chain-model": {
        "type": "object",
        "description": "A reward chain.",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "long_description": {
            "$ref": "#/components/schemas/long-description-localization-object"
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "periods": {
            "$ref": "#/components/schemas/periods"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "value_point": {
            "type": "object",
            "properties": {
              "sku": {
                "$ref": "#/components/schemas/sku"
              }
            },
            "required": [
              "sku"
            ]
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/create_reward_step"
            }
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/recurrent_schedule_create_update"
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/chain_user-attribute_conditions_model-post"
          },
          "is_always_visible": {
            "$ref": "#/components/schemas/chain_is_always_visible"
          },
          "is_reset_after_end": {
            "$ref": "#/components/schemas/is_reset_after_end"
          }
        },
        "required": [
          "name",
          "value_point",
          "periods",
          "steps",
          "is_enabled"
        ]
      },
      "create-clan-reward-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/create-reward-chain-model"
          },
          {
            "type": "object",
            "description": "Clan reward chain.",
            "properties": {
              "value_point": {
                "type": "object",
                "description": "A value point configured for a clan reward chain.",
                "properties": {
                  "sku": {
                    "$ref": "#/components/schemas/sku"
                  }
                },
                "required": [
                  "sku"
                ]
              },
              "popup_header": {
                "$ref": "#/components/schemas/popup_header-two-letter-locale"
              },
              "popup_instruction": {
                "$ref": "#/components/schemas/popup_instruction-two-letter-locale"
              },
              "popup_image_url": {
                "$ref": "#/components/schemas/popup_image_url"
              },
              "clan_type": {
                "$ref": "#/components/schemas/clan_type"
              }
            },
            "required": [
              "name",
              "value_point",
              "periods",
              "steps",
              "is_enabled",
              "popup_header",
              "popup_instruction"
            ]
          }
        ]
      },
      "step_id": {
        "type": [
          "integer",
          "null"
        ],
        "example": 10,
        "description": "Unique step ID."
      },
      "reward-chain-step-reward_user-attribute_conditions_model-get": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-get"
          },
          {
            "description": "Conditions for validating user attributes.\nDetermine reward availability for reward chain steps based on whether user attributes match all specified conditions.\n"
          }
        ]
      },
      "reward_step_short": {
        "type": "object",
        "description": "Reward chain step.",
        "properties": {
          "step_id": {
            "$ref": "#/components/schemas/step_id"
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "price": {
            "$ref": "#/components/schemas/reward_step_price"
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "reward": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "sku": {
                  "$ref": "#/components/schemas/sku"
                },
                "quantity": {
                  "$ref": "#/components/schemas/reward_item_quantity"
                },
                "attribute_conditions": {
                  "$ref": "#/components/schemas/reward-chain-step-reward_user-attribute_conditions_model-get"
                }
              }
            }
          }
        }
      },
      "admin-get-reward-chain-item-full-model": {
        "type": "object",
        "description": "A reward chain.",
        "properties": {
          "reward_chain_id": {
            "$ref": "#/components/schemas/reward_chain_id"
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "long_description": {
            "$ref": "#/components/schemas/long-description-localization-object"
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "periods": {
            "$ref": "#/components/schemas/periods"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "value_point": {
            "type": "object",
            "properties": {
              "sku": {
                "$ref": "#/components/schemas/sku"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "long_description": {
                "$ref": "#/components/schemas/long-description-localization-object"
              },
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "type": {
                "type": "string"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "image_url": {
                "$ref": "#/components/schemas/image_url"
              },
              "media_list": {
                "$ref": "#/components/schemas/media_list"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "is_clan": {
                "$ref": "#/components/schemas/is_clan"
              }
            }
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/reward_step_short"
            }
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/admin_recurrent_schedule"
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/chain_user-attribute_conditions_model-get"
          },
          "is_always_visible": {
            "$ref": "#/components/schemas/chain_is_always_visible"
          },
          "is_reset_after_end": {
            "$ref": "#/components/schemas/is_reset_after_end"
          }
        }
      },
      "admin-get-reward-chain-item-clan-full-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/admin-get-reward-chain-item-full-model"
          },
          {
            "type": "object",
            "description": "Clan reward chain.",
            "properties": {
              "value_point": {
                "type": "object",
                "description": "A value point configured for a clan reward chain.",
                "properties": {
                  "sku": {
                    "$ref": "#/components/schemas/sku"
                  },
                  "description": {
                    "$ref": "#/components/schemas/description-localization-object"
                  },
                  "long_description": {
                    "$ref": "#/components/schemas/long-description-localization-object"
                  },
                  "name": {
                    "$ref": "#/components/schemas/name-localization-object"
                  },
                  "type": {
                    "type": "string"
                  },
                  "is_enabled": {
                    "$ref": "#/components/schemas/is_enabled"
                  },
                  "image_url": {
                    "$ref": "#/components/schemas/image_url"
                  },
                  "media_list": {
                    "$ref": "#/components/schemas/media_list"
                  },
                  "order": {
                    "$ref": "#/components/schemas/order"
                  },
                  "is_clan": {
                    "$ref": "#/components/schemas/is_clan"
                  }
                },
                "required": [
                  "sku"
                ]
              },
              "popup_header": {
                "$ref": "#/components/schemas/popup_header-two-letter-locale"
              },
              "popup_instruction": {
                "$ref": "#/components/schemas/popup_instruction-two-letter-locale"
              },
              "popup_image_url": {
                "$ref": "#/components/schemas/popup_image_url"
              },
              "clan_type": {
                "$ref": "#/components/schemas/clan_type"
              },
              "top_contributors": {
                "$ref": "#/components/schemas/top_contributors"
              }
            }
          }
        ]
      },
      "modify_reward_step": {
        "type": "object",
        "description": "Reward chain step.",
        "properties": {
          "step_id": {
            "$ref": "#/components/schemas/step_id"
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "price": {
            "$ref": "#/components/schemas/reward_step_price"
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "reward": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "sku": {
                  "$ref": "#/components/schemas/sku"
                },
                "quantity": {
                  "$ref": "#/components/schemas/reward_item_quantity"
                },
                "attribute_conditions": {
                  "$ref": "#/components/schemas/reward-chain-step-reward_user-attribute_conditions_model-post"
                }
              },
              "required": [
                "sku",
                "quantity"
              ]
            }
          }
        },
        "required": [
          "name",
          "price",
          "reward",
          "step_id"
        ]
      },
      "update-reward-chain-model": {
        "type": "object",
        "description": "A reward chain.",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "long_description": {
            "$ref": "#/components/schemas/long-description-localization-object"
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "periods": {
            "$ref": "#/components/schemas/periods"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/modify_reward_step"
            }
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/recurrent_schedule_create_update"
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/chain_user-attribute_conditions_model-post"
          },
          "is_always_visible": {
            "$ref": "#/components/schemas/chain_is_always_visible"
          },
          "is_reset_after_end": {
            "$ref": "#/components/schemas/is_reset_after_end"
          }
        },
        "required": [
          "name",
          "periods",
          "steps",
          "is_enabled"
        ]
      },
      "update-clan-reward-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/create-reward-chain-model"
          },
          {
            "type": "object",
            "description": "Clan reward chain.",
            "properties": {
              "popup_header": {
                "$ref": "#/components/schemas/popup_header-two-letter-locale"
              },
              "popup_instruction": {
                "$ref": "#/components/schemas/popup_instruction-two-letter-locale"
              },
              "popup_image_url": {
                "$ref": "#/components/schemas/popup_image_url"
              },
              "clan_type": {
                "$ref": "#/components/schemas/clan_type"
              }
            },
            "required": [
              "name",
              "periods",
              "steps",
              "is_enabled",
              "popup_header",
              "popup_instruction"
            ]
          }
        ]
      },
      "daily_chain_type": {
        "type": "string",
        "enum": [
          "calendar_hard",
          "rolling_skippable",
          "rolling_unskippable"
        ],
        "description": "Daily reward type that determines when users can claim rewards.\n\nPossible values:\n- `calendar_hard` — Unlocks the next step reward every 24 hours. Any unclaimed step rewards are permanently lost once\nthe next step reward becomes available.\n- `rolling_skippable` — Unlocks the next step reward every 24 hours based on `date_start`. Progression is sequential:\na new reward will not unlock until the previous one has been claimed. If a user skips one or more days, they continue\nfrom where they left off; missed days do not grant multiple rewards.\n- `rolling_unskippable` — Unlocks the next step reward every 24 hours based on `date_start`. Progression is\nsequential: a new reward will not unlock until the previous one has been claimed. However, if a user skips a day,\ntheir progress is reset, and they must start again from the first step."
      },
      "calendar_hard_date_start": {
        "type": "string",
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "Date when your daily reward starts.\n"
      },
      "calendar_hard_is_recurrent": {
        "type": "boolean",
        "example": true,
        "default": false,
        "description": "Whether the daily reward is recurrent. If `true`, the daily reward will automatically reset after the end date. The next `start_date` and `end_date` schedule is based on the number of daily reward steps and the initial time set on `start_date`.\n"
      },
      "calendar-hard-daily-chain-base": {
        "type": "object",
        "description": "Base properties for `calendar_hard` daily reward type.",
        "properties": {
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/daily_chain_type"
              },
              {
                "enum": [
                  "calendar_hard"
                ]
              }
            ]
          },
          "date_start": {
            "$ref": "#/components/schemas/calendar_hard_date_start"
          },
          "is_recurrent": {
            "$ref": "#/components/schemas/calendar_hard_is_recurrent"
          }
        }
      },
      "daily_chain_id": {
        "type": "integer",
        "example": 9,
        "description": "Unique daily reward ID."
      },
      "daily_chain_date_end": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "Date when your daily reward ends. Can be `null`. Setting the type `calendar_hard` will automatically set this date based on number of steps added, so you can leave this as `null`."
      },
      "daily_chain_number_of_step": {
        "type": "integer",
        "example": 3,
        "description": "It is the number of steps configured in the daily reward. Each step here signify a day in the daily reward."
      },
      "admin-calendar-hard-daily-chain-short-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/calendar-hard-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A `calendar_hard` daily reward (short version).",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/daily_chain_id"
              },
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "date_end": {
                "$ref": "#/components/schemas/daily_chain_date_end"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "number_of_steps": {
                "$ref": "#/components/schemas/daily_chain_number_of_step"
              }
            }
          }
        ]
      },
      "daily_rolling_chain_date_start": {
        "type": "string",
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "Date and time when your daily reward starts. This time also defines the daily reset point when users can claim their reward.\n"
      },
      "rolling_date_end": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "Date when your daily reward ends."
      },
      "rolling_is_recurrent": {
        "type": "boolean",
        "example": true,
        "default": false,
        "description": "Whether the daily reward is recurrent. If `true`, the daily reward resets once the user completes all steps, allowing them to start again from step 1. Recurrence is valid only within the active reward period, as defined by `date_start` and `date_end`.\n"
      },
      "rolling-skippable-daily-chain-base": {
        "type": "object",
        "description": "Base properties for `rolling_skippable` daily reward type.",
        "properties": {
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/daily_chain_type"
              },
              {
                "enum": [
                  "rolling_skippable"
                ]
              }
            ]
          },
          "date_start": {
            "$ref": "#/components/schemas/daily_rolling_chain_date_start"
          },
          "date_end": {
            "$ref": "#/components/schemas/rolling_date_end"
          },
          "is_recurrent": {
            "$ref": "#/components/schemas/rolling_is_recurrent"
          }
        }
      },
      "admin-rolling-skippable-daily-chain-short-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/rolling-skippable-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A `rolling_skippable` daily reward (short version).",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/daily_chain_id"
              },
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "number_of_steps": {
                "$ref": "#/components/schemas/daily_chain_number_of_step"
              }
            }
          }
        ]
      },
      "rolling-unskippable-daily-chain-base": {
        "type": "object",
        "description": "Base properties for `rolling_unskippable` daily reward type.",
        "properties": {
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/daily_chain_type"
              },
              {
                "enum": [
                  "rolling_unskippable"
                ]
              }
            ]
          },
          "date_start": {
            "$ref": "#/components/schemas/daily_rolling_chain_date_start"
          },
          "date_end": {
            "$ref": "#/components/schemas/rolling_date_end"
          },
          "is_recurrent": {
            "$ref": "#/components/schemas/rolling_is_recurrent"
          }
        }
      },
      "admin-rolling-unskippable-daily-chain-short-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/rolling-unskippable-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A `rolling_unskippable` daily reward (short version).",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/daily_chain_id"
              },
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "number_of_steps": {
                "$ref": "#/components/schemas/daily_chain_number_of_step"
              }
            }
          }
        ]
      },
      "admin-daily-chain-short-model": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/admin-calendar-hard-daily-chain-short-model"
          },
          {
            "$ref": "#/components/schemas/admin-rolling-skippable-daily-chain-short-model"
          },
          {
            "$ref": "#/components/schemas/admin-rolling-unskippable-daily-chain-short-model"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "calendar_hard": "#/components/schemas/admin-calendar-hard-daily-chain-short-model",
            "rolling_skippable": "#/components/schemas/admin-rolling-skippable-daily-chain-short-model",
            "rolling_unskippable": "#/components/schemas/admin-rolling-unskippable-daily-chain-short-model"
          }
        }
      },
      "daily_chain_step_number": {
        "type": "integer",
        "example": 2,
        "description": "Step number.",
        "nullable": false,
        "minimum": 1
      },
      "modify-daily-chain-item-model": {
        "type": "object",
        "properties": {
          "sku": {
            "$ref": "#/components/schemas/sku"
          },
          "quantity": {
            "type": "integer",
            "description": "Daily reward step quantity for this sku",
            "minimum": 1
          }
        },
        "required": [
          "sku",
          "quantity"
        ]
      },
      "create-daily-chain-step-model": {
        "type": "object",
        "properties": {
          "step_number": {
            "$ref": "#/components/schemas/daily_chain_step_number"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/modify-daily-chain-item-model"
            }
          }
        },
        "required": [
          "step_number",
          "items"
        ]
      },
      "create-calendar-hard-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/calendar-hard-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A daily reward for `calendar_hard` type.",
            "properties": {
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/create-daily-chain-step-model"
                }
              }
            },
            "required": [
              "name",
              "date_start",
              "steps",
              "is_enabled",
              "type"
            ]
          }
        ]
      },
      "create-rolling-skippable-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/rolling-skippable-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A daily reward for `rolling_skippable` type.",
            "properties": {
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/create-daily-chain-step-model"
                }
              }
            },
            "required": [
              "name",
              "date_start",
              "steps",
              "is_enabled",
              "type"
            ]
          }
        ]
      },
      "create-rolling-unskippable-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/rolling-unskippable-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A daily reward for `rolling_unskippable` type.",
            "properties": {
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/create-daily-chain-step-model"
                }
              }
            },
            "required": [
              "name",
              "date_start",
              "steps",
              "is_enabled",
              "type"
            ]
          }
        ]
      },
      "daily-chain-error-model": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer",
            "example": 422
          },
          "errorCode": {
            "type": "integer",
            "example": 1102
          },
          "errorMessage": {
            "type": "string",
            "example": "[0401-1102]: Unprocessable Entity. The property `property_name` is required"
          },
          "transactionId": {
            "type": "string",
            "example": "x-x-x-x-transactionId-mock-x-x-x"
          },
          "errorMessageExtended": {
            "type": [
              "object",
              "null"
            ]
          }
        }
      },
      "daily_chain_step_id": {
        "type": [
          "integer",
          "null"
        ],
        "example": 10,
        "description": "Daily reward step unique identifier",
        "minimum": 1
      },
      "item_type": {
        "type": "string",
        "description": "Type of item: `virtual_good`/`virtual_currency`/`bundle`/`unit`."
      },
      "admin-daily-chain-item-model": {
        "type": "object",
        "properties": {
          "item_id": {
            "$ref": "#/components/schemas/item_id"
          },
          "sku": {
            "$ref": "#/components/schemas/sku"
          },
          "type": {
            "$ref": "#/components/schemas/item_type"
          },
          "name": {
            "$ref": "#/components/schemas/two-letter-locale"
          },
          "description": {
            "$ref": "#/components/schemas/long-description-localization-object"
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "quantity": {
            "type": "integer",
            "description": "Amount of items.",
            "minimum": 1,
            "example": 1
          }
        }
      },
      "admin-daily-chain-step-model": {
        "type": "object",
        "description": "A daily reward step.",
        "properties": {
          "step_id": {
            "$ref": "#/components/schemas/daily_chain_step_id"
          },
          "step_number": {
            "$ref": "#/components/schemas/daily_chain_step_number"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/admin-daily-chain-item-model"
            }
          }
        }
      },
      "admin-calendar-hard-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/calendar-hard-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A calendar_hard daily reward for admin responses.",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/daily_chain_id"
              },
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "date_end": {
                "$ref": "#/components/schemas/daily_chain_date_end"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "number_of_steps": {
                "$ref": "#/components/schemas/daily_chain_number_of_step"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/admin-daily-chain-step-model"
                }
              }
            }
          }
        ]
      },
      "admin-rolling-skippable-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/rolling-skippable-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A rolling_skippable daily reward for admin responses.",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/daily_chain_id"
              },
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "number_of_steps": {
                "$ref": "#/components/schemas/daily_chain_number_of_step"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/admin-daily-chain-step-model"
                }
              }
            }
          }
        ]
      },
      "admin-rolling-unskippable-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/rolling-unskippable-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A `rolling_unskippable` daily reward for admin responses.",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/daily_chain_id"
              },
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "number_of_steps": {
                "$ref": "#/components/schemas/daily_chain_number_of_step"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/admin-daily-chain-step-model"
                }
              }
            }
          }
        ]
      },
      "admin-daily-chain-long-model": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/admin-calendar-hard-daily-chain-model"
          },
          {
            "$ref": "#/components/schemas/admin-rolling-skippable-daily-chain-model"
          },
          {
            "$ref": "#/components/schemas/admin-rolling-unskippable-daily-chain-model"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "calendar_hard": "#/components/schemas/admin-calendar-hard-daily-chain-model",
            "rolling_skippable": "#/components/schemas/admin-rolling-skippable-daily-chain-model",
            "rolling_unskippable": "#/components/schemas/admin-rolling-unskippable-daily-chain-model"
          }
        }
      },
      "daily_chain_update_step_id": {
        "type": [
          "integer",
          "null"
        ],
        "example": 10,
        "description": "Daily reward step unique identifier. Specify it during update to retain user's progress for this step.",
        "minimum": 1
      },
      "modify-daily-chain-step-model": {
        "type": "object",
        "properties": {
          "step_id": {
            "$ref": "#/components/schemas/daily_chain_update_step_id"
          },
          "step_number": {
            "$ref": "#/components/schemas/daily_chain_step_number"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/modify-daily-chain-item-model"
            }
          }
        },
        "required": [
          "step_number",
          "items"
        ]
      },
      "update-calendar-hard-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/calendar-hard-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A daily reward for `calendar_hard` type.",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/daily_chain_id"
              },
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/modify-daily-chain-step-model"
                }
              }
            },
            "required": [
              "name",
              "date_start",
              "steps",
              "is_enabled",
              "type"
            ]
          }
        ]
      },
      "update-rolling-skippable-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/rolling-skippable-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A daily reward for `rolling_skippable` type.",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/daily_chain_id"
              },
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/modify-daily-chain-step-model"
                }
              }
            },
            "required": [
              "name",
              "date_start",
              "steps",
              "is_enabled",
              "type"
            ]
          }
        ]
      },
      "update-rolling-unskippable-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/rolling-unskippable-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A daily reward for `rolling_unskippable` type.",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/daily_chain_id"
              },
              "name": {
                "$ref": "#/components/schemas/name-localization-object"
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "description": {
                "$ref": "#/components/schemas/description-localization-object"
              },
              "is_enabled": {
                "$ref": "#/components/schemas/is_enabled"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/modify-daily-chain-step-model"
                }
              }
            },
            "required": [
              "name",
              "date_start",
              "steps",
              "is_enabled",
              "type"
            ]
          }
        ]
      },
      "client-daily-chain-item-model": {
        "type": "object",
        "properties": {
          "item_id": {
            "$ref": "#/components/schemas/item_id"
          },
          "sku": {
            "$ref": "#/components/schemas/sku"
          },
          "type": {
            "$ref": "#/components/schemas/item_type"
          },
          "name": {
            "type": "string",
            "description": "Item name."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Item description."
          },
          "bundle_type": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "standard",
              "virtual_currency_package"
            ]
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "is_free": {
            "$ref": "#/components/schemas/value-is_free"
          },
          "quantity": {
            "type": "integer",
            "description": "Amount of items.",
            "minimum": 1,
            "example": 1
          },
          "content": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/client-daily-chain-item-model"
            }
          }
        }
      },
      "client-daily-chain-step-model": {
        "type": "object",
        "description": "Daily reward step.",
        "properties": {
          "step_number": {
            "$ref": "#/components/schemas/daily_chain_step_number"
          },
          "status": {
            "type": "string",
            "example": "claimed",
            "enum": [
              "claimed",
              "claimable",
              "blocked",
              "claim_in_future"
            ],
            "description": "Defines the step's current claim status.\n\nPossible values:\n- `claimed` — The step has already been claimed.\n- `claimable` — The step may be claimed.\n- `blocked` — The step cannot be claimed: \n  - For unauthorized users: All steps are blocked. \n  - For `calendar_hard`: The step was not claimed and is now in the past. \n  - For `rolling_skippable`: The step is locked until the previous step is claimed.\n- `claim_in_future` — The step was not claimed and the step is in the future."
          },
          "unlocked_date": {
            "type": "integer",
            "format": "int64",
            "description": "Unix timestamp (in seconds) when the step will be unlocked."
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/client-daily-chain-item-model"
            }
          }
        }
      },
      "client-calendar-hard-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/calendar-hard-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A calendar_hard daily reward for client responses.",
            "properties": {
              "id": {
                "type": "integer",
                "example": 9,
                "description": "Daily reward ID."
              },
              "name": {
                "type": "string",
                "example": "Weekly quest",
                "description": "Daily reward name."
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "Major weekly quest",
                "description": "Daily reward description."
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "date_end": {
                "$ref": "#/components/schemas/daily_chain_date_end"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/client-daily-chain-step-model"
                }
              }
            }
          }
        ]
      },
      "client-rolling-skippable-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/rolling-skippable-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A rolling_skippable daily reward for client responses.",
            "properties": {
              "id": {
                "type": "integer",
                "example": 9,
                "description": "Daily reward ID."
              },
              "name": {
                "type": "string",
                "example": "Weekly quest",
                "description": "Daily reward name."
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "Major weekly quest",
                "description": "Daily reward description."
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/client-daily-chain-step-model"
                }
              }
            }
          }
        ]
      },
      "client-rolling-unskippable-daily-chain-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/rolling-unskippable-daily-chain-base"
          },
          {
            "type": "object",
            "description": "A `rolling_unskippable` daily reward for client responses.",
            "properties": {
              "id": {
                "type": "integer",
                "example": 9,
                "description": "Daily reward ID."
              },
              "name": {
                "type": "string",
                "example": "Weekly quest",
                "description": "Daily reward name."
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "Major weekly quest",
                "description": "Daily reward description."
              },
              "order": {
                "$ref": "#/components/schemas/order"
              },
              "steps": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/client-daily-chain-step-model"
                }
              }
            }
          }
        ]
      },
      "client-daily-chain-model": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/client-calendar-hard-daily-chain-model"
          },
          {
            "$ref": "#/components/schemas/client-rolling-skippable-daily-chain-model"
          },
          {
            "$ref": "#/components/schemas/client-rolling-unskippable-daily-chain-model"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "calendar_hard": "#/components/schemas/client-calendar-hard-daily-chain-model",
            "rolling_skippable": "#/components/schemas/client-rolling-skippable-daily-chain-model",
            "rolling_unskippable": "#/components/schemas/client-rolling-unskippable-daily-chain-model"
          }
        }
      },
      "offer_chain_date_start": {
        "type": "string",
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "Date when the offer chain starts."
      },
      "offer_chain_date_end": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "Date when the offer chain ends. Can be `null`. If `date_end` is `null`, the offer chain will not have a time limit."
      },
      "offer_chain_step_number": {
        "type": "integer",
        "example": 2,
        "description": "Step number.",
        "nullable": false,
        "minimum": 1
      },
      "offer_chain_is_free": {
        "type": "boolean",
        "description": "Indicates whether the offer chain step is free:<ul><li>If <code>true</code>, the step must be claimed using the <a href=\"/api/shop-builder/operation/claim-user-offer-chain-step-reward\">Claim free offer chain step</a> call.</li><li>If <code>false</code>, it must be purchased using the <a href=\"/api/shop-builder/operation/order-user-offer-chain-step-reward\">Create order for paid offer chain step</a> call.</li></ul>"
      },
      "offer_chain_step_price_amount": {
        "type": "number",
        "example": 99.99,
        "description": "Step price in real currency."
      },
      "offer_chain_step_price_currency": {
        "type": "string",
        "example": "USD",
        "description": "Item price currency. Three-letter code per [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)."
      },
      "offer_chain_step_price": {
        "type": [
          "object",
          "null"
        ],
        "properties": {
          "amount": {
            "$ref": "#/components/schemas/offer_chain_step_price_amount"
          },
          "currency": {
            "$ref": "#/components/schemas/offer_chain_step_price_currency"
          }
        },
        "required": [
          "amount",
          "currency"
        ]
      },
      "client-offer-chain-item-model": {
        "type": "object",
        "properties": {
          "item_id": {
            "$ref": "#/components/schemas/item_id"
          },
          "sku": {
            "$ref": "#/components/schemas/sku"
          },
          "type": {
            "$ref": "#/components/schemas/item_type"
          },
          "name": {
            "type": "string",
            "description": "Item name."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Item description."
          },
          "bundle_type": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "standard",
              "virtual_currency_package"
            ]
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "is_free": {
            "$ref": "#/components/schemas/value-is_free"
          },
          "quantity": {
            "type": "integer",
            "description": "Amount of items.",
            "minimum": 1,
            "example": 1
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "content": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/client-offer-chain-item-model"
            }
          }
        }
      },
      "client-offer-chain-step-model": {
        "type": "object",
        "description": "Offer chain step.",
        "properties": {
          "step_number": {
            "$ref": "#/components/schemas/offer_chain_step_number"
          },
          "is_free": {
            "$ref": "#/components/schemas/offer_chain_is_free"
          },
          "is_claimed": {
            "type": "boolean",
            "example": false,
            "description": "Indicates whether the step reward is claimed or purchased."
          },
          "step_price": {
            "$ref": "#/components/schemas/offer_chain_step_price"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/client-offer-chain-item-model"
            }
          },
          "step_vp_rewards": {
            "type": [
              "array",
              "null"
            ],
            "description": "An array of value points from the reward system, granted as a reward.",
            "items": {
              "type": "object",
              "properties": {
                "item_id": {
                  "$ref": "#/components/schemas/item_id"
                },
                "sku": {
                  "$ref": "#/components/schemas/value-point-sku"
                },
                "amount": {
                  "$ref": "#/components/schemas/value-point-amount"
                },
                "name": {
                  "$ref": "#/components/schemas/value-point-name"
                },
                "image_url": {
                  "$ref": "#/components/schemas/Common_admin-image_url"
                },
                "is_clan": {
                  "$ref": "#/components/schemas/is_clan"
                }
              }
            }
          },
          "step_loyalty_rewards": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "example": "First Loyalty Point",
                  "description": "Loyalty point name."
                },
                "sku": {
                  "type": "string",
                  "example": "0c745ef0-4243-46e1-aa90-54dee07da622",
                  "description": "Loyalty point SKU."
                },
                "description": {
                  "type": "string",
                  "example": "First Loyalty Point Desc",
                  "description": "Loyalty point description."
                },
                "image_url": {
                  "$ref": "#/components/schemas/image_url"
                },
                "amount": {
                  "type": "integer",
                  "example": 1,
                  "description": "Amount of loyalty points."
                }
              }
            }
          }
        }
      },
      "offer_chain_reset_next_date": {
        "type": "integer",
        "description": "The calculated date and time when the offer chain will be reset next time, in <a href=\"https://en.wikipedia.org/wiki/Unix_time\" target=\"_blank\">Unix Timestamp</a> format. <br><br> For example, the monthly offer chain reset starts on March 1, 2024, at 01:00 Kuala Lumpur time (GMT+8). The following reset occurs on April 1, 2024 at 01:00 Kuala Lumpur time (GMT+8), which corresponds to March 31, 2024 17:00 GMT+0 or `1711904400000` in the Unix Timestamp format. <br><br> Example: `1711904400000`"
      },
      "offer_chain_recurrent_schedule_client_side": {
        "type": [
          "object",
          "null"
        ],
        "description": "Reset period of the offer chain.",
        "properties": {
          "interval_type": {
            "type": "string",
            "description": "Frequency of the offer chain reset.",
            "enum": [
              "weekly",
              "monthly",
              "hourly"
            ]
          },
          "reset_next_date": {
            "$ref": "#/components/schemas/offer_chain_reset_next_date"
          }
        }
      },
      "client-offer-chain-model": {
        "type": "object",
        "description": "An offer chain.",
        "properties": {
          "id": {
            "type": "integer",
            "example": 9,
            "description": "Offer chain ID."
          },
          "name": {
            "type": "string",
            "example": "Weekly quest",
            "description": "Offer chain name."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "example": "Major weekly quest",
            "description": "Offer chain description."
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "date_start": {
            "$ref": "#/components/schemas/offer_chain_date_start"
          },
          "date_end": {
            "$ref": "#/components/schemas/offer_chain_date_end"
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/client-offer-chain-step-model"
            }
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/offer_chain_recurrent_schedule_client_side"
          },
          "next_step_number": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Next offer chain step number. `null` if the offer chain is completed.",
            "example": 1
          }
        }
      },
      "offer-chain-error-model": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer",
            "example": 422
          },
          "errorCode": {
            "type": "integer",
            "example": 1102
          },
          "errorMessage": {
            "type": "string",
            "example": "[0401-1102]: Unprocessable Entity. The property `property_name` is required"
          },
          "transactionId": {
            "type": "string",
            "example": "x-x-x-x-transactionId-mock-x-x-x"
          },
          "errorMessageExtended": {
            "type": [
              "object",
              "null"
            ]
          }
        }
      },
      "offer_chain_id": {
        "type": "integer",
        "example": 9,
        "description": "Unique offer chain ID."
      },
      "offer_chain_interval_type_weekly": {
        "type": "string",
        "description": "Frequency of the offer chain reset.",
        "enum": [
          "weekly"
        ]
      },
      "offer_chain_day_of_week": {
        "type": "integer",
        "description": "Day of the week when the offer chain is reset, where `1` is Monday and `7` is Sunday.",
        "minimum": 1,
        "maximum": 7
      },
      "offer_chain_time": {
        "type": "string",
        "description": "The time when the offer chain is reset in the specified time zone (rounding to hours). <br><br> For example, the reset time is set to 01:00 for the Kuala Lumpur time zone (GMT+8), the value of the `time` parameter is `01:00:00+08:00`.",
        "pattern": "((0[0-9]|1[0-9]|2[0-3]):00:00)(\\+|-)(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])",
        "example": "01:00:00+08:00"
      },
      "offer_chain_displayable_reset_start_date": {
        "description": "The date and time of the first reset of the offer chain. <br><br> For example, the first reset scheduled for March 1, 2024, at 01:00 Kuala Lumpur time corresponds to `2024-03-01T01:00:00+08:00` in the <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> format. <br><br> Example: `2024-03-01T01:00:00+08:00`",
        "type": "string",
        "format": "date-time"
      },
      "offer_chain_displayable_reset_next_date": {
        "description": "The calculated date and time when the offer chain will be reset next time per <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> format. <br><br> For example, the monthly offer chain reset starts on March 1, 2024, at 01:00 Kuala Lumpur time. The following reset occurs on April 1, 2024 at 01:00 Kuala Lumpur time, which equals `2024-04-01T01:00:00+08:00` in the <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> format. <br><br> Example: `2024-04-01T01:00:00+08:00`",
        "type": "string",
        "format": "date-time"
      },
      "offer_chain_interval_type_monthly": {
        "type": "string",
        "description": "Frequency of the offer chain reset.",
        "enum": [
          "monthly"
        ]
      },
      "offer_chain_day_of_month": {
        "type": "integer",
        "description": "The day of the month when the offer chain is reset. If a month has fewer days than the specified day, the reset will occur on the last day of the month.",
        "minimum": 1,
        "maximum": 31
      },
      "offer_chain_interval_type_hourly": {
        "type": "string",
        "description": "Frequency of the offer chain reset.",
        "enum": [
          "hourly"
        ]
      },
      "offer_chain_hours_interval": {
        "type": "integer",
        "description": "Interval in hours, after which the offer chain is reset. <br><br> The countdown starts from the <a href=\"https://developers.xsolla.com/api/shop-builder/operation/admin-create-offer-chain/#!path=date_start&t=request\">date_start</a> parameter. <br><br> For example, if `date_start = \"2025-11-15T18:15:00+05:00\"` and `hours_interval = 2`, the offer chain will reset every 2 hours starting from `\"2025-11-15T20:15:00+05:00\"`.\n",
        "minimum": 1,
        "maximum": 10000
      },
      "offer_chain_recurrent_schedule": {
        "type": [
          "object",
          "null"
        ],
        "description": "Recurrent reset period of the offer chain.",
        "oneOf": [
          {
            "type": [
              "object",
              "null"
            ],
            "title": "interval_type = weekly",
            "description": "Weekly reset of the offer chain.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/offer_chain_interval_type_weekly"
              },
              "day_of_week": {
                "$ref": "#/components/schemas/offer_chain_day_of_week"
              },
              "time": {
                "$ref": "#/components/schemas/offer_chain_time"
              },
              "reset_next_date": {
                "$ref": "#/components/schemas/offer_chain_reset_next_date"
              },
              "displayable_reset_start_date": {
                "$ref": "#/components/schemas/offer_chain_displayable_reset_start_date"
              },
              "displayable_reset_next_date": {
                "$ref": "#/components/schemas/offer_chain_displayable_reset_next_date"
              }
            }
          },
          {
            "type": "object",
            "title": "interval_type = monthly",
            "description": "Monthly reset of the offer chain.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/offer_chain_interval_type_monthly"
              },
              "day_of_month": {
                "$ref": "#/components/schemas/offer_chain_day_of_month"
              },
              "time": {
                "$ref": "#/components/schemas/offer_chain_time"
              },
              "reset_next_date": {
                "$ref": "#/components/schemas/offer_chain_reset_next_date"
              },
              "displayable_reset_start_date": {
                "$ref": "#/components/schemas/offer_chain_displayable_reset_start_date"
              },
              "displayable_reset_next_date": {
                "$ref": "#/components/schemas/offer_chain_displayable_reset_next_date"
              }
            }
          },
          {
            "type": "object",
            "title": "interval_type = hourly",
            "description": "Reset of the offer chain performed at the specified time interval in hours.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/offer_chain_interval_type_hourly"
              },
              "hours_interval": {
                "$ref": "#/components/schemas/offer_chain_hours_interval"
              }
            }
          }
        ]
      },
      "admin-offer-chain-short-model": {
        "type": "object",
        "description": "An offer chain.",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/offer_chain_id"
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "date_start": {
            "$ref": "#/components/schemas/offer_chain_date_start"
          },
          "date_end": {
            "$ref": "#/components/schemas/offer_chain_date_end"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/offer_chain_recurrent_schedule"
          },
          "is_always_visible": {
            "$ref": "#/components/schemas/chain_is_always_visible"
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/chain_user-attribute_conditions_model-get"
          }
        }
      },
      "offer_chain_recurrent_schedule_create_update": {
        "type": [
          "object",
          "null"
        ],
        "description": "Reset period of the offer chain.",
        "oneOf": [
          {
            "type": [
              "object",
              "null"
            ],
            "title": "interval_type = weekly",
            "description": "Weekly reset of the offer chain.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/offer_chain_interval_type_weekly"
              },
              "day_of_week": {
                "$ref": "#/components/schemas/offer_chain_day_of_week"
              },
              "time": {
                "$ref": "#/components/schemas/offer_chain_time"
              }
            },
            "required": [
              "interval_type",
              "time",
              "day_of_week"
            ]
          },
          {
            "type": "object",
            "title": "interval_type = monthly",
            "description": "Monthly reset of the offer chain.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/offer_chain_interval_type_monthly"
              },
              "day_of_month": {
                "$ref": "#/components/schemas/offer_chain_day_of_month"
              },
              "time": {
                "$ref": "#/components/schemas/offer_chain_time"
              }
            },
            "required": [
              "interval_type",
              "time",
              "day_of_month"
            ]
          },
          {
            "type": "object",
            "title": "interval_type = hourly",
            "description": "Reset of the offer chain performed at the specified time interval in hours.",
            "properties": {
              "interval_type": {
                "$ref": "#/components/schemas/offer_chain_interval_type_hourly"
              },
              "hours_interval": {
                "$ref": "#/components/schemas/offer_chain_hours_interval"
              }
            },
            "required": [
              "interval_type",
              "hours_interval"
            ]
          }
        ]
      },
      "modify-offer-chain-item-model": {
        "type": "object",
        "properties": {
          "sku": {
            "$ref": "#/components/schemas/sku"
          },
          "quantity": {
            "type": "integer",
            "description": "Reward item quantity for this chain step.",
            "minimum": 1
          },
          "order": {
            "description": "Reward order for the offer chain step.",
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          }
        },
        "required": [
          "sku",
          "quantity"
        ]
      },
      "create-offer-chain-step-model": {
        "type": "object",
        "properties": {
          "step_number": {
            "$ref": "#/components/schemas/offer_chain_step_number"
          },
          "is_free": {
            "$ref": "#/components/schemas/offer_chain_is_free"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/modify-offer-chain-item-model"
            }
          }
        },
        "required": [
          "step_number",
          "is_free",
          "items"
        ]
      },
      "create-offer-chain-model": {
        "type": "object",
        "description": "An offer chain.",
        "properties": {
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "date_start": {
            "$ref": "#/components/schemas/offer_chain_date_start"
          },
          "date_end": {
            "$ref": "#/components/schemas/offer_chain_date_end"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/offer_chain_recurrent_schedule_create_update"
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/create-offer-chain-step-model"
            }
          },
          "is_always_visible": {
            "$ref": "#/components/schemas/chain_is_always_visible"
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/chain_user-attribute_conditions_model-post"
          }
        },
        "required": [
          "name",
          "date_start",
          "steps",
          "is_enabled"
        ]
      },
      "offer_chain_step_id": {
        "type": [
          "integer",
          "null"
        ],
        "example": 10,
        "description": "Unique ID of the chain step.",
        "minimum": 1
      },
      "admin-offer-chain-item-model": {
        "type": "object",
        "properties": {
          "item_id": {
            "$ref": "#/components/schemas/item_id"
          },
          "sku": {
            "$ref": "#/components/schemas/sku"
          },
          "type": {
            "$ref": "#/components/schemas/item_type"
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "image_url": {
            "$ref": "#/components/schemas/image_url"
          },
          "is_free": {
            "$ref": "#/components/schemas/value-is_free"
          },
          "quantity": {
            "type": "integer",
            "description": "Amount of items.",
            "minimum": 1,
            "example": 1
          },
          "order": {
            "$ref": "#/components/schemas/order"
          }
        }
      },
      "admin-offer-chain-step-model": {
        "type": "object",
        "description": "Offer chain step.",
        "properties": {
          "step_id": {
            "$ref": "#/components/schemas/offer_chain_step_id"
          },
          "step_number": {
            "$ref": "#/components/schemas/offer_chain_step_number"
          },
          "is_free": {
            "$ref": "#/components/schemas/offer_chain_is_free"
          },
          "step_price": {
            "$ref": "#/components/schemas/offer_chain_step_price"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/admin-offer-chain-item-model"
            }
          }
        }
      },
      "admin-offer-chain-long-model": {
        "type": "object",
        "description": "An offer chain.",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/offer_chain_id"
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "date_start": {
            "$ref": "#/components/schemas/offer_chain_date_start"
          },
          "date_end": {
            "$ref": "#/components/schemas/offer_chain_date_end"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/offer_chain_recurrent_schedule"
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/admin-offer-chain-step-model"
            }
          },
          "is_always_visible": {
            "$ref": "#/components/schemas/chain_is_always_visible"
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/chain_user-attribute_conditions_model-get"
          }
        }
      },
      "update_step_id": {
        "type": [
          "integer",
          "null"
        ],
        "example": 10,
        "description": "Unique chain step ID. Specify it during update to retain user progress for this step.",
        "minimum": 1
      },
      "modify-offer-chain-step-model": {
        "type": "object",
        "properties": {
          "step_id": {
            "$ref": "#/components/schemas/update_step_id"
          },
          "step_number": {
            "$ref": "#/components/schemas/offer_chain_step_number"
          },
          "is_free": {
            "$ref": "#/components/schemas/offer_chain_is_free"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/modify-offer-chain-item-model"
            }
          }
        },
        "required": [
          "step_number",
          "is_free",
          "items"
        ]
      },
      "modify-offer-chain-model": {
        "type": "object",
        "description": "An offer chain.",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/offer_chain_id"
          },
          "name": {
            "$ref": "#/components/schemas/name-localization-object"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "description": {
            "$ref": "#/components/schemas/description-localization-object"
          },
          "date_start": {
            "$ref": "#/components/schemas/offer_chain_date_start"
          },
          "date_end": {
            "$ref": "#/components/schemas/offer_chain_date_end"
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/offer_chain_recurrent_schedule_create_update"
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/modify-offer-chain-step-model"
            }
          },
          "is_always_visible": {
            "$ref": "#/components/schemas/chain_is_always_visible"
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/chain_user-attribute_conditions_model-post"
          }
        },
        "required": [
          "name",
          "date_start",
          "steps",
          "is_enabled"
        ]
      },
      "bundle_type": {
        "type": "string",
        "description": "Bundle type. Returned if item type is a bundle.",
        "enum": [
          "standard",
          "virtual_currency_package",
          "partner_side_content"
        ]
      },
      "unit_type": {
        "type": "string",
        "example": "game",
        "description": "Type of unit: `game`."
      },
      "drm_name": {
        "type": "string",
        "example": "Steam",
        "description": "Game key DRM name."
      },
      "drm_sku": {
        "type": "string",
        "example": "steam",
        "description": "DRM unique ID."
      },
      "Upsell-model": {
        "type": "object",
        "description": "Upsell type.",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "fixed_list"
            ],
            "example": true
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "items": {
            "type": "array",
            "example": [
              "game_sku"
            ],
            "default": null,
            "description": "Array of items SKU.",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "is_enabled",
          "type",
          "items"
        ]
      },
      "Upsell-model-not-fixed-list": {
        "type": "object",
        "description": "Upsell type.",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "most_sellable",
              "only_promotions"
            ],
            "example": true
          },
          "is_enabled": {
            "$ref": "#/components/schemas/is_enabled"
          },
          "items": {
            "type": "array",
            "example": [
              null
            ],
            "default": null,
            "description": "Empty array of items SKU.",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "is_enabled",
          "type"
        ]
      },
      "Upsell-422-invalid-request": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer",
            "example": 422
          },
          "errorCode": {
            "type": "integer",
            "example": 1102
          },
          "errorMessage": {
            "type": "string",
            "example": "[0401-1102]: Unprocessable entity. The property `is_enabled` is required"
          },
          "transactionId": {
            "type": "string",
            "example": "x-x-x-x-transactionId-mock-x-x-x"
          }
        }
      },
      "Virtual-Items-Currency_admin-groups-response": {
        "type": "array",
        "example": [
          {
            "external_id": "horror",
            "name": {
              "en": "Horror"
            }
          }
        ],
        "default": [],
        "description": "Groups the item belongs to.",
        "items": {
          "type": "object",
          "properties": {
            "external_id": {
              "type": "string",
              "example": "horror"
            },
            "name": {
              "type": "object",
              "description": "Name of item. Should contain key/value pairs\nwhere key is a locale with \"^[a-z]{2}\" format, value is string.\n",
              "example": {
                "en": "Horror",
                "de": "Horror"
              },
              "default": {
                "en": "Horror"
              },
              "additionalProperties": {
                "type": "string"
              }
            }
          }
        }
      },
      "Virtual-Items-Currency_client-attributes": {
        "type": "array",
        "description": "List of attributes and their values corresponding to the item. Can be used for catalog filtering.",
        "example": {
          "value": {
            "external_id": "genre",
            "name": "Жанр",
            "values": [
              {
                "external_id": "genre_e3364991f92e751689a68b96598a5a5a84010b85",
                "value": "Casual"
              },
              {
                "external_id": "genre_eba07bfd0f982940773cba3744d97264dd58acd7",
                "value": "Strategy"
              },
              {
                "external_id": "genre_b8d0c6d8f0524c2b2d79ebb93aa3cd0e8b5199a8",
                "value": "Mobile"
              }
            ]
          }
        },
        "default": [],
        "items": {
          "type": "object",
          "properties": {
            "external_id": {
              "$ref": "#/components/schemas/admin-attribute-external_id"
            },
            "name": {
              "type": "object",
              "description": "Name of attribute.",
              "example": "Genre",
              "additionalProperties": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "values": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "$ref": "#/components/schemas/value-external_id"
                  },
                  "value": {
                    "type": "string",
                    "description": "Value of attribute.",
                    "example": "Strategy"
                  }
                }
              }
            }
          }
        }
      },
      "item-periods-response": {
        "type": "array",
        "description": "Item sales period.",
        "items": {
          "type": "object",
          "properties": {
            "date_from": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time",
              "example": "2020-08-11T10:00:00+03:00",
              "description": "Date when the specified item will be available for sale."
            },
            "date_until": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time",
              "example": "2020-08-11T20:00:00+03:00",
              "description": "Date when the specified item will become unavailable for sale. Can be `null`."
            }
          }
        }
      },
      "item-custom-attributes-response": {
        "type": "object",
        "description": "A JSON object containing item attributes and values.",
        "format": "json"
      },
      "Upsell_item": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string",
            "example": "big_rocket",
            "description": "Unique item ID. The SKU may contain only lowercase and uppercase Latin alphanumeric characters, periods, dashes, and underscores."
          },
          "name": {
            "type": "string",
            "example": "Big Rocket",
            "description": "Item name."
          },
          "groups": {
            "$ref": "#/components/schemas/Virtual-Items-Currency_admin-groups-response"
          },
          "attributes": {
            "$ref": "#/components/schemas/Virtual-Items-Currency_client-attributes"
          },
          "type": {
            "type": "string",
            "example": "virtual_good",
            "description": "Type of item: `virtual_good`/`virtual_currency`/`bundle`."
          },
          "description": {
            "type": "string",
            "example": "Big Rocket - description",
            "description": "Item description."
          },
          "image_url": {
            "type": "string",
            "example": "https://popmedia.blob.core.windows.net/popyourself/male/outfit/male_armor_white_a-01.png",
            "description": "Image URL."
          },
          "is_free": {
            "$ref": "#/components/schemas/value-is_free"
          },
          "price": {
            "type": [
              "object",
              "null"
            ],
            "description": "Item prices.",
            "properties": {
              "amount": {
                "type": "string",
                "example": "100.99",
                "description": "Discounted item price."
              },
              "amount_without_discount": {
                "type": "string",
                "example": "100.99",
                "description": "Item price."
              },
              "currency": {
                "type": "string",
                "example": "USD",
                "description": "Item price currency. Three-letter code per [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)."
              }
            }
          },
          "virtual_prices": {
            "type": "array",
            "description": "Virtual prices.",
            "items": {
              "type": "object",
              "description": "Virtual price.",
              "properties": {
                "amount": {
                  "type": "integer",
                  "example": 100,
                  "description": "Discounted item price in virtual currency."
                },
                "amount_without_discount": {
                  "type": "integer",
                  "example": 200,
                  "description": "Item price."
                },
                "sku": {
                  "type": "string",
                  "example": "vc_test",
                  "description": "Virtual currency item SKU."
                },
                "is_default": {
                  "type": "boolean",
                  "example": true,
                  "description": "Whether price is default for item."
                },
                "image_url": {
                  "type": "string",
                  "example": "http://image.png",
                  "description": "Image of virtual currency."
                },
                "name": {
                  "type": "string",
                  "example": "SHOTGUN FOR TRUE RAIDERS",
                  "description": "Virtual currency name."
                },
                "type": {
                  "type": "string",
                  "example": "virtual_currency",
                  "description": "Virtual currency type."
                },
                "description": {
                  "type": "string",
                  "example": "Big Rocket - description",
                  "description": "Virtual currency description."
                }
              }
            }
          },
          "can_be_bought": {
            "$ref": "#/components/schemas/Can_be_bought"
          },
          "virtual_item_type": {
            "type": "string",
            "example": "non-consumable",
            "description": "Type of virtual item.\n\nPossible values:\n- `consumable` — An item that disappears from the inventory after use (e.g., ammo).\n- `non_consumable` — An item that stays in the inventory for an unlimited period of time.\n- `non_renewing_subscription` — Time-limited item that can represent access to services or content for a limited period of time.",
            "enum": [
              "consumable",
              "non_consumable",
              "non_renewing_subscription"
            ]
          },
          "promotions": {
            "$ref": "#/components/schemas/Catalog_item_promotions"
          },
          "limits": {
            "$ref": "#/components/schemas/Catalog_item_limits"
          },
          "periods": {
            "$ref": "#/components/schemas/item-periods-response"
          },
          "custom_attributes": {
            "$ref": "#/components/schemas/item-custom-attributes-response"
          },
          "vp_rewards": {
            "$ref": "#/components/schemas/client-item-value-point-reward"
          }
        }
      },
      "Upsell_item-list": {
        "type": "object",
        "properties": {
          "has_more": {
            "$ref": "#/components/schemas/Pagination_has-more"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Upsell_item"
            }
          }
        }
      }
    },
    "examples": {
      "Promotions_200-admin-promotions": {
        "value": {
          "promotions": [
            {
              "id": 1,
              "promotion_periods": [
                {
                  "date_from": "2020-01-01T00:00:00+03:00",
                  "date_until": null
                }
              ],
              "name": {
                "en": "promotion_1"
              },
              "type": "item_bonus",
              "is_enabled": true,
              "bonus": [
                {
                  "item": {
                    "description": null,
                    "image_url": null,
                    "sku": "com.xsolla.diamonds_pack_1",
                    "name": {
                      "en": "Diamonds pack",
                      "ru": "Пак кристаллов"
                    },
                    "type": "bundle",
                    "bundle_type": "virtual_currency_package",
                    "content": []
                  },
                  "quantity": 1
                }
              ],
              "condition": [
                {
                  "item": {
                    "description": null,
                    "image_url": null,
                    "sku": "com.xsolla.virtual_good_bonus_2",
                    "name": {
                      "en": "VG name",
                      "ru": "Название VG"
                    },
                    "type": "virtual_good"
                  }
                }
              ],
              "discount": null
            },
            {
              "id": 2,
              "promotion_periods": [
                {
                  "date_from": "2020-01-01T00:00:00+03:00",
                  "date_until": "2030-01-01T00:00:00+03:00"
                }
              ],
              "name": {
                "en": "promotion_2"
              },
              "type": "item_discount",
              "is_enabled": false,
              "bonus": [],
              "condition": [
                {
                  "item": {
                    "description": null,
                    "image_url": null,
                    "sku": "com.xsolla.virtual_good_bonus_2",
                    "name": {
                      "en": "VG name",
                      "ru": "Название VG"
                    },
                    "type": "virtual_good"
                  }
                }
              ],
              "discount": {
                "percent": "10.99"
              }
            },
            {
              "id": 3,
              "promotion_periods": [
                {
                  "date_from": "2020-01-01T00:00:00+03:00",
                  "date_until": "2030-01-01T00:00:00+03:00"
                }
              ],
              "name": {
                "en": "promotion_3"
              },
              "type": "coupon_bonus",
              "is_enabled": true,
              "bonus": [
                {
                  "item": {
                    "description": null,
                    "image_url": null,
                    "sku": "com.xsolla.virtual_good_bonus_2",
                    "name": {
                      "en": "VG name",
                      "ru": "Название VG"
                    },
                    "type": "virtual_good"
                  },
                  "quantity": 2
                }
              ],
              "condition": [
                {
                  "item": {
                    "external_id": "coupon_2",
                    "name": {
                      "en": "Coupon name",
                      "ru": "Название купона"
                    },
                    "is_enabled": true,
                    "redeem_total_limit": null,
                    "redeem_user_limit": null,
                    "redeem_code_limit": 1
                  }
                }
              ],
              "discount": null
            },
            {
              "id": 4,
              "promotion_periods": [
                {
                  "date_from": "2018-01-01T00:00:00+03:00",
                  "date_until": "2031-01-01T00:00:00+03:00"
                }
              ],
              "name": {
                "en": "promotion_4"
              },
              "type": "promocode_bonus_discount",
              "is_enabled": false,
              "bonus": [
                {
                  "item": {
                    "description": null,
                    "image_url": null,
                    "sku": "com.xsolla.virtual_good_bonus_2",
                    "name": {
                      "en": "VG name",
                      "ru": "Название VG"
                    },
                    "type": "virtual_good"
                  },
                  "quantity": 2
                }
              ],
              "condition": [
                {
                  "item": {
                    "external_id": "coupon_3",
                    "name": {
                      "en": "Coupon name",
                      "ru": "Название купона"
                    },
                    "is_enabled": true,
                    "redeem_total_limit": null,
                    "redeem_user_limit": null,
                    "redeem_code_limit": 1
                  }
                }
              ],
              "discount": {
                "percent": "12.99"
              }
            },
            {
              "id": 5,
              "promotion_periods": [
                {
                  "date_from": "2020-01-01T00:00:00+03:00",
                  "date_until": null
                }
              ],
              "name": {
                "en": "promotion_5"
              },
              "type": "cart_bonus",
              "is_enabled": true,
              "bonus": [
                {
                  "item": {
                    "description": null,
                    "image_url": null,
                    "sku": "com.xsolla.virtual_good_bonus_4",
                    "name": {
                      "en": "VG name",
                      "ru": "Название VG"
                    },
                    "type": "virtual_good"
                  },
                  "quantity": 1
                }
              ],
              "condition": null,
              "discount": null
            }
          ],
          "total_promotions_count": 5,
          "active_promotions_count": 3,
          "inactive_promotions_count": 2
        }
      },
      "422-activate-deactivate-promotion": {
        "value": {
          "statusCode": 422,
          "errorCode": 9505,
          "errorMessage": "[0401-9505]: Error was occurred while promotion was being updated",
          "transactionId": "da145238620011eb8e24fe6913ff226a"
        }
      },
      "Promotions_200-get-coupon-rewards": {
        "value": {
          "bonus": [
            {
              "item": {
                "sku": "com.xsolla.game_1",
                "name": {
                  "en": "Game name"
                },
                "type": "unit",
                "description": "Game description",
                "image_url": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                "unit_items": [
                  {
                    "sku": "com.xsolla.game_key_01",
                    "name": "Game name",
                    "type": "game_key",
                    "is_free": false,
                    "drm_name": "Steam",
                    "drm_sku": "steam_key_01"
                  },
                  {
                    "sku": "game_key_02",
                    "name": "Game name",
                    "type": "game_key",
                    "drm_name": "Origin",
                    "drm_sku": "origin_key_02"
                  }
                ]
              },
              "quantity": 1
            },
            {
              "item": {
                "sku": "com.xsolla.game_2",
                "name": {
                  "en": "Game name"
                },
                "type": "unit",
                "description": "Game description",
                "image_url": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                "unit_items": [
                  {
                    "sku": "com.xsolla.game_key_01",
                    "type": "game_key",
                    "name": "Game name",
                    "drm_name": "Steam",
                    "drm_sku": "steam_key_01"
                  }
                ]
              },
              "quantity": 2
            }
          ],
          "discount": {
            "percent": "10.00"
          },
          "is_selectable": true
        }
      },
      "Promotions_200-admin-coupons": {
        "value": {
          "items": [
            {
              "external_id": "coupon_44056_1",
              "promotion_periods": [
                {
                  "date_from": "2020-04-15T18:16:00+05:00",
                  "date_until": "2020-04-25T18:16:00+05:00"
                },
                {
                  "date_from": "2020-05-15T18:16:00+05:00",
                  "date_until": "2020-05-25T18:16:00+05:00"
                }
              ],
              "name": {
                "en-US": "New Year Bonus",
                "de-DE": "Neujahrsbonus"
              },
              "is_enabled": true,
              "bonus": [
                {
                  "sku": "com.xsolla.elven_sword_1",
                  "quantity": 1
                },
                {
                  "sku": "com.xsolla.elven_shield_1",
                  "quantity": 2
                },
                {
                  "sku": "com.xsolla.elven_gloves_1",
                  "quantity": 2
                }
              ],
              "redeem_user_limit": null,
              "redeem_total_limit": null,
              "redeem_code_limit": 1,
              "total_limit_state": null
            },
            {
              "external_id": "summer2021",
              "promotion_periods": [
                {
                  "date_from": "2020-04-15T18:16:00+05:00",
                  "date_until": "2020-04-25T18:16:00+05:00"
                }
              ],
              "name": {
                "en-US": "Coupon name",
                "de-DE": "Gutscheintitel"
              },
              "is_enabled": true,
              "bonus": [
                {
                  "sku": "com.xsolla.diamonds_1",
                  "quantity": 100
                }
              ],
              "redeem_user_limit": null,
              "redeem_total_limit": 100,
              "redeem_code_limit": 1,
              "total_limit_state": {
                "available": 50,
                "reserved": 10,
                "used": 40
              }
            }
          ],
          "total_promotions_count": 2,
          "active_promotions_count": 2,
          "inactive_promotions_count": 0
        }
      },
      "Promotions_200-coupon-code-list": {
        "value": {
          "codes": [
            {
              "code": "CODE001"
            },
            {
              "code": "CODE002"
            },
            {
              "code": "CODE003"
            },
            {
              "code": "CODE004"
            },
            {
              "code": "CODE005"
            }
          ],
          "total_count": 5
        }
      },
      "Promotions_200-get-promocode-rewards": {
        "value": {
          "bonus": [
            {
              "item": {
                "sku": "com.xsolla.game_1",
                "name": "Game name",
                "type": "unit",
                "description": "Game description",
                "image_url": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                "unit_items": [
                  {
                    "sku": "com.xsolla.game_key_01",
                    "name": "Game name",
                    "type": "game_key",
                    "is_free": false,
                    "drm_name": "Steam",
                    "drm_sku": "steam_key_01"
                  },
                  {
                    "sku": "com.xsolla.game_key_02",
                    "name": "Game name",
                    "type": "game_key",
                    "drm_name": "Origin",
                    "drm_sku": "origin_key_02"
                  }
                ]
              },
              "quantity": 1
            },
            {
              "item": {
                "sku": "com.xsolla.game_2",
                "name": "Game name",
                "type": "unit",
                "description": "Game description",
                "image_url": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                "unit_items": [
                  {
                    "sku": "com.xsolla.game_key_01",
                    "type": "game_key",
                    "name": "Game name",
                    "drm_name": "Steam",
                    "drm_sku": "steam_key_01"
                  }
                ]
              },
              "quantity": 2
            }
          ],
          "discount": {
            "percent": "10.00"
          },
          "is_selectable": true,
          "discounted_items": [
            {
              "sku": "com.xsolla.elven_sword_1",
              "discount": {
                "percent": "10.00"
              }
            }
          ]
        }
      },
      "Promotions_200-admin-promocodes": {
        "value": {
          "items": [
            {
              "external_id": "promocode_100_crystals",
              "promotion_periods": [
                {
                  "date_from": "2020-04-15T18:16:00+05:00",
                  "date_until": "2020-04-25T18:16:00+05:00"
                }
              ],
              "name": {
                "en-US": "New Year Bonus",
                "de-DE": "Neujahrsbonus"
              },
              "is_enabled": true,
              "bonus": [
                {
                  "sku": "com.xsolla.elven_sword_1",
                  "quantity": 1
                },
                {
                  "sku": "com.xsolla.elven_shield_1",
                  "quantity": 2
                },
                {
                  "sku": "com.xsolla.elven_gloves_1",
                  "quantity": 2
                }
              ],
              "redeem_user_limit": null,
              "redeem_total_limit": null,
              "redeem_code_limit": 1,
              "total_limit_state": null,
              "discount": null,
              "discounted_items": null
            },
            {
              "external_id": "summer2021",
              "promotion_periods": [
                {
                  "date_from": "2020-04-15T18:16:00+05:00",
                  "date_until": "2020-04-25T18:16:00+05:00"
                }
              ],
              "name": {
                "en-US": "Coupon name",
                "de-DE": "Gutscheintitel"
              },
              "is_enabled": true,
              "bonus": [
                {
                  "sku": "com.xsolla.diamonds_1",
                  "quantity": 100
                }
              ],
              "redeem_user_limit": null,
              "redeem_total_limit": 100,
              "redeem_code_limit": null,
              "total_limit_state": {
                "available": 50,
                "reserved": 10,
                "used": 40
              },
              "discount": {
                "percent": "10.99"
              },
              "discounted_items": [
                {
                  "sku": "com.xsolla.elven_sword_1",
                  "discount": {
                    "percent": "10.00"
                  }
                }
              ],
              "price_conditions": [
                {
                  "operator": "ge",
                  "value": "10.0000"
                },
                {
                  "operator": "le",
                  "value": "50.0000"
                }
              ],
              "excluded_promotions": [
                23,
                45
              ]
            }
          ],
          "total_promotions_count": 2,
          "active_promotions_count": 2,
          "inactive_promotions_count": 0
        }
      },
      "Promotions_200-admin-unique-catalog-offers": {
        "value": {
          "items": [
            {
              "external_id": "new_year_bonus",
              "promotion_periods": [
                {
                  "date_from": "2020-04-15T18:16:00+05:00",
                  "date_until": "2020-04-25T18:16:00+05:00"
                },
                {
                  "date_from": "2020-05-15T18:16:00+05:00",
                  "date_until": "2020-05-25T18:16:00+05:00"
                }
              ],
              "name": {
                "en-US": "New Year Bonus",
                "de-DE": "Neujahrsbonus"
              },
              "items": [
                "booster",
                "booster_mega"
              ],
              "is_enabled": true,
              "redeem_user_limit": 1,
              "redeem_total_limit": null,
              "redeem_code_limit": 1,
              "total_limit_state": null
            },
            {
              "external_id": "secret_store",
              "promotion_periods": [
                {
                  "date_from": "2020-04-15T18:16:00+05:00",
                  "date_until": null
                }
              ],
              "name": {
                "en-US": "Secret store",
                "ru-RU": "Тайный магазин"
              },
              "items": [
                "helmet",
                "armor",
                "sword"
              ],
              "is_enabled": true,
              "redeem_user_limit": 1,
              "redeem_total_limit": 100,
              "redeem_code_limit": 1,
              "total_limit_state": {
                "available": 50,
                "reserved": 10,
                "used": 40
              }
            }
          ],
          "total_promotions_count": 2,
          "active_promotions_count": 2,
          "inactive_promotions_count": 0
        }
      },
      "404-coupon-not-found": {
        "value": {
          "statusCode": 404,
          "errorCode": 9802,
          "errorMessage": "[0401-9802]: Coupon not found",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x"
        }
      },
      "404-user-not-found": {
        "value": {
          "statusCode": 404,
          "errorCode": 5008,
          "errorMessage": "[0401-5008]: Could not find User",
          "transactionId": "transaction id"
        }
      },
      "Promotions_422-invalid-coupon": {
        "value": {
          "statusCode": 422,
          "errorCode": 1102,
          "errorMessage": "[0401-1102]: Unprocessable Entity. The property `external_id` is required"
        }
      },
      "code-limit": {
        "value": {
          "promotion_id": 1,
          "items": [
            {
              "code": "WINTER2023",
              "per_code": {
                "total": 10,
                "available": 7,
                "used": 2,
                "reserved": 1
              }
            },
            {
              "code": "SUMMER2023",
              "per_code": {
                "total": 5,
                "available": 0,
                "used": 3,
                "reserved": 2
              }
            }
          ],
          "total_items_count": 2,
          "has_more": false
        }
      },
      "401-complex-auth-header-not-found": {
        "value": {
          "statusCode": 401,
          "errorCode": 1501,
          "errorMessage": "[0401-1501]: Authorization failed: Authorization header not sent",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x"
        }
      },
      "401-complex-auth-incorrect-credentials": {
        "value": {
          "statusCode": 401,
          "errorCode": 1013,
          "errorMessage": "[0401-1013]: Token not found.",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x"
        }
      },
      "422-user_external_id_invalid": {
        "value": {
          "statusCode": 404,
          "errorCode": 1102,
          "errorMessage": "[0401-1102]: Unprocessable Entity",
          "transactionId": "transaction id",
          "errorMessageExtended": [
            {
              "property": "user_external_id",
              "message": "Must be at least 1 characters long"
            },
            {
              "property": "user_external_id",
              "message": "Does not match the regex pattern ^\\S+$"
            }
          ]
        }
      },
      "404-promotion-by-id-not-found": {
        "value": {
          "statusCode": 404,
          "errorCode": 1101,
          "errorMessage": "[0401-1101]: Promotion not found",
          "transactionId": "transaction id"
        }
      },
      "422-promotion-without-user-limit": {
        "value": {
          "statusCode": 422,
          "errorCode": 4509,
          "errorMessage": "[0401-4509]: Promotion does not have configured user limits.",
          "transactionId": "transaction id"
        }
      },
      "422-promotion-out-of-range-available-user-limit": {
        "value": {
          "statusCode": 422,
          "errorCode": 4511,
          "errorMessage": "[0401-4511]: Available promotion limit is out of range.",
          "transactionId": "transaction id"
        }
      },
      "200-value-points-reward-chain_admin_get-value-point-list": {
        "value": {
          "items": [
            {
              "sku": "com.xsolla.reward_vp_1",
              "name": {
                "en": "Reward VP 1"
              },
              "type": "value_point",
              "is_enabled": true,
              "description": {
                "en": "Points for reward system"
              },
              "long_description": {
                "en": "Points given to users to get new rewards in a reward chain."
              },
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "media_list": [],
              "order": 1,
              "is_clan": false
            },
            {
              "sku": "com.xsolla.reward_vp_2",
              "name": {
                "en": "Reward VP 2"
              },
              "type": "value_point",
              "is_enabled": false,
              "description": {
                "en": "Value points for reward system."
              },
              "long_description": {
                "en": "Value points given to users to get new rewards in a reward chain."
              },
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "media_list": [],
              "order": 2,
              "is_clan": false
            },
            {
              "sku": "com.xsolla.clan_value_point_1",
              "name": {
                "en": "Clan Reward VP 1"
              },
              "is_enabled": true,
              "description": {
                "en": "Value points for clan reward system."
              },
              "long_description": {
                "en": "Value points given to clans to get new rewards in a reward chain."
              },
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "media_list": [],
              "order": 3,
              "is_clan": true
            }
          ]
        }
      },
      "422-property-sku-is-required": {
        "value": {
          "statusCode": 422,
          "errorCode": 1102,
          "errorMessage": "[0401-1102]: Unprocessable Entity. The property `sku` is required",
          "transactionId": "da145238620011eb8e24fe6913ff226a"
        }
      },
      "200-value-points-reward-chain_admin_get-value-point": {
        "value": {
          "sku": "com.xsolla.reward_vp_1",
          "name": {
            "en": "Reward VP 1"
          },
          "type": "value_point",
          "is_enabled": true,
          "description": {
            "en": "Points for reward system"
          },
          "long_description": {
            "en": "Points given to users to get new rewards in a reward chain."
          },
          "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
          "media_list": [],
          "order": 1,
          "is_clan": false,
          "can_delete": false
        }
      },
      "200-value-points-rewards-list": {
        "value": {
          "items": [
            {
              "item_id": 14232,
              "sku": "com.xsolla.booster_1",
              "name": {
                "en": "Booster"
              },
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "amount": 100
            },
            {
              "item_id": 14232,
              "sku": "com.xsolla.booster_mega",
              "name": {
                "en": "Mega Booster"
              },
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "amount": 200
            }
          ]
        }
      },
      "200-client-get-reward-chains-list": {
        "value": {
          "has_more": false,
          "total_items_count": 1,
          "items": [
            {
              "reward_chain_id": 10,
              "name": "Weekly quest",
              "description": "Big weekly quest",
              "long_description": "You can get a lot of additional items just by shopping during the week",
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "order": 1,
              "date_start": "2023-04-15T18:16:00+05:00",
              "date_end": "2023-04-25T18:16:00+05:00",
              "value_point": {
                "sku": "com.xsolla.value_point_1",
                "name": "Value point",
                "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                "description": null,
                "long_description": null,
                "amount": 130
              },
              "clan_type": null,
              "top_contributors": [],
              "steps": [
                {
                  "step_id": 1,
                  "name": "Level 1",
                  "is_claimed": true,
                  "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                  "price": {
                    "amount": 100
                  },
                  "reward": [
                    {
                      "sku": "com.xsolla.box_1",
                      "name": "Super box",
                      "type": "bundle",
                      "description": "Super box with items",
                      "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.box_2",
                      "name": "Mega box",
                      "type": "bundle",
                      "description": "Mega box with items",
                      "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                      "quantity": 1
                    }
                  ]
                },
                {
                  "step_id": 2,
                  "name": "Level 2",
                  "is_claimed": false,
                  "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                  "price": {
                    "amount": 200
                  },
                  "reward": [
                    {
                      "sku": "com.xsolla.box_1",
                      "name": "Super box",
                      "type": "bundle",
                      "description": "Super box with items",
                      "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.box_2",
                      "name": "Mega box",
                      "type": "bundle",
                      "description": "Mega box with items",
                      "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                      "quantity": 2
                    }
                  ]
                }
              ],
              "recurrent_schedule": {
                "interval_type": "weekly",
                "reset_next_date": 1746057600
              },
              "popup_header": null,
              "popup_instruction": null,
              "popup_image_url": null
            },
            {
              "reward_chain_id": 12,
              "name": "Weekly clan quest",
              "description": "Major weekly clan quest.",
              "long_description": "You and your clan members can get additional items for shopping during a certain month.",
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "order": 2,
              "date_start": "2023-04-15T18:16:00+05:00",
              "date_end": "2023-10-15T18:16:00+05:00",
              "value_point": {
                "sku": "com.xsolla.clan_value_point_1",
                "name": "Clan Reward VP 1",
                "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                "description": "Value points for clan reward system.",
                "long_description": "Value points given to clans to get new rewards in a reward chain.",
                "amount": 80
              },
              "clan_type": "guild",
              "top_contributors": [
                {
                  "name": "Rabbit",
                  "contributed_amount": 100
                },
                {
                  "name": "Rocket",
                  "contributed_amount": 80
                },
                {
                  "name": "Rain",
                  "contributed_amount": 40
                }
              ],
              "steps": [
                {
                  "step_id": 1,
                  "name": "Level 1",
                  "is_claimed": true,
                  "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                  "price": {
                    "amount": 100
                  },
                  "reward": [
                    {
                      "sku": "com.xsolla.box_1",
                      "name": "Super box",
                      "type": "bundle",
                      "description": "Super box with items",
                      "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.box_2",
                      "name": "Mega box",
                      "type": "bundle",
                      "description": "Mega box with items",
                      "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                      "quantity": 1
                    }
                  ]
                },
                {
                  "step_id": 2,
                  "name": "Level 2",
                  "is_claimed": false,
                  "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                  "price": {
                    "amount": 200
                  },
                  "reward": [
                    {
                      "sku": "com.xsolla.box_1",
                      "name": "Super box",
                      "type": "bundle",
                      "description": "Super box with items",
                      "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.box_2",
                      "name": "Mega box",
                      "type": "bundle",
                      "description": "Mega box with items",
                      "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                      "quantity": 2
                    }
                  ]
                }
              ],
              "recurrent_schedule": {
                "interval_type": "monthly",
                "reset_next_date": 1746057600
              },
              "popup_header": {
                "en": "How to unlock rewards"
              },
              "popup_instruction": {
                "en": "You should be a clan member to get clan rewards. You join a clan when a clan member invited you to the clan, and you accepted the invite. You can create your own clan."
              },
              "popup_image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png"
            }
          ]
        }
      },
      "200-client-get-user-reward-chain-balance": {
        "summary": "Reward chain example",
        "value": {
          "sku": "com.xsolla.value_point_1",
          "name": "Value point",
          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
          "description": null,
          "long_description": null,
          "amount": 130,
          "is_clan": false
        }
      },
      "200-client-get-user-clan-reward-chain-balance": {
        "summary": "Clan reward chain example",
        "value": {
          "sku": "com.xsolla.clan_value_point_1",
          "name": "Clan Reward VP 1",
          "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
          "description": "Value points for clan reward system.",
          "long_description": "Value points given to clans to get new rewards in a reward chain.",
          "amount": 80,
          "is_clan": true
        }
      },
      "200-client-update-user-clan": {
        "value": {
          "reward": [
            {
              "sku": "com.xsolla.box_1",
              "name": "Super box",
              "type": "bundle",
              "description": "Super box with items",
              "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
              "quantity": 1,
              "bundle_type": "standard"
            },
            {
              "sku": "com.xsolla.potion_1",
              "name": "Mega potion",
              "type": "virtual_good",
              "description": "Mega potion",
              "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
              "quantity": 1
            }
          ]
        }
      },
      "200-reward-chain-list": {
        "value": {
          "has_more": true,
          "items": [
            {
              "name": {
                "en": "Reward chain"
              },
              "reward_chain_id": 1,
              "description": {
                "en": "Reward chain description"
              },
              "long_description": {
                "en": "Reward chain long description"
              },
              "is_enabled": true,
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "order": 1,
              "periods": [
                {
                  "date_from": "2026-01-01T01:00:00+05:00",
                  "date_until": "2026-01-31T23:59:59+05:00"
                },
                {
                  "date_from": "2026-02-01T01:00:00+05:00",
                  "date_until": "2026-02-28T23:59:59+05:00"
                }
              ],
              "value_point": {
                "sku": "com.xsolla.reward_vp_1",
                "name": {
                  "en": "Reward VP 1"
                },
                "type": "value_point",
                "is_enabled": true,
                "description": "Value points for standard reward system.",
                "long_description": "Value points given to users to get new rewards in a reward chain.",
                "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                "media_list": [],
                "order": 1,
                "is_clan": false
              },
              "recurrent_schedule": null,
              "attribute_conditions": [
                {
                  "attribute": "race",
                  "operator": "eq",
                  "value": "ork",
                  "type": "string",
                  "can_be_missing": false
                }
              ],
              "is_always_visible": true,
              "is_reset_after_end": true
            },
            {
              "name": {
                "en": "Clan reward chain"
              },
              "reward_chain_id": 2,
              "description": {
                "en": "Clan reward chain description."
              },
              "long_description": {
                "en": "Clan reward chain long description."
              },
              "is_enabled": true,
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "order": 1,
              "periods": [
                {
                  "date_from": "2026-01-01T01:00:00+05:00",
                  "date_until": "2026-01-31T23:59:59+05:00"
                },
                {
                  "date_from": "2026-02-01T01:00:00+05:00",
                  "date_until": "2026-02-28T23:59:59+05:00"
                }
              ],
              "value_point": {
                "sku": "com.xsolla.clan_value_point_1",
                "name": {
                  "en": "Clan Reward VP 1"
                },
                "is_enabled": true,
                "description": "Value points for clan reward system.",
                "long_description": "Value points given to clans to get new rewards in a reward chain.",
                "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                "media_list": [],
                "order": 1,
                "is_clan": true
              },
              "recurrent_schedule": {
                "day_of_month": null,
                "day_of_week": 2,
                "displayable_reset_next_date": "2026-01-06T01:00:00+05:00",
                "displayable_reset_start_date": "2026-01-01T01:00:00+05:00",
                "interval_type": "weekly",
                "reset_next_date": 1767643200,
                "time": "01:00:00+05:00"
              },
              "popup_header": {
                "en": "How to unlock rewards"
              },
              "popup_instruction": {
                "en": "You must be a clan member in order to get clan rewards. You join a clan when a clan member invites you to the clan, and you accept the invite. You can also create your own clan."
              },
              "popup_image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "clan_type": "guild"
            }
          ]
        }
      },
      "200-reward-chain": {
        "summary": "Reward chain example",
        "value": {
          "reward_chain_id": 1,
          "name": {
            "en": "Reward chain"
          },
          "description": {
            "en": "Reward chain description"
          },
          "long_description": {
            "en": "Reward chain long description"
          },
          "is_enabled": true,
          "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
          "order": 1,
          "periods": [
            {
              "date_from": "2026-01-01T01:00:00+05:00",
              "date_until": "2026-01-31T23:59:59+05:00"
            },
            {
              "date_from": "2026-02-01T01:00:00+05:00",
              "date_until": "2026-02-28T23:59:59+05:00"
            }
          ],
          "value_point": {
            "sku": "com.xsolla.reward_vp_1",
            "name": {
              "en": "Reward VP 1"
            },
            "type": "value_point",
            "is_enabled": true,
            "description": {
              "en": "Value points for reward system."
            },
            "long_description": {
              "en": "Value points given to users to get new rewards in a reward chain."
            },
            "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
            "media_list": [],
            "order": 1,
            "is_clan": false
          },
          "steps": [
            {
              "name": {
                "en": "First step of the reward chain"
              },
              "step_id": 1,
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "reward": [
                {
                  "sku": "com.xsolla.item_1",
                  "quantity": 5
                },
                {
                  "sku": "com.xsolla.item_2",
                  "quantity": 1
                }
              ],
              "price": {
                "amount": 10
              }
            },
            {
              "name": {
                "en": "Second step of the reward chain"
              },
              "step_id": 2,
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "reward": [
                {
                  "sku": "com.xsolla.item_3",
                  "quantity": 5
                },
                {
                  "sku": "com.xsolla.item_4",
                  "quantity": 1
                }
              ],
              "price": {
                "amount": 15
              }
            }
          ],
          "recurrent_schedule": {
            "day_of_week": 2,
            "displayable_reset_next_date": "2026-01-06T01:00:00+05:00",
            "displayable_reset_start_date": "2026-01-01T01:00:00+05:00",
            "interval_type": "weekly",
            "reset_next_date": 1767643200,
            "time": "01:00:00+05:00"
          },
          "attribute_conditions": [
            {
              "attribute": "race",
              "operator": "eq",
              "value": "ork",
              "type": "string",
              "can_be_missing": false
            }
          ],
          "is_always_visible": true,
          "is_reset_after_end": true
        }
      },
      "200-clan-reward-chain": {
        "summary": "Clan reward chain example",
        "value": {
          "reward_chain_id": 1,
          "name": {
            "en": "Clan reward chain"
          },
          "description": {
            "en": "Clan reward chain description."
          },
          "long_description": {
            "en": "Clan reward chain long description."
          },
          "is_enabled": true,
          "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
          "order": 1,
          "periods": [
            {
              "date_from": "2020-04-15T18:16:00+05:00",
              "date_until": "2021-04-15T18:16:00+05:00"
            }
          ],
          "value_point": {
            "sku": "com.xsolla.clan_value_point_1",
            "name": {
              "en": "Clan Reward VP 1"
            },
            "is_enabled": true,
            "description": {
              "en": "Value points for clan reward system."
            },
            "long_description": {
              "en": "Value points given to clans to get new rewards in a certain reward chain."
            },
            "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
            "media_list": [],
            "order": 1,
            "is_clan": true
          },
          "steps": [
            {
              "name": {
                "en": "First step of the reward chain"
              },
              "step_id": 1,
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "reward": [
                {
                  "sku": "com.xsolla.item_1",
                  "quantity": 5
                },
                {
                  "sku": "com.xsolla.item_2",
                  "quantity": 1
                }
              ],
              "price": {
                "amount": 10
              }
            },
            {
              "name": {
                "en": "Second step of the reward chain"
              },
              "step_id": 2,
              "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
              "reward": [
                {
                  "sku": "com.xsolla.item_3",
                  "quantity": 5
                },
                {
                  "sku": "com.xsolla.item_4",
                  "quantity": 1
                }
              ],
              "price": {
                "amount": 15
              }
            }
          ],
          "recurrent_schedule": {
            "day_of_week": 2,
            "displayable_reset_next_date": "2023-03-07T11:00:00+08:00",
            "displayable_reset_start_date": "2023-02-28T11:00:00+08:00",
            "interval_type": "weekly",
            "reset_next_date": 1677553200,
            "time": "11:00:00+08:00"
          },
          "popup_header": {
            "en": "How to unlock rewards"
          },
          "popup_instruction": {
            "en": "You must be a clan member in order to get clan rewards. You join a clan when a clan member invites you to the clan, and you accept the invite. You can also create your own clan."
          },
          "popup_image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
          "clan_type": "guild"
        }
      },
      "200-admin-daily-chain-list": {
        "summary": "Daily reward list example",
        "value": {
          "has_more": false,
          "total_items_count": 3,
          "items": [
            {
              "id": 1,
              "name": {
                "en": "Daily reward",
                "ru": "Ежедневная награда"
              },
              "description": {
                "en": "Daily reward short description"
              },
              "order": 1,
              "number_of_steps": 10,
              "date_start": "2023-04-15T18:16:00+05:00",
              "date_end": "2025-04-25T18:16:00+05:00",
              "is_enabled": false,
              "is_recurrent": true,
              "type": "calendar_hard"
            },
            {
              "id": 2,
              "name": {
                "en": "Monthly daily reward",
                "ru": "Ежедневные награды в цепочке на месяц"
              },
              "description": {
                "en": "Monthly daily reward short description"
              },
              "order": 2,
              "number_of_steps": 13,
              "date_start": "2025-04-15T00:00:00+08:00",
              "date_end": "2025-04-28T15:00:00+08:00",
              "is_enabled": false,
              "is_recurrent": true,
              "type": "calendar_hard"
            },
            {
              "id": 3,
              "name": {
                "en": "Login reward"
              },
              "description": {
                "en": "Login reward short description"
              },
              "order": 3,
              "number_of_steps": 7,
              "date_start": "2023-05-01T18:16:00+05:00",
              "date_end": "2025-05-31T18:16:00+05:00",
              "is_enabled": true,
              "is_recurrent": true,
              "type": "rolling_skippable"
            },
            {
              "id": 4,
              "name": {
                "en": "Daily reward",
                "ru": "Ежедневная награда"
              },
              "description": {
                "en": "Daily reward short description"
              },
              "order": 4,
              "number_of_steps": 10,
              "date_start": "2023-04-15T18:16:00+05:00",
              "date_end": "2025-04-25T18:16:00+05:00",
              "is_enabled": true,
              "is_recurrent": true,
              "type": "calendar_hard"
            },
            {
              "id": 5,
              "name": {
                "en": "Unskippable login reward"
              },
              "description": {
                "en": "Unskippable login reward short description"
              },
              "order": 3,
              "number_of_steps": 7,
              "date_start": "2025-11-01T10:00:00+05:00",
              "date_end": "2025-11-30T10:00:00+05:00",
              "is_enabled": true,
              "is_recurrent": true,
              "type": "rolling_unskippable"
            }
          ]
        }
      },
      "422-admin-daily-chain-error-too-many-steps": {
        "summary": "Too many steps",
        "description": "Daily reward steps max amount limit of 30 items is exceeded. Try specifying less steps.",
        "value": {
          "statusCode": 422,
          "errorCode": 6203,
          "errorMessage": "[0401-6203]: Chain step count exceeds the allowed limit",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "step_count": 31,
            "max_steps": 30
          }
        }
      },
      "422-admin-daily-chain-error-incorrect-steps-order": {
        "summary": "Incorrect steps order",
        "description": "Daily reward steps numbers sequence is incorrect. Correct step numbers should be sequential without any gaps or duplicates.",
        "value": {
          "statusCode": 422,
          "errorCode": 6210,
          "errorMessage": "[0401-6210]: Chain step numbers are invalid",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "incorrect_step_numbers": {
              "duplicates": [
                2,
                7
              ],
              "out_of_range": [
                7,
                8
              ],
              "missing": [
                3,
                4,
                5,
                6
              ]
            }
          }
        }
      },
      "422-admin-daily-chain-error-item-limit-exceeded": {
        "summary": "Item limit exceeded",
        "description": "Daily reward step item count exceeds the allowed limit for some steps. Currently only 1 item per step is allowed.",
        "value": {
          "statusCode": 422,
          "errorCode": 6208,
          "errorMessage": "[0401-6208]: Chain step item count exceeds the allowed limit for some steps",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "max_items": 1,
            "steps_exceeded_limits": [
              {
                "step_number": 1,
                "items_count": 2
              },
              {
                "step_number": 4,
                "items_count": 3
              }
            ]
          }
        }
      },
      "422-admin-daily-chain-error-incorrect-items": {
        "summary": "Incorrect step items",
        "description": "Specified items are not allowed, disabled or not found. Only enabled items of following types are allowed: virtual item, bundle, virtual currency package.",
        "value": {
          "statusCode": 422,
          "errorCode": 6211,
          "errorMessage": "[0401-6211]: Chain steps items are not allowed or not found",
          "transactionId": "x-x-xX-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "invalid_items": {
              "not_found": [
                "vg_deleted_item_1",
                "vg_deleted_item_2",
                "not_existing_sku_404_1",
                "not_existing_sku_404_2"
              ],
              "disabled": [
                "vg_disabled_item_1",
                "vg_disabled_item_2",
                "vc_disabled_1"
              ],
              "invalid_item_type": {
                "allowed_item_type_list": [
                  "virtual_good",
                  "bundle"
                ],
                "sku_map": {
                  "vc_enabled_shown_in_store_1": "virtual_currency",
                  "vc_disabled_1": "virtual_currency",
                  "unit_enabled_shown_in_store_1": "unit",
                  "gk_steam_enabled_shown_in_store_1": "game_key"
                }
              }
            }
          }
        }
      },
      "422-admin-daily-chain-error-invalid-dates": {
        "summary": "Invalid date format",
        "description": "Please, ensure dates format is valid.",
        "value": {
          "statusCode": 422,
          "errorCode": 6204,
          "errorMessage": "[0401-6204]: Period of a chain is invalid. Please, check the dates in your request",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_id": 1,
            "invalid_format_dates": {
              "date_start": "2023-04-15 17:16:00Z",
              "date_end": "2025-04-25 19:16:00Z"
            }
          }
        }
      },
      "422-admin-daily-chain-error-incorrect-period": {
        "summary": "Incorrect period of a daily reward",
        "description": "Please ensure start date is earlier than end date.",
        "value": {
          "statusCode": 422,
          "errorCode": 6204,
          "errorMessage": "[0401-6204]: Period of a chain is invalid. Please, check the dates in your request",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_id": 1,
            "invalid_periods": [
              {
                "start": "2025-04-25T18:16:00+05:00",
                "end": "2023-04-15T18:16:00+05:00"
              }
            ]
          }
        }
      },
      "200-admin-daily-chain": {
        "summary": "Daily reward example",
        "value": {
          "id": 3,
          "name": {
            "en": "Daily reward",
            "ru": "Ежедневная награда"
          },
          "description": {
            "en": "Daily reward short description"
          },
          "date_start": "2023-04-15T18:16:00+05:00",
          "date_end": "2025-04-25T18:16:00+05:00",
          "order": 1,
          "is_recurrent": false,
          "number_of_steps": 3,
          "steps": [
            {
              "step_id": 7,
              "step_number": 1,
              "items": [
                {
                  "item_id": 9010,
                  "sku": "telescope",
                  "name": {
                    "en": "Telescope",
                    "ru": "Телескоп"
                  },
                  "type": "virtual_good",
                  "description": {
                    "en": "Allows to see the stars",
                    "ru": "Позволяет увидеть звезды"
                  },
                  "image_url": "https://picture.bundle-picture.png",
                  "quantity": 1
                },
                {
                  "item_id": 9012,
                  "sku": "health_potion",
                  "name": {
                    "en": "Healing potion",
                    "ru": "Зелье лечения"
                  },
                  "type": "virtual_good",
                  "description": {
                    "en": "Heal 10% of your health",
                    "ru": "Лечит 10% здоровья"
                  },
                  "image_url": "https://picture.bundle-picture.png",
                  "quantity": 2
                }
              ]
            },
            {
              "step_id": 6,
              "step_number": 2,
              "items": [
                {
                  "item_id": 9010,
                  "sku": "telescope",
                  "name": {
                    "en": "Telescope",
                    "ru": "Телескоп"
                  },
                  "type": "virtual_good",
                  "description": {
                    "en": "Allows to see the stars",
                    "ru": "Позволяет увидеть звезды"
                  },
                  "image_url": "https://picture.bundle-picture.png",
                  "quantity": 5
                }
              ]
            },
            {
              "step_id": 5,
              "step_number": 3,
              "items": [
                {
                  "item_id": 9010,
                  "sku": "telescope",
                  "name": {
                    "en": "Telescope",
                    "ru": "Телескоп"
                  },
                  "type": "virtual_good",
                  "description": {
                    "en": "Allows to see the stars",
                    "ru": "Позволяет увидеть звезды"
                  },
                  "image_url": "https://picture.bundle-picture.png",
                  "quantity": 2
                }
              ]
            }
          ],
          "is_enabled": true,
          "type": "calendar_hard"
        }
      },
      "404-daily-chain-not-found": {
        "summary": "Daily reward is not found",
        "description": "Daily reward was not found.",
        "value": {
          "statusCode": 404,
          "errorCode": 6201,
          "errorMessage": "[0401-6201]: Chain not found",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_id": 4
          }
        }
      },
      "422-admin-daily-chain-error-invalid-chain-step-ids": {
        "summary": "Daily reward step IDs not found",
        "description": "Some of step IDs was not found. Please, double check if specified daily reward step IDs actually exist.",
        "value": {
          "statusCode": 404,
          "errorCode": 6206,
          "errorMessage": "[0401-6206]: Chain step IDs not found",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_id": 1,
            "chain_step_id_list": [
              404000
            ]
          }
        }
      },
      "422-admin-daily-chain-error-chain-id-mismatch": {
        "summary": "Daily reward ID mismatch",
        "description": "Daily reward ID specified in the body does not match the URL.",
        "value": {
          "statusCode": 422,
          "errorCode": 6205,
          "errorMessage": "[0401-6205]: Chain ID mismatch. Please, check the chain ID in your request body and URL",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "url_chain_id": 1,
            "body_chain_id": 2
          }
        }
      },
      "422-admin-daily-chain-error-duplicate-step-ids": {
        "summary": "Duplicate daily reward step IDs",
        "description": "Please, ensure that daily reward step IDs are unique in the request body.",
        "value": {
          "statusCode": 422,
          "errorCode": 6207,
          "errorMessage": "[0401-6207]: Duplicate chain step IDs detected in the request body",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_step_id_list": [
              8,
              9,
              10
            ],
            "chain_id": 3
          }
        }
      },
      "422-admin-daily-chain-error-activated": {
        "summary": "Active daily reward cannot be updated",
        "description": "Active daily reward have to be deactivated before being updated.",
        "value": {
          "statusCode": 422,
          "errorCode": 6209,
          "errorMessage": "[0401-6209]: Active chain cannot be updated. Please deactivate it first",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_id": 2
          }
        }
      },
      "200-client-daily-chain-list": {
        "summary": "User's daily reward list example",
        "value": {
          "has_more": false,
          "total_items_count": 3,
          "items": [
            {
              "id": 101,
              "name": "Active daily reward",
              "description": null,
              "date_start": "2025-04-01T18:16:00+05:00",
              "date_end": "2025-04-03T18:16:00+05:00",
              "order": 1,
              "steps": [
                {
                  "step_number": 1,
                  "items": [
                    {
                      "item_id": 9012,
                      "sku": "health_potion",
                      "name": "Healing potion",
                      "type": "virtual_good",
                      "description": "Heal 10% of your health",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 1
                    }
                  ],
                  "status": "claimed",
                  "unlocked_date": 1711978560
                },
                {
                  "step_number": 2,
                  "items": [
                    {
                      "item_id": 9012,
                      "sku": "health_potion",
                      "name": "Healing potion",
                      "type": "virtual_good",
                      "description": "Heal 10% of your health",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 2
                    }
                  ],
                  "status": "claimable",
                  "unlocked_date": 1712064960
                },
                {
                  "step_number": 3,
                  "items": [
                    {
                      "item_id": 9011,
                      "sku": "free_item",
                      "name": "Free item",
                      "type": "virtual_good",
                      "description": "store_item_0_lost_telescope_2_short_description",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": true,
                      "quantity": 1
                    }
                  ],
                  "status": "claim_in_future",
                  "unlocked_date": 1712151360
                }
              ],
              "type": "calendar_hard"
            },
            {
              "id": 102,
              "name": "Active daily reward 2",
              "description": null,
              "date_start": "2025-05-01T18:16:00+05:00",
              "date_end": "2025-05-03T18:16:00+05:00",
              "order": 1,
              "steps": [
                {
                  "step_number": 1,
                  "items": [
                    {
                      "item_id": 9011,
                      "sku": "free_item",
                      "name": "Free item",
                      "type": "virtual_good",
                      "description": "store_item_0_lost_telescope_2_short_description",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": true,
                      "quantity": 3
                    }
                  ],
                  "status": "claimable",
                  "unlocked_date": 1714560960
                },
                {
                  "step_number": 2,
                  "items": [
                    {
                      "item_id": 9012,
                      "sku": "health_potion",
                      "name": "Healing potion",
                      "type": "virtual_good",
                      "description": "Heal 10% of your health",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 3
                    }
                  ],
                  "status": "claim_in_future",
                  "unlocked_date": 1714647360
                }
              ],
              "type": "calendar_hard"
            },
            {
              "id": 103,
              "name": "Active daily reward 3",
              "description": null,
              "date_start": "2025-04-01T18:16:00+05:00",
              "date_end": "2025-04-03T18:16:00+05:00",
              "order": 1,
              "steps": [
                {
                  "step_number": 1,
                  "items": [
                    {
                      "item_id": 9011,
                      "sku": "free_item",
                      "name": "Free item",
                      "type": "virtual_good",
                      "description": "store_item_0_lost_telescope_2_short_description",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": true,
                      "quantity": 3
                    }
                  ],
                  "status": "claimable",
                  "unlocked_date": 1711978560
                },
                {
                  "step_number": 2,
                  "items": [
                    {
                      "item_id": 9012,
                      "sku": "health_potion",
                      "name": "Healing potion",
                      "type": "virtual_good",
                      "description": "Heal 10% of your health",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 3
                    }
                  ],
                  "status": "blocked",
                  "unlocked_date": 1712064960
                },
                {
                  "step_number": 3,
                  "items": [
                    {
                      "item_id": 9012,
                      "sku": "health_potion",
                      "name": "Healing potion",
                      "type": "virtual_good",
                      "description": "Heal 10% of your health",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 3
                    }
                  ],
                  "status": "blocked",
                  "unlocked_date": 1712151360
                }
              ],
              "type": "calendar_hard"
            },
            {
              "id": 104,
              "name": "Active daily rolling reward",
              "description": null,
              "date_start": "2025-04-01T10:00:00+05:00",
              "date_end": "2025-04-28T10:00:00+05:00",
              "order": 1,
              "steps": [
                {
                  "step_number": 1,
                  "items": [
                    {
                      "item_id": 1001,
                      "sku": "item_one",
                      "name": "Item One",
                      "type": "virtual_good",
                      "description": "Item one description",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": true,
                      "quantity": 1
                    }
                  ],
                  "status": "claimed",
                  "unlocked_date": -1
                },
                {
                  "step_number": 2,
                  "items": [
                    {
                      "item_id": 1002,
                      "sku": "item_two",
                      "name": "Item Two",
                      "type": "virtual_good",
                      "description": "Item two description",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 1
                    }
                  ],
                  "status": "claimable",
                  "unlocked_date": 1712064960
                },
                {
                  "step_number": 3,
                  "items": [
                    {
                      "item_id": 1003,
                      "sku": "item_three",
                      "name": "Item Three",
                      "type": "virtual_good",
                      "description": "Item three description",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 1
                    }
                  ],
                  "status": "claim_in_future",
                  "unlocked_date": 1712151360
                }
              ],
              "type": "rolling_skippable"
            }
          ]
        }
      },
      "200-client-daily-chain": {
        "summary": "User's daily reward example",
        "value": {
          "id": 101,
          "name": "Active daily reward",
          "description": "Active daily reward description",
          "date_start": "2025-04-01T18:16:00+05:00",
          "date_end": "2025-04-03T18:16:00+05:00",
          "order": 1,
          "steps": [
            {
              "step_number": 1,
              "items": [
                {
                  "item_id": 10001,
                  "sku": "bundle_with_items",
                  "name": "Bundle with awesome stuff!",
                  "type": "bundle",
                  "description": "Many stuff",
                  "image_url": "https://picture.bundle-with-many-stuff.png",
                  "bundle_type": "standard",
                  "is_free": false,
                  "content": [
                    {
                      "item_id": 1,
                      "sku": "d0df11c5-f7c4-4907-9ae1-7dd40cecab05",
                      "name": "virtual_good_one",
                      "type": "virtual_good",
                      "description": "Virtual good one",
                      "image_url": "https://picture.virtual-good-picture.png",
                      "is_free": false,
                      "quantity": 1
                    },
                    {
                      "item_id": 2,
                      "sku": "coins",
                      "name": "Gold Coins",
                      "type": "virtual_currency",
                      "description": "Gold Coins",
                      "image_url": "https://picture.gold_coins.png",
                      "is_free": false,
                      "quantity": 100
                    }
                  ],
                  "quantity": 1
                }
              ],
              "status": "blocked",
              "unlocked_date": 1711978560
            },
            {
              "step_number": 2,
              "items": [
                {
                  "item_id": 9012,
                  "sku": "health_potion",
                  "name": "Healing potion",
                  "type": "virtual_good",
                  "description": "Heal 10% of your health",
                  "image_url": "https://picture.bundle-picture.png",
                  "is_free": false,
                  "quantity": 1
                }
              ],
              "status": "claimed",
              "unlocked_date": 1712064960
            },
            {
              "step_number": 3,
              "items": [
                {
                  "item_id": 9012,
                  "sku": "health_potion",
                  "name": "Healing potion",
                  "type": "virtual_good",
                  "description": "Heal 10% of your health",
                  "image_url": "https://picture.bundle-picture.png",
                  "is_free": false,
                  "quantity": 2
                }
              ],
              "status": "claimable",
              "unlocked_date": 1712151360
            },
            {
              "step_number": 4,
              "items": [
                {
                  "item_id": 9011,
                  "sku": "free_item",
                  "name": "Free item",
                  "type": "virtual_good",
                  "description": "store_item_0_lost_telescope_2_short_description",
                  "image_url": "https://picture.bundle-picture.png",
                  "is_free": false,
                  "quantity": 1
                }
              ],
              "status": "claim_in_future",
              "unlocked_date": 1712237760
            }
          ],
          "type": "calendar_hard"
        }
      },
      "404-daily-chain-step-not-found": {
        "summary": "Daily reward step not found",
        "description": "Daily reward step was not found.",
        "value": {
          "statusCode": 404,
          "errorCode": 6304,
          "errorMessage": "[0401-6304]: Daily Chain Step not found",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "chain_id": 100,
            "step_number": 1
          }
        }
      },
      "422-daily-chain-claim-error-invalid-step": {
        "summary": "Can't claim step reward",
        "description": "Ensure the user has not previously claimed the reward and that the correct step in the daily reward is selected for claiming.\n",
        "value": {
          "statusCode": 422,
          "errorCode": 6405,
          "errorMessage": "[0401-6405]: This step is not available to be claimed by the user.",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "chain_id": 1,
            "step_number": 1
          }
        }
      },
      "200-client-offer-chain-list": {
        "summary": "User's offer chain list example",
        "value": {
          "has_more": false,
          "total_items_count": 3,
          "items": [
            {
              "id": 101,
              "name": "Active offer chain",
              "description": null,
              "date_start": "2018-04-15T18:16:00+05:00",
              "date_end": "2025-04-25T18:16:00+05:00",
              "order": 1,
              "recurrent_schedule": null,
              "steps": [
                {
                  "step_number": 1,
                  "is_free": false,
                  "items": [
                    {
                      "item_id": 9012,
                      "sku": "health_potion",
                      "name": "Healing potion",
                      "type": "virtual_good",
                      "description": "Heal 10% of your health",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 1,
                      "order": 0
                    }
                  ],
                  "is_claimed": false,
                  "step_price": {
                    "amount": 99.99,
                    "currency": "USD"
                  },
                  "step_vp_rewards": [
                    {
                      "item_id": 6039,
                      "sku": "test_value_point_39",
                      "amount": 15,
                      "name": "store_item_0_test_value_point_name",
                      "image_url": "https://popmedia.blob.core.windows.net/popyourself/female/accessory/female_crossnecklace_2_silver-01.png",
                      "is_clan": true
                    }
                  ]
                },
                {
                  "step_number": 2,
                  "is_free": false,
                  "items": [
                    {
                      "item_id": 9012,
                      "sku": "health_potion",
                      "name": "Healing potion",
                      "type": "virtual_good",
                      "description": "Heal 10% of your health",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 2,
                      "order": 0
                    }
                  ],
                  "is_claimed": false,
                  "step_price": {
                    "amount": 199.98,
                    "currency": "USD"
                  },
                  "step_vp_rewards": [
                    {
                      "item_id": 6039,
                      "sku": "test_value_point_39",
                      "amount": 30,
                      "name": "store_item_0_test_value_point_name",
                      "image_url": "https://popmedia.blob.core.windows.net/popyourself/female/accessory/female_crossnecklace_2_silver-01.png",
                      "is_clan": true
                    }
                  ]
                },
                {
                  "step_number": 3,
                  "is_free": true,
                  "items": [
                    {
                      "item_id": 9011,
                      "sku": "free_item",
                      "name": "Free item",
                      "type": "virtual_good",
                      "description": "store_item_0_lost_telescope_2_short_description",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": true,
                      "quantity": 1,
                      "order": 0
                    }
                  ],
                  "is_claimed": false,
                  "step_price": null,
                  "step_vp_rewards": null
                }
              ],
              "next_step_number": 1
            },
            {
              "id": 102,
              "name": "Active offer chain 2",
              "description": null,
              "date_start": "2018-04-15T18:16:00+05:00",
              "date_end": "2025-04-25T18:16:00+05:00",
              "order": 1,
              "recurrent_schedule": null,
              "steps": [
                {
                  "step_number": 1,
                  "is_free": true,
                  "items": [
                    {
                      "item_id": 9011,
                      "sku": "free_item",
                      "name": "Free item",
                      "type": "virtual_good",
                      "description": "store_item_0_lost_telescope_2_short_description",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": true,
                      "quantity": 3,
                      "order": 0
                    }
                  ],
                  "is_claimed": false,
                  "step_price": null,
                  "step_vp_rewards": null
                },
                {
                  "step_number": 2,
                  "is_free": true,
                  "items": [
                    {
                      "item_id": 9012,
                      "sku": "health_potion",
                      "name": "Healing potion",
                      "type": "virtual_good",
                      "description": "Heal 10% of your health",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 3,
                      "order": 0
                    }
                  ],
                  "is_claimed": false,
                  "step_price": null,
                  "step_vp_rewards": [
                    {
                      "item_id": 6039,
                      "sku": "test_value_point_39",
                      "amount": 45,
                      "name": "store_item_0_test_value_point_name",
                      "image_url": "https://popmedia.blob.core.windows.net/popyourself/female/accessory/female_crossnecklace_2_silver-01.png",
                      "is_clan": true
                    }
                  ]
                },
                {
                  "step_number": 3,
                  "is_free": true,
                  "items": [],
                  "is_claimed": false,
                  "step_price": null,
                  "step_vp_rewards": null
                }
              ],
              "next_step_number": 1
            },
            {
              "id": 103,
              "name": "Active offer chain 3",
              "description": null,
              "date_start": "2018-04-15T18:16:00+05:00",
              "date_end": "2025-04-25T18:16:00+05:00",
              "order": 1,
              "recurrent_schedule": null,
              "steps": [
                {
                  "step_number": 1,
                  "is_free": true,
                  "items": [
                    {
                      "item_id": 9011,
                      "sku": "free_item",
                      "name": "Free item",
                      "type": "virtual_good",
                      "description": "store_item_0_lost_telescope_2_short_description",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": true,
                      "quantity": 3,
                      "order": 0
                    }
                  ],
                  "is_claimed": false,
                  "step_price": null,
                  "step_vp_rewards": null
                },
                {
                  "step_number": 2,
                  "is_free": false,
                  "items": [
                    {
                      "item_id": 9012,
                      "sku": "health_potion",
                      "name": "Healing potion",
                      "type": "virtual_good",
                      "description": "Heal 10% of your health",
                      "image_url": "https://picture.bundle-picture.png",
                      "is_free": false,
                      "quantity": 3,
                      "order": 0
                    }
                  ],
                  "is_claimed": false,
                  "step_price": {
                    "amount": 299.97,
                    "currency": "USD"
                  },
                  "step_vp_rewards": [
                    {
                      "item_id": 6039,
                      "sku": "test_value_point_39",
                      "amount": 45,
                      "name": "store_item_0_test_value_point_name",
                      "image_url": "https://popmedia.blob.core.windows.net/popyourself/female/accessory/female_crossnecklace_2_silver-01.png",
                      "is_clan": true
                    }
                  ]
                },
                {
                  "step_number": 3,
                  "is_free": true,
                  "items": [],
                  "is_claimed": false,
                  "step_price": null,
                  "step_vp_rewards": null
                }
              ],
              "next_step_number": 1
            }
          ]
        }
      },
      "200-client-offer-chain": {
        "summary": "User's offer chain example",
        "value": {
          "id": 4,
          "name": "Offer chain with bundles",
          "description": null,
          "date_start": "2010-04-15T18:16:00+05:00",
          "date_end": "2025-04-25T18:16:00+05:00",
          "order": 1,
          "recurrent_schedule": null,
          "steps": [
            {
              "step_number": 1,
              "is_free": false,
              "items": [
                {
                  "item_id": 7008,
                  "sku": "bundle_with_many_items",
                  "name": "Bundle with many awesome stuff!",
                  "type": "bundle",
                  "description": "Many stuff",
                  "image_url": "https://picture.bundle-with-many-stuff.png",
                  "bundle_type": "standard",
                  "is_free": false,
                  "content": [
                    {
                      "item_id": 1,
                      "sku": "d0df11c5-f7c4-4907-9ae1-7dd40cecab05",
                      "name": "Virtual Good Bundle",
                      "type": "virtual_good",
                      "description": "virtual_good_short_description_d0df11c5-f7c4-4907-9ae1-7dd40cecab05",
                      "image_url": "https://popmedia.blob.core.windows.net/popyourself/female/accessory/female_crossnecklace_2_silver-01.png",
                      "is_free": false,
                      "quantity": 1
                    },
                    {
                      "item_id": 7009,
                      "sku": "vg-in-bundle-big-rocket",
                      "name": "Big Rocket",
                      "type": "virtual_good",
                      "description": "Big Rocket - short description",
                      "image_url": "https://picture.bigrocket.png",
                      "is_free": false,
                      "quantity": 1
                    },
                    {
                      "item_id": 7010,
                      "sku": "vc-in-bundle-gold-coins",
                      "name": "Gold Coins",
                      "type": "virtual_currency",
                      "description": "Gold Coins - short description",
                      "image_url": "https://picture.gold_coins.png",
                      "is_free": true,
                      "quantity": 100
                    },
                    {
                      "item_id": 7011,
                      "sku": "digital-content-drm-in-bundle-awesome-game",
                      "name": "Some Game",
                      "type": "virtual_good",
                      "description": "Some Game - short description",
                      "image_url": "https://picture.some_game.png",
                      "is_free": true,
                      "quantity": 1
                    },
                    {
                      "item_id": 7012,
                      "sku": "bundle-in-bundle-another-bundle",
                      "name": "Some Bundle in Bundle",
                      "type": "bundle",
                      "description": "Bundle - short description",
                      "image_url": "https://picture.bundle-picture.png",
                      "bundle_type": "standard",
                      "is_free": true,
                      "content": [
                        {
                          "item_id": 7010,
                          "sku": "vc-in-bundle-gold-coins",
                          "name": "Gold Coins",
                          "type": "virtual_currency",
                          "description": "Gold Coins - short description",
                          "image_url": "https://picture.gold_coins.png",
                          "is_free": true,
                          "quantity": 1
                        }
                      ],
                      "quantity": 1
                    },
                    {
                      "item_id": 7013,
                      "sku": "lootbox-in-bundle-awesome-game",
                      "name": "Some Lootbox",
                      "type": "lootbox",
                      "description": "Lootbox in bundle - short description",
                      "image_url": "https://picture.lootbox-picture.png",
                      "is_free": true,
                      "quantity": 1
                    }
                  ],
                  "quantity": 5,
                  "order": 0
                }
              ],
              "is_claimed": false,
              "step_price": {
                "amount": 499.95,
                "currency": "USD"
              },
              "step_vp_rewards": null
            },
            {
              "step_number": 2,
              "is_free": true,
              "items": [
                {
                  "item_id": 7007,
                  "sku": "bundle-empty",
                  "name": "Empty bundle",
                  "type": "bundle",
                  "description": "No",
                  "image_url": "https://picture.bundle-no-items.png",
                  "bundle_type": "standard",
                  "is_free": true,
                  "content": [],
                  "quantity": 10,
                  "order": 0
                }
              ],
              "is_claimed": false,
              "step_price": null,
              "step_vp_rewards": null
            }
          ],
          "next_step_number": 1
        }
      },
      "404-offer-chain-not-found": {
        "summary": "Chain not found",
        "description": "Offer chain step was not found.",
        "value": {
          "statusCode": 404,
          "errorCode": 6201,
          "errorMessage": "[0401-6201]: Chain not found",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_id": 4
          }
        }
      },
      "404-offer-chain-step-not-found": {
        "summary": "Chain step not found",
        "description": "Offer chain step was not found.",
        "value": {
          "statusCode": 404,
          "errorCode": 6304,
          "errorMessage": "[0401-6304]: Offer Chain Step not found",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "chain_id": 100,
            "step_number": 1
          }
        }
      },
      "422-offer-chain-claim-error-invalid-step": {
        "summary": "Cannot claim step reward",
        "description": "The user must claim all previous steps, and the request must use a valid call – <a href=\"/api/shop-builder/operation/order-user-offer-chain-step-reward\">Create order for paid offer chain step</a>, <a href=\"/api/shop-builder/operation/claim-user-offer-chain-step-reward\">Claim free offer chain step</a> for free ones.\n\nThis error is returned if one or more of the following conditions are not met:<ul><li>The offer chain exists, is enabled, and not deleted.</li><li>The target step exists, is enabled, and marked as free.</li><li>The step has not already been claimed by the user. In case of a recurring chain, this check is based on the user progress of the current iteration.</li><li>All previous steps in the chain (by step number) have been claimed or purchased. In case of a recurring chain, this check also considers the user progress of the current iteration.</li></ul>\n",
        "value": {
          "statusCode": 422,
          "errorCode": 6306,
          "errorMessage": "[0401-6306]: This step is not valid to claim by user.",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "chain_id": 1,
            "step_number": 1
          }
        }
      },
      "200-admin-offer-chain-list": {
        "summary": "Offer chain list example",
        "value": {
          "has_more": false,
          "items": [
            {
              "id": 1,
              "name": {
                "en": "New personalized default offer chain",
                "ru": "Новая персонализированная цепочка предложений по умолчанию",
                "de": "Neue personalisierte Standard-Angebotskette",
                "fr": "Nouvelle chaîne d'offres personnalisée par défaut",
                "it": "Nuova catena di offerte personalizzata predefinita"
              },
              "description": {
                "en": "Default personalized offer chain for users that do not meet the conditions of other personalized chains",
                "ru": "Персонализированная цепочка по умолчанию для пользователей, не подходящих под условия других персонализированных цепочек",
                "de": "Standard-personalisierte Angebotskette für Benutzer, die die Bedingungen anderer personalisierter Ketten nicht erfüllen",
                "fr": "Chaîne d'offres personnalisée par défaut pour les utilisateurs qui ne répondent pas aux conditions des autres chaînes personnalisées",
                "it": "Catena di offerte personalizzata predefinita per gli utenti che non soddisfano le condizioni di altre catene personalizzate"
              },
              "order": 1,
              "date_start": "2023-04-15T18:16:00+05:00",
              "date_end": "2025-04-25T18:16:00+05:00",
              "is_enabled": true,
              "recurrent_schedule": null,
              "is_always_visible": false
            },
            {
              "id": 2,
              "name": {
                "en": "New personalized offer chain",
                "ru": "Новая персонализированная цепочка предложений",
                "de": "Neue personalisierte Angebotskette",
                "fr": "Nouvelle chaîne d'offres personnalisée",
                "it": "Nuova catena di offerte personalizzata"
              },
              "description": {
                "en": "Personalized offer chain with user attribute conditions - for level 10 and above elves who reached level 10 no later than 2026-01-01 00:00:00, inclusive",
                "ru": "Персонализированная цепочка предложений с условиями по атрибутам пользователя - для эльфов уровня 10 и выше, достигших 10 уровня не позднее 2026-01-01 00:00:00 включительно",
                "de": "Personalisierte Angebotskette mit Benutzerattributbedingungen - für Elfen der Stufe 10 und höher, die Stufe 10 spätestens am 2026-01-01 00:00:00 erreicht haben, einschließlich",
                "fr": "Chaîne d'offres personnalisée avec des conditions d'attribut utilisateur - pour les elfes de niveau 10 et plus qui ont atteint le niveau 10 au plus tard le 2026-01-01 00:00:00, inclus",
                "it": "Catena di offerte personalizzata con condizioni di attributo utente - per elfi di livello 10 e superiore che hanno raggiunto il livello 10 non più tardi del 2026-01-01 00:00:00, inclusi"
              },
              "order": 2,
              "date_start": "2023-04-15T18:16:00+05:00",
              "date_end": "2025-04-25T18:16:00+05:00",
              "is_enabled": true,
              "recurrent_schedule": null,
              "is_always_visible": false,
              "attribute_conditions": [
                {
                  "attribute": "race",
                  "operator": "eq",
                  "value": "elf",
                  "type": "string",
                  "can_be_missing": false
                },
                {
                  "attribute": "level",
                  "operator": "ge",
                  "value": "10",
                  "type": "number",
                  "can_be_missing": false
                },
                {
                  "attribute": "10_level_up_date",
                  "operator": "le",
                  "value": "2026-01-01T00:00:00",
                  "type": "date",
                  "can_be_missing": false
                }
              ]
            },
            {
              "id": 4,
              "name": {
                "en": "Weekly offer chain",
                "ru": "Еженедельная цепочка предложений",
                "de": "Wöchentliche Angebotskette",
                "fr": "Chaîne d'offres hebdomadaire",
                "it": "Catena di offerte settimanale"
              },
              "description": {
                "en": "Offer chain that resets weekly on Wednesdays at 07:00 GMT+3",
                "ru": "Цепочка предложений, которая сбрасывается еженедельно по средам в 07:00 GMT+3",
                "de": "Angebotskette, die sich wöchentlich mittwochs um 07:00 Uhr GMT+3 zurücksetzt",
                "fr": "Chaîne d'offres qui se réinitialise chaque semaine le mercredi à 07h00 GMT+3",
                "it": "Catena di offerte che si resetta settimanalmente il mercoledì alle 07:00 GMT+3"
              },
              "order": 3,
              "date_start": "2023-04-15T18:16:00+05:00",
              "date_end": "2025-04-25T18:16:00+05:00",
              "is_enabled": false,
              "recurrent_schedule": {
                "interval_type": "weekly",
                "day_of_week": 3,
                "time": "07:00:00+03:00",
                "displayable_reset_start_date": "2018-12-05T07:00:00+03:00",
                "displayable_reset_next_date": "2018-12-05T07:00:00+03:00",
                "reset_next_date": 1543982400
              },
              "is_always_visible": true
            },
            {
              "id": 5,
              "name": {
                "en": "Monthly offer chain",
                "ru": "Ежемесячная цепочка предложений",
                "de": "Monatliche Angebotskette",
                "fr": "Chaîne d'offres mensuelle",
                "it": "Catena di offerte mensile"
              },
              "description": {
                "en": "Offer chain that resets monthly on the 28th at 15:00 GMT+8",
                "ru": "Цепочка предложений, которая сбрасывается ежемесячно 28-го числа в 15:00 GMT+8",
                "de": "Angebotskette, die sich monatlich am 28. um 15:00 Uhr GMT+8 zurücksetzt",
                "fr": "Chaîne d'offres qui se réinitialise mensuellement le 28 à 15h00 GMT+8",
                "it": "Catena di offerte che si resetta mensilmente il 28 alle 15:00 GMT+8"
              },
              "order": 4,
              "date_start": "2025-04-15T00:00:00+08:00",
              "date_end": "2025-08-28T15:00:00+08:00",
              "is_enabled": true,
              "recurrent_schedule": {
                "interval_type": "monthly",
                "day_of_month": 28,
                "time": "15:00:00+08:00",
                "displayable_reset_start_date": "2025-05-28T15:00:00+08:00",
                "displayable_reset_next_date": "2025-05-28T15:00:00+08:00",
                "reset_next_date": 1748415600
              },
              "is_always_visible": true
            }
          ]
        }
      },
      "422-admin-offer-chain-error-too-many-steps": {
        "summary": "Too many steps",
        "description": "The number of offer chain steps exceeds the allowed limit of 30. Try specifying fewer steps.",
        "value": {
          "statusCode": 422,
          "errorCode": 6203,
          "errorMessage": "[0401-6203]: Chain step count exceeds the allowed limit",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "step_count": 31,
            "max_steps": 30
          }
        }
      },
      "422-admin-offer-chain-error-incorrect-steps-order": {
        "summary": "Invalid steps order",
        "description": "The sequence of offer chain step numbers is incorrect. Step numbers must be sequential, without gaps or duplicates.",
        "value": {
          "statusCode": 422,
          "errorCode": 6210,
          "errorMessage": "[0401-6210]: Chain step numbers are invalid",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "incorrect_step_numbers": {
              "duplicates": [
                2,
                7
              ],
              "out_of_range": [
                7,
                8
              ],
              "missing": [
                3,
                4,
                5,
                6
              ]
            }
          }
        }
      },
      "422-admin-offer-chain-error-item-limit-exceeded": {
        "summary": "Item limit exceeded",
        "description": "The number of items in one or more offer chain steps exceeds the allowed limit. Currently, only one item per step is allowed.",
        "value": {
          "statusCode": 422,
          "errorCode": 6208,
          "errorMessage": "[0401-6208]: Chain step item count exceeds the allowed limit for some steps",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "max_items": 1,
            "steps_exceeded_limits": [
              {
                "step_number": 1,
                "items_count": 2
              },
              {
                "step_number": 4,
                "items_count": 3
              }
            ]
          }
        }
      },
      "422-admin-offer-chain-error-incorrect-items": {
        "summary": "Invalid step items",
        "description": "Specified items are either unavailable, or not found. Only enabled items of the following types are supported: virtual items, bundles, and virtual currency packages.",
        "value": {
          "statusCode": 422,
          "errorCode": 6211,
          "errorMessage": "[0401-6211]: Chain steps items are not allowed or not found",
          "transactionId": "x-x-xX-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "invalid_items": {
              "not_found": [
                "vg_deleted_item_1",
                "vg_deleted_item_2",
                "not_existing_sku_404_1",
                "not_existing_sku_404_2"
              ],
              "disabled": [
                "vg_disabled_item_1",
                "vg_disabled_item_2",
                "vc_disabled_1"
              ],
              "invalid_item_type": {
                "allowed_item_type_list": [
                  "virtual_good",
                  "bundle"
                ],
                "sku_map": {
                  "vc_enabled_shown_in_store_1": "virtual_currency",
                  "vc_disabled_1": "virtual_currency",
                  "unit_enabled_shown_in_store_1": "unit",
                  "gk_steam_enabled_shown_in_store_1": "game_key"
                }
              }
            }
          }
        }
      },
      "422-admin-offer-chain-error-invalid-dates": {
        "summary": "Invalid date format",
        "description": "The date format must be valid. Use <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> format.",
        "value": {
          "statusCode": 422,
          "errorCode": 6204,
          "errorMessage": "[0401-6204]: Period of a chain is invalid. Please, check the dates in your request",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_id": 1,
            "invalid_format_dates": {
              "date_start": "2023-04-15 17:16:00Z",
              "date_end": "2025-04-25 19:16:00Z"
            }
          }
        }
      },
      "422-admin-offer-chain-error-incorrect-period": {
        "summary": "Invalid chain period",
        "description": "The start date must be earlier than the end date.",
        "value": {
          "statusCode": 422,
          "errorCode": 6204,
          "errorMessage": "[0401-6204]: Period of a chain is invalid. Please, check the dates in your request",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_id": 1,
            "invalid_periods": [
              {
                "start": "2025-04-25T18:16:00+05:00",
                "end": "2023-04-15T18:16:00+05:00"
              }
            ]
          }
        }
      },
      "200-admin-offer-chain": {
        "summary": "Offer chain example",
        "value": {
          "id": 3,
          "name": {
            "en": "Offer chain",
            "ru": "Цепочка",
            "de": "Angebotskette",
            "fr": "Chaîne d'offres",
            "it": "Catena di offerte"
          },
          "description": {
            "en": "Personalized offer chain with user attribute conditions - for level 10 and above elves who reached level 10 no later than 2026-01-01 00:00:00, inclusive",
            "ru": "Персонализированная цепочка предложений - для эльфов 10 уровня и выше, достигших 10 уровня не позднее 2026-01-01 00:00:00 включительно",
            "de": "Personalisierte Angebotskette mit Benutzerattributbedingungen - für Elfen der Stufe 10 und höher, die Stufe 10 spätestens am 2026-01-01 00:00:00 erreicht haben, einschließlich",
            "fr": "Chaîne d'offres personnalisée avec des conditions d'attribut utilisateur - pour les elfes de niveau 10 et plus qui ont atteint le niveau 10 au plus tard le 2026-01-01 00:00:00, inclus",
            "it": "Catena di offerte personalizzata con condizioni di attributo utente - per elfi di livello 10 e superiore che hanno raggiunto il livello 10 non più tardi del 2026-01-01 00:00:00, inclusi"
          },
          "date_start": "2023-04-15T18:16:00+05:00",
          "date_end": "2025-04-25T18:16:00+05:00",
          "order": 1,
          "recurrent_schedule": null,
          "steps": [
            {
              "step_id": 7,
              "step_number": 1,
              "is_free": false,
              "items": [
                {
                  "item_id": 9010,
                  "sku": "telescope",
                  "name": {
                    "en": "Telescope",
                    "ru": "Телескоп",
                    "de": "Teleskop",
                    "fr": "Télescope",
                    "it": "Telescopio"
                  },
                  "type": "virtual_good",
                  "description": {
                    "en": "Allows to see the stars",
                    "ru": "Позволяет увидеть звезды",
                    "de": "Ermöglicht das Betrachten der Sterne",
                    "fr": "Permet de voir les étoiles",
                    "it": "Permette di vedere le stelle"
                  },
                  "image_url": "https://cdn.picture.vg.sku-telescope.png",
                  "quantity": 1,
                  "order": 1
                },
                {
                  "item_id": 9012,
                  "sku": "health_potion",
                  "name": {
                    "en": "Healing potion",
                    "ru": "Зелье лечения",
                    "de": "Heiltrank",
                    "fr": "Potion de soin",
                    "it": "Pozione curativa"
                  },
                  "type": "virtual_good",
                  "description": {
                    "en": "Heal 10% of your health",
                    "ru": "Лечит 10% здоровья",
                    "de": "Heilt 10% deiner Gesundheit",
                    "fr": "Soigne 10% de votre santé",
                    "it": "Cura il 10% della tua salute"
                  },
                  "image_url": "https://cdn.picture/vg-sku-health_potion.png",
                  "quantity": 2,
                  "order": 0
                }
              ]
            },
            {
              "step_id": 6,
              "step_number": 2,
              "is_free": false,
              "items": [
                {
                  "item_id": 9010,
                  "sku": "telescope",
                  "name": {
                    "en": "Telescope",
                    "ru": "Телескоп",
                    "de": "Teleskop",
                    "fr": "Télescope",
                    "it": "Telescopio"
                  },
                  "type": "virtual_good",
                  "description": {
                    "en": "Allows to see the stars",
                    "ru": "Позволяет увидеть звезды",
                    "de": "Ermöglicht das Betrachten der Sterne",
                    "fr": "Permet de voir les étoiles",
                    "it": "Permette di vedere le stelle"
                  },
                  "image_url": "https://cdn.picture/vg-sku-telescope.png",
                  "quantity": 5,
                  "order": 0
                }
              ]
            },
            {
              "step_id": 5,
              "step_number": 3,
              "is_free": true,
              "items": [
                {
                  "item_id": 9010,
                  "sku": "telescope",
                  "name": {
                    "en": "Telescope",
                    "ru": "Телескоп",
                    "de": "Teleskop",
                    "fr": "Télescope",
                    "it": "Telescopio"
                  },
                  "type": "virtual_good",
                  "description": {
                    "en": "Allows to see the stars",
                    "ru": "Позволяет увидеть звезды",
                    "de": "Ermöglicht das Betrachten der Sterne",
                    "fr": "Permet de voir les étoiles",
                    "it": "Permette di vedere le stelle"
                  },
                  "image_url": "https://cdn.picture/vg-sku-telescope.png",
                  "quantity": 2,
                  "order": 0
                }
              ]
            }
          ],
          "is_enabled": true,
          "is_always_visible": false,
          "attribute_conditions": [
            {
              "attribute": "race",
              "operator": "eq",
              "value": "elf",
              "type": "string",
              "can_be_missing": false
            },
            {
              "attribute": "level",
              "operator": "ge",
              "value": "10",
              "type": "number",
              "can_be_missing": false
            },
            {
              "attribute": "10_level_up_date",
              "operator": "le",
              "value": "2026-01-01T00:00:00",
              "type": "date",
              "can_be_missing": false
            }
          ]
        }
      },
      "422-admin-offer-chain-error-invalid-chain-step-ids": {
        "summary": "Chain step IDs not found",
        "description": "Some of the step IDs were not found. Double-check that the specified chain step IDs exist. To do this, use the <a href=\"/api/shop-builder/operation/order-user-offer-chain-step-reward#tag/offer-chain-admin/operation/admin-get-offer-chain\">Get offer chain</a> call.",
        "value": {
          "statusCode": 404,
          "errorCode": 6206,
          "errorMessage": "[0401-6206]: Chain step IDs not found",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_id": 1,
            "chain_step_id_list": [
              404000
            ]
          }
        }
      },
      "422-admin-offer-chain-error-chain-id-mismatch": {
        "summary": "Chain ID mismatch",
        "description": "Offer chain ID in the request body does not match the ID in the URL.",
        "value": {
          "statusCode": 422,
          "errorCode": 6205,
          "errorMessage": "[0401-6205]: Chain ID mismatch. Please, check the chain ID in your request body and URL",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "url_chain_id": 1,
            "body_chain_id": 2
          }
        }
      },
      "422-admin-offer-chain-error-duplicate-step-ids": {
        "summary": "Duplicate chain step IDs",
        "description": "Chain step IDs must be unique in the request body.",
        "value": {
          "statusCode": 422,
          "errorCode": 6207,
          "errorMessage": "[0401-6207]: Duplicate chain step IDs detected in the request body",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_step_id_list": [
              8,
              9,
              10
            ],
            "chain_id": 3
          }
        }
      },
      "422-admin-offer-chain-error-activated": {
        "summary": "Active offer chain cannot be updated",
        "description": "Active offer chain has to be deactivated before being updated. To do this, use the <a href=\"/api/shop-builder/operation/admin-toggle-offer-chain\">Toggle offer chain</a> call.",
        "value": {
          "statusCode": 422,
          "errorCode": 6209,
          "errorMessage": "[0401-6209]: Active chain cannot be updated. Please deactivate it first",
          "transactionId": "x-x-x-x-transactionId-mock-x-x-x",
          "errorMessageExtended": {
            "project_id": 0,
            "chain_id": 2
          }
        }
      }
    },
    "responses": {
      "Promotions_200-get-promotions": {
        "description": "List of promotions was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "promotions": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Promotions_200-get-promotion-model"
                  }
                },
                "total_promotions_count": {
                  "$ref": "#/components/schemas/total_promotions_count"
                },
                "active_promotions_count": {
                  "$ref": "#/components/schemas/active_promotions_count"
                },
                "inactive_promotions_count": {
                  "$ref": "#/components/schemas/inactive_promotions_count"
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-admin-promotions"
              }
            }
          }
        }
      },
      "Promotions_401-invalid-basic-auth": {
        "description": "Basic authentication not passed or wrong. Make sure you used basic authentication or correct credentials.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 401
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1020
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1020]: Error in Authentication method occurred"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 401,
                  "errorCode": 1020,
                  "errorMessage": "[0401-1020]: Error in Authentication method occurred"
                }
              }
            }
          }
        }
      },
      "Promotions_422-activate-deactivate-promotion": {
        "description": "Invalid request.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 422
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1102
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9505]: Error was occurred while promotion was being updated"
                },
                "transactionId": {
                  "type": "string",
                  "example": "da145238620011eb8e24fe6913ff226a"
                }
              }
            },
            "examples": {
              "Error was occurred": {
                "$ref": "#/components/examples/422-activate-deactivate-promotion"
              }
            }
          }
        }
      },
      "200-admin-get-redeemable-by-code": {
        "description": "Promotion was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/admin-promotions_200-get-redeemable-coupon-promotion-model"
            },
            "examples": {
              "Promo Code Response": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2023-05-01T01:00:00+05:00",
                      "date_until": "2023-05-31T23:59:59+05:00"
                    },
                    {
                      "date_from": "2023-06-01T01:00:00+05:00",
                      "date_until": "2023-06-30T23:59:59+05:00"
                    }
                  ],
                  "bonus": [],
                  "is_enabled": true,
                  "external_id": "falls2023",
                  "name": {
                    "ru": "Скидка по промокоду на Epic Fall Hammer",
                    "en": "Promo Code discount for Epic Fall Hammer"
                  },
                  "redeem_total_limit": 2,
                  "redeem_user_limit": 3,
                  "redeem_code_limit": null,
                  "total_limit_state": {
                    "available": 1,
                    "reserved": 1,
                    "used": 0
                  },
                  "discount": {
                    "percent": null
                  },
                  "discounted_items": [
                    {
                      "sku": "epic_fall_hammer_1",
                      "discount": {
                        "percent": "20.00"
                      }
                    }
                  ]
                }
              },
              "Coupon Response": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2023-04-15T01:00:00+05:00",
                      "date_until": "2023-04-30T23:59:59+05:00"
                    },
                    {
                      "date_from": "2023-05-15T01:00:00+05:00",
                      "date_until": "2023-05-30T23:59:59+05:00"
                    }
                  ],
                  "bonus": [
                    {
                      "sku": "epic_fall_hammer_1",
                      "quantity": 3
                    }
                  ],
                  "is_enabled": true,
                  "external_id": "coupon_fall_hammer_2",
                  "name": {
                    "en": "This is a Coupon code for Epic Fall Hammer",
                    "ru": "Eto kod kupona на Epic Fall Hammer"
                  },
                  "redeem_total_limit": 99,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": null
                }
              }
            }
          }
        }
      },
      "401-invalid-basic-auth": {
        "description": "Basic authentication not passed or wrong. Make sure you used basic authentication or correct credentials.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 401
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1020
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1020]: Error in Authentication method occurred"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 401,
                  "errorCode": 1020,
                  "errorMessage": "[0401-1020]: Error in Authentication method occurred"
                }
              }
            }
          }
        }
      },
      "404-code-not-found": {
        "description": "Redeemable code not found. Make sure the provided code value is correct.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 9811
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9811]: Code not found."
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 404,
                  "errorCode": 9811,
                  "errorMessage": "[0401-9811]: Code not found."
                }
              }
            }
          }
        }
      },
      "405-method-not-found": {
        "description": "Incorrect redeemable code format. The code can contain only letters and numerals.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 405
                },
                "errorCode": {
                  "type": "integer",
                  "example": 0
                },
                "errorMessage": {
                  "type": "string",
                  "example": "Method is not allowed. Method must be one of: OPTIONS"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 405,
                  "errorCode": 0,
                  "errorMessage": "Method is not allowed. Method must be one of: OPTIONS"
                }
              }
            }
          }
        }
      },
      "Promotions_200-coupon-redeemed": {
        "description": "Coupon was successfully redeemed.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "sku": {
                        "type": "string"
                      },
                      "groups": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "external_id": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            }
                          }
                        }
                      },
                      "name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "price": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Item prices.",
                        "properties": {
                          "amount": {
                            "type": "string",
                            "example": "2.9900",
                            "description": "Discounted item price."
                          },
                          "amount_without_discount": {
                            "type": "string",
                            "example": "2.9900",
                            "description": "Item price."
                          },
                          "currency": {
                            "type": "string",
                            "example": "USD",
                            "description": "Item price currency. Three-letter code per [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)."
                          }
                        }
                      },
                      "type": {
                        "type": "string"
                      },
                      "virtual_item_type": {
                        "type": "string",
                        "example": "non-consumable",
                        "description": "Type of virtual item.\n\nPossible values:\n- `consumable` — An item that disappears from the inventory after use (e.g., ammo).\n- `non_consumable` — An item that stays in the inventory for an unlimited period of time.\n- `non_renewing_subscription` — Time-limited item that can represent access to services or content for a limited period of time.",
                        "enum": [
                          "consumable",
                          "non_consumable",
                          "non_renewing_subscription"
                        ]
                      },
                      "virtual_prices": {
                        "type": "array"
                      },
                      "description": {
                        "type": "string"
                      },
                      "image_url": {
                        "type": "string"
                      },
                      "quantity": {
                        "type": "integer"
                      },
                      "is_free": {
                        "type": "boolean"
                      },
                      "attributes": {
                        "type": "array"
                      }
                    }
                  },
                  "example": [
                    {
                      "attributes": [],
                      "description": "Take it, take it all! All of Xsolla's riches in one Mega Booster.",
                      "groups": [
                        {
                          "external_id": "powerups",
                          "name": "Power Ups"
                        }
                      ],
                      "image_url": "https://cdn.xsolla.net/img/misc/images/e9f2f4a634bc96ea03b5d5ceadd7c55f.png",
                      "is_free": false,
                      "name": "Xsolla Booster Mega",
                      "price": {
                        "amount": "50.0000000000000000",
                        "amount_without_discount": "100.0000000000000000",
                        "currency": "USD"
                      },
                      "quantity": 1,
                      "sku": "com.xsolla.booster_mega_1",
                      "type": "virtual_good",
                      "virtual_item_type": "consumable",
                      "virtual_prices": []
                    }
                  ]
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "items": [
                    {
                      "attributes": [],
                      "description": "Take it, take it all! All of Xsolla's riches in one Mega Booster.",
                      "groups": [
                        {
                          "external_id": "powerups",
                          "name": "Power Ups"
                        }
                      ],
                      "image_url": "https://cdn.xsolla.net/img/misc/images/e9f2f4a634bc96ea03b5d5ceadd7c55f.png",
                      "is_free": true,
                      "name": "Xsolla Booster Mega",
                      "price": null,
                      "quantity": 1,
                      "sku": "com.xsolla.booster_mega_1",
                      "type": "virtual_good",
                      "virtual_item_type": "consumable",
                      "virtual_prices": []
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Promotions_401-invalid-client-auth": {
        "description": "Authentication not passed or wrong.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 401
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1501
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1501]: Authorization failed: Provide authorization"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 401,
                  "errorCode": 1501,
                  "errorMessage": "[0401-1501]: Authorization failed: Provide authorization"
                }
              }
            }
          }
        }
      },
      "Promotions_403-auth-header": {
        "description": "Authorization header not sent.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 403
                },
                "errorCode": {
                  "type": "integer",
                  "example": 0
                },
                "errorMessage": {
                  "type": "string",
                  "example": "Authorization header not sent."
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 403,
                  "errorCode": 0,
                  "errorMessage": "Authorization header not sent"
                }
              }
            }
          }
        }
      },
      "Promotions_404-coupon": {
        "description": "Enter valid coupon code.",
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 4001
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9807]: Enter valid coupon code."
                }
              },
              "type": "object"
            }
          }
        }
      },
      "Promotions_422-redeem-coupon": {
        "description": "Invalid request.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 422
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1102
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1102]: Unprocessable Entity. The property `coupon_code` is required"
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 422,
                  "errorCode": 1102,
                  "errorMessage": "[0401-1102]: Unprocessable Entity. The property `coupon_code` is required"
                }
              }
            }
          }
        }
      },
      "Promotions_200-coupon-rewards": {
        "description": "List of coupon rewards was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "bonus": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Promotions_200-coupon-bonus-reward"
                  }
                },
                "is_selectable": {
                  "type": "boolean",
                  "description": "If `true`, the user should choose the bonus before redeeming a coupon."
                },
                "discount": {
                  "$ref": "#/components/schemas/Promotions_200-coupon-discount-reward"
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-get-coupon-rewards"
              }
            }
          }
        }
      },
      "Promotions_422-rewards": {
        "description": "Invalid request.",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Promotions_422_limit_error"
                },
                {
                  "$ref": "#/components/schemas/Promotions_422_reglock_error"
                }
              ]
            }
          }
        }
      },
      "Promotions_200-get-coupons": {
        "description": "List of coupons was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/admin-promotions_200-get-coupon-promotion-model"
                  }
                },
                "total_promotions_count": {
                  "$ref": "#/components/schemas/total_promotions_count"
                },
                "active_promotions_count": {
                  "$ref": "#/components/schemas/active_promotions_count"
                },
                "inactive_promotions_count": {
                  "$ref": "#/components/schemas/inactive_promotions_count"
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-admin-coupons"
              }
            }
          }
        }
      },
      "Promotions_422-invalid-coupon": {
        "description": "Invalid request.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 422
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1102
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1102]: Unprocessable Entity. The property `external_id` is required"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 422,
                  "errorCode": 1102,
                  "errorMessage": "[0401-1102]: Unprocessable Entity. The property `external_id` is required"
                }
              }
            }
          }
        }
      },
      "Promotions_404-admin-coupon": {
        "description": "Coupon not found. Make sure the `external_id` is correct.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 4001
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9802]: Coupon not found"
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            }
          }
        }
      },
      "Promotions_422-admin-promotion-error": {
        "description": "Error occurred while receiving the promotion from the promotion service.",
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 422
                },
                "errorCode": {
                  "type": "integer",
                  "example": 9502
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9502]: Error occurred while receiving the promotion from the promotion service"
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              },
              "type": "object"
            }
          }
        }
      },
      "Promotions_200-coupon-code-list": {
        "description": "List of codes for a coupon was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "codes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "code": {
                        "$ref": "#/components/schemas/Promotions_coupon_code"
                      }
                    }
                  }
                },
                "total_count": {
                  "type": "number",
                  "description": "Total count of coupon codes."
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-coupon-code-list"
              }
            }
          }
        }
      },
      "Promotions_201-coupon-promocode-code-created": {
        "description": "Code was successfully created.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "code": {
                  "$ref": "#/components/schemas/Promotions_coupon_code"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "code": "WINTER2021"
                }
              }
            }
          }
        }
      },
      "Promotions_422-coupon-promocode-same-code-exists": {
        "description": "Invalid request. The code already exists.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 422
                },
                "errorCode": {
                  "type": "integer",
                  "example": 9803
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9803]: The code already exists."
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 422,
                  "errorCode": 9803,
                  "errorMessage": "[0401-9803]: The code already exists.",
                  "transactionId": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            }
          }
        }
      },
      "Promotions_404-admin-promocode": {
        "description": "Promo code not found. Make sure the `external_id` is correct.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 4001
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9802]: Promocode not found"
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            }
          }
        }
      },
      "Promotions_200-promo-code-redeemed": {
        "description": "Promo code was successfully redeemed.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "cart_id": {
                  "type": "string",
                  "example": "cart_id",
                  "description": "Cart ID."
                },
                "price": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "amount": {
                      "type": "string",
                      "example": "50.0000000000000000"
                    },
                    "amount_without_discount": {
                      "type": "string",
                      "example": "100.0000000000000000"
                    },
                    "currency": {
                      "type": "string",
                      "example": "USD"
                    }
                  },
                  "example": {
                    "amount": "6150.0000000000000000",
                    "amount_without_discount": "6150.0000000000000000",
                    "currency": "USD"
                  },
                  "description": "Cart price."
                },
                "is_free": {
                  "$ref": "#/components/schemas/value-is_free"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "sku": {
                        "type": "string"
                      },
                      "groups": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "external_id": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            }
                          }
                        }
                      },
                      "name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "type": {
                        "type": "string"
                      },
                      "description": {
                        "type": "string"
                      },
                      "image_url": {
                        "type": "string"
                      },
                      "quantity": {
                        "type": "integer"
                      },
                      "is_free": {
                        "$ref": "#/components/schemas/value-is_free"
                      },
                      "promotions": {
                        "$ref": "#/components/schemas/Catalog_item_promotions"
                      },
                      "can_be_bought": {
                        "$ref": "#/components/schemas/Can_be_bought"
                      },
                      "vp_rewards": {
                        "$ref": "#/components/schemas/client-item-value-point-reward"
                      },
                      "limits": {
                        "$ref": "#/components/schemas/Catalog_item_limits"
                      },
                      "periods": {
                        "$ref": "#/components/schemas/item-periods"
                      }
                    }
                  },
                  "example": [
                    {
                      "attributes": [],
                      "description": "Take it, take it all! All of Xsolla's riches in one Mega Booster.",
                      "groups": [
                        {
                          "external_id": "powerups",
                          "name": "Power Ups"
                        }
                      ],
                      "image_url": "https://cdn.xsolla.net/img/misc/images/e9f2f4a634bc96ea03b5d5ceadd7c55f.png",
                      "is_free": false,
                      "name": "Xsolla Booster Mega",
                      "price": {
                        "amount": "50.0000000000000000",
                        "amount_without_discount": "100.0000000000000000",
                        "currency": "USD"
                      },
                      "quantity": 123,
                      "sku": "com.xsolla.booster_mega_1",
                      "type": "virtual_good",
                      "virtual_item_type": "consumable",
                      "virtual_prices": [],
                      "promotions": [
                        {
                          "name": "Bonus promotion",
                          "date_start": "2020-04-15T16:16:00+03:00",
                          "date_end": "2026-04-15T16:16:00+03:00",
                          "discount": {
                            "percent": "50.00"
                          },
                          "bonus": [
                            {
                              "quantity": 1,
                              "name": "Xsolla Minigun",
                              "image_url": "https://cdn.xsolla.net/img/misc/images/2fc5c491a47413a8e8000447889093c2.png",
                              "sku": "com.xsolla.minigun_1",
                              "type": "virtual_good"
                            }
                          ]
                        }
                      ],
                      "can_be_bought": true,
                      "vp_rewards": [
                        {
                          "item_id": 175232,
                          "sku": "com.xsolla.value_point_1",
                          "amount": 130,
                          "name": "Value point",
                          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                          "is_clan": false
                        },
                        {
                          "item_id": 186321,
                          "sku": "com.xsolla.clan_value_point_1",
                          "amount": 50,
                          "name": "Clan Reward VP 1",
                          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                          "is_clan": true
                        }
                      ],
                      "limits": {
                        "per_user": {
                          "available": 3,
                          "recurrent_schedule": {
                            "interval_type": "weekly",
                            "reset_next_date": 1746057600
                          },
                          "total": 5
                        }
                      },
                      "periods": [
                        {
                          "date_from": "2020-08-11T10:00:00+03:00",
                          "date_until": "2020-08-11T20:00:00+03:00"
                        }
                      ]
                    }
                  ]
                },
                "rewards": {
                  "$ref": "#/components/schemas/Promo_code_rewards"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "cart_id": "cart_id",
                  "is_free": false,
                  "items": [
                    {
                      "attributes": [],
                      "description": "Take it, take it all! All of Xsolla's riches in one Mega Booster.",
                      "groups": [
                        {
                          "external_id": "powerups",
                          "name": "Power Ups"
                        }
                      ],
                      "image_url": "https://cdn.xsolla.net/img/misc/images/e9f2f4a634bc96ea03b5d5ceadd7c55f.png",
                      "is_free": false,
                      "name": "Xsolla Booster Mega",
                      "price": {
                        "amount": "50.0000000000000000",
                        "amount_without_discount": "100.0000000000000000",
                        "currency": "USD"
                      },
                      "quantity": 123,
                      "sku": "com.xsolla.booster_mega_1",
                      "type": "virtual_good",
                      "virtual_item_type": "consumable",
                      "virtual_prices": [],
                      "promotions": [
                        {
                          "name": "Bonus promotion",
                          "date_start": "2020-04-15T16:16:00+03:00",
                          "date_end": "2026-04-15T16:16:00+03:00",
                          "discount": {
                            "percent": "50.00"
                          },
                          "bonus": [
                            {
                              "quantity": 1,
                              "name": "Xsolla Minigun",
                              "image_url": "https://cdn.xsolla.net/img/misc/images/2fc5c491a47413a8e8000447889093c2.png",
                              "sku": "com.xsolla.minigun_1",
                              "type": "virtual_good"
                            }
                          ]
                        }
                      ],
                      "can_be_bought": true,
                      "vp_rewards": [
                        {
                          "item_id": 175232,
                          "sku": "com.xsolla.value_point_1",
                          "amount": 130,
                          "name": "Value point",
                          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                          "is_clan": false
                        },
                        {
                          "item_id": 186321,
                          "sku": "com.xsolla.clan_value_point_1",
                          "amount": 50,
                          "name": "Clan Reward VP 1",
                          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                          "is_clan": true
                        }
                      ],
                      "limits": {
                        "per_user": {
                          "available": 3,
                          "recurrent_schedule": {
                            "interval_type": "weekly",
                            "reset_next_date": 1746057600
                          },
                          "total": 5
                        }
                      },
                      "periods": [
                        {
                          "date_from": "2020-08-11T10:00:00+03:00",
                          "date_until": "2020-08-11T20:00:00+03:00"
                        }
                      ]
                    },
                    {
                      "attributes": [],
                      "description": "Honshu Boshin Wakizashi - Modern Tactical Samurai / Ninja Sword - Hand Forged 1060 Carbon Steel - Full Tang, Fully Functional, Battle Ready - Black TPR, Steel Guard and Pommel.",
                      "groups": [],
                      "image_url": "https://cdn.xsolla.net/img/misc/images/e9f2f4a634bc96ea03b5d5ceadd7c55f.png",
                      "is_free": true,
                      "name": "Sword Xsolla Skin",
                      "price": [],
                      "quantity": 1,
                      "sku": "com.xsolla.swords_1",
                      "type": "virtual_good",
                      "virtual_item_type": "non_consumable",
                      "virtual_prices": [],
                      "promotions": [
                        {
                          "name": "Bonus promotion",
                          "date_start": "2020-04-15T16:16:00+03:00",
                          "date_end": "2026-04-15T16:16:00+03:00",
                          "discount": {
                            "percent": "50.00"
                          },
                          "bonus": [
                            {
                              "quantity": 1,
                              "name": "Xsolla Minigun",
                              "image_url": "https://cdn.xsolla.net/img/misc/images/2fc5c491a47413a8e8000447889093c2.png",
                              "sku": "com.xsolla.minigun_1",
                              "type": "virtual_good"
                            }
                          ]
                        }
                      ],
                      "can_be_bought": true,
                      "vp_rewards": [
                        {
                          "item_id": 175232,
                          "sku": "com.xsolla.value_point_1",
                          "amount": 130,
                          "name": "Value point",
                          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg"
                        },
                        {
                          "item_id": 186321,
                          "sku": "com.xsolla.clan_value_point_1",
                          "amount": 50,
                          "name": "Clan Reward VP 1",
                          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                          "is_clan": true
                        }
                      ],
                      "limits": {
                        "per_user": {
                          "available": 3,
                          "recurrent_schedule": {
                            "interval_type": "weekly",
                            "reset_next_date": 1746057600
                          },
                          "total": 5
                        }
                      },
                      "periods": [
                        {
                          "date_from": "2020-08-11T10:00:00+03:00",
                          "date_until": "2020-08-11T20:00:00+03:00"
                        }
                      ]
                    }
                  ],
                  "price": {
                    "amount": "6150.0000000000000000",
                    "amount_without_discount": "12300.0000000000000000",
                    "currency": "USD"
                  },
                  "rewards": {
                    "bonus": [
                      {
                        "item": {
                          "name": "Sword Xsolla Skin",
                          "sku": "com.xsolla.swords_1",
                          "type": "virtual_good",
                          "virtual_item_type": "non_consumable",
                          "description": "Honshu Boshin Wakizashi - Modern Tactical Samurai / Ninja Sword - Hand Forged 1060 Carbon Steel - Full Tang, Fully Functional, Battle Ready - Black TPR, Steel Guard and Pommel.",
                          "image_url": "https://cdn.xsolla.net/img/misc/images/e9f2f4a634bc96ea03b5d5ceadd7c55f.png"
                        },
                        "quantity": 1
                      }
                    ],
                    "discount": {
                      "percent": null
                    },
                    "discounted_items": [
                      {
                        "sku": "com.xsolla.booster_mega_1",
                        "discount": {
                          "percent": "50.00"
                        }
                      }
                    ],
                    "is_selectable": false
                  }
                }
              }
            }
          }
        }
      },
      "Promotions_404-promo-code": {
        "description": "Enter valid promo code.",
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 4001
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9807]: Enter valid promo code."
                }
              },
              "type": "object"
            }
          }
        }
      },
      "Promotions_200-promo-code-canceled": {
        "description": "Promo code is successfully canceled.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "cart_id": {
                  "type": "string",
                  "example": "cart_id",
                  "description": "Cart ID."
                },
                "price": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "amount": {
                      "type": "string",
                      "default": "50.0000000000000000"
                    },
                    "amount_without_discount": {
                      "type": "string",
                      "default": "100.0000000000000000"
                    },
                    "currency": {
                      "type": "string",
                      "default": "USD"
                    }
                  },
                  "example": {
                    "amount": "6150.0000000000000000",
                    "amount_without_discount": "6150.0000000000000000",
                    "currency": "USD"
                  },
                  "description": "Cart price."
                },
                "is_free": {
                  "$ref": "#/components/schemas/value-is_free"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "sku": {
                        "type": "string"
                      },
                      "groups": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "external_id": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            }
                          }
                        }
                      },
                      "name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "type": {
                        "type": "string"
                      },
                      "virtual_item_type": {
                        "type": "string",
                        "example": "non-consumable",
                        "description": "Type of virtual item.\n\nPossible values:\n- `consumable` — An item that disappears from the inventory after use (e.g., ammo).\n- `non_consumable` — An item that stays in the inventory for an unlimited period of time.\n- `non_renewing_subscription` — Time-limited item that can represent access to services or content for a limited period of time.",
                        "enum": [
                          "consumable",
                          "non_consumable",
                          "non_renewing_subscription"
                        ]
                      },
                      "virtual_prices": {
                        "type": "array"
                      },
                      "description": {
                        "type": "string"
                      },
                      "attributes": {
                        "$ref": "#/components/schemas/client-attributes"
                      },
                      "image_url": {
                        "type": "string"
                      },
                      "quantity": {
                        "type": "integer"
                      },
                      "is_free": {
                        "$ref": "#/components/schemas/value-is_free"
                      },
                      "price": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "description": "Item prices.",
                        "properties": {
                          "amount": {
                            "type": "string",
                            "example": "2.9900",
                            "description": "Discounted item price."
                          },
                          "amount_without_discount": {
                            "type": "string",
                            "example": "2.9900",
                            "description": "Item price."
                          },
                          "currency": {
                            "type": "string",
                            "example": "USD",
                            "description": "Item price currency. Three-letter code per [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)."
                          }
                        }
                      },
                      "promotions": {
                        "$ref": "#/components/schemas/Catalog_item_promotions"
                      },
                      "can_be_bought": {
                        "$ref": "#/components/schemas/Can_be_bought"
                      },
                      "vp_rewards": {
                        "$ref": "#/components/schemas/client-item-value-point-reward"
                      },
                      "limits": {
                        "$ref": "#/components/schemas/Catalog_item_limits"
                      },
                      "periods": {
                        "$ref": "#/components/schemas/item-periods"
                      }
                    }
                  },
                  "example": [
                    {
                      "attributes": [],
                      "description": "Take it, take it all! All of Xsolla's riches in one Mega Booster.",
                      "groups": [
                        {
                          "external_id": "powerups",
                          "name": "Power Ups"
                        }
                      ],
                      "image_url": "https://cdn.xsolla.net/img/misc/images/e9f2f4a634bc96ea03b5d5ceadd7c55f.png",
                      "is_free": false,
                      "name": "Xsolla Booster Mega",
                      "price": {
                        "amount": "50.0000000000000000",
                        "amount_without_discount": "100.0000000000000000",
                        "currency": "USD"
                      },
                      "quantity": 123,
                      "sku": "com.xsolla.booster_mega_1",
                      "type": "virtual_good",
                      "virtual_item_type": "consumable",
                      "virtual_prices": [],
                      "promotions": [
                        {
                          "name": "Bonus promotion",
                          "date_start": "2020-04-15T16:16:00+03:00",
                          "date_end": "2026-04-15T16:16:00+03:00",
                          "discount": {
                            "percent": "50.00"
                          },
                          "bonus": [
                            {
                              "quantity": 1,
                              "name": "Xsolla Minigun",
                              "image_url": "https://cdn.xsolla.net/img/misc/images/2fc5c491a47413a8e8000447889093c2.png",
                              "sku": "com.xsolla.minigun_1",
                              "type": "virtual_good"
                            }
                          ]
                        }
                      ],
                      "can_be_bought": true,
                      "vp_rewards": [
                        {
                          "item_id": 175232,
                          "sku": "com.xsolla.value_point_1",
                          "amount": 130,
                          "name": "Value point",
                          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg"
                        },
                        {
                          "item_id": 186321,
                          "sku": "com.xsolla.clan_value_point_1",
                          "amount": 50,
                          "name": "Clan Reward VP 1",
                          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                          "is_clan": true
                        }
                      ],
                      "limits": {
                        "per_user": {
                          "available": 3,
                          "recurrent_schedule": {
                            "interval_type": "weekly",
                            "reset_next_date": 1746057600
                          },
                          "total": 5
                        }
                      },
                      "periods": [
                        {
                          "date_from": "2020-08-11T10:00:00+03:00",
                          "date_until": "2020-08-11T20:00:00+03:00"
                        }
                      ]
                    }
                  ]
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "cart_id": "cart_id",
                  "is_free": false,
                  "items": [
                    {
                      "attributes": [],
                      "description": "Take it, take it all! All of Xsolla's riches in one Mega Booster.",
                      "groups": [
                        {
                          "external_id": "powerups",
                          "name": "Power Ups"
                        }
                      ],
                      "image_url": "https://cdn.xsolla.net/img/misc/images/e9f2f4a634bc96ea03b5d5ceadd7c55f.png",
                      "is_free": false,
                      "name": "Xsolla Booster Mega",
                      "price": {
                        "amount": "50.0000000000000000",
                        "amount_without_discount": "100.0000000000000000",
                        "currency": "USD"
                      },
                      "quantity": 123,
                      "sku": "com.xsolla.booster_mega_1",
                      "type": "virtual_good",
                      "virtual_item_type": "consumable",
                      "virtual_prices": [],
                      "promotions": [
                        {
                          "name": "Bonus promotion",
                          "date_start": "2020-04-15T16:16:00+03:00",
                          "date_end": "2026-04-15T16:16:00+03:00",
                          "discount": {
                            "percent": "50.00"
                          },
                          "bonus": [
                            {
                              "quantity": 1,
                              "name": "Xsolla Minigun",
                              "image_url": "https://cdn.xsolla.net/img/misc/images/2fc5c491a47413a8e8000447889093c2.png",
                              "sku": "com.xsolla.minigun_1",
                              "type": "virtual_good"
                            }
                          ]
                        }
                      ],
                      "can_be_bought": true,
                      "vp_rewards": [
                        {
                          "item_id": 175232,
                          "sku": "com.xsolla.value_point_1",
                          "amount": 130,
                          "name": "Value point",
                          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg"
                        },
                        {
                          "item_id": 186321,
                          "sku": "com.xsolla.clan_value_point_1",
                          "amount": 50,
                          "name": "Clan Reward VP 1",
                          "image_url": "https://cdn3.xsolla.com/img/misc/images/54c0cf9d345817cdacfdde198db178e0.jpg",
                          "is_clan": true
                        }
                      ],
                      "limits": {
                        "per_user": {
                          "available": 3,
                          "recurrent_schedule": {
                            "interval_type": "weekly",
                            "reset_next_date": 1746057600
                          },
                          "total": 5
                        }
                      },
                      "periods": [
                        {
                          "date_from": "2020-08-11T10:00:00+03:00",
                          "date_until": "2020-08-11T20:00:00+03:00"
                        }
                      ]
                    }
                  ],
                  "price": {
                    "amount": "6150.0000000000000000",
                    "amount_without_discount": "6150.0000000000000000",
                    "currency": "USD"
                  }
                }
              }
            }
          }
        }
      },
      "Promotions_422-cancel-promo-code": {
        "description": "Invalid request.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 422
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1102
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1102]: Unprocessable Entity. The property `id` is required"
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 422,
                  "errorCode": 1102,
                  "errorMessage": "[0401-1102]: Unprocessable Entity. The property `id` is required"
                }
              }
            }
          }
        }
      },
      "Promotions_200-promocode-rewards": {
        "description": "List of promo code rewards was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Promo_code_rewards"
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-get-promocode-rewards"
              }
            }
          }
        }
      },
      "Promotions_200-get-promocodes": {
        "description": "List of promo codes was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Promotions_200-get-promocode-promotion-model"
                  }
                },
                "total_promotions_count": {
                  "$ref": "#/components/schemas/total_promotions_count"
                },
                "active_promotions_count": {
                  "$ref": "#/components/schemas/active_promotions_count"
                },
                "inactive_promotions_count": {
                  "$ref": "#/components/schemas/inactive_promotions_count"
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-admin-promocodes"
              }
            }
          }
        }
      },
      "Promotions_200-promocode-code-list": {
        "description": "List of codes for a promo code was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "codes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "code": {
                        "$ref": "#/components/schemas/Promotions_coupon_code"
                      }
                    }
                  }
                },
                "total_count": {
                  "type": "number",
                  "description": "Total number of codes for a promo code."
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-coupon-code-list"
              }
            }
          }
        }
      },
      "Promotions_200-get-item-promotions": {
        "description": "List of item promotions was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "promotions": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "integer",
                        "description": "Promotion ID. Unique promotion identifier within the project."
                      },
                      "promotion_periods": {
                        "$ref": "#/components/schemas/promotion_periods"
                      },
                      "is_enabled": {
                        "$ref": "#/components/schemas/Promotions_is_enabled"
                      },
                      "name": {
                        "type": "object",
                        "description": "Name of promotion. Should contain key/value pairs, where key is locale with format \"^[a-z]{2}-[A-Z]{2}$\", value is string.\n",
                        "additionalProperties": {
                          "type": "string"
                        },
                        "example": {
                          "en-US": "Promotion",
                          "ru-RU": "Акция"
                        }
                      },
                      "discount": {
                        "type": "object",
                        "properties": {
                          "percent": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Percent discount.\nThe price of item will be decreased using a value which was calculated using this percent.",
                            "default": "10.00"
                          }
                        }
                      },
                      "items": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "description": "The list of items which will be affected by discount.",
                          "type": "object",
                          "properties": {
                            "sku": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "Item SKU.",
                              "default": "elven_sword"
                            }
                          }
                        }
                      },
                      "attribute_conditions": {
                        "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-get"
                      },
                      "limits": {
                        "$ref": "#/components/schemas/Promotions_promotion_limits_response"
                      },
                      "excluded_promotions": {
                        "$ref": "#/components/schemas/excluded_promotions"
                      },
                      "price_conditions": {
                        "$ref": "#/components/schemas/price_conditions_discount"
                      }
                    }
                  }
                },
                "total_promotions_count": {
                  "$ref": "#/components/schemas/total_promotions_count"
                },
                "active_promotions_count": {
                  "$ref": "#/components/schemas/active_promotions_count"
                },
                "inactive_promotions_count": {
                  "$ref": "#/components/schemas/inactive_promotions_count"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "promotions": [
                    {
                      "id": 1,
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        },
                        {
                          "date_from": "2020-05-15T18:16:00+05:00",
                          "date_until": "2020-05-25T18:16:00+05:00"
                        }
                      ],
                      "is_enabled": true,
                      "discount": {
                        "percent": "20.00"
                      },
                      "items": [
                        {
                          "sku": "com.xsolla.elven_sword_1"
                        }
                      ],
                      "name": {
                        "en-US": "Promotion",
                        "ru-RU": "Акция"
                      },
                      "limits": {
                        "per_user": null,
                        "per_item": null,
                        "recurrent_schedule": null
                      }
                    },
                    {
                      "id": 2,
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        }
                      ],
                      "is_enabled": true,
                      "discount": {
                        "percent": "10.00"
                      },
                      "items": [
                        {
                          "sku": "com.xsolla.elven_helmet_1"
                        },
                        {
                          "sku": "com.xsolla.elven_armor_1"
                        }
                      ],
                      "name": {
                        "en-US": "Promotion",
                        "ru-RU": "Акция"
                      },
                      "limits": {
                        "per_user": {
                          "total": 10
                        },
                        "per_item": null,
                        "recurrent_schedule": {
                          "per_user": {
                            "interval_type": "daily",
                            "time": "11:00:00+08:00",
                            "reset_next_date": 1677553200,
                            "displayable_reset_start_date": "2023-02-28T11:00:00+08:00",
                            "displayable_reset_next_date": "2023-02-28T11:00:00+08:00"
                          }
                        }
                      },
                      "excluded_promotions": [
                        1,
                        3
                      ]
                    },
                    {
                      "id": 3,
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        }
                      ],
                      "is_enabled": true,
                      "discount": {
                        "percent": "10.00"
                      },
                      "items": [
                        {
                          "sku": "com.xsolla.elven_helmet_2"
                        },
                        {
                          "sku": "com.xsolla.elven_armor_2"
                        }
                      ],
                      "name": {
                        "en-US": "Promotion",
                        "ru-RU": "Акция"
                      },
                      "limits": {
                        "per_user": {
                          "total": 10
                        },
                        "per_item": null,
                        "recurrent_schedule": {
                          "per_user": {
                            "interval_type": "daily",
                            "time": "11:00:00+08:00",
                            "reset_next_date": 1677553200,
                            "displayable_reset_start_date": "2023-02-28T11:00:00+08:00",
                            "displayable_reset_next_date": "2023-02-28T11:00:00+08:00"
                          }
                        }
                      },
                      "price_conditions": [
                        {
                          "operator": "gt",
                          "value": "10.0000"
                        },
                        {
                          "operator": "lt",
                          "value": "20.0000"
                        }
                      ]
                    },
                    {
                      "id": 4,
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        }
                      ],
                      "is_enabled": true,
                      "discount": {
                        "percent": "10.00"
                      },
                      "items": null,
                      "name": {
                        "en-US": "Promotion",
                        "ru-RU": "Акция"
                      },
                      "limits": {
                        "per_user": {
                          "total": 10
                        },
                        "per_item": null,
                        "recurrent_schedule": {
                          "per_user": {
                            "interval_type": "daily",
                            "time": "11:00:00+08:00",
                            "reset_next_date": 1677553200,
                            "displayable_reset_start_date": "2023-02-28T11:00:00+08:00",
                            "displayable_reset_next_date": "2023-02-28T11:00:00+08:00"
                          }
                        }
                      },
                      "price_conditions": [
                        {
                          "operator": "lt",
                          "value": "20.0000"
                        }
                      ]
                    }
                  ],
                  "total_promotions_count": 4,
                  "active_promotions_count": 4,
                  "inactive_promotions_count": 0
                }
              }
            }
          }
        }
      },
      "Promotions_201-create-promotion": {
        "description": "Promotion was successfully created.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "promotion_id": {
                  "type": "integer",
                  "description": "Promotion ID. Unique promotion identifier within the project."
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "promotion_id": 2384756
                }
              }
            }
          }
        }
      },
      "Promotions_422-admin-promotion-missed-items-property": {
        "description": "Invalid request.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 422
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1102
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1102]:  Unprocessable Entity. The property `items` is required"
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 422,
                  "errorCode": 1102,
                  "errorMessage": "[0401-1102]: Unprocessable Entity. The property `items` is required",
                  "transactionId": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            }
          }
        }
      },
      "Promotions_404-admin-promotion": {
        "description": "Promotion not found. Make sure `promotion_id` is correct.",
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 9502
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9502]: Can not find promotion with ID = 111425 in project 59080"
                }
              },
              "type": "object"
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 404,
                  "errorCode": 9502,
                  "errorMessage": "[0401-9502]: Can not find promotion with ID = 111425 in project 59080"
                }
              }
            }
          }
        }
      },
      "Promotions_200-get-bonus-promotions": {
        "description": "List of bonus promotions was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "promotions": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Promotions_200-get-bonus-promotion-model"
                  }
                },
                "total_promotions_count": {
                  "$ref": "#/components/schemas/total_promotions_count"
                },
                "active_promotions_count": {
                  "$ref": "#/components/schemas/active_promotions_count"
                },
                "inactive_promotions_count": {
                  "$ref": "#/components/schemas/inactive_promotions_count"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "promotions": [
                    {
                      "id": 1,
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        },
                        {
                          "date_from": "2020-05-15T18:16:00+05:00",
                          "date_until": "2020-05-25T18:16:00+05:00"
                        }
                      ],
                      "name": {
                        "en-US": "New Year Bonus",
                        "de-DE": "Neujahrsbonus"
                      },
                      "is_enabled": true,
                      "condition": [
                        {
                          "sku": "com.xsolla.elven_boots_1"
                        },
                        {
                          "sku": "com.xsolla.elven_knife_1"
                        }
                      ],
                      "bonus": [
                        {
                          "sku": "com.xsolla.elven_sword_1",
                          "quantity": 1
                        },
                        {
                          "sku": "com.xsolla.elven_shield_1",
                          "quantity": 2
                        },
                        {
                          "sku": "com.xsolla.elven_gloves_1",
                          "quantity": 2
                        }
                      ],
                      "limits": {
                        "per_user": null,
                        "per_item": null,
                        "recurrent_schedule": null
                      }
                    },
                    {
                      "id": 2,
                      "promotion_periods": [
                        {
                          "date_from": "2020-04-15T18:16:00+05:00",
                          "date_until": "2020-04-25T18:16:00+05:00"
                        }
                      ],
                      "name": {
                        "en-US": "Summer season bonus",
                        "de-DE": "Sommersaison Bonus"
                      },
                      "is_enabled": true,
                      "condition": null,
                      "bonus": [
                        {
                          "sku": "com.xsolla.diamonds_1",
                          "quantity": 100
                        }
                      ],
                      "limits": {
                        "per_user": {
                          "total": 10
                        },
                        "per_item": null,
                        "recurrent_schedule": {
                          "per_user": {
                            "interval_type": "daily",
                            "time": "11:00:00+08:00",
                            "reset_next_date": 1677553200,
                            "displayable_reset_start_date": "2023-02-28T11:00:00+08:00",
                            "displayable_reset_next_date": "2023-02-28T11:00:00+08:00"
                          }
                        }
                      },
                      "price_conditions": [
                        {
                          "operator": "gt",
                          "value": "10.0000"
                        },
                        {
                          "operator": "lt",
                          "value": "50.0000"
                        }
                      ],
                      "excluded_promotions": [
                        1
                      ]
                    }
                  ],
                  "total_promotions_count": 2,
                  "active_promotions_count": 2,
                  "inactive_promotions_count": 0
                }
              }
            }
          }
        }
      },
      "Promotions_422-admin-promotion-missed-bonus-property": {
        "description": "Invalid request.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 422
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1102
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1102]:  Unprocessable Entity. The property `bonus` is required"
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 422,
                  "errorCode": 1102,
                  "errorMessage": "[0401-1102]: Unprocessable Entity. The property `bonus` is required",
                  "transactionId": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            }
          }
        }
      },
      "Promotions_200-admin-get-bonus-promotion": {
        "description": "Bonus promotion was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Promotions_200-get-bonus-promotion-model"
            },
            "examples": {
              "response": {
                "value": {
                  "id": 1,
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "is_enabled": true,
                  "condition": [
                    {
                      "sku": "com.xsolla.elven_boots_1"
                    },
                    {
                      "sku": "com.xsolla.elven_knife_1"
                    }
                  ],
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_1",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.elven_shield_1",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.elven_gloves_1",
                      "quantity": 2
                    }
                  ],
                  "limits": {
                    "per_user": {
                      "total": 10
                    },
                    "per_item": null,
                    "recurrent_schedule": {
                      "per_user": {
                        "interval_type": "daily",
                        "time": "11:00:00+08:00",
                        "reset_next_date": 1677553200,
                        "displayable_reset_start_date": "2023-02-28T11:00:00+08:00",
                        "displayable_reset_next_date": "2023-02-28T11:00:00+08:00"
                      }
                    }
                  },
                  "excluded_promotions": [
                    23,
                    45
                  ],
                  "price_conditions": [
                    {
                      "operator": "gt",
                      "value": "10.0000"
                    },
                    {
                      "operator": "lt",
                      "value": "50.0000"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Promotions_200-verify-promo-code": {
        "description": "Information about the code.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "description": "Type of code: `promocode`/`coupon`."
                },
                "code": {
                  "$ref": "#/components/schemas/Promotions_coupon_code"
                },
                "rewards": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/Coupon_rewards"
                    },
                    {
                      "$ref": "#/components/schemas/Promo_code_rewards_verify"
                    }
                  ]
                }
              }
            },
            "examples": {
              "coupon info": {
                "value": {
                  "type": "coupon",
                  "code": "WINTER2023",
                  "rewards": {
                    "bonus": [
                      {
                        "item": {
                          "sku": "com.xsolla.game_1",
                          "name": "Game name",
                          "type": "unit",
                          "description": "Game description",
                          "image_url": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                          "unit_items": [
                            {
                              "sku": "com.xsolla.game_key_01",
                              "name": "Game name",
                              "type": "game_key",
                              "is_free": false,
                              "drm_name": "Steam",
                              "drm_sku": "steam_key_1"
                            },
                            {
                              "sku": "com.xsolla.game_key_02",
                              "name": "Game name",
                              "type": "game_key",
                              "drm_name": "Origin",
                              "drm_sku": "origin_key_1"
                            }
                          ]
                        },
                        "quantity": 1
                      },
                      {
                        "item": {
                          "sku": "com.xsolla.game_2",
                          "name": "Game name",
                          "type": "unit",
                          "description": "Game description",
                          "image_url": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                          "unit_items": [
                            {
                              "sku": "com.xsolla.game_key_01",
                              "type": "game_key",
                              "name": "Game name",
                              "drm_name": "Steam",
                              "drm_sku": "steam_key_1"
                            }
                          ]
                        },
                        "quantity": 2
                      }
                    ],
                    "is_selectable": true
                  }
                }
              },
              "promocode info": {
                "value": {
                  "type": "promocode",
                  "code": "SUMMER2023",
                  "rewards": {
                    "bonus": [
                      {
                        "item": {
                          "sku": "com.xsolla.game_2",
                          "name": "Game name",
                          "type": "unit",
                          "description": "Game description",
                          "image_url": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                          "unit_items": [
                            {
                              "sku": "com.xsolla.game_key_01",
                              "type": "game_key",
                              "name": "Game name",
                              "drm_name": "Steam",
                              "drm_sku": "steam_key_1"
                            }
                          ]
                        },
                        "quantity": 2
                      }
                    ],
                    "discount": {
                      "percent": "10.00"
                    },
                    "discounted_items": [
                      {
                        "sku": "com.xsolla.elven_sword_1",
                        "name": "Elven sword",
                        "type": "virtual_good",
                        "description": "sword",
                        "image_url": null,
                        "discount": {
                          "percent": "10.00"
                        }
                      }
                    ],
                    "is_selectable": true
                  }
                }
              }
            }
          }
        }
      },
      "Promotions_404-verify-promo-code": {
        "description": "Code not found. Make sure the `code` value is correct.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 9811
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9811]: Code not found."
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            }
          }
        }
      },
      "Promotions_422-verify-promo-code": {
        "description": "Invalid code promotion.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "errorCode": {
                  "type": "integer"
                },
                "statusCode": {
                  "type": "integer"
                },
                "errorMessage": {
                  "type": "string"
                }
              }
            },
            "examples": {
              "code redemption limit": {
                "value": {
                  "errorCode": 9804,
                  "statusCode": 422,
                  "errorMessage": "[0401-9804]: You have reached the coupon redemption limit."
                }
              },
              "regionally restricted": {
                "value": {
                  "errorCode": 9808,
                  "statusCode": 422,
                  "errorMessage": "[0401-9808]: Coupon is not available in your region."
                }
              }
            }
          }
        }
      },
      "Promotions_200-get-unique-catalog-offers": {
        "description": "The list of coupons was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Promotions_200-get-unique-catalog-offer-promotion-model"
                  }
                },
                "total_promotions_count": {
                  "$ref": "#/components/schemas/total_promotions_count"
                },
                "active_promotions_count": {
                  "$ref": "#/components/schemas/active_promotions_count"
                },
                "inactive_promotions_count": {
                  "$ref": "#/components/schemas/inactive_promotions_count"
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-admin-unique-catalog-offers"
              }
            }
          }
        }
      },
      "Promotions_200-unique-catalog-offer-code-list": {
        "description": "The list of codes for a unique catalog offer was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "codes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "code": {
                        "$ref": "#/components/schemas/Promotions_coupon_code"
                      }
                    }
                  }
                },
                "total_count": {
                  "type": "number",
                  "description": "Total number of unique catalog offer codes."
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-coupon-code-list"
              }
            }
          }
        }
      },
      "200-admin-get-user-promo-code-limits": {
        "description": "Successfully received promo code limits for a user.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/User-limit-promo-code"
            },
            "examples": {
              "response": {
                "value": {
                  "per_user": {
                    "total": 10,
                    "available": 9
                  }
                }
              }
            }
          }
        }
      },
      "Common_401-invalid-basic-auth": {
        "description": "Basic authentication not passed or wrong. Make sure you used basic authentication or correct credentials.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 401
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1020
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1020]: Error in Authentication method occurred"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 401,
                  "errorCode": 1020,
                  "errorMessage": "[0401-1020]: Error in Authentication method occurred"
                }
              }
            }
          }
        }
      },
      "200-admin-get-user-coupon-limits": {
        "description": "Successfully received coupon limits for a user.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/User-limit-coupon"
            },
            "examples": {
              "response": {
                "value": {
                  "per_user": {
                    "total": 10,
                    "available": 9
                  }
                }
              }
            }
          }
        }
      },
      "200-admin-get-code-promo-code-limits": {
        "description": "Successfully received promo code limits for a code.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "promotion_id": {
                  "type": "integer",
                  "description": "Promotion ID. Unique promotion identifier within the project."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Code-limit-promo-code"
                  }
                },
                "total_items_count": {
                  "type": "number",
                  "description": "Total number of codes."
                },
                "has_more": {
                  "type": "boolean",
                  "description": "If another page with codes exists."
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/code-limit"
              }
            }
          }
        }
      },
      "200-admin-get-code-coupon-limits": {
        "description": "Successfully received coupon limits for a code.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "promotion_id": {
                  "type": "integer",
                  "description": "Promotion ID. Unique promotion identifier within the project."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Code-limit-promo-code"
                  }
                },
                "total_items_count": {
                  "type": "number",
                  "description": "Total number of codes."
                },
                "has_more": {
                  "type": "boolean",
                  "description": "If another page with codes exists."
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/code-limit"
              }
            }
          }
        }
      },
      "Common_401-complex": {
        "description": "Authentication not passed or wrong. Make sure you used authentication or correct credentials.",
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 401
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1501
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1501]: Authorization failed: Authorization header not sent"
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              },
              "type": "object"
            },
            "examples": {
              "Authorization header not sent": {
                "$ref": "#/components/examples/401-complex-auth-header-not-found"
              },
              "Incorrect credentials": {
                "$ref": "#/components/examples/401-complex-auth-incorrect-credentials"
              }
            }
          }
        }
      },
      "403-auth-header-not-sent": {
        "description": "Authorization header not sent.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 403
                },
                "errorCode": {
                  "type": "integer",
                  "example": 0
                },
                "errorMessage": {
                  "type": "string",
                  "example": "Authorization header not sent."
                },
                "transactionId": {
                  "type": "string",
                  "example": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 403,
                  "errorCode": 0,
                  "errorMessage": "Authorization header not sent"
                }
              }
            }
          }
        }
      },
      "Common_422-body-validation": {
        "description": "Request validation error.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/422-invalid-request"
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 422,
                  "errorCode": 1102,
                  "errorMessage": "[0401-1102]: Unprocessable Entity. The property `name` is required",
                  "transactionId": "da145238620011eb8e24fe6913ff226a"
                }
              }
            }
          }
        }
      },
      "200-admin-get-user-promotion-limits": {
        "description": "Promotion limits for a user were successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/User-limit-promotion"
            },
            "examples": {
              "response": {
                "value": {
                  "per_user": {
                    "total": 10,
                    "available": 9
                  }
                }
              }
            }
          }
        }
      },
      "200-admin-get-value-points": {
        "description": "The list of value points was successfully received.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-value-points-reward-chain_admin_get-value-point-list"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Value-points-item-model"
                  }
                }
              }
            }
          }
        }
      },
      "201-admin-create-value-point": {
        "description": "Value point was successfully created.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "value": {
                  "sku": "com.xsolla.item_new",
                  "item_id": 10
                }
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "sku": {
                  "type": "string",
                  "example": "new-sku"
                },
                "item_id": {
                  "type": "integer",
                  "example": 10
                }
              }
            }
          }
        }
      },
      "422-admin-create-update-rc-vp-invalid-request": {
        "description": "Invalid request.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/422-rc-vp-invalid-request"
            },
            "examples": {
              "The property `sku` is required": {
                "$ref": "#/components/examples/422-property-sku-is-required"
              }
            }
          }
        }
      },
      "200-admin-get-value-point": {
        "description": "The specified value point was successfully received.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-value-points-reward-chain_admin_get-value-point"
              }
            },
            "schema": {
              "$ref": "#/components/schemas/Value-point-item-model"
            }
          }
        }
      },
      "200-admin-get-list-value-point-rewards": {
        "description": "The list of items with the value point reward was successfully received.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-value-points-rewards-list"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/admin-item-value-point-reward"
                  }
                }
              }
            }
          }
        }
      },
      "sellable-item-by-sku_404": {
        "description": "Item not found. Make sure the `project_id` and the `sku` are correct.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 4001
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-4001]: Item with sku = 'electric_shiel' not found"
                }
              }
            }
          }
        }
      },
      "200-client-get-reward-chains-list": {
        "description": "The user’s reward chain was successfully retrieved.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-client-get-reward-chains-list"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "has_more": {
                  "type": "boolean",
                  "example": true,
                  "description": "Used as an indicator that there are more pages."
                },
                "total_items_count": {
                  "type": "integer",
                  "example": 10,
                  "description": "Total number of reward chains in the system."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/client-reward-chain-item-model"
                  }
                }
              }
            }
          }
        }
      },
      "200-client-get-user-reward-chain-balance": {
        "description": "The user’s value point balance was successfully retrieved.",
        "content": {
          "application/json": {
            "examples": {
              "common": {
                "$ref": "#/components/examples/200-client-get-user-reward-chain-balance"
              },
              "clan": {
                "$ref": "#/components/examples/200-client-get-user-clan-reward-chain-balance"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "sku": {
                  "$ref": "#/components/schemas/value-point-sku"
                },
                "name": {
                  "$ref": "#/components/schemas/value-point-name"
                },
                "image_url": {
                  "$ref": "#/components/schemas/Common_admin-image_url"
                },
                "description": {
                  "$ref": "#/components/schemas/value-point-description"
                },
                "long_description": {
                  "$ref": "#/components/schemas/value-point-long-description"
                },
                "amount": {
                  "type": "integer",
                  "description": "Value point quantity."
                },
                "is_clan": {
                  "$ref": "#/components/schemas/is_clan"
                }
              }
            }
          }
        }
      },
      "404-reward-chain-step-not-found": {
        "description": "Reward chain step not found.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 9911
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9911]: Reward chain step not found."
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 404,
                  "errorCode": 9911,
                  "errorMessage": "[0401-9911]: Reward chain step not found."
                }
              }
            }
          }
        }
      },
      "422-reward-chain-step-reward-can-not-claimed": {
        "description": "Can't claim the step reward.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 422
                },
                "errorCode": {
                  "type": "integer",
                  "example": 9912
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-9912]: Can't claim the step reward."
                }
              }
            },
            "examples": {
              "Reward chain step reward already claimed": {
                "value": {
                  "statusCode": 422,
                  "errorCode": 9912,
                  "errorMessage": "[0401-9912]: Reward already claimed."
                }
              },
              "Not enough VP to claim reward chain step reward": {
                "value": {
                  "statusCode": 422,
                  "errorCode": 9913,
                  "errorMessage": "[0401-9913]: Not enough value points to claim step reward."
                }
              }
            }
          }
        }
      },
      "200-client-update-user-clan": {
        "description": "The user’s clan was successfully updated.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-client-update-user-clan"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "reward": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "sku": {
                        "$ref": "#/components/schemas/sku"
                      },
                      "name": {
                        "type": "string",
                        "example": "Super box",
                        "description": "Item name."
                      },
                      "type": {
                        "type": "string",
                        "example": "bundle",
                        "description": "Type of item."
                      },
                      "description": {
                        "type": "string",
                        "example": "Super box with items",
                        "description": "Item description."
                      },
                      "image_url": {
                        "$ref": "#/components/schemas/Common_admin-image_url"
                      },
                      "quantity": {
                        "type": "integer",
                        "example": 2,
                        "description": "Item quantity."
                      },
                      "bundle_type": {
                        "type": "string",
                        "description": "Bundle type. Returned if an item type is a bundle.",
                        "enum": [
                          "standard",
                          "virtual_currency_package"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "200-admin-get-list-reward-chains": {
        "description": "The list of reward chains was successfully received.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-reward-chain-list"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "has_more": {
                  "$ref": "#/components/schemas/Pagination_has-more"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/admin-get-reward-chain-item-basic-model"
                      },
                      {
                        "$ref": "#/components/schemas/admin-get-reward-chain-item-clan-basic-model"
                      }
                    ]
                  }
                }
              }
            }
          }
        }
      },
      "201-admin-create-reward-chain": {
        "description": "Reward chain was successfully created.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "value": {
                  "reward_chain_id": 10
                }
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "reward_chain_id": {
                  "type": "integer",
                  "example": 10
                }
              }
            }
          }
        }
      },
      "200-admin-get-reward-chain": {
        "description": "The specified reward chain was successfully received.",
        "content": {
          "application/json": {
            "examples": {
              "common": {
                "$ref": "#/components/examples/200-reward-chain"
              },
              "clan": {
                "$ref": "#/components/examples/200-clan-reward-chain"
              }
            },
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/admin-get-reward-chain-item-full-model"
                },
                {
                  "$ref": "#/components/schemas/admin-get-reward-chain-item-clan-full-model"
                }
              ]
            }
          }
        }
      },
      "404-admin-reward-chain-not-found": {
        "description": "Reward chain not found.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 4001
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-4001]: Reward chain not found"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 404,
                  "errorCode": 9901,
                  "errorMessage": "[0401-4001]: Reward chain not found"
                }
              }
            }
          }
        }
      },
      "204-admin-update-reward-chain": {
        "description": "Reward chain was successfully updated.",
        "content": {}
      },
      "204-admin-delete-reward-chain": {
        "description": "Reward chain was successfully deleted.",
        "content": {}
      },
      "204-admin-toggle-reward-chain": {
        "description": "The reward chain has been disabled/enabled.",
        "content": {}
      },
      "204-admin-reset-reward-chain": {
        "description": "The reward chain has been reset.",
        "content": {}
      },
      "200-admin-get-list-daily-chains": {
        "description": "The list of daily rewards was successfully retrieved.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-admin-daily-chain-list"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "has_more": {
                  "$ref": "#/components/schemas/Pagination_has-more"
                },
                "total_items_count": {
                  "type": "integer",
                  "example": 3,
                  "description": "Total number of daily rewards."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/admin-daily-chain-short-model"
                  }
                }
              }
            }
          }
        }
      },
      "201-admin-create-daily-chain": {
        "description": "Daily reward was successfully created.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "value": {
                  "daily_chain_id": 10
                }
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "daily_chain_id": {
                  "type": "integer",
                  "example": 10
                }
              }
            }
          }
        }
      },
      "422-admin-create-error-list": {
        "description": "Incorrect daily reward configuration errors.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/daily-chain-error-model"
            },
            "examples": {
              "too-many-steps-error": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-too-many-steps"
              },
              "incorrect-steps-order-error": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-incorrect-steps-order"
              },
              "item-limit-exceeded": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-item-limit-exceeded"
              },
              "incorrect-items": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-incorrect-items"
              },
              "invalid-dates": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-invalid-dates"
              },
              "incorrect-period": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-incorrect-period"
              }
            }
          }
        }
      },
      "200-admin-get-daily-chain": {
        "description": "The daily reward data was successfully retrieved.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-admin-daily-chain"
              }
            },
            "schema": {
              "$ref": "#/components/schemas/admin-daily-chain-long-model"
            }
          }
        }
      },
      "404-daily-chain-not-found": {
        "description": "Daily reward was not found.",
        "content": {
          "application/json": {
            "examples": {
              "not-found": {
                "$ref": "#/components/examples/404-daily-chain-not-found"
              }
            },
            "schema": {
              "$ref": "#/components/schemas/daily-chain-error-model"
            }
          }
        }
      },
      "422-admin-update-error-list": {
        "description": "Incorrect daily reward configuration errors.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/daily-chain-error-model"
            },
            "examples": {
              "too-many-steps-error": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-too-many-steps"
              },
              "incorrect-steps-order-error": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-incorrect-steps-order"
              },
              "item-limit-exceeded": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-item-limit-exceeded"
              },
              "incorrect-items": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-incorrect-items"
              },
              "invalid-dates": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-invalid-dates"
              },
              "incorrect-period": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-incorrect-period"
              },
              "invalid-chain-step-ids": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-invalid-chain-step-ids"
              },
              "chain-id-mismatch": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-chain-id-mismatch"
              },
              "chain-step-ids-duplication": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-duplicate-step-ids"
              },
              "active-daily-chain": {
                "$ref": "#/components/examples/422-admin-daily-chain-error-activated"
              }
            }
          }
        }
      },
      "200-client-get-daily-chains-list": {
        "description": "The user’s daily rewards were successfully retrieved.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-client-daily-chain-list"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "has_more": {
                  "type": "boolean",
                  "example": true,
                  "description": "Used as an indicator that there are more pages."
                },
                "total_items_count": {
                  "type": "integer",
                  "example": 3,
                  "description": "Total number of daily rewards."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/client-daily-chain-model"
                  }
                }
              }
            }
          }
        }
      },
      "401-client-auth-error": {
        "description": "Authentication not passed or wrong.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 401
                },
                "errorCode": {
                  "type": "integer",
                  "example": 1501
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-1501]: Authorization failed: Provide authorization"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 401,
                  "errorCode": 1501,
                  "errorMessage": "[0401-1501]: Authorization failed: Provide authorization"
                }
              }
            }
          }
        }
      },
      "404-daily-chain-step-not-found": {
        "description": "Daily reward or daily reward step was not found.",
        "content": {
          "application/json": {
            "examples": {
              "not-found": {
                "$ref": "#/components/examples/404-daily-chain-step-not-found"
              }
            },
            "schema": {
              "$ref": "#/components/schemas/daily-chain-error-model"
            }
          }
        }
      },
      "200-client-get-offer-chains-list": {
        "description": "The list of offer chains was successfully received.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-client-offer-chain-list"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "has_more": {
                  "type": "boolean",
                  "example": true,
                  "description": "Indicates whether more pages are available."
                },
                "total_items_count": {
                  "type": "integer",
                  "example": 10,
                  "description": "Total number of offer chains available."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/client-offer-chain-model"
                  }
                }
              }
            }
          }
        }
      },
      "404-offer-chain-not-found": {
        "description": "The offer chain was not found.",
        "content": {
          "application/json": {
            "examples": {
              "not-found": {
                "$ref": "#/components/examples/404-offer-chain-not-found"
              }
            },
            "schema": {
              "$ref": "#/components/schemas/offer-chain-error-model"
            }
          }
        }
      },
      "404-offer-chain-step-not-found": {
        "description": "Either the offer chain or the step was not found.",
        "content": {
          "application/json": {
            "examples": {
              "not-found": {
                "$ref": "#/components/examples/404-offer-chain-step-not-found"
              }
            },
            "schema": {
              "$ref": "#/components/schemas/offer-chain-error-model"
            }
          }
        }
      },
      "Cart-Payment_200-order-created": {
        "description": "Order was successfully created.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "order_id": {
                  "type": "integer",
                  "description": "Order ID."
                },
                "token": {
                  "type": "string",
                  "description": "Payment token."
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "order_id": 641,
                  "token": "f4puMEFFDZcx9nv5HoNHIkPe9qghvBQo"
                }
              }
            }
          }
        }
      },
      "200-admin-get-list-offer-chains": {
        "description": "The list of offer chains was successfully retrieved.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-admin-offer-chain-list"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "has_more": {
                  "$ref": "#/components/schemas/Pagination_has-more"
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/admin-offer-chain-short-model"
                  }
                }
              }
            }
          }
        }
      },
      "201-admin-create-offer-chain": {
        "description": "The offer chain was successfully created.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "value": {
                  "offer_chain_id": 10
                }
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "offer_chain_id": {
                  "type": "integer",
                  "example": 10
                }
              }
            }
          }
        }
      },
      "422-create-error-list": {
        "description": "Invalid offer chain configuration.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/offer-chain-error-model"
            },
            "examples": {
              "too-many-steps-error": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-too-many-steps"
              },
              "incorrect-steps-order-error": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-incorrect-steps-order"
              },
              "item-limit-exceeded": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-item-limit-exceeded"
              },
              "incorrect-items": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-incorrect-items"
              },
              "invalid-dates": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-invalid-dates"
              },
              "incorrect-period": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-incorrect-period"
              }
            }
          }
        }
      },
      "200-admin-get-offer-chain": {
        "description": "The offer chain data was successfully retrieved.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-admin-offer-chain"
              }
            },
            "schema": {
              "$ref": "#/components/schemas/admin-offer-chain-long-model"
            }
          }
        }
      },
      "422-update-error-list": {
        "description": "Invalid offer chain configuration.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/offer-chain-error-model"
            },
            "examples": {
              "too-many-steps-error": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-too-many-steps"
              },
              "incorrect-steps-order-error": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-incorrect-steps-order"
              },
              "item-limit-exceeded": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-item-limit-exceeded"
              },
              "incorrect-items": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-incorrect-items"
              },
              "invalid-dates": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-invalid-dates"
              },
              "incorrect-period": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-incorrect-period"
              },
              "invalid-chain-step-ids": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-invalid-chain-step-ids"
              },
              "chain-id-mismatch": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-chain-id-mismatch"
              },
              "chain-step-ids-duplication": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-duplicate-step-ids"
              },
              "active-offer-chain": {
                "$ref": "#/components/examples/422-admin-offer-chain-error-activated"
              }
            }
          }
        }
      },
      "Upsell-404-item-not-found": {
        "description": "Item not found.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "statusCode": {
                  "type": "integer",
                  "example": 404
                },
                "errorCode": {
                  "type": "integer",
                  "example": 4001
                },
                "errorMessage": {
                  "type": "string",
                  "example": "[0401-4001]: Items weren't found: sku1, sku2"
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 404,
                  "errorCode": 9901,
                  "errorMessage": "[0401-4001]: Items weren't found: sku1, sku2"
                }
              }
            }
          }
        }
      },
      "Upsell-422-invalid-request": {
        "description": "Invalid request.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Upsell-422-invalid-request"
            }
          }
        }
      },
      "Upsell-200-get-client-list": {
        "description": "The list of upsell items was successfully received.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Upsell_item-list"
            },
            "examples": {
              "response": {
                "value": {
                  "has_more": true,
                  "items": [
                    {
                      "sku": "com.xsolla.big_rocket_1",
                      "name": "Big Rocket",
                      "groups": [
                        {
                          "external_id": "accessory",
                          "name": {
                            "en": "accessory"
                          }
                        }
                      ],
                      "attributes": [
                        {
                          "external_id": "stack_size",
                          "name": {
                            "en": "Quantity of items in the upsell set"
                          },
                          "values": [
                            {
                              "external_id": "size_e3364991f92e751689a68b96598a5a5a84010b85",
                              "value": "5"
                            }
                          ]
                        }
                      ],
                      "type": "virtual_good",
                      "description": "Big Rocket - description",
                      "image_url": "https://popmedia.blob.core.windows.net/popyourself/male/outfit/male_armor_white_a-01.png",
                      "is_free": false,
                      "price": {
                        "amount": "100.99",
                        "amount_without_discount": "100.99",
                        "currency": "USD"
                      },
                      "virtual_prices": [
                        {
                          "amount": 100,
                          "sku": "com.xsolla.vc_1",
                          "is_default": true,
                          "amount_without_discount": 100,
                          "image_url": "http://image.png",
                          "name": "SHOTGUN FOR TRUE RAIDERS",
                          "type": "virtual_currency",
                          "description": "description"
                        }
                      ],
                      "can_be_bought": true,
                      "virtual_item_type": "non_renewing_subscription",
                      "promotions": [
                        {
                          "name": "Bonus promotion",
                          "date_start": "2020-04-15T16:16:00+03:00",
                          "date_end": "2026-04-15T16:16:00+03:00",
                          "discount": null,
                          "bonus": [
                            {
                              "quantity": 1,
                              "name": "Xsolla Minigun",
                              "image_url": "https://cdn.xsolla.net/img/misc/images/2fc5c491a47413a8e8000447889093c2.png",
                              "sku": "com.xsolla.minigun_1",
                              "type": "virtual_good"
                            },
                            {
                              "quantity": 1,
                              "sku": "com.xsolla.phys_good_1",
                              "type": "physical_good"
                            },
                            {
                              "quantity": 1,
                              "name": "Super Lootbox with items",
                              "image_url": "https://cdn.xsolla.net/img/misc/images/9676f06265375087e607cb79c5283688.png",
                              "sku": "com.xsolla.SuperLootboxBundle_1",
                              "type": "bundle",
                              "bundle_type": "standard"
                            }
                          ]
                        }
                      ],
                      "limits": {
                        "per_user": {
                          "total": 5,
                          "available": 3,
                          "recurrent_schedule": {
                            "interval_type": "weekly",
                            "reset_next_date": 1746057600
                          },
                          "limit_exceeded_visibility": "show"
                        }
                      },
                      "periods": [
                        {
                          "date_from": "2020-08-11T10:00:00+03:00",
                          "date_until": "2020-08-11T20:00:00+03:00"
                        }
                      ],
                      "custom_attributes": {
                        "purchased": 0,
                        "attr": "value"
                      },
                      "vp_rewards": []
                    },
                    {
                      "sku": "com.xsolla.shotgun_raider_1",
                      "name": "SHOTGUN FOR TRUE RAIDERS",
                      "groups": [
                        {
                          "external_id": "weapons",
                          "name": {
                            "en": "Weapons"
                          }
                        }
                      ],
                      "attributes": [
                        {
                          "external_id": "stack_size",
                          "name": {
                            "en": "Quantity of items in the upsell set"
                          },
                          "values": [
                            {
                              "external_id": "size_e3364991f92e751689a68b96598a5a5a84010b85",
                              "value": "5"
                            }
                          ]
                        },
                        {
                          "external_id": "rating",
                          "name": {
                            "en": "Items rating"
                          },
                          "values": [
                            {
                              "external_id": "rating_e3364991f92e751689a68b96598a5a5a84010b85",
                              "value": "3.9"
                            }
                          ]
                        }
                      ],
                      "type": "virtual_good",
                      "description": "description",
                      "image_url": "http://image.png",
                      "is_free": false,
                      "price": {
                        "amount": "101.0",
                        "amount_without_discount": "101.0",
                        "currency": "USD"
                      },
                      "virtual_prices": [
                        {
                          "amount": 100,
                          "sku": "com.xsolla.vc_2",
                          "is_default": true,
                          "amount_without_discount": 100,
                          "image_url": "http://image.png",
                          "name": "SHOTGUN FOR TRUE RAIDERS",
                          "type": "virtual_currency",
                          "description": "description"
                        },
                        {
                          "amount": 200,
                          "sku": "com.xsolla.vc_3",
                          "is_default": false,
                          "amount_without_discount": 200,
                          "image_url": "http://image.png",
                          "name": "SHOTGUN FOR TRUE RAIDERS",
                          "type": "virtual_currency",
                          "description": "description"
                        }
                      ],
                      "can_be_bought": true,
                      "virtual_item_type": "non_renewing_subscription",
                      "promotions": [],
                      "limits": null,
                      "periods": [
                        {
                          "date_from": "2020-08-11T20:00:00+03:00",
                          "date_until": null
                        }
                      ],
                      "vp_rewards": []
                    },
                    {
                      "sku": "com.xsolla.shotgun_raider_2",
                      "name": "SHOTGUN FOR TRUE RAIDERS",
                      "groups": [],
                      "attributes": [],
                      "type": "virtual_good",
                      "description": "description",
                      "image_url": "http://image.png",
                      "is_free": true,
                      "price": null,
                      "virtual_prices": [],
                      "can_be_bought": true,
                      "virtual_item_type": "non_renewing_subscription",
                      "promotions": [],
                      "limits": null,
                      "periods": [],
                      "vp_rewards": []
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "requestBodies": {
      "Promotions_redeem-coupon-model": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "coupon_code": {
                  "type": "string",
                  "description": "Unique coupon code. Contains letters and numbers.",
                  "minLength": 1,
                  "maxLength": 128,
                  "example": "WINTER2021",
                  "default": "WINTER2021"
                },
                "selected_unit_items": {
                  "$ref": "#/components/schemas/Promotions_selected_unit_items"
                }
              }
            }
          }
        }
      },
      "Promotions_coupon-create": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "external_id",
                "name"
              ],
              "properties": {
                "external_id": {
                  "$ref": "#/components/schemas/Promotions_coupon-external_id"
                },
                "promotion_periods": {
                  "$ref": "#/components/schemas/promotion_periods"
                },
                "name": {
                  "$ref": "#/components/schemas/Promotions_coupon_name"
                },
                "bonus": {
                  "$ref": "#/components/schemas/Promotions_coupon_bonus"
                },
                "redeem_total_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_total_limit"
                },
                "redeem_user_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_user_limit"
                },
                "redeem_code_limit": {
                  "$ref": "#/components/schemas/Promotions_redeem_code_limit"
                },
                "attribute_conditions": {
                  "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-post"
                }
              }
            },
            "examples": {
              "simple": {
                "value": {
                  "external_id": "coupon_external_id",
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    },
                    {
                      "date_from": "2020-05-15T18:16:00+05:00",
                      "date_until": "2020-05-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_1",
                      "quantity": 1
                    }
                  ]
                }
              },
              "personalized": {
                "value": {
                  "external_id": "coupon_external_id",
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_2",
                      "quantity": 1
                    }
                  ],
                  "attribute_conditions": [
                    {
                      "attribute": "account_status",
                      "type": "string",
                      "operator": "eq",
                      "value": "golden",
                      "can_be_missing": false
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Promotions_coupon-update": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "promotion_periods": {
                  "$ref": "#/components/schemas/promotion_periods"
                },
                "name": {
                  "$ref": "#/components/schemas/Promotions_coupon_name"
                },
                "bonus": {
                  "$ref": "#/components/schemas/Promotions_coupon_bonus"
                },
                "redeem_total_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_total_limit"
                },
                "redeem_user_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_user_limit"
                },
                "redeem_code_limit": {
                  "$ref": "#/components/schemas/Promotions_redeem_code_limit"
                },
                "attribute_conditions": {
                  "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-post"
                }
              }
            },
            "examples": {
              "simple": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    },
                    {
                      "date_from": "2020-05-15T18:16:00+05:00",
                      "date_until": "2020-05-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_1",
                      "quantity": 1
                    }
                  ]
                }
              },
              "personalized": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_2",
                      "quantity": 1
                    }
                  ],
                  "attribute_conditions": [
                    {
                      "attribute": "account_status",
                      "type": "string",
                      "operator": "eq",
                      "value": "golden",
                      "can_be_missing": false
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Promotions_create-coupon-promocode-code": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "coupon_code": {
                  "$ref": "#/components/schemas/Promotions_coupon_code"
                }
              }
            }
          }
        }
      },
      "Promotions_redeem-promo-code-model": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "coupon_code": {
                  "type": "string",
                  "description": "Unique code of promo code. Contains letters and numbers.",
                  "minLength": 1,
                  "maxLength": 128,
                  "example": "SUMMER2021",
                  "default": "SUMMER2021"
                },
                "cart": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Cart ID.",
                      "default": "current"
                    }
                  },
                  "required": [
                    "id"
                  ]
                },
                "selected_unit_items": {
                  "$ref": "#/components/schemas/Promotions_selected_unit_items"
                }
              }
            }
          }
        }
      },
      "Promotions_cancel-promo-code-model": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "cart": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Cart ID.",
                      "default": "current"
                    }
                  },
                  "required": [
                    "id"
                  ]
                }
              }
            }
          }
        }
      },
      "Promotions_promocode-create": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "external_id",
                "name"
              ],
              "properties": {
                "external_id": {
                  "$ref": "#/components/schemas/Promotions_coupon-external_id"
                },
                "promotion_periods": {
                  "$ref": "#/components/schemas/promotion_periods"
                },
                "name": {
                  "$ref": "#/components/schemas/Promotions_coupon_name"
                },
                "bonus": {
                  "$ref": "#/components/schemas/Promotions_coupon_bonus"
                },
                "redeem_total_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_total_limit"
                },
                "redeem_user_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_user_limit"
                },
                "redeem_code_limit": {
                  "$ref": "#/components/schemas/Promotions_redeem_code_limit"
                },
                "discount": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "percent": {
                      "$ref": "#/components/schemas/Promotions_promotion_discount_percent"
                    }
                  },
                  "example": {
                    "percent": "10.10"
                  }
                },
                "discounted_items": {
                  "$ref": "#/components/schemas/Promotions_discounted_items"
                },
                "attribute_conditions": {
                  "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-post"
                },
                "price_conditions": {
                  "$ref": "#/components/schemas/price_conditions_promocode"
                },
                "item_price_conditions": {
                  "$ref": "#/components/schemas/item_price_conditions_promocode"
                },
                "excluded_promotions": {
                  "$ref": "#/components/schemas/excluded_promotions"
                }
              }
            },
            "examples": {
              "simple bonus": {
                "value": {
                  "external_id": "promo_code_external_id",
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    },
                    {
                      "date_from": "2020-05-15T18:16:00+05:00",
                      "date_until": "2020-05-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_1",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.elven_shield_1",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.elven_gloves_1",
                      "quantity": 2
                    }
                  ]
                }
              },
              "simple discount": {
                "value": {
                  "external_id": "promo_code_external_id",
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Discount",
                    "de-DE": "Neujahrsrabatt"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "discount": {
                    "percent": "10.10"
                  }
                }
              },
              "personalized": {
                "value": {
                  "external_id": "coupon_external_id",
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Discount",
                    "de-DE": "Neujahrsrabatt"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "discount": {
                    "percent": "10.10"
                  },
                  "attribute_conditions": [
                    {
                      "attribute": "account_status",
                      "type": "string",
                      "operator": "eq",
                      "value": "golden",
                      "can_be_missing": false
                    }
                  ]
                }
              },
              "with price conditions": {
                "value": {
                  "external_id": "promo_code_external_id",
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_2",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.elven_shield_2",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.elven_gloves_2",
                      "quantity": 2
                    }
                  ],
                  "price_conditions": [
                    {
                      "operator": "ge",
                      "value": "10.5000"
                    },
                    {
                      "operator": "lt",
                      "value": "50.0000"
                    }
                  ]
                }
              },
              "with item price conditions": {
                "value": {
                  "external_id": "promo_code_external_id",
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "discount": {
                    "percent": "10.10"
                  },
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_3",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.elven_shield_3",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.elven_gloves_3",
                      "quantity": 2
                    }
                  ],
                  "item_price_conditions": [
                    {
                      "operator": "ge",
                      "value": "10.5000"
                    },
                    {
                      "operator": "lt",
                      "value": "50.0000"
                    }
                  ]
                }
              },
              "with excluded promotions": {
                "value": {
                  "external_id": "coupon_external_id",
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Discount",
                    "de-DE": "Neujahrsrabatt"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "discount": {
                    "percent": "10.10"
                  },
                  "excluded_promotions": [
                    12,
                    789
                  ]
                }
              }
            }
          }
        }
      },
      "Promotions_promocode-update": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "promotion_periods": {
                  "$ref": "#/components/schemas/promotion_periods"
                },
                "name": {
                  "$ref": "#/components/schemas/Promotions_coupon_name"
                },
                "bonus": {
                  "$ref": "#/components/schemas/Promotions_coupon_bonus"
                },
                "redeem_total_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_total_limit"
                },
                "redeem_user_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_user_limit"
                },
                "redeem_code_limit": {
                  "$ref": "#/components/schemas/Promotions_redeem_code_limit"
                },
                "discount": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "percent": {
                      "$ref": "#/components/schemas/Promotions_promotion_discount_percent"
                    }
                  },
                  "example": {
                    "percent": "10.10"
                  }
                },
                "discounted_items": {
                  "$ref": "#/components/schemas/Promotions_discounted_items"
                },
                "attribute_conditions": {
                  "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-post"
                },
                "price_conditions": {
                  "$ref": "#/components/schemas/price_conditions_promocode"
                },
                "item_price_conditions": {
                  "$ref": "#/components/schemas/item_price_conditions_promocode"
                },
                "excluded_promotions": {
                  "$ref": "#/components/schemas/excluded_promotions"
                }
              }
            },
            "examples": {
              "simple bonus": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    },
                    {
                      "date_from": "2020-05-15T18:16:00+05:00",
                      "date_until": "2020-05-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_1",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.elven_shield_1",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.elven_gloves_1",
                      "quantity": 2
                    }
                  ]
                }
              },
              "simple discount": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Discount",
                    "de-DE": "Neujahrsrabatt"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "discount": {
                    "percent": "10.10"
                  }
                }
              },
              "personalized": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Discount",
                    "de-DE": "Neujahrsrabatt"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "discount": {
                    "percent": "10.10"
                  },
                  "attribute_conditions": [
                    {
                      "attribute": "account_status",
                      "type": "string",
                      "operator": "eq",
                      "value": "golden",
                      "can_be_missing": false
                    }
                  ]
                }
              },
              "with price conditions": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_2",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.elven_shield_2",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.elven_gloves_2",
                      "quantity": 2
                    }
                  ],
                  "price_conditions": [
                    {
                      "operator": "gt",
                      "value": "10.5000"
                    },
                    {
                      "operator": "lt",
                      "value": "50.0000"
                    }
                  ]
                }
              },
              "with item price conditions": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "discount": {
                    "percent": "10.10"
                  },
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_3",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.elven_shield_3",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.elven_gloves_3",
                      "quantity": 2
                    }
                  ],
                  "item_price_conditions": [
                    {
                      "operator": "gt",
                      "value": "10.5000"
                    },
                    {
                      "operator": "lt",
                      "value": "50.0000"
                    }
                  ]
                }
              },
              "with excluded promotions": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Discount",
                    "de-DE": "Neujahrsrabatt"
                  },
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1,
                  "discount": {
                    "percent": "10.10"
                  },
                  "excluded_promotions": [
                    12,
                    789
                  ]
                }
              }
            }
          }
        }
      },
      "Promotions_create-update-item-promotion": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "object",
                  "description": "Name of promotion. Should contain key/value pairs,\nwhere key is locale with format \"^[a-z]{2}-[A-Z]{2}$\", value is string.\n",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "example": {
                    "en-US": "Promotion",
                    "ru-RU": "Акция"
                  }
                },
                "promotion_periods": {
                  "$ref": "#/components/schemas/promotion_periods"
                },
                "discount": {
                  "type": "object",
                  "properties": {
                    "percent": {
                      "type": "string",
                      "description": "Percent discount.\nThe price of item will be decreased using a value calculated by using this percent and then rounded to 2 decimal places.",
                      "example": 10
                    }
                  },
                  "required": [
                    "percent"
                  ]
                },
                "items": {
                  "type": "array",
                  "items": {
                    "description": "The list of items which will be affected by discount.",
                    "type": "object",
                    "properties": {
                      "sku": {
                        "type": "string",
                        "description": "Item SKU.",
                        "default": "elven_sword"
                      }
                    },
                    "required": [
                      "sku"
                    ]
                  }
                },
                "attribute_conditions": {
                  "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-post"
                },
                "price_conditions": {
                  "$ref": "#/components/schemas/price_conditions_discount"
                },
                "limits": {
                  "$ref": "#/components/schemas/Promotions_promotion_limits"
                },
                "excluded_promotions": {
                  "$ref": "#/components/schemas/excluded_promotions"
                },
                "is_enabled": {
                  "$ref": "#/components/schemas/Promotions_is_enabled"
                }
              },
              "required": [
                "items",
                "discount",
                "name"
              ]
            },
            "examples": {
              "simple": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    },
                    {
                      "date_from": "2020-05-16T18:16:00+05:00",
                      "date_until": "2020-05-25T18:16:00+05:00"
                    }
                  ],
                  "discount": {
                    "percent": "10.00"
                  },
                  "items": [
                    {
                      "sku": "com.xsolla.elven_sword_1"
                    },
                    {
                      "sku": "com.xsolla.elven_helmet_1"
                    },
                    {
                      "sku": "com.xsolla.elven_armor_1"
                    }
                  ],
                  "name": {
                    "en-US": "Promotion",
                    "ru-RU": "Акция"
                  },
                  "is_enabled": true
                }
              },
              "personalized": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "discount": {
                    "percent": "24.00"
                  },
                  "items": [],
                  "is_enabled": true,
                  "name": {
                    "en-US": "Ork set discount",
                    "ru-RU": "Скидка на набор для орка"
                  },
                  "attribute_conditions": [
                    {
                      "type": "string",
                      "attribute": "race",
                      "operator": "eq",
                      "value": "ork"
                    },
                    {
                      "type": "number",
                      "attribute": "level",
                      "operator": "eq",
                      "value": "10",
                      "can_be_missing": true
                    }
                  ]
                }
              },
              "with price condition": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "discount": {
                    "percent": "24.00"
                  },
                  "items": [],
                  "name": {
                    "en-US": "Ork set discount",
                    "ru-RU": "Скидка на набор для орка"
                  },
                  "price_conditions": [
                    {
                      "operator": "ge",
                      "value": "10.5000"
                    },
                    {
                      "operator": "lt",
                      "value": "20.5000"
                    }
                  ]
                }
              },
              "with excluded promotions": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "discount": {
                    "percent": "24.00"
                  },
                  "items": [],
                  "name": {
                    "en-US": "Ork set discount",
                    "ru-RU": "Скидка на набор для орка"
                  },
                  "excluded_promotions": [
                    12,
                    789
                  ],
                  "is_enabled": true
                }
              }
            }
          }
        },
        "description": "Object with promotion data.",
        "required": true
      },
      "Promotions_create-update-bonus-promotion": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "condition",
                "bonus",
                "name"
              ],
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "Promotion ID. Unique promotion identifier within the project."
                },
                "promotion_periods": {
                  "$ref": "#/components/schemas/promotion_periods"
                },
                "name": {
                  "type": "object",
                  "description": "Name of promotion. Should contain key/value pairs where key is a locale with \"^[a-z]{2}-[A-Z]{2}$\" format, value is string.",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "example": {
                    "en-US": "Summer season bonus",
                    "de-DE": "Sommersaison Bonus"
                  }
                },
                "condition": {
                  "type": [
                    "array",
                    "null"
                  ],
                  "description": "Set of items required to be included in the purchase for applying a promotion. If this parameters is `null`, a promotion will be applied to any purchases within a project.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "sku": {
                        "type": "string",
                        "description": "Item SKU.",
                        "default": "elven_sword"
                      }
                    }
                  }
                },
                "attribute_conditions": {
                  "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-post"
                },
                "bonus": {
                  "type": [
                    "array",
                    "null"
                  ],
                  "items": {
                    "description": "The list of items which will be added into purchase of user as a bonus.",
                    "type": "object",
                    "properties": {
                      "sku": {
                        "type": "string",
                        "description": "Item SKU.",
                        "default": "elven_shield"
                      },
                      "quantity": {
                        "type": "number",
                        "description": "Item quantity.",
                        "default": 1
                      }
                    }
                  }
                },
                "limits": {
                  "$ref": "#/components/schemas/Promotions_promotion_limits"
                },
                "price_conditions": {
                  "$ref": "#/components/schemas/price_conditions_bonus"
                },
                "excluded_promotions": {
                  "$ref": "#/components/schemas/excluded_promotions"
                },
                "is_enabled": {
                  "$ref": "#/components/schemas/Promotions_is_enabled"
                }
              }
            },
            "examples": {
              "simple": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    },
                    {
                      "date_from": "2020-05-15T18:16:00+05:00",
                      "date_until": "2020-05-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "condition": [
                    {
                      "sku": "com.xsolla.elven_boots_1"
                    },
                    {
                      "sku": "com.xsolla.elven_knife_1"
                    }
                  ],
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_1",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.elven_shield_1",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.elven_gloves_1",
                      "quantity": 2
                    }
                  ]
                }
              },
              "personalized": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "condition": [
                    {
                      "sku": "com.xsolla.year_1_season_pass"
                    }
                  ],
                  "attribute_conditions": [
                    {
                      "attribute": "account_status",
                      "type": "string",
                      "operator": "eq",
                      "value": "golden",
                      "can_be_missing": false
                    }
                  ],
                  "bonus": [
                    {
                      "sku": "com.xsolla.mp_credits",
                      "quantity": 50000
                    }
                  ]
                }
              },
              "with price conditions": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "condition": [
                    {
                      "sku": "com.xsolla.elven_boots_2"
                    },
                    {
                      "sku": "com.xsolla.elven_knife_2"
                    }
                  ],
                  "bonus": [
                    {
                      "sku": "com.xsolla.elven_sword_2",
                      "quantity": 1
                    },
                    {
                      "sku": "com.xsolla.elven_shield_2",
                      "quantity": 2
                    },
                    {
                      "sku": "com.xsolla.elven_gloves_2",
                      "quantity": 2
                    }
                  ],
                  "price_conditions": [
                    {
                      "operator": "gt",
                      "value": "10.0000"
                    },
                    {
                      "operator": "lt",
                      "value": "20.0000"
                    }
                  ]
                }
              },
              "with excluded promotions": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Bonus",
                    "de-DE": "Neujahrsbonus"
                  },
                  "condition": [
                    {
                      "sku": "com.xsolla.year_1_season_pass"
                    }
                  ],
                  "bonus": [
                    {
                      "sku": "com.xsolla.mp_credits",
                      "quantity": 50000
                    }
                  ],
                  "excluded_promotions": [
                    12,
                    789
                  ]
                }
              }
            }
          }
        }
      },
      "Promotions_unique_catalog_offer-create": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "external_id",
                "name"
              ],
              "properties": {
                "external_id": {
                  "$ref": "#/components/schemas/Promotions_coupon-external_id"
                },
                "date_start": {
                  "$ref": "#/components/schemas/Promotions_coupon_date_start"
                },
                "date_end": {
                  "$ref": "#/components/schemas/Promotions_coupon_date_end"
                },
                "name": {
                  "$ref": "#/components/schemas/Promotions_coupon_name"
                },
                "items": {
                  "type": "array",
                  "$ref": "#/components/schemas/Promotions_unique_catalog_offer_items"
                },
                "redeem_user_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_user_limit"
                },
                "redeem_code_limit": {
                  "$ref": "#/components/schemas/Promotions_redeem_code_limit"
                },
                "redeem_total_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_total_limit"
                }
              }
            },
            "examples": {
              "simple": {
                "value": {
                  "external_id": "offer_external_id",
                  "date_start": "2020-04-15T18:16:00+05:00",
                  "date_end": "2020-04-25T18:16:00+05:00",
                  "name": {
                    "en-US": "New Year Offer",
                    "de-DE": "Neujahrsangebot"
                  },
                  "items": [
                    "elven_sword",
                    "elven_boots"
                  ]
                }
              },
              "limited": {
                "value": {
                  "external_id": "offer_external_id",
                  "date_start": "2020-04-15T18:16:00+05:00",
                  "date_end": "2020-04-25T18:16:00+05:00",
                  "name": {
                    "en-US": "New Year Offer",
                    "de-DE": "Neujahrsangebot"
                  },
                  "items": [
                    "elven_sword",
                    "elven_boots"
                  ],
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1
                }
              }
            }
          }
        }
      },
      "Promotions_unique_catalog_offer-update": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "promotion_periods": {
                  "$ref": "#/components/schemas/promotion_periods"
                },
                "name": {
                  "$ref": "#/components/schemas/Promotions_coupon_name"
                },
                "items": {
                  "$ref": "#/components/schemas/Promotions_unique_catalog_offer_items"
                },
                "redeem_total_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_total_limit"
                },
                "redeem_user_limit": {
                  "$ref": "#/components/schemas/Promotions_coupon-redeem_user_limit"
                },
                "redeem_code_limit": {
                  "$ref": "#/components/schemas/Promotions_redeem_code_limit"
                }
              }
            },
            "examples": {
              "simple": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    },
                    {
                      "date_from": "2020-05-15T18:16:00+05:00",
                      "date_until": "2020-05-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Offer",
                    "de-DE": "Neujahrsangebot"
                  },
                  "items": [
                    "elven_sword",
                    "elven_boots"
                  ]
                }
              },
              "limited": {
                "value": {
                  "promotion_periods": [
                    {
                      "date_from": "2020-04-15T18:16:00+05:00",
                      "date_until": "2020-04-25T18:16:00+05:00"
                    }
                  ],
                  "name": {
                    "en-US": "New Year Offer",
                    "de-DE": "Neujahrsangebot"
                  },
                  "items": [
                    "elven_sword",
                    "elven_boots"
                  ],
                  "redeem_total_limit": 100,
                  "redeem_user_limit": 1,
                  "redeem_code_limit": 1
                }
              }
            }
          }
        }
      },
      "personalized-catalog_create-update-body": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/user-attribute_personalized-catalog-body-required"
            },
            "example": {
              "name": "Ork race armor rule",
              "is_enabled": true,
              "attribute_conditions": [
                {
                  "attribute": "race",
                  "operator": "eq",
                  "value": "ork",
                  "type": "string",
                  "can_be_missing": false
                }
              ],
              "items": [
                {
                  "item_id": 1
                }
              ],
              "is_satisfied_for_unauth": false
            }
          }
        }
      },
      "reset-user-limits": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "user"
              ],
              "properties": {
                "user": {
                  "$ref": "#/components/schemas/User-limit_user"
                }
              }
            },
            "example": {
              "user": {
                "user_external_id": "d342dad2-9d59-11e9-a384-42010aa8003f"
              }
            }
          }
        }
      },
      "reset-user-limits-flexible": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "user"
              ],
              "properties": {
                "user": {
                  "$ref": "#/components/schemas/User-limit_user_flexible"
                }
              }
            },
            "example": {
              "user": {
                "user_external_id": "d342dad2-9d59-11e9-a384-42010aa8003f"
              }
            }
          }
        }
      },
      "update-user-limits-flexible": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "user",
                "available"
              ],
              "properties": {
                "user": {
                  "$ref": "#/components/schemas/User-limit_user"
                },
                "available": {
                  "$ref": "#/components/schemas/User-limit_available_flexible"
                }
              }
            },
            "example": {
              "user": {
                "user_external_id": "d342dad2-9d59-11e9-a384-42010aa8003f"
              },
              "available": 0
            }
          }
        }
      },
      "update-user-limits-strict": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "user",
                "available"
              ],
              "properties": {
                "user": {
                  "$ref": "#/components/schemas/User-limit_user"
                },
                "available": {
                  "$ref": "#/components/schemas/User-limit_available"
                }
              }
            },
            "example": {
              "user": {
                "user_external_id": "d342dad2-9d59-11e9-a384-42010aa8003f"
              },
              "available": 1
            }
          }
        }
      },
      "create-value-point": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/admin_value_points-create"
            },
            "examples": {
              "default": {
                "summary": "Value point for reward chain",
                "value": {
                  "sku": "com.xsolla.reward_vp_1",
                  "name": {
                    "en": "Reward VP 1"
                  },
                  "is_enabled": true,
                  "description": {
                    "en": "Value points for reward system."
                  },
                  "long_description": {
                    "en": "Value points given to users to get new rewards in a reward chain."
                  },
                  "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                  "media_list": [],
                  "order": 1
                }
              },
              "clan": {
                "summary": "Value point for clan reward chain",
                "value": {
                  "sku": "com.xsolla.clan_value_point_1",
                  "name": {
                    "en": "Clan Reward VP 1"
                  },
                  "is_enabled": true,
                  "description": {
                    "en": "Value points for clan reward system."
                  },
                  "long_description": {
                    "en": "Value points given to clans to get new rewards in a reward chain."
                  },
                  "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                  "media_list": [],
                  "order": 3,
                  "is_clan": true
                }
              }
            }
          }
        }
      },
      "set-item-value-point-reward": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/item-value-point-reward-set"
            },
            "example": [
              {
                "sku": "com.xsolla.booster_1",
                "amount": 100
              },
              {
                "sku": "com.xsolla.booster_mega",
                "amount": 200
              }
            ]
          }
        }
      },
      "set-item-value-point-reward-for-patch": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/item-value-point-reward-set-for-patch"
            },
            "example": [
              {
                "sku": "booster_1",
                "amount": 100
              },
              {
                "sku": "booster_mega",
                "amount": 0
              }
            ]
          }
        }
      },
      "create-reward-chain": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/create-reward-chain-model"
                },
                {
                  "$ref": "#/components/schemas/create-clan-reward-chain-model"
                }
              ]
            },
            "examples": {
              "default": {
                "summary": "Reward chain example",
                "value": {
                  "name": {
                    "en": "Reward chain"
                  },
                  "description": {
                    "en": "Reward chain description."
                  },
                  "long_description": {
                    "en": "Reward chain long description."
                  },
                  "is_enabled": true,
                  "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                  "order": 1,
                  "periods": [
                    {
                      "date_from": "2026-01-01T01:00:00+05:00",
                      "date_until": "2026-01-31T23:59:59+05:00"
                    },
                    {
                      "date_from": "2026-02-01T01:00:00+05:00",
                      "date_until": "2026-02-28T23:59:59+05:00"
                    }
                  ],
                  "value_point": {
                    "sku": "com.xsolla.value_point_1"
                  },
                  "steps": [
                    {
                      "name": {
                        "en": "First step of the reward chain"
                      },
                      "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                      "reward": [
                        {
                          "sku": "com.xsolla.item_1",
                          "quantity": 5
                        },
                        {
                          "sku": "com.xsolla.item_2",
                          "quantity": 1
                        }
                      ],
                      "price": {
                        "amount": 10
                      }
                    },
                    {
                      "name": {
                        "en": "Second step of the reward chain"
                      },
                      "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                      "reward": [
                        {
                          "sku": "com.xsolla.item_3",
                          "quantity": 5
                        },
                        {
                          "sku": "com.xsolla.item_4",
                          "quantity": 1
                        }
                      ],
                      "price": {
                        "amount": 15
                      }
                    }
                  ],
                  "recurrent_schedule": {
                    "interval_type": "weekly",
                    "day_of_week": 1,
                    "time": "01:00:00+08:00"
                  },
                  "attribute_conditions": [
                    {
                      "attribute": "race",
                      "operator": "eq",
                      "value": "ork",
                      "type": "string",
                      "can_be_missing": false
                    }
                  ],
                  "is_always_visible": true,
                  "is_reset_after_end": true
                }
              },
              "clan": {
                "summary": "Clan reward chain example",
                "value": {
                  "name": {
                    "en": "Clan reward chain"
                  },
                  "description": {
                    "en": "Clan reward chain description."
                  },
                  "long_description": {
                    "en": "Clan reward chain long description."
                  },
                  "is_enabled": true,
                  "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                  "order": 1,
                  "periods": [
                    {
                      "date_from": "2026-01-01T01:00:00+05:00",
                      "date_until": "2026-01-31T23:59:59+05:00"
                    },
                    {
                      "date_from": "2026-02-01T01:00:00+05:00",
                      "date_until": "2026-02-28T23:59:59+05:00"
                    }
                  ],
                  "value_point": {
                    "sku": "com.xsolla.clan_value_point_1"
                  },
                  "steps": [
                    {
                      "name": {
                        "en": "First step of the reward chain"
                      },
                      "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                      "reward": [
                        {
                          "sku": "com.xsolla.item_1",
                          "quantity": 5
                        },
                        {
                          "sku": "com.xsolla.item_2",
                          "quantity": 1
                        }
                      ],
                      "price": {
                        "amount": 10
                      }
                    },
                    {
                      "name": {
                        "en": "Second step of the reward chain"
                      },
                      "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                      "reward": [
                        {
                          "sku": "com.xsolla.item_3",
                          "quantity": 5
                        },
                        {
                          "sku": "com.xsolla.item_4",
                          "quantity": 1
                        }
                      ],
                      "price": {
                        "amount": 15
                      }
                    }
                  ],
                  "recurrent_schedule": {
                    "interval_type": "weekly",
                    "day_of_week": 1,
                    "time": "01:00:00+08:00"
                  },
                  "popup_header": {
                    "en": "How to unlock rewards"
                  },
                  "popup_instruction": {
                    "en": "You must be a clan member to get clan rewards. You join a clan when a clan member invites you to the clan, and you accept the invite. You can also create your own clan."
                  },
                  "popup_image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                  "clan_type": "guild"
                }
              }
            }
          }
        }
      },
      "update-reward-chain": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/update-reward-chain-model"
                },
                {
                  "$ref": "#/components/schemas/update-clan-reward-chain-model"
                }
              ]
            },
            "examples": {
              "default": {
                "summary": "Reward chain example",
                "value": {
                  "name": {
                    "en": "Reward chain"
                  },
                  "description": {
                    "en": "Reward chain description."
                  },
                  "long_description": {
                    "en": "Reward chain long description."
                  },
                  "is_enabled": true,
                  "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                  "order": 1,
                  "periods": [
                    {
                      "date_from": "2026-01-01T01:00:00+05:00",
                      "date_until": "2026-01-31T23:59:59+05:00"
                    },
                    {
                      "date_from": "2026-02-01T01:00:00+05:00",
                      "date_until": "2026-02-28T23:59:59+05:00"
                    }
                  ],
                  "steps": [
                    {
                      "name": {
                        "en": "First step of the reward chain"
                      },
                      "step_id": 1,
                      "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                      "reward": [
                        {
                          "sku": "com.xsolla.item_1",
                          "quantity": 5
                        },
                        {
                          "sku": "com.xsolla.item_2",
                          "quantity": 1
                        }
                      ],
                      "price": {
                        "amount": 10
                      }
                    },
                    {
                      "name": {
                        "en": "Second step of the reward chain"
                      },
                      "step_id": 2,
                      "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                      "reward": [
                        {
                          "sku": "com.xsolla.item_3",
                          "quantity": 5
                        },
                        {
                          "sku": "com.xsolla.item_4",
                          "quantity": 1
                        }
                      ],
                      "price": {
                        "amount": 15
                      }
                    }
                  ],
                  "recurrent_schedule": {
                    "interval_type": "weekly",
                    "day_of_week": 1,
                    "time": "01:00:00+08:00"
                  },
                  "attribute_conditions": [
                    {
                      "attribute": "race",
                      "operator": "eq",
                      "value": "ork",
                      "type": "string",
                      "can_be_missing": false
                    }
                  ],
                  "is_always_visible": true,
                  "is_reset_after_end": true
                }
              },
              "clan": {
                "summary": "Clan reward chain example",
                "value": {
                  "name": {
                    "en": "Clan reward chain"
                  },
                  "description": {
                    "en": "Clan reward chain description."
                  },
                  "long_description": {
                    "en": "Clan reward chain long description."
                  },
                  "is_enabled": true,
                  "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                  "order": 1,
                  "periods": [
                    {
                      "date_from": "2026-01-01T01:00:00+05:00",
                      "date_until": "2026-01-31T23:59:59+05:00"
                    },
                    {
                      "date_from": "2026-02-01T01:00:00+05:00",
                      "date_until": "2026-02-28T23:59:59+05:00"
                    }
                  ],
                  "steps": [
                    {
                      "name": {
                        "en": "First step of the reward chain"
                      },
                      "step_id": 1,
                      "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                      "reward": [
                        {
                          "sku": "com.xsolla.item_1",
                          "quantity": 5
                        },
                        {
                          "sku": "com.xsolla.item_2",
                          "quantity": 1
                        }
                      ],
                      "price": {
                        "amount": 10
                      }
                    },
                    {
                      "name": {
                        "en": "Second step of the reward chain"
                      },
                      "step_id": 2,
                      "image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                      "reward": [
                        {
                          "sku": "com.xsolla.item_3",
                          "quantity": 5
                        },
                        {
                          "sku": "com.xsolla.item_4",
                          "quantity": 1
                        }
                      ],
                      "price": {
                        "amount": 15
                      }
                    }
                  ],
                  "recurrent_schedule": {
                    "interval_type": "weekly",
                    "day_of_week": 1,
                    "time": "01:00:00+08:00"
                  },
                  "popup_header": {
                    "en": "How to unlock rewards"
                  },
                  "popup_instruction": {
                    "en": "You should be a clan member to get clan rewards. You join a clan when a clan member invited you to the clan, and you accepted the invite. You can create your own clan."
                  },
                  "popup_image_url": "https://cdn.xsolla.net/img/misc/images/5c3b8b45c5be5fe7803e59fbc8041be4.png",
                  "clan_type": "guild"
                }
              }
            }
          }
        }
      },
      "create-daily-chain": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/create-calendar-hard-daily-chain-model"
                },
                {
                  "$ref": "#/components/schemas/create-rolling-skippable-daily-chain-model"
                },
                {
                  "$ref": "#/components/schemas/create-rolling-unskippable-daily-chain-model"
                }
              ]
            },
            "examples": {
              "calendar_hard": {
                "summary": "Daily reward with `calendar_hard` type",
                "value": {
                  "name": {
                    "en": "New daily reward",
                    "ru": "Новая ежедневная награда"
                  },
                  "description": {
                    "en": "New daily reward short description"
                  },
                  "order": 4,
                  "date_start": "2023-04-15T18:16:00+05:00",
                  "is_enabled": true,
                  "steps": [
                    {
                      "step_number": 1,
                      "items": [
                        {
                          "sku": "vg_enabled_shown_in_store_1",
                          "quantity": 2
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "items": [
                        {
                          "sku": "bundle_enabled_shown_in_store_with_2_enabled_shown_in_store_vg",
                          "quantity": 2
                        }
                      ]
                    },
                    {
                      "step_number": 3,
                      "items": [
                        {
                          "sku": "vcp_enabled_shown_in_store_1_of_10_vc_enabled_shown_in_store_1",
                          "quantity": 2
                        }
                      ]
                    },
                    {
                      "step_number": 4,
                      "items": [
                        {
                          "sku": "vg_enabled_shown_in_store_1",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 5,
                      "items": [
                        {
                          "sku": "bundle_enabled_shown_in_store_with_2_enabled_shown_in_store_vg",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 6,
                      "items": [
                        {
                          "sku": "vcp_enabled_shown_in_store_1_of_10_vc_enabled_shown_in_store_1",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "type": "calendar_hard"
                }
              },
              "rolling_skippable": {
                "summary": "Daily reward with `rolling_skippable` type",
                "value": {
                  "name": {
                    "en": "New skippable login reward"
                  },
                  "description": {
                    "en": "New skippable login reward short description"
                  },
                  "order": 1,
                  "date_start": "2023-05-01T10:00:00+05:00",
                  "date_end": "2023-05-31T10:00:00+05:00",
                  "is_enabled": true,
                  "is_recurrent": true,
                  "steps": [
                    {
                      "step_number": 1,
                      "items": [
                        {
                          "sku": "monday_reward_item_one",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "items": [
                        {
                          "sku": "tuesday_reward_item_two",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 3,
                      "items": [
                        {
                          "sku": "wednesday_reward_item_three",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 4,
                      "items": [
                        {
                          "sku": "thursday_reward_item_four",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 5,
                      "items": [
                        {
                          "sku": "friday_reward_item_five",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 6,
                      "items": [
                        {
                          "sku": "saturday_reward_item_six",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 7,
                      "items": [
                        {
                          "sku": "sunday_reward_item_seven",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "type": "rolling_skippable"
                }
              },
              "rolling_unskippable": {
                "summary": "Daily reward with `rolling_unskippable` type",
                "value": {
                  "name": {
                    "en": "New unskippable login reward"
                  },
                  "description": {
                    "en": "New unskippable login reward short description"
                  },
                  "order": 2,
                  "date_start": "2023-06-01T10:00:00+05:00",
                  "date_end": "2023-06-30T10:00:00+05:00",
                  "is_enabled": true,
                  "is_recurrent": false,
                  "steps": [
                    {
                      "step_number": 1,
                      "items": [
                        {
                          "sku": "monday_reward_item_one",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "items": [
                        {
                          "sku": "tuesday_reward_item_two",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 3,
                      "items": [
                        {
                          "sku": "wednesday_reward_item_three",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 4,
                      "items": [
                        {
                          "sku": "thursday_reward_item_four",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 5,
                      "items": [
                        {
                          "sku": "friday_reward_item_five",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "type": "rolling_unskippable"
                }
              }
            }
          }
        }
      },
      "update-daily-chain": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/update-calendar-hard-daily-chain-model"
                },
                {
                  "$ref": "#/components/schemas/update-rolling-skippable-daily-chain-model"
                },
                {
                  "$ref": "#/components/schemas/update-rolling-unskippable-daily-chain-model"
                }
              ]
            },
            "examples": {
              "calendar_hard": {
                "summary": "Daily reward with `calendar_hard` type",
                "value": {
                  "name": {
                    "en": "Updated daily reward",
                    "ru": "Обновленная ежедневная награда"
                  },
                  "description": {
                    "en": "Updated daily reward description"
                  },
                  "order": 4,
                  "date_start": "2023-04-15T18:16:00+05:00",
                  "is_enabled": true,
                  "steps": [
                    {
                      "step_number": 1,
                      "items": [
                        {
                          "sku": "vg_enabled_shown_in_store_1",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "items": [
                        {
                          "sku": "vg_enabled_shown_in_store_2",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_id": 10,
                      "step_number": 3,
                      "items": [
                        {
                          "sku": "vg_not_shown_in_store",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_id": 8,
                      "step_number": 4,
                      "items": [
                        {
                          "sku": "bundle_enabled_shown_in_store_with_2_enabled_shown_in_store_vg",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 5,
                      "items": [
                        {
                          "sku": "vcp_enabled_shown_in_store_1_of_10_vc_enabled_shown_in_store_1",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "type": "calendar_hard"
                }
              },
              "rolling_skippable": {
                "summary": "Daily reward with `rolling_skippable` type",
                "value": {
                  "name": {
                    "en": "Updated login reward"
                  },
                  "description": {
                    "en": "Updated login reward description"
                  },
                  "order": 4,
                  "date_start": "2023-08-01T10:00:00+05:00",
                  "date_end": "2023-08-31T10:00:00+05:00",
                  "is_enabled": true,
                  "steps": [
                    {
                      "step_number": 1,
                      "items": [
                        {
                          "sku": "monday_reward_item_one",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "items": [
                        {
                          "sku": "tuesday_reward_item_two",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 3,
                      "items": [
                        {
                          "sku": "wednesday_reward_item_three",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 4,
                      "items": [
                        {
                          "sku": "thursday_reward_item_four",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 5,
                      "items": [
                        {
                          "sku": "friday_reward_item_five",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 6,
                      "items": [
                        {
                          "sku": "saturday_reward_item_six",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 7,
                      "items": [
                        {
                          "sku": "sunday_reward_item_seven",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "type": "rolling_skippable"
                }
              },
              "rolling_unskippable": {
                "summary": "Daily reward with `rolling_unskippable` type",
                "value": {
                  "name": {
                    "en": "Updated unskippable login reward"
                  },
                  "description": {
                    "en": "Updated unskippable login reward description"
                  },
                  "order": 2,
                  "date_start": "2023-09-01T10:00:00+05:00",
                  "date_end": "2023-09-30T10:00:00+05:00",
                  "is_enabled": true,
                  "steps": [
                    {
                      "step_number": 1,
                      "items": [
                        {
                          "sku": "monday_reward_item_one",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "items": [
                        {
                          "sku": "tuesday_reward_item_two",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 3,
                      "items": [
                        {
                          "sku": "wednesday_reward_item_three",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 4,
                      "items": [
                        {
                          "sku": "thursday_reward_item_four",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 5,
                      "items": [
                        {
                          "sku": "friday_reward_item_five",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "type": "rolling_unskippable"
                }
              }
            }
          }
        }
      },
      "create-offer-chain": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/create-offer-chain-model"
            },
            "examples": {
              "default": {
                "summary": "Regular offer chain example",
                "value": {
                  "name": {
                    "en": "New offer chain",
                    "ru": "Новая цепочка предложений",
                    "de": "Neue Angebotskette",
                    "fr": "Nouvelle chaîne d'offres",
                    "it": "Nuova catena di offerte"
                  },
                  "description": {
                    "en": "A short description of a regular offer chain",
                    "ru": "Краткое описание обычной цепочки предложений",
                    "de": "Eine kurze Beschreibung einer regulären Angebotskette",
                    "fr": "Une brève description d'une chaîne d'offres régulière",
                    "it": "Una breve descrizione di una catena di offerte regolare"
                  },
                  "order": 4,
                  "date_start": "2023-04-15T18:16:00+05:00",
                  "date_end": null,
                  "recurrent_schedule": null,
                  "is_enabled": true,
                  "steps": [
                    {
                      "step_number": 1,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_step_1_paid_bundle_sku",
                          "quantity": 2
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "is_free": true,
                      "items": [
                        {
                          "sku": "chain_step_2_free_virtual_good_sku",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 3,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_step_3_paid_virtual_currency_package_sku",
                          "quantity": 5
                        }
                      ]
                    },
                    {
                      "step_number": 4,
                      "is_free": true,
                      "items": [
                        {
                          "sku": "chain_step_4_free_bundle_sku",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "is_always_visible": true
                }
              },
              "recurrent": {
                "summary": "Recurrent offer chain example",
                "value": {
                  "name": {
                    "en": "New recurrent offer chain",
                    "ru": "Новая рекуррентная цепочка предложений",
                    "de": "Neue wiederkehrende Angebotskette",
                    "fr": "Nouvelle chaîne d'offres récurrente",
                    "it": "Nuova catena di offerte ricorrente"
                  },
                  "description": {
                    "en": "A recurring offer chain that resets weekly on Wednesdays at 07:00 AM GMT+3",
                    "ru": "Рекуррентная цепочка предложений, которая сбрасывается еженедельно по средам в 07:00 по GMT+3",
                    "de": "Eine wiederkehrende Angebotskette, die wöchentlich mittwochs um 07:00 Uhr GMT+3 zurückgesetzt wird",
                    "fr": "Une chaîne d'offres récurrente qui se réinitialise chaque semaine le mercredi à 07h00 GMT+3",
                    "it": "Una catena di offerte ricorrente che si resetta settimanalmente il mercoledì alle 07:00 GMT+3"
                  },
                  "order": 1,
                  "date_start": "2023-04-15T18:16:00+05:00",
                  "date_end": "2025-04-25T18:16:00+05:00",
                  "is_enabled": false,
                  "recurrent_schedule": {
                    "interval_type": "weekly",
                    "day_of_week": 3,
                    "time": "07:00:00+03:00"
                  },
                  "steps": [
                    {
                      "step_number": 1,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_step_1_paid_bundle_sku",
                          "quantity": 2
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "is_free": true,
                      "items": [
                        {
                          "sku": "chain_step_2_free_virtual_good_sku",
                          "quantity": 3
                        }
                      ]
                    }
                  ],
                  "is_always_visible": true
                }
              },
              "personalized-default": {
                "summary": "Personalized default offer chain example",
                "value": {
                  "name": {
                    "en": "New personalized default offer chain",
                    "ru": "Новая персонализированная цепочка предложений по умолчанию",
                    "de": "Neue personalisierte Standard-Angebotskette",
                    "fr": "Nouvelle chaîne d'offres personnalisée par défaut",
                    "it": "Nuova catena di offerte personalizzata predefinita"
                  },
                  "description": {
                    "en": "Default personalized offer chain for users that do not meet the conditions of other personalized chains",
                    "ru": "Персонализированная цепочка по умолчанию для пользователей, не подходящих под условия других персонализированных цепочек",
                    "de": "Standard-personalisierte Angebotskette für Benutzer, die die Bedingungen anderer personalisierter Ketten nicht erfüllen",
                    "fr": "Chaîne d'offres personnalisée par défaut pour les utilisateurs qui ne répondent pas aux conditions des autres chaînes personnalisées",
                    "it": "Catena di offerte personalizzata predefinita per gli utenti che non soddisfano le condizioni di altre catene personalizzate"
                  },
                  "order": 4,
                  "date_start": "2023-04-15T18:16:00+05:00",
                  "date_end": null,
                  "recurrent_schedule": null,
                  "is_enabled": true,
                  "steps": [
                    {
                      "step_number": 1,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_x_step_1_item_default",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_x_step_2_item_default",
                          "quantity": 2
                        }
                      ]
                    },
                    {
                      "step_number": 3,
                      "is_free": true,
                      "items": [
                        {
                          "sku": "chain_x_step_3_free_item_default",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "is_always_visible": false
                }
              },
              "personalized-with-conditions": {
                "summary": "Personalized offer chain with user attribute conditions example",
                "value": {
                  "name": {
                    "en": "New personalized offer chain",
                    "ru": "Новая персонализированная цепочка предложений",
                    "de": "Neue personalisierte Angebotskette",
                    "fr": "Nouvelle chaîne d'offres personnalisée",
                    "it": "Nuova catena di offerte personalizzata"
                  },
                  "description": {
                    "en": "Personalized offer chain with user attribute conditions - for level 10 and above elves who reached level 10 no later than 2026-01-01 00:00:00, inclusive",
                    "ru": "Персонализированная цепочка предложений с условиями по атрибутам пользователя - для эльфов уровня 10 и выше, достигших 10 уровня не позднее 2026-01-01 00:00:00 включительно",
                    "de": "Personalisierte Angebotskette mit Benutzerattributbedingungen - für Elfen der Stufe 10 und höher, die Stufe 10 spätestens am 2026-01-01 00:00:00 erreicht haben, einschließlich",
                    "fr": "Chaîne d'offres personnalisée avec des conditions d'attribut utilisateur - pour les elfes de niveau 10 et plus qui ont atteint le niveau 10 au plus tard le 2026-01-01 00:00:00, inclus",
                    "it": "Catena di offerte personalizzata con condizioni di attributo utente - per elfi di livello 10 e superiore che hanno raggiunto il livello 10 non più tardi del 2026-01-01 00:00:00, inclusi"
                  },
                  "order": 4,
                  "date_start": "2023-04-15T18:16:00+05:00",
                  "date_end": null,
                  "recurrent_schedule": null,
                  "is_enabled": true,
                  "steps": [
                    {
                      "step_number": 1,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_x_step_1_item_for_elves_level_10_and_above",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_x_step_2_item_for_elves_level_10_and_above",
                          "quantity": 2
                        }
                      ]
                    },
                    {
                      "step_number": 3,
                      "is_free": true,
                      "items": [
                        {
                          "sku": "chain_x_step_3_free_item_for_elves_level_10_and_above",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "is_always_visible": false,
                  "attribute_conditions": [
                    {
                      "attribute": "race",
                      "operator": "eq",
                      "value": "elf",
                      "type": "string",
                      "can_be_missing": false
                    },
                    {
                      "attribute": "level",
                      "operator": "ge",
                      "value": "10",
                      "type": "number",
                      "can_be_missing": false
                    },
                    {
                      "attribute": "10_level_up_date",
                      "operator": "le",
                      "value": "2026-01-01T00:00:00",
                      "type": "date",
                      "can_be_missing": false
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "update-offer-chain": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/modify-offer-chain-model"
            },
            "examples": {
              "default": {
                "summary": "Default example",
                "value": {
                  "name": {
                    "en": "Updated offer chain",
                    "ru": "Обновляемая цепочка предложений",
                    "de": "Aktualisierte Angebotskette",
                    "fr": "Chaîne d'offres mise à jour",
                    "it": "Catena di offerte aggiornata"
                  },
                  "description": {
                    "en": "A short description of a regular offer chain",
                    "ru": "Краткое описание обычной цепочки предложений",
                    "de": "Eine kurze Beschreibung einer regulären Angebotskette",
                    "fr": "Une brève description d'une chaîne d'offres régulière",
                    "it": "Una breve descrizione di una catena di offerte regolare"
                  },
                  "order": 4,
                  "date_start": "2023-04-15T18:16:00+05:00",
                  "date_end": null,
                  "recurrent_schedule": null,
                  "is_enabled": true,
                  "steps": [
                    {
                      "step_id": 10,
                      "step_number": 1,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_step_1_paid_bundle_sku",
                          "quantity": 2
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "is_free": true,
                      "items": [
                        {
                          "sku": "chain_step_2_free_virtual_good_sku",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 3,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_step_3_paid_virtual_currency_package_sku",
                          "quantity": 5
                        }
                      ]
                    },
                    {
                      "step_id": 9,
                      "step_number": 4,
                      "is_free": true,
                      "items": [
                        {
                          "sku": "chain_step_4_free_bundle_sku",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "is_always_visible": true
                }
              },
              "recurrent": {
                "summary": "Recurrent offer chain example",
                "value": {
                  "id": 1,
                  "name": {
                    "en": "Updated recurrent offer chain",
                    "ru": "Обновляемая рекуррентная цепочка предложений",
                    "de": "Aktualisierte wiederkehrende Angebotskette",
                    "fr": "Chaîne d'offres récurrente mise à jour",
                    "it": "Catena di offerte ricorrente aggiornata"
                  },
                  "description": {
                    "en": "Updated offer chain that becomes recurrent and resets monthly on the 2nd day at 03:00 AM GMT+8",
                    "ru": "Обновляемая цепочка предложений, которая становится рекуррентной и сбрасывается ежемесячно во 2-й день в 03:00 по GMT+8",
                    "de": "Aktualisierte Angebotskette, die wiederkehrend wird und monatlich am 2. Tag um 03:00 Uhr GMT+8 zurückgesetzt wird",
                    "fr": "Chaîne d'offres mise à jour qui devient récurrente et se réinitialise mensuellement le 2e jour à 03h00 GMT+8",
                    "it": "Catena di offerte aggiornata che diventa ricorrente e si resetta mensilmente il 2° giorno alle 03:00 GMT+8"
                  },
                  "order": 4,
                  "date_start": "2023-04-15T17:16:00+05:00",
                  "date_end": "2025-04-25T19:16:00+05:00",
                  "is_enabled": true,
                  "recurrent_schedule": {
                    "interval_type": "monthly",
                    "day_of_month": 2,
                    "time": "03:00:00+08:00"
                  },
                  "steps": [
                    {
                      "step_number": 1,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_bundle_sku",
                          "quantity": 6
                        }
                      ]
                    },
                    {
                      "step_number": 1,
                      "is_free": true,
                      "items": [
                        {
                          "sku": "chain_bundle_sku",
                          "quantity": 2
                        }
                      ]
                    }
                  ]
                }
              },
              "personalized-default": {
                "summary": "Personalized default offer chain example",
                "value": {
                  "name": {
                    "en": "New personalized default offer chain",
                    "ru": "Новая персонализированная цепочка предложений по умолчанию",
                    "de": "Neue personalisierte Standard-Angebotskette",
                    "fr": "Nouvelle chaîne d'offres personnalisée par défaut",
                    "it": "Nuova catena di offerte personalizzata predefinita"
                  },
                  "description": {
                    "en": "Default personalized offer chain for users that do not meet the conditions of other personalized chains",
                    "ru": "Персонализированная цепочка по умолчанию для пользователей, не подходящих под условия других персонализированных цепочек",
                    "de": "Standard-personalisierte Angebotskette für Benutzer, die die Bedingungen anderer personalisierter Ketten nicht erfüllen",
                    "fr": "Chaîne d'offres personnalisée par défaut pour les utilisateurs qui ne répondent pas aux conditions des autres chaînes personnalisées",
                    "it": "Catena di offerte personalizzata predefinita per gli utenti che non soddisfano le condizioni di altre catene personalizzate"
                  },
                  "order": 4,
                  "date_start": "2023-04-15T18:16:00+05:00",
                  "date_end": null,
                  "recurrent_schedule": null,
                  "is_enabled": true,
                  "steps": [
                    {
                      "step_id": 10,
                      "step_number": 1,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_x_step_1_item_default",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_number": 2,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_x_step_2_item_default",
                          "quantity": 2
                        }
                      ]
                    },
                    {
                      "step_id": 9,
                      "step_number": 3,
                      "is_free": true,
                      "items": [
                        {
                          "sku": "chain_x_step_3_free_item_default",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "is_always_visible": false
                }
              },
              "personalized-with-conditions": {
                "summary": "Personalized offer chain with user attribute conditions example",
                "value": {
                  "name": {
                    "en": "New personalized offer chain",
                    "ru": "Новая персонализированная цепочка предложений",
                    "de": "Neue personalisierte Angebotskette",
                    "fr": "Nouvelle chaîne d'offres personnalisée",
                    "it": "Nuova catena di offerte personalizzata"
                  },
                  "description": {
                    "en": "Personalized offer chain with user attribute conditions - for level 10 and above elves who reached level 10 no later than 2026-01-01 00:00:00, inclusive",
                    "ru": "Персонализированная цепочка предложений с условиями по атрибутам пользователя - для эльфов уровня 10 и выше, достигших 10 уровня не позднее 2026-01-01 00:00:00 включительно",
                    "de": "Personalisierte Angebotskette mit Benutzerattributbedingungen - für Elfen der Stufe 10 und höher, die Stufe 10 spätestens am 2026-01-01 00:00:00 erreicht haben, einschließlich",
                    "fr": "Chaîne d'offres personnalisée avec des conditions d'attribut utilisateur - pour les elfes de niveau 10 et plus qui ont atteint le niveau 10 au plus tard le 2026-01-01 00:00:00, inclus",
                    "it": "Catena di offerte personalizzata con condizioni di attributo utente - per elfi di livello 10 e superiore che hanno raggiunto il livello 10 non più tardi del 2026-01-01 00:00:00, inclusi"
                  },
                  "order": 4,
                  "date_start": "2023-04-15T18:16:00+05:00",
                  "date_end": null,
                  "recurrent_schedule": null,
                  "is_enabled": true,
                  "steps": [
                    {
                      "step_id": 10,
                      "step_number": 1,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_x_step_1_item_for_elves_level_10_and_above",
                          "quantity": 1
                        }
                      ]
                    },
                    {
                      "step_id": 8,
                      "step_number": 2,
                      "is_free": false,
                      "items": [
                        {
                          "sku": "chain_x_step_2_item_for_elves_level_10_and_above",
                          "quantity": 2
                        }
                      ]
                    },
                    {
                      "step_number": 3,
                      "is_free": true,
                      "items": [
                        {
                          "sku": "chain_x_step_3_free_item_for_elves_level_10_and_above",
                          "quantity": 1
                        }
                      ]
                    }
                  ],
                  "is_always_visible": false,
                  "attribute_conditions": [
                    {
                      "attribute": "race",
                      "operator": "eq",
                      "value": "elf",
                      "type": "string",
                      "can_be_missing": false
                    },
                    {
                      "attribute": "level",
                      "operator": "ge",
                      "value": "10",
                      "type": "number",
                      "can_be_missing": false
                    },
                    {
                      "attribute": "10_level_up_date",
                      "operator": "le",
                      "value": "2026-01-01T00:00:00",
                      "type": "date",
                      "can_be_missing": false
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "update-upsell": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Upsell-model"
                },
                {
                  "$ref": "#/components/schemas/Upsell-model-not-fixed-list"
                }
              ]
            },
            "examples": {
              "fixed_list": {
                "summary": "Example of upsell with fixed list of items",
                "value": {
                  "is_enabled": true,
                  "type": "fixed_list",
                  "items": [
                    "game_sku_1",
                    "game_sku_2",
                    "game_sku_3"
                  ]
                }
              },
              "special_type_promotions": {
                "summary": "Example of upsell with promotion items only",
                "value": {
                  "is_enabled": true,
                  "type": "only_promotions",
                  "items": []
                }
              },
              "special_type_most_sellable": {
                "summary": "Example of upsell with most sellable items for last 30 days",
                "value": {
                  "is_enabled": true,
                  "type": "most_sellable",
                  "items": []
                }
              }
            }
          }
        }
      },
      "create-upsell": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Upsell-model"
                },
                {
                  "$ref": "#/components/schemas/Upsell-model-not-fixed-list"
                }
              ]
            },
            "examples": {
              "fixed_list": {
                "summary": "Example of upsell with fixed list of items",
                "value": {
                  "is_enabled": true,
                  "type": "fixed_list",
                  "items": [
                    "game_sku_1",
                    "game_sku_2",
                    "game_sku_3"
                  ]
                }
              },
              "special_type_promotions": {
                "summary": "Example of upsell with promotion items only",
                "value": {
                  "is_enabled": true,
                  "type": "only_promotions",
                  "items": []
                }
              },
              "special_type_most_sellable": {
                "summary": "Example of upsell with most sellable items for last 30 days",
                "value": {
                  "is_enabled": true,
                  "type": "most_sellable",
                  "items": []
                }
              }
            }
          }
        }
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "PROMOTIONS",
      "tags": [
        "promotions-overview",
        "promotions-common",
        "promotions-coupons",
        "promotions-promo-codes",
        "promotions-unique-catalog-offers",
        "promotions-discounts",
        "promotions-bonuses"
      ]
    },
    {
      "name": "PERSONALIZATION",
      "tags": [
        "personalized-catalog"
      ]
    },
    {
      "name": "LIMITS",
      "tags": [
        "user-limits-admin"
      ]
    },
    {
      "name": "REWARD CHAINS & VALUE POINTS",
      "tags": [
        "reward-chain-value-points-admin",
        "reward-chain-client",
        "clan-reward-chain-client"
      ]
    },
    {
      "name": "DAILY CHAINS",
      "tags": [
        "daily-chain-admin",
        "daily-chain-client"
      ]
    },
    {
      "name": "OFFER CHAINS",
      "tags": [
        "offer-chain-admin",
        "offer-chain-client"
      ]
    },
    {
      "name": "UPSELL",
      "tags": [
        "upsell-admin",
        "upsell-client"
      ]
    }
  ]
}