{
  "openapi": "3.1.0",
  "info": {
    "description": "# 개요\n\n* **버전:** 2.0.0\n* **서버**: `https://store.xsolla.com/api`\n* **[이메일로 문의하기](mailto:integration@xsolla.com)**\n* **문의 URL:** https://xsolla.com/\n* **필수 TLS 버전:** 1.2\n\nLiveOps는 프로모션 및 개인 맞춤형 제안을 통해 지속적인 플레이어 참여를 유도하는 도구입니다.\n\n다음 기능을 관리하기 위해 API를 사용하십시오:\n\n* **Promotions**- 쿠폰, 프로모션 코드, 할인 및 보너스 캠페인을 생성하고 관리합니다.\n* **Personalization** - 특정 인증된 사용자에게만 아이템 카탈로그를 디스플레이하고 프로모션을 적용할 조건을 지정합니다.\n* **Promotion limits** - 사용자가 프로모션을 사용할 수 있는 횟수를 제한하고 이러한 제한의 예약된 재설정을 구성합니다.\n* **Reward chains & Value points** - 가치 포인트 축적에 연결된 보상 진행을 구성합니다.\n* **Daily chains** - 정기적인 일일 보상을 설정하여 정기적인 로그인을 유도합니다.\n* **Offer chains** - 단계별 가격 책정 및 무료 보상 옵션을 포함한 순차적 구매 제안을 구축합니다.\n* **Upsell** - 사용자가 추가 가치를 가진 아이템을 구매하도록 제안하는 판매 방법입니다.\n\n## API 호출\n\nAPI는 **following groups**으로 구분됩니다:\n\n* **<nt>Admin</nt>** - 캠페인 및 체인 구성을 생성, 업데이트, 활성화 및 삭제하는 호출입니다. 판매자 또는 프로젝트 자격 증명을 사용한 [기본 액세스 인증](https://developers.xsolla.com/ko/payment-ui-and-flow/payment-ui/how-to-get-payment-token/#payments_solution_get_user_auth_token_basic_auth)을 통해 인증됩니다.\n* **<nt>Client</nt>** - 인증된 최종 사용자를 대신하여 사용 가능한 프로모션을 검색하고, 활성 체인을 가져오고, 코드를 사용하고, 보상을 청구하는 호출입니다. 사용자 JWT를 통해 인증됩니다.\n\n# 인증\n\nAPI 호출은 사용자 또는 프로젝트를 대신하여 인증이 필요합니다. 사용된 인증 체계는 각 호출 설명의 **보안** 섹션에 명시되어 있습니다.\n\n## 사용자의 JWT를 사용한 인증\n\n사용자의 JWT 인증은 브라우저, 모바일 애플리케이션 또는 게임에서 요청이 전송될 때 사용됩니다. 기본적으로 `XsollaLoginUserJWT` 체계가 적용됩니다. 토큰 생성 방법에 대한 자세한 내용은 [엑솔라 로그인 API 문서](/ko/api/login/authentication-schemes#getting-user-token)를 참조하십시오.\n\n토큰은 다음 형식으로 `Authorization` 헤더에 전달됩니다: `Authorization: Bearer <user_JWT>`, 여기에서 `<user_JWT>`는 사용자 토큰입니다. 이 토큰은 사용자를 식별하고 개인화된 데이터에 대한 액세스를 제공합니다.\n\n또는 [결제 UI를 여는 토큰](/ko/api/pay-station/token/create-token)을 사용할 수 있습니다.\n\n## 기본 HTTP 인증\n\n기본 HTTP 인증은 서버 간 상호작용에 사용되며, API 호출이 사용자의 브라우저나 모바일 애플리케이션이 아닌 서버에서 직접 전송될 때 사용됩니다. 일반적으로 [API 키](/ko/api/getting-started/#api_keys_overview)를 사용한 HTTP 기본 인증이 사용됩니다.\n\n<div class=\"note\"><b>참고</b><br><br>API 키는 기밀이며 클라이언트 애플리케이션에 저장하거나 사용해서는 안 됩니다.</div>\n\n기본 서버 측 인증을 사용하면 모든 API 요청에 다음 헤더를 포함해야 합니다:\n\n- `basicAuth`의 경우 - `Authorization: Basic <your_authorization_basic_key>`, 여기에서 `your_authorization_basic_key`는 Base64로 인코딩된 `project_id:api_key` 쌍입니다.\n- `basicMerchantAuth`의 경우 - `Authorization: Basic <your_authorization_basic_key>`, 여기에서 `your_authorization_basic_key`는 Base64로 인코딩된 `merchant_id:api_key` 쌍입니다.\n\n[관리자 페이지](https://publisher.xsolla.com/)에서 매개 변수 값을 찾을 수 있습니다:\n\n- `merchant_id`는 다음 위치에 표시됩니다:\n  - **Company settings > Company**에서.\n  - 관리자 페이지의 모든 페이지에서 브라우저 주소 표시줄의 URL에. URL 형식은 다음과 같습니다: `https://publisher.xsolla.com/<merchant_id>`.\n- `project_id`는 다음 위치에 표시됩니다:\n  - 관리자 페이지에서 프로젝트 이름 옆.\n  - 관리자 페이지에서 프로젝트 작업 시 브라우저 주소 표시줄의 URL. URL 형식은 다음과 같습니다: `https://publisher.xsolla.com/<merchant_id>/projects/<project_id>`.\n- `api_key`는 생성 시에만 관리자 페이지에 표시되며 귀하의 측에서 안전하게 저장해야 합니다. API 키는 다음 섹션에서 생성할 수 있습니다:\n   - [Company settings > API keys](https://publisher.xsolla.com/0/settings/api_key)   - [Project settings > API key](https://publisher.xsolla.com/0/projects/0/edit/api_key)\n\n<div class=\"notice\"><b>알림</b><br><br>필수 API 호출에 <code>project_id</code> 경로 매개 변수가 포함되지 않은 경우, 모든 회사 프로젝트에 대해 유효한 API 키를 사용하여 인증하십시오.</div>\n\nAPI 키 작업에 대한 자세한 내용은 [API 참조 문서](/ko/api/getting-started/#api_keys_overview)를 참조하십시오.\n\n## 게스트 액세스 지원을 통한 인증\n\n이 `AuthForCart` 인증 체계는 장바구니 구매에 사용되며 두 가지 모드를 지원합니다.\n\n1. **Authentication with a user's JWT.** 토큰은 `Authorization` 헤더에 다음 형식으로 전달됩니다: `Authorization: Bearer <user_JWT>`, 여기에서 `<user_JWT>`는 사용자 토큰입니다. 이 토큰은 사용자를 식별하고 개인화된 데이터에 대한 액세스를 제공합니다. 또는 [결제 UI를 여는 토큰](/ko/api/pay-station/token/create-token)을 사용할 수 있습니다.\n\n2. **Simplified mode without Authorization header.** 이 모드는 미인증 사용자만 사용하며, [게임 키 판매](/ko/doc/buy-button/how-to/set-up-authentication/#guides_buy_button_selling_items_not_authenticated_users)에만 적용할 수 있습니다. 토큰 대신 요청에 다음 헤더를 포함해야 합니다.\n   - 요청 ID와 `x-unauthorized-id`\n   - Base64로 인코딩된 사용자의 이메일 주소와 `x-user`\n\n## 유용한 링크\n\n- [상호작용 모델별 API 호출](https://developers.xsolla.com/ko/api/catalog/)\n- [엔드포인트 유형](https://developers.xsolla.com/ko/api/catalog/)\n- [오류 처리](https://developers.xsolla.com/ko/api/catalog/)\n- [API 키](https://developers.xsolla.com/ko/api/catalog/)\n\n# 핵심 엔티티 구조\n\n모든 유형의 아이템(가상 아이템, 번들, 인게임 재화, 키)은 유사한 데이터 구조를 사용합니다. 기본 구조를 이해하면 API 작업이 간소화되고 문서를 더 쉽게 탐색할 수 있습니다.\n\n<div class=\"note\"><b>참고</b><br><br>일부 호출에는 추가 입력란이 포함될 수 있지만 기본 구조는 변경되지 않습니다.</div>\n\n**식별**\n\n- `merchant_id`- [관리자 페이지](https://publisher.xsolla.com/)의 회사 ID\n- `project_id` - 관리자 페이지의 프로젝트 ID\n- `sku` - 프로젝트 내의 고유한 아이템 SKU\n\n**Store display**\n\n- `name` - 아이템 이름\n- `description` - 아이템 설명\n- `image_url` - 이미지 URL\n- `is_enabled` - 아이템 가용성\n- `is_show_in_store` - 카탈로그에 아이템이 표시되는지 여부\n\n카탈로그에서 아이템 가용성 관리에 대한 자세한 정보는 [문서](/ko/items-catalog/catalog-features/items-availability/)를 참조하세요.\n\n**Organization**\n\n- `type` - 아이템 유형, 예를 들어 가상 아이템(`virtual_item`) 또는 번들(`bundle`)\n- `groups` - 아이템이 속한 그룹\n- `order` - 카탈로그 내 디스플레이 순서\n\n**판매 조건**\n\n- `prices` - 실제 화폐 또는 인게임 재화로 된 가격\n- `limits` - 구매 한도\n- `periods` - 가용 기간\n- `regions` - 지역 제한\n\n**핵심 엔티티 구조 예시:**\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# 기본 구매 흐름\n\n엑솔라 API를 사용하면 아이템 카탈로그 검색, 장바구니 관리, 주문 생성 및 상태 추적을 포함한 인게임 스토어 로직을 구현할 수 있습니다. 통합 시나리오에 따라 API 호출은 **Admin**와 **Catalog** 하위 섹션으로 구분되며, 서로 다른 [인증 방식](/ko/api/catalog/section/authentication)을 사용합니다.\n\n다음 예시는 아이템 생성부터 구매까지 스토어 설정 및 운영을 위한 기본 흐름을 보여줍니다.\n\n## 아이템 및 그룹 생성(관리자)\n\n가상 아이템, 번들, 인게임 재화와 같은 스토어의 아이템 카탈로그를 생성합니다.\n\n예시 API 호출:\n- [가상 아이템 생성](/ko/api/catalog/virtual-items-currency-admin/admin-create-virtual-item)\n- [번들 생성](/ko/api/catalog/bundles-admin/admin-create-bundle)\n- [인게임 재화 생성](/ko/api/catalog/virtual-items-currency-admin/admin-create-virtual-currency)\n\n## 프로모션, 체인 및 한도 설정(관리자)\n\n할인, 보너스, 일일 보상 또는 혜택 체인과 같은 사용자 획득 및 수익화 도구를 구성합니다.\n\n예시 API 호출:\n- [보너스 프로모션 생성](/ko/api/liveops/promotions-bonuses/create-bonus-promotion)\n- [일일 보상 생성](/ko/api/liveops/daily-chain-admin/admin-create-daily-chain)\n- [고유 카탈로그 혜택 프로모션 생성](/ko/api/liveops/promotions-unique-catalog-offers/admin-create-unique-catalog-offer)\n\n## 아이템 정보 가져오기(클라이언트)\n\n애플리케이션에서 아이템 디스플레이를 구성합니다.\n\n<div class=\"notice\">\n  <b>알림</b><br><br>\n    사용자 카탈로그를 구축하는 데 관리자 하위 섹션의 API 호출을 사용하지 마십시오. 이러한 API 호출에는 <a href=\"https://developers.xsolla.com/ko/api/getting-started/#api_rate_limits\" target=\"_blank\">속도 제한</a>이 있으며 사용자 트래픽을 위한 것이 아닙니다.\n</div>\n\n<br>\n\nAPI 호출 예시:\n- [가상 아이템 목록 가져오기](/ko/api/catalog/virtual-items-currency-catalog/get-virtual-items)\n- [아이템 그룹 목록 가져오기](/ko/api/catalog/virtual-items-currency-catalog/get-item-groups)\n- [번들 목록 가져오기](/ko/api/catalog/bundles-catalog/get-bundle-list)\n- [판매 가능한 아이템 목록 가져오기](/ko/api/catalog/common-catalog/get-sellable-items)\n\n<div class=\"note\">\n  <b>참고</b><br><br>\n    기본적으로 카탈로그 API 호출은 요청 시점에 스토어에서 현재 사용 가능한 아이템을 반환합니다. 아직 사용 가능하지 않거나 더 이상 사용 가능하지 않은 아이템을 검색하려면 카탈로그 요청에 <code>\"show_inactive_time_limited_items\": 1</code> 매개 변수를 포함하십시오.\n</div>\n\n## 아이템 판매\n\n다음 방법을 사용하여 아이템을 판매할 수 있습니다:\n- 빠른 구매 - 하나의 SKU를 여러 번 판매합니다.\n- 장바구니 구매 - 사용자가 장바구니에 아이템을 추가하고, 제거하고, 수량을 업데이트합니다.\n\n아이템이 실제 돈 대신 인게임 재화로 구매된 경우, [인게임 재화로 구매한 특정 아이템으로 주문 생성](/ko/api/catalog/virtual-payment/create-order-with-item-for-virtual-currency) API 호출을 사용하십시오. 결제 UI는 필요하지 않으며, API 호출이 실행될 때 청구가 처리됩니다.\n\n무료 아이템 구매의 경우, [특정 무료 아이템으로 주문 생성](/ko/api/catalog/free-item/create-free-order-with-item) API 호출 또는 [무료 장바구니로 주문 생성](/ko/api/catalog/free-item/create-free-order) API 호출을 사용하십시오. 결제 UI는 필요하지 않으며, 주문은 즉시 <code>done</code> 상태로 설정됩니다.\n\n### 빠른 구매\n\n클라이언트 측 API 호출을 사용하여 [특정 아이템으로 주문 생성](/ko/api/catalog/payment-client-side/create-order-with-item)을 수행합니다. 호출은 결제 UI를 열기 위한 토큰을 반환합니다.\n\n<div class=\"note\">\n  <b>참고</b><br><br>\n    할인 정보는 결제 UI에서만 사용자에게 제공됩니다. 프로모션 코드는 지원되지 않습니다.\n</div>\n\n### 장바구니 구매\n\n장바구니 설정 및 구매는 클라이언트 또는 서버 측에서 수행할 수 있습니다.\n\n**클라이언트에서 장바구니 설정 및 구매**\n\n아이템 추가 및 제거 로직을 직접 구현하십시오. 장바구니 설정을 위한 API 호출 전에는 구매에 적용될 프로모션에 대한 정보를 알 수 없습니다. 이는 총 비용과 추가 보너스 아이템의 세부 사항을 알 수 없음을 의미합니다.\n\n다음 장바구니 로직을 구현하십시오:\n1. 플레이어가 장바구니를 채운 후, [아이템으로 장바구니 채우기](/ko/api/shop-builder/operation/cart-fill/) API 호출을 사용하십시오. 호출은 선택한 아이템에 대한 현재 정보를 반환합니다 (할인 전후 가격, 보너스 아이템).\n2. 사용자 작업에 따라 장바구니 내용을 업데이트하십시오:\n   - 아이템을 추가하거나 아이템 수량을 변경하려면 [장바구니 ID로 장바구니 아이템 업데이트](/ko/api/shop-builder/operation/put-item-by-cart-id/) API 호출을 사용하십시오.\n   - 아이템을 제거하려면 [장바구니 ID로 장바구니 아이템 삭제](/ko/api/shop-builder/operation/delete-item-by-cart-id/) API 호출을 사용하십시오.\n\n<div class=\"note\">\n  <b>참고</b><br><br>\n    현재 장바구니 상태를 얻으려면 현재 사용자의 장바구니 가져오기 API 호출을 사용하십시오.\n</div>\n\n3. [현재 장바구니의 모든 아이템으로 주문 생성](/ko/api/shop-builder/operation/create-order/) API 호출을 사용하십시오. 호출은 주문 ID와 결제 토큰을 반환합니다. 새로 생성된 주문은 기본적으로 <code>new</code> 상태로 설정됩니다.\n\n**서버에서 장바구니 설정 및 구매**\n\n이 설정 옵션은 장바구니 설정에 더 많은 시간이 걸릴 수 있습니다. 장바구니의 각 변경 사항은 API 호출을 동반해야 하기 때문입니다.\n\n다음 장바구니 로직을 구현하십시오:\n1. 플레이어가 장바구니를 채운 후, [아이템으로 장바구니 채우기](/ko/api/catalog/cart-server-side) API 호출을 사용하십시오. 호출은 선택한 아이템에 대한 현재 정보를 반환합니다(할인 전후 가격, 보너스 아이템).\n2. [현재 장바구니의 모든 아이템으로 주문 생성](/ko/api/shop-builder/operation/create-order/) API 호출을 사용하십시오. 호출은 주문 ID와 결제 토큰을 반환합니다. 새로 생성된 주문은 기본적으로 <code>new</code> 상태로 설정됩니다.\n\n## 결제 UI 열기\n\n반환된 토큰을 사용하여 새 창에서 결제 UI를 엽니다. 결제 UI를 여는 다른 방법은 [문서](/ko/payment-ui-and-flow/payment-ui/how-to-open-payment-ui/#open_payment_ui)에 설명되어 있습니다.\n\n| 작업                          | 엔드포인트                                                                  |\n|:--------------------------------|:--------------------------------------------------------------------------|\n| 프로덕션 환경에서 열기. | <code>https://secure.xsolla.com/paystation4/?token={token}</code>         |\n| 샌드박스 모드에서 열기.           | <code>https://sandbox-secure.xsolla.com/paystation4/?token={token}</code> |\n\n<div class=\"note\">\n  <b>참고</b><br><br>\n    개발 및 테스트 중에는 샌드박스 모드를 사용하세요. 테스트 구매는 실제 계정에 청구되지 않습니다. <a href=\"https://developers.xsolla.com/ko/dev-resources/testing/test-cards/\">테스트 은행 카드</a>를 사용할 수 있습니다.\n\n    첫 번째 실제 결제가 이루어진 후에는 엄격한 샌드박스 결제 정책이 적용됩니다. 샌드박스 모드에서의 결제는 [관리자 페이지 > 회사 설정 > 사용자](https://publisher.xsolla.com/0/settings/users)에 지정된 사용자에게만 가능합니다.\n\n    실제 통화로 인게임 재화와 아이템을 구매하려면 엑솔라와의 라이선스 계약을 체결해야 합니다. 이를 위해 [관리자 페이지](https://publisher.xsolla.com/)에서 **Agreements & Taxes > Agreements**으로 이동하여 계약 양식을 작성하고 확인을 기다리세요. 계약 검토에는 최대 3영업일이 소요될 수 있습니다.\n</div>\n\n샌드박스 모드를 활성화하거나 비활성화하려면 빠른 구매 및 장바구니 구매 요청에서 `sandbox` 매개 변수의 값을 변경하세요. 기본적으로 샌드박스 모드는 꺼져 있습니다.\n\n가능한 주문 상태:\n- `new` - 주문 생성됨\n- `paid` - 결제 완료됨\n- `done` - 아이템 전달됨\n- `canceled` - 주문 취소됨\n- `expired` -주문 만료됨\n\n다음 방법 중 하나를 사용하여 주문 상태를 추적하세요:\n- [서버에 구성된 웹훅](/ko/virtual-goods/own-ui/server-side-token-generation/set-up-order-tracking/#payments_integration_order_tracking)\n- [짧은 폴링](/ko/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](/ko/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## 유용한 링크\n\n- 인증\n- [상호작용 모델에 따른 API 호출](/ko/api/catalog/section/authentication)\n- [결제 테스트](/ko/dev-resources/testing/general-info/#general_overview)\n- [주문 상태 추적 설정](/ko/virtual-goods/own-ui/client-side-token-generation/set-up-order-tracking/?link=200-api#payments_integration_order_tracking)\n- [웹훅](/ko/webhooks/overview)\n- [속도 제한](/ko/api/login/rate-limits)\n- [오류 처리](/ko/api/getting-started/#api_errors_handling)\n- [API 키](/ko/api/getting-started/#api_keys_overview)\n\n# 페이지 매김\n\n대량의 레코드를 반환하는 API 호출(예: 카탈로그 작성 시)은 데이터를 페이지 단위로 반환합니다. 페이지 매김은 단일 API 응답에서 반환되는 항목 수를 제한하고 이후 페이지를 순차적으로 검색할 수 있는 메커니즘입니다.\n\n반환되는 아이템 수를 제어하기 위해 다음 매개 변수를 사용하세요:\n\n- `limit` - 페이지당 항목 수\n- `offset` - 페이지의 첫 번째 항목의 인덱스(번호는 0부터 시작)\n- `has_more` - 다른 페이지가 있는지 여부를 나타냄\n- `total_items_count` - 총 항목 수\n\n요청 예시:\n\n```\nGET /items?limit=20&offset=40\n```\n\n응답 예시:\n\n```json\n{\n  \"items\": [...],\n  \"has_more\": true,\n  \"total_items_count\": 135\n}\n```\n\n응답이 `has_more = false`를 반환할 때까지 후속 요청을 보내는 것이 좋습니다.\n\n# 날짜 및 시간 형식\n\n날짜 및 시간 값은 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 형식으로 전달됩니다.\n\n다음이 지원됩니다:\n\n- UTC 오프셋\n- 항목 표시 시간 제한이 없는 경우 `null` 값\n- 일부 입력란에서 사용되는 [Unix 타임스탬프](https://www.unixtimestamp.com/)(초 단위)\n\n형식: `YYYY-MM-DDTHH:MM:SS±HH:MM`\n\n예시: `2026-03-16T10:00:00+03:00`\n\n# 현지화\n\n엑솔라는 항목 이름 및 설명과 같은 사용자 대상 입력란의 현지화를 지원합니다. 현지화된 값은 언어 코드를 키로 사용하는 개체로 전달됩니다. 지원되는 언어의 전체 목록은 [문서](/ko/doc/shop-builder/references/supported-languages/)에서 확인할 수 있습니다.\n\n**Supported fields**\n\n다음 매개 변수에 대해 현지화를 지정할 수 있습니다:\n\n- `name`\n- `description`\n- `long_description`\n\n**Locale format**\n\n로케일 키는 다음 형식 중 하나로 지정할 수 있습니다:\n\n- 두 글자 언어 코드: `en`, `ru`\n- 다섯 글자 언어 코드: `en-US`, `ru-RU`, `de-DE`\n\n**Examples**\n\n두 글자 언어 코드 예시:\n\n```json\n{\n  \"name\": {\n    \"en\": \"Starter Pack\",\n    \"ru\": \"Стартовый набор\"\n  }\n}\n```\n\n다섯 글자 언어 코드 예시:\n\n```json\n{\n  \"description\": {\n    \"en-US\": \"Premium bundle\",\n    \"de-DE\": \"Premium-Paket\"\n  }\n}\n```\n\n# 오류 응답 형식\n\n오류가 발생하면, API는 HTTP 상태와 JSON 응답 본문을 반환합니다. 스토어 관련 오류의 전체 목록은 [문서](/ko/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` - 오류 코드.\n- `errorMessage` - 짧은 오류 설명.\n- `statusCode` - HTTP 응답 상태.\n- `transactionId` - 요청 ID. 일부 경우에만 반환됩니다.\n- `errorMessageExtended` - 요청 매개 변수와 같은 추가 오류 세부 정보. 일부 경우에만 반환됩니다.\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` - 잘못된 요청\n- `401` - 인증 오류\n- `403` - 권한 부족\n- `404` - 리소스를 찾을 수 없음\n- `422` - 유효성 검사 오류\n- `429` - 속도 제한 초과\n\n**Recommendations**\n\n- HTTP 상태와 응답 본문을 함께 처리하세요.\n- `errorCode`를 사용하여 애플리케이션 로직과 관련된 오류를 처리하세요.\n- `transactionId`를 사용하여 오류 분석 시 요청을 더 빠르게 식별하세요.",
    "version": "2.0.0",
    "title": "LiveOps API"
  },
  "servers": [
    {
      "url": "https://store.xsolla.com/api"
    }
  ],
  "tags": [
    {
      "name": "promotion-limits-overview",
      "x-displayName": "개요",
      "description": "프로모션 사용 한도를 통해 특정 사용자가 프로모션을 사용할 수 있는 횟수를 제한할 수 있습니다. 또한 예약된 한도 재설정을 구성할 수 있습니다.\n\n한도는 엑솔라 측에 저장되며, [관리자 페이지](https://publisher.xsolla.com/0/projects/0/storefront/promotions) 또는 다음 API 호출의 `limits` 개체를 통해 프로모션 설정에서 구성됩니다:\n* [아이템 할인 프로모션 생성](/ko/api/liveops/promotions-discounts/create-item-promotion/) 또는 [할인 프로모션 업데이트](/ko/api/liveops/promotions-discounts/update-item-promotion)\n* [보너스 프로모션 생성](/ko/api/liveops/promotions-bonuses/create-bonus-promotion/) 또는 [보너스 프로모션 업데이트](/ko/api/liveops/promotions-bonuses/update-bonus-promotion)\n\n한도 정보는 다음 API 호출에서 아이템 카탈로그를 가져올 때 `items.promotions.limits` 개체에 반환됩니다:\n* [가상 아이템 목록 가져오기](/ko/api/catalog/virtual-items-currency-catalog/get-virtual-items/)\n* [인게임 재화 목록 가져오기](/ko/api/catalog/virtual-items-currency-catalog/get-virtual-currency/)\n* [인게임 재화 패키지 목록 가져오기](/ko/api/catalog/virtual-items-currency-catalog/get-virtual-currency-package/)\n* [번들 목록 가져오기](/ko/api/catalog/bundles-catalog/get-bundle-list/)\n* [게임 목록 가져오기](/ko/api/catalog/game-keys-catalog/get-games-list/)\n\n**한도** 그룹의 **관리** 하위 섹션에 있는 API 호출은 현재 한도의 상태를 검색하고 특정 사용자에 대해 업데이트할 수 있도록 합니다. 예를 들어, 퀘스트 완료 후 카운터를 재설정하거나 남은 수량을 수동으로 조정할 수 있습니다.\n\n<div class=\"note\">\n  <b>참고</b><br><br>\n  카탈로그에서 한도를 구성하는 자세한 정보는 <a href=\"/ko/liveops/promotion-tools/liveops-number-limits/\">프로모션 사용 한도</a> 섹션을 참조하세요.\n</div>\n\n[limits.per_user](/ko/api/liveops/promotions-discounts/create-item-promotion#promotions-discounts/create-item-promotion/t=request&path=limits) - 단일 사용자가 프로모션을 사용할 수 있는 횟수에 대한 한도를 구성할 수 있습니다.\n\n인증되지 않은 사용자에게는 항상 최대 프로모션 사용 횟수가 표시됩니다.\n\n활성 한도가 적용된 사용자의 남은 프로모션 사용 횟수를 표시하려면 아이템 카탈로그를 요청할 때 사용자 인증 데이터를 전달하세요.\n\n일일, 주간 또는 월간으로 예약된 재설정 기간을 구성하려면 프로모션을 [생성](/ko/api/liveops/promotions-discounts/create-item-promotion#promotions-discounts/create-item-promotion/t=request&path=limits/recurrent_schedule)하거나 프로모션을 [업데이트](/ko/api/liveops/promotions-discounts/update-item-promotion#promotions-discounts/update-item-promotion/t=request&path=limits/recurrent_schedule)할 때 `limits.recurrent_schedule` 개체를 전달하세요.\n\n**Limit configuration and enforcement scenario**\n\n1. [아이템 할인 프로모션 생성](/ko/api/liveops/promotions-discounts/create-item-promotion/) 또는 [보너스 프로모션 생성](/ko/api/liveops/promotions-bonuses/create-bonus-promotion/) API 호출을 사용하여 프로모션을 생성하고 `limits` 개체를 전달합니다.\n2. 인증되지 않은 사용자에 대해 카탈로그를 요청합니다 - 응답은 `items.promotions.limits` 개체에 최대 프로모션 사용 횟수를 반환합니다.\n3. 사용자가 로그인합니다.\n4. 사용자의 인증 토큰으로 카탈로그를 요청합니다 - 응답은 활성 한도가 적용된 남은 사용 횟수를 반환합니다.\n5. 사용자가 프로모션 아이템을 선택하고 구매합니다.\n6. 결제가 성공적으로 완료되면 엑솔라는 `items.promotions.limits.per_user` 값을 업데이트합니다. 값이 `0`에 도달하면, 해당 아이템은 카탈로그 API 호출에서 할인이나 보너스 없이 반환됩니다.\n7. **Management** 하위 섹션의 API 호출을 사용하여 한도를 업데이트할 수 있습니다:\n   * [지정된 사용자의 모든 프로모션 한도 새로고침](/ko/api/liveops/user-limits-admin/reset-all-user-promotions-limit/) 또는 [특정 프로모션의 한도 새로고침](/ko/api/liveops/user-limits-admin/reset-user-promotion-limit/)\n   * [특정 한도 값 설정](/ko/api/liveops/user-limits-admin/set-user-promotion-limit/)\n   * [사용 가능 횟수 증가](/ko/api/liveops/user-limits-admin/add-user-promotion-limit/) 또는 [사용 가능 횟수 감소](/ko/api/liveops/user-limits-admin/remove-user-promotion-limit/)\n8. 사용자의 인증 토큰으로 다음 카탈로그 요청을 할 때 `items.promotions.limits`에서 업데이트된 한도 값을 가져와 사용자에게 표시합니다.\n\n![프로모션 제한](https://cdn.xsolla.net/developers/current/images/api_docs/promotion-limit.svg)"
    },
    {
      "name": "promotions-overview",
      "x-displayName": "개요",
      "description": "프로모션은 신규 사용자를 유치하고 매출을 높이기 위해 고안된 마케팅 도구입니다. 엑솔라 API를 사용하여 다음과 같은 프로모션을 설정할 수 있습니다.\n\n* 할인 - 선택한 아이템의 가격을 인하.\n* 보너스 - 구매 시 사용자에게 제공되는 아이템.\n* 쿠폰 - 사용 시 하나 이상의 보너스 아이템을 받을 수 있는 코드.\n* 프로모션 코드 - 사용자가 보너스 아이템을 받거나, 특정 상품에 대해 할인을 받거나, 장바구니 전체에 대해 할인을 받을 수 있게 해주는 코드. 사용자가 입력한 후에 사용 가능한 쿠폰과 달리, 프로모션 코드는 구매를 진행할 때(결제 시)에 사용됩니다.\n* 특별 혜택 - 고유한 혜택 코드를 입력한 사용자에게만 카탈로그에 표시되는 숨겨진 아이템. 코드를 입력하지 않으면 해당 아이템은 표시되지 않습니다.\n\n할인 프로모션을 구성하는 예시 절차:\n1. [가상 아이템 및 인게임 재화](/ko/api/catalog/virtual-items-currency-admin/admin-get-virtual-items-list/), [번들](/ko/api/catalog/bundles-admin/admin-create-bundle) 또는 [게임 키](/ko/api/catalog/game-keys-admin) 그룹의 **관리자** 하위 섹션의 호출을 사용하여 아이템을 생성합니다.\n2. [아이템 할인 프로모션 생성](/ko/api/liveops/promotions-discounts/create-item-promotion/) 호출을 사용하여 프로모션을 생성합니다. `items` 배열에서 필요한 아이템 SKU를 전달합니다.\n3. 프로모션 유효 기간을 설정합니다. 이를 위해 [아이템 할인 프로모션 생성](/ko/api/liveops/promotions-discounts/create-item-promotion/) 또는 [아이템 프로모션 업데이트](/ko/api/liveops/promotions-discounts/update-item-promotion/) 메소드를 호출하고, `promotion_periods` 필드를 객체 배열로 전달합니다. 여기서  `date_from`은 유효 기간의 시작일을, `date_until`은 종료일을 정의합니다.\n4. [아이템 프로모션 업데이트](/ko/api/liveops/promotions-discounts/update-item-promotion/) 호출을 사용하여 프로모션을 활성화합니다. `\"is_enabled\": true` 매개 변수를 전달합니다.\n5. 할인 가격을 포함하여 아이템 가격 정보를 가져오려면, [일반 > 카탈로그](/ko/api/catalog/tag/common-catalog/), [가상 아이템 및 인게임 재화 > 카탈로그](/ko/api/catalog/virtual-items-currency-catalog/get-virtual-items/), [번들 > 카탈로그](/ko/api/catalog/bundles-catalog/get-bundle-list/) 하위 섹션에서 아이템 카탈로그를 가져오는 클라이언트 API 메소드를 호출합니다.\n\n![프로모션 구성 예시](https://cdn.xsolla.net/developers/current/images/api_docs/promo-overview.svg)\n\n프로모션 구성에 대한 자세한 내용은 참조 문서를 참조하십시오.\n* [할인](https://developers.xsolla.com/ko/liveops/promotion-tools/discounts/)\n* [보너스](https://developers.xsolla.com/ko/liveops/promotion-tools/bonuses/)\n* [쿠폰](https://developers.xsolla.com/ko/liveops/promotion-tools/coupons/)\n* [프로모션 코드](https://developers.xsolla.com/ko/liveops/promotion-tools/promo-codes/)\n* [고유 카탈로그 혜택](https://developers.xsolla.com/ko/liveops/promotion-tools/unique-offer/)"
    },
    {
      "name": "promotions-common",
      "x-displayName": "일반 API 호출",
      "description": "이 하위 섹션에서 API 메소드를 호출하여 다양한 프로모션 유형을 관리할 수 있습니다."
    },
    {
      "name": "promotions-coupons",
      "x-displayName": "쿠폰",
      "description": "쿠폰 프로모션을 구성하고 관리하려면 이 하위 섹션의 API 메소드를 호출합니다.\n\n<div class=\"note\">\n <p><b>참고</b></p>\n  <p>쿠폰에 대한 자세한 정보는 <a href=\"https://developers.xsolla.com/ko/liveops/promotion-tools/coupons/\">참조 문서</a>를 참조하십시오.</p>\n</div>"
    },
    {
      "name": "promotions-promo-codes",
      "x-displayName": "프로모션 코드",
      "description": "이 하위 섹션의 API 메소드를 호출하여 프로모션 코드 프로모션을 구성하고 관리합니다.\n\n<div class=\"note\">\n <p><b>참고</b></p>\n  <p>프로모션 코드에 대한 자세한 정보는 <a href=\"https://developers.xsolla.com/ko/liveops/promotion-tools/promo-codes/\">참조 문서</a>를 참조하십시오.</p>\n</div>"
    },
    {
      "name": "promotions-unique-catalog-offers",
      "x-displayName": "고유 카탈로그 혜택",
      "description": "고유 카탈로그 혜택을 구성하고 관리하려면 이 하위 섹션의 API 메소드를 호출합니다.\n\n<div class=\"note\">\n <p><b>참고</b></p>\n  <p>고유 카탈로그 혜택에 대한 자세한 정보는 <a href=\"https://developers.xsolla.com/ko/liveops/promotion-tools/unique-offer/\">참조 문서</a>를 참조하십시오.</p>\n</div>"
    },
    {
      "name": "promotions-discounts",
      "x-displayName": "할인",
      "description": "할인 프로모션을 구성하고 관리하려면 이 하위 섹션의 API 메소드를 호출합니다.\n\n<div class=\"note\">\n <p><b>참고</b></p>\n  <p>할인에 대한 자세한 정보는 <a href=\"https://developers.xsolla.com/ko/liveops/promotion-tools/discounts/\">참조 문서</a>를 참조하십시오.</p>\n</div>"
    },
    {
      "name": "promotions-bonuses",
      "x-displayName": "보너스",
      "description": "보너스 프로모션을 구성하고 관리하려면 이 하위 섹션의 API 메소드를 호출합니다.\n\n<div class=\"note\">\n <p><b>참고</b></p>\n  <p>보너스에 대한 자세한 정보는 <a href=\"https://developers.xsolla.com/ko/liveops/promotion-tools/bonuses/\">참조 문서</a>를 참조하십시오.</p>\n</div>"
    },
    {
      "name": "personalized-catalog",
      "x-displayName": "개인 맞춤형 카탈로그",
      "description": "사용자 맞춤 설정을 통해 특정 인증된 사용자에게만 아이템 카탈로그를 표시하고 프로모션을 적용할 조건을 지정할 수 있습니다. 조건은 사용자 특성에 기반하여 정의되며, 특정 사용자에게 가장 관련성 있는 아이템과 프로모션을 제공할 수 있습니다.\n\n다음과 같은 사용자 맞춤 설정 유형이 가능합니다:\n\n* [엑솔라 측 사용자 맞춤 설정](/ko/liveops/promotion-tools/personalization/#guides_personalization_on_xsolla_side). 사용자 맞춤 설정 규칙과 로직은 엑솔라 측에서 구성되고 저장됩니다. 사용자 특성을 전달하면 엑솔라가 이를 사용하여 개인 설정된 카탈로그를 생성합니다.\n* [파트너 측 사용자 맞춤 설정](/ko/liveops/promotion-tools/personalization/#guides_personalization_on_partner_side). 사용자 맞춤 설정 규칙과 로직을 파트너 측에서 구성하고 특정 사용자에 대한 최종 카탈로그 페이로드를 엑솔라에 전송합니다.\n\n<div class=\"note\">\n  <b>참고</b><br><br>\n  하나의 사용자 맞춤 설정 유형만 사용할 수 있습니다. 변경하려면\n  <a href=\"/ko/liveops/promotion-tools/personalization/#guides_personalization_change\">지침</a>을 따르십시오.\n</div>\n\n엑솔라 API를 사용하여 엑솔라 측에서 사용자 맞춤 설정을 구성하는 방법:\n\n1. [가상 아이템 및 인게임 재화](/ko/api/catalog/virtual-items-currency-admin/admin-get-virtual-items-list/), [번들](/ko/api/catalog/bundles-admin/admin-create-bundle) 또는 [게임 키](/ko/api/catalog/game-keys-admin) 그룹의 **Admin** 하위 섹션의 API 호출을 사용하여 아이템을 생성합니다.\n2. [엑솔라 로그인 API를 사용하여 사용자 특성을 설정](/ko/liveops/promotion-tools/personalization/#web_shop_guide_personalization_setting_attributes)하고, 게임 내에서 변경이 발생할 때마다 엑솔라에 데이터를 업데이트하여 동기화 상태를 유지합니다.\n3. 아이템 또는 프로모션에 대한 사용자 맞춤 설정을 구성합니다:\n    * 아이템 카탈로그를 개인 설정하려면 [카탈로그 필터 규칙 생성](/ko/api/liveops/personalized-catalog/create-filter-rule) API 호출을 사용하여 카탈로그 표시 규칙을 정의합니다:\n        * [attribute_conditions](/ko/api/liveops/personalized-catalog/create-filter-rule#personalized-catalog/create-filter-rule/t=request&path=attribute_conditions) 목록에서 사용자 특성에 기반하여 아이템 가용성을 결정하는 조건을 지정합니다.\n        * [items](/ko/api/liveops/personalized-catalog/create-filter-rule#personalized-catalog/create-filter-rule/t=request&path=items) 목록에서 사용자의 특성이 지정된 조건과 일치할 경우 표시되어야 하는 아이템 목록을 제공합니다.\n    * 개인 설정한 프로모션을 구성하려면 [필요한 프로모션 유형에 대한 생성 및 업데이트 API 호출](/ko/api/liveops/promotions-discounts/create-item-promotion)을 사용합니다. [attribute_conditions](/ko/api/liveops/promotions-discounts/create-item-promotion) 목록에서 사용자 특성에 기반하여 프로모션 가용성을 결정하는 조건을 지정합니다.\n\n4. 사용자 특성을 포함한 [사용자 JWT](/ko/api/login/getting-user-token?#getting-user-token)를 [카탈로그 검색 API 호출](https://developers.xsolla.com/ko/api/catalog/virtual-items-currency-catalog/get-virtual-items)에 전달하여 개인 설정된 카탈로그를 받습니다.\n\n**아이템 카탈로그에 대한 엑솔라 측 사용자 맞춤 설정 구성 및 적용 순서:**\n\n![아이템 카탈로그에 대한 사용자 맞춤 설정](https://cdn.xsolla.net/developers/current/images/api_docs/personalization-catalog.png)\n\n**프로모션에 대한 엑솔라 측 사용자 맞춤 설정 구성 및 적용 순서:**\n\n![프로모션에 대한 사용자 맞춤 설정](https://cdn.xsolla.net/developers/current/images/api_docs/personalization-liveops.png)\n\n<div class=\"note\">\n<b>참고</b><br><br>\n상세 정보는 다음에서 제공됩니다:\n<ul>\n  <li><a href=\"/ko/liveops/promotion-tools/personalization/\">엑솔라 측 및 파트너 측 사용자 맞춤 설정 구성 가이드</a></li>\n  <li><a href=\"/ko/doc/shop-builder/tutorials/personalization-tutorial/\">엑솔라 측 아이템 카탈로그 사용자 맞춤 설정에 대한 단계별 튜토리얼</a></li>\n</ul>\n</div>"
    },
    {
      "name": "user-limits-admin",
      "x-displayName": "관리"
    },
    {
      "name": "reward-chain-value-points-overview",
      "x-displayName": "개요",
      "description": "보상 체인은 사용자가 인게임 재화를 사용하여 스토어에서 구매하도록 유도합니다. 구매할 때마다 사용자는 가치 포인트를 획득하고 보상 체인을 따라 진행합니다. 사용자가 클랜에 소속되어 있는 경우, 해당 사용자의 구매 내역은 클랜 전체에 가치 포인트로 기여합니다. 보상 체인 설정에 대한 자세한 내용은 [보상 시스템](https://developers.xsolla.com/ko/liveops/promotion-tools/reward-system/) 섹션을 참조하십시오.\n\n보상 체인을 구성하려면 **Admin** 하위 섹션의 API 호출을 사용하십시오. 체인을 표시하고 보상을 수령하려면 **Client** 하위 섹션의 API 호출을 사용하십시오. 클랜 보상 체인을 관리하려면 **Clans client** 하위 섹션의 API 호출을 사용하십시오.\n\n<b>보상 체인 구성 절차에 대한 예시:</b>\n\n1. [가상 아이템 및 통화](https://developers.xsolla.com/ko/api/catalog/virtual-items-currency-overview) 또는 [번들](https://developers.xsolla.com/ko/api/catalog/bundles-admin) 그룹의 **Admin** 하위 섹션에 있는 API 호출을 사용하여 아이템을 생성합니다.\n2. [가치 포인트 생성](https://developers.xsolla.com/ko/api/liveops/reward-chain-value-points-admin/admin-create-value-points) API 호출을 사용하여 가치 포인트를 생성합니다.\n3. [아이템에 가치 포인트 설정](https://developers.xsolla.com/ko/api/liveops/reward-chain-value-points-admin/admin-set-items-value-point-reward) API 호출을 사용하여 아이템에 가치 포인트를 할당합니다. 사용자는 해당 아이템을 구매한 후 가치 포인트를 받게 됩니다.\n4. [보상 체인 생성](https://developers.xsolla.com/ko/api/liveops/reward-chain-value-points-admin/admin-create-reward-chain) API 호출을 사용하여 체인을 생성합니다. 체인을 활성화하려면 `is_enabled: true` 매개 변수를 전달하십시오.\n5. 보상 체인 표시 기능을 구현합니다. 이를 위해 [현재 사용자의 보상 체인 가져오기](https://developers.xsolla.com/ko/api/liveops/reward-chain-client/get-reward-chains-list) API 호출을 사용하여 사용 가능한 체인 목록을 요청합니다. 응답에는 단계 및 상태와 함께 모든 활성화된 체인이 포함됩니다.\n6. 가치 포인트 잔액 표시 기능을 구현합니다. 이를 위해 [현재 사용자의 가치 포인트 잔액 조회](https://developers.xsolla.com/ko/api/liveops/reward-chain-client/get-user-reward-chain-balance) API 호출을 사용합니다.\n7. 단계별 보상 수령을 구현합니다. 이를 위해 [단계별 보상 수령](https://developers.xsolla.com/ko/api/liveops/reward-chain-client/claim-user-reward-chain-step-reward) API 호출을 사용합니다.\n8. [웹훅](https://developers.xsolla.com/ko/webhooks/section/overview) 등을 사용하여 주문 상태 추적을 구성하고, 청구된 보상에 대한 데이터를 신속하게 수신하여 사용자에게 보상을 지급합니다.\n\n![보상 체인 구성 절차](https://cdn.xsolla.net/developers/current/images/api_docs/reward-chains-and-value-points-overview.svg)"
    },
    {
      "name": "reward-chain-value-points-admin",
      "x-displayName": "관리자"
    },
    {
      "name": "reward-chain-client",
      "x-displayName": "클라이언트"
    },
    {
      "name": "clan-reward-chain-client",
      "x-displayName": "클랜 클라이언트"
    },
    {
      "name": "daily-chain-overview",
      "x-displayName": "개요",
      "description": "일일 보상은 사용자가 매일 스토어에 로그인하여 무료 아이템을 받도록 유도합니다. 하루를 건너뛸 경우의 동작은 [체인 유형](/ko/api/liveops/daily-chain-admin/admin-create-daily-chain#daily-chain-admin/admin-create-daily-chain/t=request&path=&oneof=0/type)에 따라 달라집니다. 일일 보상이 올바르게 작동하려면 [사용자 인증](/ko/api/catalog#section/Authentication)을 구성해야 합니다. 인증되지 않은 사용자는 전체 일일 리워드 체인을 볼 수는 있지만 보상을 수령할 수는 없습니다. 일일 보상 구성에 대한 자세한 내용은 [일일 보상](/ko/liveops/promotion-tools/daily-rewards/) 섹션을 참조해 주세요.\n\n체인은 **관리자** 하위 섹션의 API 호출을 사용하여 구성합니다. 보상을 지급하려면 **클라이언트** 하위 섹션의 API 호출을 사용합니다.\n\n일일 체인 구성 시나리오:\n\n1. **관리자** 하위 섹션의 [가상아이템 및 인게임 재화](/ko/api/catalog/virtual-items-currency-admin/admin-get-virtual-items-list/) 또는 [번들](/ko/api/catalog/bundles-admin/admin-create-bundle) 그룹에 있는 API 호출을 사용하여 아이템을 생성합니다.\n2. [일일 보상 생성](/ko/api/liveops/daily-chain-admin/admin-create-daily-chain) API 호출을 사용하여 체인을 생성합니다.\n3. `\"is_enabled\": true` 매개 변수를 전달하여 [일일 보상 생성](/ko/api/liveops/daily-chain-admin/admin-create-daily-chain/) API 호출로 체인을 활성화합니다.\n4. [현재 사용자의 일일 보상 가져오기](/ko/api/liveops/daily-chain-client/get-daily-chains-list) API 호출을 사용하고 [사용자 JWT](/ko/api/catalog/section/authentication/authentication-using-user's-jwt)를 전달하여 사용 가능한 체인 목록을 요청합니다. 응답에는 모든 활성 체인과 해당 단계 및 상태가 포함됩니다.\n5. [웹훅](/ko/webhooks/section/osnovnye-polozheniya)을 통해 아이템 지급을 설정합니다.\n6. [일일 보상 지급 단계](/ko/api/liveops/daily-chain-client/claim-user-daily-chain-step-reward) API 호출을 사용하고 `daily_chain_id` 및 `step_number`를 전달하여 사용자에게 일일 보상을 지급합니다.\n\n![일일 보상](https://cdn.xsolla.net/developers/current/images/api_docs/daily-rewards.svg)"
    },
    {
      "name": "daily-chain-admin",
      "x-displayName": "관리자"
    },
    {
      "name": "daily-chain-client",
      "x-displayName": "클라이언트"
    },
    {
      "name": "offer-chains-overview",
      "x-displayName": "개요",
      "description": "혜택 체인은 일련의 단계로 구성되며, 각 단계에는 활성 혜택의 일환으로 무료로 받거나 구매하는 아이템이 포함됩니다. 혜택 체인에는 해당 체인 내에서만 이용할 수 있는 독점 아이템은 물론, 스토어 가격보다 할인된 가격의 아이템도 포함될 수 있습니다. 이 마케팅 도구의 설정에 대한 자세한 내용은 [혜택 체인](https://developers.xsolla.com/ko/liveops/promotion-tools/offer-chains/) 섹션을 참조하십시오.\n\n혜택 체인을 구성하려면 **Admin** 하위 섹션의 API 호출을 사용하십시오. 체인을 표시하고 사용자가 수신하는 아이템을 처리하기 위한 로직을 구현하려면 **Client** 하위 섹션의 API 호출을 사용하십시오.\n\n<b>혜택 체인 구성 절차에 대한 예시:</b>\n\n1. [가상 아이템 및 인게임 재화](https://developers.xsolla.com/ko/api/catalog/virtual-items-currency-overview) 또는 [번들](https://developers.xsolla.com/ko/api/catalog/bundles-admin) 그룹의 **Admin** 하위 섹션에 있는 API 호출을 사용하여 아이템을 생성합니다.\n\n2. [혜택 체인 생성](https://developers.xsolla.com/ko/api/liveops/offer-chain-admin/admin-create-offer-chain)API 호출을 사용하여 체인을 생성합니다. 체인을 활성화하려면 `is_enabled: true` 매개 변수를 전달하십시오.\n\n3. 혜택 체인 표시 기능을 구현합니다. 이를 위해 [현재 사용자의 혜택 체인 가져오기](https://developers.xsolla.com/ko/api/liveops/offer-chain-client/get-offer-chains-list) API 호출을 사용하여 사용 가능한 체인 목록을 요청합니다. 응답에는 단계 및 상태와 함께 모든 활성 체인이 포함됩니다.\n\n4. 사용자가 수신하는 아이템을 처리하는 로직을 구현합니다:\n\n    - 해당 단계 아이템이 무료인 경우, [무료 혜택 체인 단계 청구](https://developers.xsolla.com/ko/api/liveops/offer-chain-client/claim-user-offer-chain-step-reward) API 호출을 사용하십시오. 요청에 `offer_chain_id`와 `step_number`를 전달하십시오.\n\n    - 단계별 아이템이 결제된 경우, [결제된 혜택 체인 단계에 대한 주문 생성](https://developers.xsolla.com/ko/api/liveops/offer-chain-client/order-user-offer-chain-step-reward) API 호출을 사용하십시오. 요청에 `offer_chain_id`와 `step_number`를 전달하십시오. 응답에는 `order_id`와 결제 UI를 열 수 있는 토큰이 반환됩니다.\n\n5. 예를 들어, [웹훅](https://developers.xsolla.com/ko/webhooks/section/overview)을 사용하여 주문 상태 추적을 설정하고, 청구되거나 구매된 상품에 대한 데이터를 신속하게 수신하여 사용자에게 해당 상품을 부여합니다.\n\n![보상 체인 구성 절차](https://cdn.xsolla.net/developers/current/images/api_docs/offer-chains-overview.svg)"
    },
    {
      "name": "offer-chain-admin",
      "x-displayName": "관리자"
    },
    {
      "name": "offer-chain-client",
      "x-displayName": "클라이언트"
    },
    {
      "name": "upsell-overview",
      "x-displayName": "개요",
      "description": "업셀링은 사용자에게 부가 가치가 있는 아이템의 구매를 제안하는 판매 방식입니다. 예를 들어 다른 사용자 사이에서 수요가 매우 높은 아이템일 수 있습니다. 업셀링 아이템에 대한 지역 제한도 구성할 수 있습니다. 자세한 내용은 [업셀링](/ko/liveops/promotion-tools/upsell/) 섹션을 참조해 주세요.\n\n업셀링용으로 구성된 아이템 목록과 업셀링 상태(활성화 또는 비활성화)는 [프로젝트에서 업셀링 정보 가져오기](/ko/api/liveops/upsell-admin/get-upsell-configurations-for-project-admin) API 메서드에서 반환합니다. 클라이언트 측에서는 [프로젝트에서 업셀링 아이템 가져오기](/ko/api/liveops/upsell-client/get-upsell-for-project-client) API 메서드가 아이템 목록을 반환하며, 구매 흐름의 적절한 지점에서 사용자에게 표시됩니다.\n\n업셀링 구성 시나리오:\n\n1. **관리자** 하위 섹션의 [가상 아이템 및 인게임 재화](/ko/api/catalog/virtual-items-currency-admin/admin-get-virtual-items-list/), [번들](/ko/api/catalog/bundles-admin/admin-create-bundle) 또는 [게임 키](/ko/api/catalog/game-keys-admin) 그룹에 있는 API 호출을 사용하여 아이템을 생성합니다.\n2. [업셀링 생성](/ko/api/liveops/upsell-admin/post-upsell) API 호출을 사용하여 업셀링을 설정합니다. 필수 아이템의 SKU를 `items` 배열로 전달합니다.\n3. [프로젝트의 업셀링 활성화/비활성화](/ko/api/liveops/upsell-admin/put-upsell-toggle-active-inactive) API 호출을 사용하여 프로젝트의 업셀링을 활성화합니다.\n4. 구매 흐름의 적절한 지점에서 [프로젝트에서 업셀링 아이템 목록 가져오기](/ko/api/liveops/upsell-client/get-upsell-for-project-client) API 호출을 사용하여 사용자에게 업셀링 제안을 표시합니다.\n5. 주문 결제를 위한 결제 UI가 열리도록 구현합니다. 예를 들어 [특정 장바구니의 모든 아이템으로 주문 생성](/ko/api/catalog/payment-client-side/create-order-by-cart-id) API 호출을 사용할 수 있습니다. 응답으로 결제 UI를 여는 토큰이 반환됩니다.\n6. 예를 들어 [웹훅](/ko/webhooks/overview)을 사용하여 주문 상태 추적을 구성하고, 결제가 완료된 아이템의 데이터를 신속하게 받아 사용자에게 지급합니다.\n\n![업셀링 시나리오](https://cdn.xsolla.net/developers/current/images/api_docs/Upsell.svg)"
    },
    {
      "name": "upsell-admin",
      "x-displayName": "관리자"
    },
    {
      "name": "upsell-client",
      "x-displayName": "클라이언트"
    },
    {
      "name": "loyalty-program-overview",
      "x-displayName": "개요",
      "description": "로열티 서비스 API를 사용하면 사용자의 로열티 포인트 잔액을 관리할 수 있습니다. 사용자의 현재 잔액을 조회하고 로열티 포인트를 적립하거나 차감할 수 있습니다.\n\n로열티 서비스 API의 관리자 API 호출은 서버 측에서 이루어지며 기본 인증이 필요합니다.\n\n이 API의 기본 URL은 `https://loyalty-points.xsolla.com/`입니다.\n\n이 마케팅 도구 설정 방법에 대한 자세한 내용은 [로열티 서비스](https://developers.xsolla.com/ko/liveops/promotion-tools/loyalty-as-service/)를 참조해 주세요."
    },
    {
      "name": "loyalty-program-admin",
      "x-displayName": "관리자"
    }
  ],
  "paths": {
    "/v3/project/{project_id}/admin/promotion": {
      "get": {
        "summary": "모든 프로모션 목록 가져오기",
        "description": "프로젝트의 프로모션 목록을 가져옵니다.",
        "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": "프로모션 활성화",
        "description": "프로모션을 활성화합니다.",
        "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": "프로모션을 성공적으로 활성화했습니다."
          },
          "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": "프로모션 비활성화",
        "description": "프로모션을 비활성화합니다.",
        "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": "프로모션을 성공적으로 비활성화했습니다."
          },
          "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": "코드로 교환 가능한 프로모션 가져오기",
        "description": "프로모션 코드 또는 쿠폰 코드로 프로모션을 가져옵니다.",
        "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": "쿠폰 코드 사용",
        "description": "쿠폰 코드를 사용합니다. 쿠폰이 사용되면 사용자는 보너스를 받습니다. <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "쿠폰 보상 얻기",
        "description": "코드로 쿠폰 보상을 가져옵니다.\n사용자가 여러 아이템 중 하나를 보너스로 선택할 수 있도록 사용할 수 있습니다.\n일반적인 경우는 쿠폰에 게임이 보너스로 포함된 경우 DRM을 선택하는 것입니다 (`type=unit`). <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "쿠폰 프로모션 생성하기",
        "description": "쿠폰 프로모션을 생성합니다.",
        "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": "쿠폰을 성공적으로 생성했습니다.",
            "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": "쿠폰 프로모션 목록 가져오기",
        "description": "프로젝트의 쿠폰 프로모션 목록을 가져옵니다.",
        "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": "쿠폰 프로모션 업데이트",
        "description": "쿠폰 프로모션을 업데이트합니다.",
        "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": "쿠폰을 성공적으로 업데이트했습니다."
          },
          "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": "쿠폰 프로모션 가져오기",
        "description": "지정된 쿠폰 프로모션을 가져옵니다.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "쿠폰을 성공적으로 수신했습니다.",
            "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": "쿠폰 프로모션 삭제",
        "description": "[쿠폰 프로모션](https://developers.xsolla.com/ko/doc/shop-builder/features/coupons/)을 삭제합니다. 삭제된 프로모션:\n * 프로젝트에 설정된 프로모션 목록에서 사라집니다.\n * 더 이상 아이템 카탈로그에 적용되지 않습니다. 사용자는 이 프로모션으로 보너스 아이템을 얻을 수 없습니다.\n\n삭제한 후에는 프로모션을 복원할 수 없습니다.\n 삭제된 프로모션의 쿠폰 코드는 기존 프로모션에 [추가](https://developers.xsolla.com/ko/api/shop-builder/operation/create-coupon-code/)할 수 있습니다.",
        "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": "쿠폰 프로모션을 성공적으로 삭제했습니다."
          },
          "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": "쿠폰 프로모션 활성화",
        "description": "쿠폰 프로모션을 활성화합니다.\n생성된 쿠폰 프로모션은 기본적으로 비활성화되어 있습니다.\n프로모션을 활성화할 때까지 사용할 수 없습니다.\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": "쿠폰을 성공적으로 활성화했습니다."
          },
          "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": "쿠폰 프로모션 비활성화",
        "description": "쿠폰 프로모션을 비활성화합니다.\n생성된 쿠폰 프로모션은 기본적으로 비활성화되어 있습니다.\n프로모션을 활성화할 때까지 사용할 수 없습니다.\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": "쿠폰을 성공적으로 비활성화했습니다."
          },
          "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": "쿠폰 코드 생성하기",
        "description": "쿠폰 코드를 생성합니다.",
        "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": "쿠폰 코드 가져오기",
        "description": "쿠폰 코드를 가져옵니다.\n\n응답에는 프로모션의 총 코드 수(`total_count`)와 현재 페이지의 코드(`codes`)가 포함됩니다. 다음 페이지를 불러오려면 모든 코드를 모두 가져올 때까지 `offset` 값을 `limit` 값만큼 늘리십시오(예: `“offset”: 100`, 그 다음 `“offset”: 200`).\n\n대부분의 경우 `“limit”: 100` 또는 `“limit”: 1000`으로 충분합니다. `“limit”: 10000`과 같은 더 큰 값은 일회성 대량 내보내기 용도로만 사용하고, 반드시 필요한 경우가 아니면 `“limit”: 50000`의 사용은 피하십시오.",
        "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": "쿠폰 코드 생성하기",
        "description": "쿠폰 코드를 생성합니다.\n\n코드 생성에 관한 지침:\n\n* 프로모션당 코드 총 수량에 대한 상한은 없으나, 각 요청당 코드 수는 50,000개로 제한됩니다. 이 수량을 초과하는 요청은 `422 Unprocessable Entity` 오류가 반환됩니다. 50,000개 이상의 코드가 필요한 경우, 여러 번에 걸쳐 요청을 보내주십시오.\n\n* 안정성을 높이기 위해, 요청당 최대 10,000개까지 소량씩 코드를 생성하는 것이 권장합니다. 예를 들어, 100,000개의 코드를 생성하려면 `\"count\": 50000`을 지정하여 2번의 요청을 보내는 대신, `\"count\": 10000`을 지정하여 10번의 요청을 보내십시오. 각 요청에 대한 성공 응답을 받은 후에 다음 요청을 보내십시오.\n\n* 초당 15건의 요청으로 설정된 요청 제한에 유의하시기 바랍니다. 대량의 요청 생성 시 요청 제한을 초과하여 `429` 오류가 발생하지 않도록 요청을 순차적으로 전송하십시오.\n\n* 코드 목록을 가져오려면 [쿠폰 코드 가져오기](/ko/api/liveops/promotions-coupons/get-coupon-codes) 메서드를 호출하세요.\n\n| 매개 변수 | 값 |\n|---|---|\n| 요청당 최소 코드 수. | 1 |\n| 요청당 허용되는 최대 코드 수. 가능한 한 가장 큰 단일 배치 처리가 필요한 경우에만 사용하십시오. | 50,000 |\n| 요청당 권장 코드 수. | 최대 10,000개까지입니다. 더 많이 생성해야 하는 경우, 순차적으로 여러 번 요청을 보내주십시오. |",
        "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": "코드를 성공적으로 생성했습니다.",
            "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": "프로모션 코드 사용",
        "description": "프로모션 코드 프로모션용 코드를 사용합니다.\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": "장바구니에서 프로모션 코드 제거",
        "description": "장바구니에서 프로모션 코드를 제거합니다.\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": "프로모션 코드 보상 가져오기",
        "description": "코드로 프로모션 코드 보상을 가져옵니다.\n사용자가 여러 아이템 중 하나를 보너스로 선택할 수 있도록 사용할 수 있습니다.\n일반적인 경우는 프로모션 코드에 게임이 보너스로 포함된 경우 DRM을 선택하는 것입니다 (`type=unit`). <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "프로모션 코드 프로모션 생성하기",
        "description": "프로모션 코드 프로모션을 생성합니다.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          }
        ],
        "tags": [
          "promotions-promo-codes"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Promotions_promocode-create"
        },
        "responses": {
          "201": {
            "description": "프로모션 코드를 성공적으로 생성했습니다.",
            "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": "프로모션 코드 프로모션의 목록 가져오기",
        "description": "프로젝트의 프로모션 코드 목록을 가져옵니다.",
        "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": "프로모션 코드 프로모션 업데이트",
        "description": "프로모션 코드 프로모션을 업데이트합니다.",
        "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": "프로모션 코드를 성공적으로 업데이트했습니다."
          },
          "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": "프로모션 코드 프로모션 가져오기",
        "description": "지정된 프로모션 코드 프로모션을 가져옵니다.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "프로모션 코드를 성공적으로 수신했습니다.",
            "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": "프로모션 코드 프로모션 삭제",
        "description": "[프로모션 코드 프로모션](https://developers.xsolla.com/ko/doc/shop-builder/features/promo-codes/)을 삭제합니다. 삭제된 프로모션:\n * 프로젝트에 설정된 프로모션 목록에서 사라집니다.\n * 아이템 카탈로그 및 장바구니에는 더 이상 적용되지 않습니다. 사용자는 이 프로모션을 사용하여 보너스 아이템을 얻거나 아이템을 구매할 수 없습니다.\n\n삭제한 후에는 프로모션을 복원할 수 없습니다.\n 삭제된 프로모션의 프로모션 코드는 기존 프로모션에 [추가](https://developers.xsolla.com/ko/api/shop-builder/operation/create-promo-code-code/)할 수 있습니다.",
        "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": "프로모션 코드 프로모션을 성공적으로 삭제했습니다."
          },
          "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": "프로모션 코드 프로모션 활성화",
        "description": "프로모션 코드 프로모션을 활성화합니다.\n\n생성된 프로모션 코드 프로모션은 기본적으로 비활성화되어 있습니다.\n프로모션을 활성화할 때까지 사용할 수 없습니다.\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": "프로모션 코드를 성공적으로 활성화했습니다."
          },
          "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": "프로모션 코드 프로모션 비활성화",
        "description": "프로모션 코드 프로모션을 비활성화합니다.\n\n생성된 프로모션 코드 프로모션은 기본적으로 비활성화되어 있습니다.\n프로모션을 활성화할 때까지 사용할 수 없습니다.\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": "쿠폰을 성공적으로 비활성화했습니다."
          },
          "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": "프로모션 코드 프로모션용 코드 생성하기",
        "description": "프로모션 코드 프로모션용 코드를 생성합니다.",
        "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": "프로모션 코드 프로모션용 코드 가져오기",
        "description": "프로모션 코드 프로모션용 코드를 가져옵니다.\n\n응답에는 프로모션의 총 코드 수(`total_count`)와 현재 페이지의 코드(`codes`)가 포함됩니다. 다음 페이지를 불러오려면 모든 코드를 모두 가져올 때까지 `offset` 값을 `limit` 값만큼 늘리십시오(예: `“offset”: 100`, 그 다음 `“offset”: 200`).\n\n대부분의 경우 `“limit”: 100` 또는 `“limit”: 1000`으로 충분합니다. `“limit”: 10000`과 같은 더 큰 값은 일회성 대량 내보내기 용도로만 사용하고, 반드시 필요한 경우가 아니면 `“limit”: 50000`의 사용은 피하십시오.",
        "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": "프로모션 코드 프로모션용 코드 생성하기",
        "description": "프로모션 코드 프로모션용 코드를 생성합니다.\n\n코드 생성에 관한 지침:\n\n* 프로모션당 코드 총 수량에 대한 상한은 없으나, 각 요청당 코드 수는 50,000개로 제한됩니다. 이 수량을 초과하는 요청은 `422 Unprocessable Entity` 오류가 반환됩니다. 50,000개 이상의 코드가 필요한 경우, 여러 번에 걸쳐 요청을 보내주십시오.\n\n* 안정성을 높이기 위해, 요청당 최대 10,000개까지 소량씩 코드를 생성하는 것이 권장합니다. 예를 들어, 100,000개의 코드를 생성하려면 `\"count\": 50000`을 지정하여 2번의 요청을 보내는 대신, `\"count\": 10000`을 지정하여 10번의 요청을 보내십시오. 각 요청에 대한 성공 응답을 받은 후에 다음 요청을 보내십시오.\n\n* 초당 15건의 요청으로 설정된 요청 제한에 유의하시기 바랍니다. 대량의 요청 생성 시 요청 제한을 초과하여 `429` 오류가 발생하지 않도록 요청을 순차적으로 전송하십시오.\n\n* 코드 목록을 가져오려면 [프로모션 코드 목록 조회](/ko/api/liveops/promotions-promo-codes/get-promocode-codes) 메서드를 호출하십시오.\n\n| 매개 변수 | 값 |\n|---|---|\n| 요청당 최소 코드 수. | 1 |\n| 요청당 허용되는 최대 코드 수. 가능한 한 가장 큰 단일 배치 처리가 필요한 경우에만 사용하십시오. | 50,000 |\n| 요청당 권장 코드 수. | 최대 10,000개까지입니다. 더 많이 생성해야 하는 경우, 순차적으로 여러 번 요청을 보내주십시오. |",
        "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": "코드를 성공적으로 생성했습니다.",
            "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": "아이템에 대한 할인 프로모션 생성하기",
        "description": "아이템에 대한 할인 프로모션을 가져옵니다.\n\n프로모션은 아이템에 대한 할인(%) 혜택을 제공합니다.\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": "아이템 프로모션 목록 가져오기",
        "description": "프로젝트의 아이템 프로모션 목록을 가져옵니다.\n\n프로모션은 아이템에 대한 할인(%) 혜택을 제공합니다.\n지정된 아이템의 모든 가격에 할인이 적용됩니다.",
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "description": "프로젝트 ID입니다.",
            "schema": {
              "type": "integer",
              "default": 59080
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "페이지 요소 개수 제한입니다.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "목록이 생성된 요소의 개수입니다(개수는 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": "아이템 프로모션 업데이트",
        "description": "프로모션을 업데이트합니다.\n\n<div class='note'><b>참고</b><br><br>이전 데이터를 새 데이터로 교체합니다. 일부 프로모션만 업데이트하려면 요청 시 필요한 모든 데이터도 전송해야 합니다.</div>\n\n프로모션은 아이템에 대한 할인(%) 혜택을 제공합니다.\n지정된 아이템의 모든 가격에 할인이 적용됩니다.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "responses": {
          "204": {
            "description": "프로모션을 성공적으로 업데이트했습니다."
          },
          "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": "아이템 프로모션 가져오기",
        "description": "특정 아이템에 적용한 프로모션을 가져옵니다.\n\n프로모션은 아이템에 대한 할인(%) 혜택을 제공합니다.\n지정된 아이템의 모든 가격에 할인이 적용됩니다.",
        "responses": {
          "200": {
            "description": "아이템 프로모션을 성공적으로 수신했습니다.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "description": "프로모션 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다."
                    },
                    "promotion_periods": {
                      "$ref": "#/components/schemas/promotion_periods"
                    },
                    "is_enabled": {
                      "$ref": "#/components/schemas/Promotions_is_enabled"
                    },
                    "name": {
                      "type": "object",
                      "description": "프로모션의 이름입니다. 키/값 쌍을 포함해야 합니다.\n여기에서 키는 \"^[a-z]{2}-[A-Z]{2}$\" 형식의 로케일이며 값은 문자열입니다.",
                      "additionalProperties": {
                        "type": "string",
                        "example": {
                          "en-US": "Promotion",
                          "ru-RU": "Акция"
                        }
                      }
                    },
                    "discount": {
                      "type": "object",
                      "properties": {
                        "percent": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "퍼센트 할인입니다.\n이 퍼센트를 사용하여 계산한 값을 사용하면 아이템의 가격이 낮아지게 됩니다.",
                          "default": "10.00"
                        }
                      }
                    },
                    "items": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "description": "할인 대상 아이템 목록입니다.",
                        "type": "object",
                        "properties": {
                          "sku": {
                            "type": "string",
                            "description": "아이템 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_id`가 올바른지 확인해야 합니다.",
            "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": "아이템 프로모션 삭제",
        "tags": [
          "promotions-discounts"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "delete-item-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "description": "[할인 프로모션](https://developers.xsolla.com/ko/doc/shop-builder/features/discounts/)을 삭제합니다. 삭제된 프로모션:\n* 프로젝트에 설정된 프로모션 목록에서 사라집니다.\n* 아이템 카탈로그 및 장바구니에는 더 이상 적용되지 않습니다. 사용자는 이 프로모션으로 상품을 구매할 수 없습니다.\n\n삭제한 후에는 프로모션을 복원할 수 없습니다.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "responses": {
          "204": {
            "description": "프로모션이 성공적으로 삭제되었습니다."
          },
          "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": "보너스 프로모션 생성하기",
        "description": "보너스 프로모션을 생성합니다.\n\n프로모션은 사용자가 구매한 구매 항목에 무료 보너스 아이템을 추가합니다.\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": "보너스 프로모션 목록 가져오기",
        "description": "프로젝트에 속한 보너스 프로모션 목록을 가져옵니다.\n\n프로모션은 사용자가 구매한 구매 항목에 무료 보너스 아이템을 추가합니다.\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": "보너스 프로모션 업데이트",
        "description": "프로모션을 업데이트합니다.\n\n<div class='note'><b>참고</b><br><br>이전 데이터를 새 데이터로 교체합니다. 일부 프로모션만 업데이트하려면 요청 시 필요한 모든 데이터도 전송해야 합니다.</div>\n\n프로모션은 사용자가 구매한 구매 항목에 무료 보너스 아이템을 추가합니다.\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": "프로모션을 성공적으로 업데이트했습니다."
          },
          "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": "보너스 프로모션 가져오기",
        "description": "보너스 프로모션을 가져옵니다.\n\n프로모션은 사용자가 구매한 구매 항목에 무료 보너스 아이템을 추가합니다.\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": "보너스 프로모션 삭제",
        "tags": [
          "promotions-bonuses"
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "operationId": "delete-bonus-promotion",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "description": "[보너스 프로모션](https://developers.xsolla.com/ko/doc/shop-builder/features/bonuses/)을 삭제합니다. 삭제된 프로모션:\n * 프로젝트에 설정된 프로모션 목록에서 사라집니다.\n * 아이템 카탈로그 및 장바구니에는 더 이상 적용되지 않습니다. 사용자는 이 프로모션으로 보너스 아이템을 얻을 수 없습니다.\n\n삭제한 후에는 프로모션을 복원할 수 없습니다.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/promotion_id-path-param"
          }
        ],
        "responses": {
          "204": {
            "description": "프로모션이 성공적으로 삭제되었습니다."
          },
          "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": "프로모션 코드 확인",
        "description": "코드가 프로모션 코드인지 쿠폰 코드인지, 사용자가 이를 적용할 수 있는지를 결정합니다. <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "고유 카탈로그 혜택 프로모션 생성",
        "description": "고유 카탈로그 혜택 프로모션을 생성합니다.",
        "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": "고유 카탈로그 혜택을 성공적으로 생성했습니다.",
            "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": "고유 카탈로그 혜택 프로모션 목록 가져오기",
        "description": "프로젝트의 고유 카탈로그 혜택 프로모션 목록을 가져옵니다.",
        "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": "고유 카탈로그 혜택 프로모션 업데이트",
        "description": "고유 카탈로그 혜택 프로모션을 업데이트합니다.",
        "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": "고유 카탈로그 혜택을 성공적으로 업데이트했습니다."
          },
          "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": "고유 카탈로그 혜택 프로모션 가져오기",
        "description": "지정된 고유 카탈로그 혜택 프로모션을 가져옵니다.",
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/external_id-promotion-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "고유 카탈로그 혜택을 성공적으로 수신했습니다.",
            "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": "고유 카탈로그 혜택 프로모션 삭제",
        "description": "[고유한 카탈로그 제안 프로모션](https://developers.xsolla.com/ko/doc/shop-builder/features/unique-offer/)을 삭제합니다. 삭제된 프로모션:\n* 프로젝트에 설정된 프로모션 목록에서 사라집니다.\n* 아이템 카탈로그 및 장바구니에는 더 이상 적용되지 않습니다. 사용자는 이 프로모션으로 상품을 구매할 수 없습니다.\n\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": "고유 카탈로그 혜택을 성공적으로 삭제했습니다."
          },
          "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": "고유 카탈로그 혜택 프로모션 활성화",
        "description": "고유 카탈로그 혜택 프로모션을 활성화합니다.\n생성된 고유 카탈로그 혜택 프로모션은 기본적으로 비활성화되어 있습니다.\n혜택을 활성화해야 사용할 수 있습니다.\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": "고유 카탈로그 혜택을 성공적으로 활성화했습니다."
          },
          "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": "고유 카탈로그 혜택 프로모션 비활성화",
        "description": "고유 카탈로그 혜택 프로모션을 비활성화합니다.\n생성된 고유 카탈로그 혜택 프로모션은 기본적으로 비활성화되어 있습니다.\n혜택을 활성화해야 사용할 수 있습니다.\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": "고유 카탈로그 혜택을 성공적으로 비활성화했습니다."
          },
          "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": "고유 카탈로그 혜택 코드 생성",
        "description": "고유 카탈로그 혜택 코드를 생성합니다.",
        "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": "고유 카탈로그 혜택 코드 가져오기",
        "description": "고유 카탈로그 혜택 코드를 가져옵니다.",
        "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": "고유 카탈로그 혜택 코드 생성",
        "description": "고유 카탈로그 혜택 코드를 생성합니다.",
        "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": "코드를 성공적으로 생성했습니다.",
            "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": "지정된 사용자에 대한 프로모션 코드 제한 가져오기",
        "description": "지정된 사용자가 프로모션 코드를 사용할 수 있는 남은 횟수를 가져옵니다.\n\n사용자 제한 API를 사용하면 사용자가 프로모션 코드를 사용할 수 있는 횟수를 제한할 수 있습니다. 사용자 제한 자체를 구성하려면 관리 섹션으로 이동합니다.\n* [프로모션 코드](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-promo-codes/)",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-promo-code-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "아이템을 찾을 수 없습니다.",
            "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": "잘못된 요청입니다.",
            "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": "지정된 사용자의 쿠폰 제한 가져오기",
        "description": "지정된 사용자가 쿠폰을 사용할 수 있는 남은 횟수를 가져옵니다.\n\n사용자 제한 API를 사용하면 사용자가 쿠폰을 사용할 수 있는 횟수를 제한할 수 있습니다. 사용자 제한 자체를 구성하려면 관리 섹션으로 이동합니다.\n* [쿠폰](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-coupons/)",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-coupon-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "아이템을 찾을 수 없습니다.",
            "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": "잘못된 요청입니다.",
            "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": "코드에 대한 프로모션 코드 제한 가져오기",
        "description": "코드를 사용할 수 있는 남은 횟수를 가져옵니다. 코드를 필터링하려면 `codes` 쿼리 매개 변수를 사용합니다.\n\n코드 제한 자체를 구성하려면 관리자 섹션으로 이동합니다.\n* [프로모션 코드](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-promo-codes/)",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-code-promo-code-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "아이템을 찾을 수 없습니다.",
            "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": "잘못된 요청입니다.",
            "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": "고유 쿠폰 코드 제한 사항 가져오기",
        "description": "코드를 사용할 수 있는 남은 횟수를 가져옵니다. 코드를 필터링하려면 `codes` 쿼리 매개 변수를 사용합니다.\n\n코드 제한 자체를 구성하려면 관리자 섹션으로 이동합니다.\n* [쿠폰](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-coupons/)",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-code-coupon-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "아이템을 찾을 수 없습니다.",
            "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": "잘못된 요청입니다.",
            "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": "카탈로그 필터 규칙 목록 가져오기",
        "description": "사용자 특성에 적용하는 모든 규칙을 가져옵니다.",
        "responses": {
          "200": {
            "description": "규칙을 성공적으로 수신했습니다.",
            "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": "카탈로그 필터 규칙 생성하기",
        "description": "사용자 특성에 대한 규칙을 생성합니다.",
        "responses": {
          "201": {
            "description": "규칙을 성공적으로 생성했습니다.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "rule_id": {
                      "type": "number",
                      "description": "규칙 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": "클라이언트 측에서 검색하기 위한 모든 카탈로그 규칙을 가져옵니다",
        "description": "클라이언트 측 검색을 위한 모든 카탈로그 규칙 목록을 가져옵니다.\n\n<div class=\"notice\"><strong>주의</strong><br><br>규칙 ID, 이름 및 is_enabled만 반환합니다.</div>",
        "responses": {
          "200": {
            "description": "규칙을 성공적으로 수신했습니다.",
            "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": "카탈로그 필터 규칙 가져오기",
        "description": "사용자 특성에 적용하는 특정 규칙을 가져옵니다.",
        "responses": {
          "200": {
            "description": "규칙을 성공적으로 수신했습니다.",
            "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": "카탈로그 필터 규칙 업데이트",
        "description": "사용자 특성에 적용하는 특정 규칙을 업데이트합니다. 기본 값을 지정되지 않은 특성에 사용됩니다(특성이 필수가 아닌 경우).",
        "responses": {
          "204": {
            "description": "성공적으로 업데이트했습니다."
          },
          "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": "패치 카탈로그 필터 규칙",
        "description": "사용자 특성에 적용하는 특정 규칙을 업데이트합니다. 현재 값을 지정되지 않은 특성에 사용합니다.",
        "responses": {
          "204": {
            "description": "성공적으로 업데이트했습니다."
          },
          "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": "카탈로그 필터 규칙 삭제",
        "description": "특정 규칙을 삭제합니다.",
        "responses": {
          "204": {
            "description": "성공적으로 삭제했습니다."
          },
          "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": "지정된 사용자의 모든 프로모션 제한 설정 새로고침",
        "description": "지정된 사용자에 대한 모든 프로모션의 모든 제한 설정을 새로고침하여 해당 프로모션을 다시 사용할 수 있도록 합니다.\n\n사용자 제한 API를 사용하면 사용자가 프로모션을 사용할 수 있는 횟수를 제한할 수 있습니다. 사용자 제한 자체를 구성하려면 원하는 프로모션 유형의 관리 섹션으로 이동합니다.\n* [할인 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-discounts/)\n* [보너스 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-bonuses/)",
        "responses": {
          "200": {
            "description": "프로모션 제한 설정을 성공적으로 새로고침했습니다."
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "아이템을 찾을 수 없습니다.",
            "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": "잘못된 요청입니다.",
            "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": "사용자에 대한 프로모션 제한 새로고침하기",
        "description": "사용자가 이 프로모션을 다시 사용할 수 있도록 프로모션 제한을 새로고침합니다. *user* 매개변수가 `null`인 경우 이 호출은 모든 사용자에 대해 이 제한을 새로고침합니다.\n\n사용자 제한 API를 사용하면 사용자가 프로모션을 사용할 수 있는 횟수를 제한할 수 있습니다. 사용자 제한 자체를 구성하려면 원하는 프로모션 유형의 관리 섹션으로 이동합니다.\n* [할인 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-discounts/)\n* [보너스 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-bonuses/)",
        "responses": {
          "200": {
            "description": "프로모션 제한 설정을 성공적으로 새로고침했습니다."
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "아이템을 찾을 수 없습니다.",
            "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": "잘못된 요청입니다.",
            "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": "지정된 사용자의 프로모션 제한 설정 가져오기",
        "description": "적용된 제한 설정 내에서 지정된 사용자가 사용할 수 있는 남은 프로모션 횟수를 가져옵니다.\n\n사용자 제한 API를 사용하면 사용자가 프로모션을 사용할 수 있는 횟수를 제한할 수 있습니다. 사용자 제한 자체를 구성하려면 원하는 프로모션 유형의 관리 섹션으로 이동합니다.\n* [할인 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-discounts/)\n* [보너스 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-bonuses/)",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-promotion-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "아이템을 찾을 수 없습니다.",
            "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": "잘못된 요청입니다.",
            "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": "지정된 사용자의 프로모션 제한 설정 늘리기",
        "description": "적용된 제한 설정 내에서 지정된 사용자가 사용할 수 있는 남은 프로모션 횟수를 늘립니다.\n\n사용자 제한 API를 사용하면 사용자가 프로모션을 사용할 수 있는 횟수를 제한할 수 있습니다. 사용자 제한 자체를 구성하려면 원하는 프로모션 유형의 관리 섹션으로 이동합니다.\n* [할인 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-discounts/)\n* [보너스 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-bonuses/)",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-promotion-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "아이템을 찾을 수 없습니다.",
            "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": "잘못된 요청입니다.",
            "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": "지정된 사용자의 프로모션 제한 설정하기",
        "description": "프로모션 횟수를 늘리거나 줄인 후 지정된 사용자가 적용된 제한 설정 내에서 사용할 수 있는 남은 프로모션 횟수를 설정합니다.\n\n사용자 제한 API를 사용하면 사용자가 프로모션을 사용할 수 있는 횟수를 제한할 수 있습니다. 사용자 제한 자체를 구성하려면 원하는 프로모션 유형의 관리 섹션으로 이동합니다.\n* [할인 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-discounts/)\n* [보너스 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-bonuses/)",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-promotion-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "아이템을 찾을 수 없습니다.",
            "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": "잘못된 요청입니다.",
            "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": "지정된 사용자의 프로모션 제한 설정 축소",
        "description": "지정된 사용자가 적용된 제한 내에서 프로모션을 사용할 수 있는 남은 횟수를 줄입니다.\n\n사용자 제한 API를 사용하면 사용자가 프로모션을 사용할 수 있는 횟수를 제한할 수 있습니다. 사용자 제한 자체를 구성하려면 원하는 프로모션 유형의 관리 섹션으로 이동합니다.\n* [할인 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-discounts/)\n* [보너스 프로모션](https://developers.xsolla.com/ko/api/shop-builder/tag/promotions-bonuses/)",
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-admin-get-user-promotion-limits"
          },
          "401": {
            "$ref": "#/components/responses/Common_401-invalid-basic-auth"
          },
          "404": {
            "description": "아이템을 찾을 수 없습니다.",
            "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": "잘못된 요청입니다.",
            "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": "가치 포인트 목록 가져오기",
        "description": "관리 대상 프로젝트에서 가치 포인트 목록을 가져옵니다.",
        "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": "가치 포인트 생성하기",
        "description": "가치 포인트를 생성합니다.",
        "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": "가치 포인트 가져오기",
        "description": "관리 대상 프로젝트에서 SKU별로 가치 포인트를 가져옵니다.",
        "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": "가치 포인트 업데이트",
        "description": "SKU로 식별되는 가치 포인트를 업데이트합니다.",
        "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": "가치 포인트를 성공적으로 업데이트했습니다.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "422": {
            "$ref": "#/components/responses/422-admin-create-update-rc-vp-invalid-request"
          }
        }
      },
      "delete": {
        "summary": "가치 포인트 삭제",
        "description": "SKU로 식별되는 가치 포인트를 삭제합니다.",
        "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": "가치 포인트를 성공적으로 삭제했습니다.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          }
        }
      }
    },
    "/v2/project/{project_id}/admin/items/{value_point_sku}/value_points/rewards": {
      "get": {
        "summary": "가치 포인트가 있는 아이템 목록 가져오기",
        "description": "관리 대상 프로젝트에서 가치 포인트가 있는 모든 아이템의 목록을 가져옵니다.",
        "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": "아이템에 대한 가치 포인트 설정",
        "description": "하나 또는 여러 아이템에 SKU별로 가치 포인트를 할당합니다. 사용자가 이러한 아이템을 구매하면 가치 포인트를 받습니다.\n\n이 PUT 요청은 프로젝트에서 이전에 설정한 모든 아이템의 가치 포인트를 덮어씁니다.\n\n실수로 가치 포인트가 삭제되는 것을 방지하려면 각 PUT 요청에 모든 아이템과 해당 가치 포인트를 포함해야 합니다.\n\n다른 아이템의 가치 포인트는 그대로 유지하면서 특정 아이템의 가치 포인트만 업데이트하려면 GET 요청을 사용하여 현재 가치 포인트 세트를 검색하고 원하는 아이템의 가치 포인트를 수정한 다음 수정된 가치 포인트 세트를 특정 아이템의 업데이트된 가치 포인트와 함께 다시 보내야 합니다.",
        "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": "아이템에 대한 가치 포인트 보상을 성공적으로 업데이트했습니다.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/sellable-item-by-sku_404"
          }
        }
      },
      "patch": {
        "summary": "아이템에 대한 가치 포인트를 부분적으로 업데이트",
        "description": "아이템의 SKU에 의해 하나 이상의 아이템에 대한 가치 포인트 수를 부분적으로 업데이트합니다. 사용자는 지정된 아이템을 구매한 후 이러한 가치 포인트를 받게 됩니다.\n\n가치 포인트 업데이트의 원칙:\n  * 아이템에 아직 가치 포인트가 없는 경우 `amount` 필드에 0이 아닌 값을 보내면 가치 포인트가 생성됩니다.\n  * 아이템에 이미 가치 포인트가 있는 경우 `amount` 필드에 0이 아닌 값을 보내면 가치 포인트가 업데이트됩니다.\n  * `amount`를 0으로 설정하면 해당 아이템에 대한 기존 가치 포인트가 삭제됩니다.\n\n`PUT` 메서드([아이템에 대한 가치 포인트 설정](https://developers.xsolla.com/ko/api/shop-builder/operation/admin-set-items-value-point-reward/))와 달리 이 `PATCH` 메서드는 프로젝트의 아이템에 대한 모든 기존 가치 포인트를 덮어쓰지 않고 지정된 아이템만 업데이트합니다.\n\n단일 요청으로 최대 100개의 아이템을 업데이트할 수 있습니다. 중복 아이템 SKU는 동일한 요청에 포함될 수 없습니다.",
        "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": "아이템에 대한 가치 포인트 보상을 성공적으로 업데이트했습니다.",
            "content": {}
          },
          "401": {
            "$ref": "#/components/responses/401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/sellable-item-by-sku_404"
          }
        }
      },
      "delete": {
        "summary": "아이템에서 가치 포인트 삭제하기",
        "description": "모든 아이템에서 가치 포인트 보상을 제거합니다.",
        "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": "아이템에 대한 가치 포인트 보상을 성공적으로 삭제했습니다.",
            "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": "현재 사용자의 보상 체인 가져오기",
        "description": "클라이언트 엔드포인트. 현재 사용자의 보상 체인을 가져옵니다.\n\n<div class=\"notice\">\n  <strong>주의</strong><br><br>\n    모든 프로젝트에는 응답에서 가져올 수 있는 항목 수에 제한이 있습니다. 기본 및 최대 값은 <strong>응답당 50개 항목</strong>입니다. 페이지별로 더 많은 데이터를 얻으려면 <b>limit</b> 및 <b>offset</b> 입력란을 사용하세요.\n</div>\n\n<br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "현재 사용자의 가치 포인트 잔액 가져오기",
        "description": "클라이언트 엔드포인트. 현재 사용자의 가치 포인트 잔액을 가져옵니다. <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "단계 보상 청구하기",
        "description": "클라이언트 엔드포인트. 보상 체인에서 현재 사용자의 단계 보상을 청구합니다. <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "보상 체인에서 현재 사용자의 단계에 대한 보상을 성공적으로 청구했습니다."
          },
          "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": "클랜 보상 체인에 가장 많이 기여한 상위 10명의 기여자 명단입니다.",
            "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": "프로젝트 ID입니다.",
            "schema": {
              "type": "integer",
              "example": 44056
            }
          },
          {
            "name": "reward_chain_id",
            "in": "path",
            "required": true,
            "description": "보상 체인 ID입니다.",
            "schema": {
              "type": "integer",
              "example": 101
            }
          }
        ],
        "summary": "클랜 보상 체인에 가장 많이 기여한 상위 10명의 기여자를 뽑으세요",
        "description": "현재 사용자의 클랜 내 특정 보상 체인에 가장 많이 기여한 상위 10명의 기여자 목록을 가져옵니다. 사용자가 클랜에 속하지 않은 경우, 호출은 빈 목록을 반환합니다. <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\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": "프로젝트 ID입니다.",
            "schema": {
              "type": "integer",
              "default": 44056
            }
          }
        ],
        "summary": "현재 사용자의 클랜 업데이트",
        "description": "사용자 특성을 통해 현재 사용자의 클랜을 업데이트합니다. 이전 클랜에서 수령하지 않은 모든 보상 체인 보상을 청구하고 응답에 반환합니다. 사용자가 클랜에 속해 있었으나 이제 속하지 않은 경우, 클랜 포함이 취소됩니다. 사용자가 클랜을 변경한 경우, 클랜이 변경됩니다. <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>"
      }
    },
    "/v3/project/{project_id}/admin/reward_chain": {
      "get": {
        "summary": "보상 체인 목록 가져오기",
        "description": "보상 체인 목록을 가져옵니다.\n\n<div class=\"notice\"><strong>주의</strong><br><br>모든 프로젝트에는 응답에서 얻을 수 있는 아이템 수에 제한이 있습니다. 기본값과 최대값은 <strong>응답당 10개 아이템입니다.</strong> 페이지별로 더 많은 데이터 페이지를 가져오려면 <b>한계</b> 및 <b>오프셋</b> 필드를 사용합니다.</div>",
        "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": "보상 체인 생성하기",
        "description": "보상 체인을 생성합니다.",
        "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": "보상 체인 가져오기",
        "description": "특정 보상 체인을 가져옵니다.",
        "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": "보상 체인 업데이트",
        "description": "특정 보상 체인을 업데이트합니다.",
        "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": "보상 체인 삭제",
        "description": "특정 보상 체인을 삭제합니다.",
        "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": "보상 체인 토글",
        "description": "보상 체인을 활성화/비활성화합니다.",
        "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": "보상 체인 재설정",
        "description": "리워드 체인에 속한 모든 사용자의 가치 포인트 잔액과 진행 상황을 재설정합니다.<br>잔액은 가치 포인트 유형에 연동됩니다. 특정 리워드 체인에 연동되지 않습니다. 해당 가치 포인트가 다른 체인에서 사용 중인 경우, 해당 가치 포인트를 사용하는 모든 체인의 잔액이 재설정됩니다.<br>재설정 후에는 리워드 체인의 유효 기간을 업데이트할 수 있으며, 사용자는 다시 진행 상황을 쌓아갈 수 있습니다.<br>클랜 잔액은 구성원의 잔액을 모두 합산하여 계산됩니다. 따라서 재설정 후에는 클랜 잔액도 재설정됩니다.<br> 이 요청은 되돌릴 수 없으며 프로젝트의 모든 사용자에게 적용됩니다.\n\n<div class=\"notice\"><strong>참고</strong>\n <br><br>\n유효 기간 중에는 보상 체인을 재설정하면 안 됩니다. 재설정한 사용자는 보상을 받기 전에 적립된 가치 포인트를 잃을 수도 있습니다.\n</div>",
        "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": "일일 보상 목록 가져오기",
        "description": "관리용 일일 보상 목록을 가져옵니다.\n\n<div class=\"notice\"><strong>알림</strong><br><br>메서드는 항목의 페이지 매김된 목록을 반환합니다. 최대 및 기본 값은 <strong>응답당 50개 항목입니다.</strong> 목록에서 더 많은 항목을 가져오려면 `limit` 및 `offset` 매개변수를 사용하여 더 많은 페이지를 가져오십시오. 예를 들어, `limit = 25` 및 `offset = 100`으로 메서드를 호출하면, 전체 목록에서 101번째 항목부터 시작하여 25개의 항목을 반환합니다.</div>",
        "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": "일일 보상 생성",
        "description": "일일 보상을 생성합니다.",
        "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": "일일 보상 받기",
        "description": "관리 작업을 수행하면 매일 특정 보상을 받습니다.",
        "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": "일일 보상을 업데이트합니다",
        "description": "특정 일일 보상을 업데이트합니다.",
        "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": "일일 보상을 성공적으로 업데이트했습니다.",
            "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": "일일 보상 삭제",
        "description": "특정 일일 보상을 삭제합니다.",
        "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": "일일 보상을 성공적으로 삭제했습니다.",
            "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": "일일 보상 토글 설정",
        "description": "일일 보상을 활성화하거나 비활성화합니다.",
        "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": "일일 보상이 비활성화되거나 활성화되었습니다.",
            "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": "일일 보상 초기화",
        "description": "모든 사용자의 일일 보상 진행도를 초기화합니다. `rolling` 유형의 일일 보상에만 적용됩니다.",
        "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": "일일 보상이 초기화되었습니다.",
            "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": "현재 사용자의 일일 보상 가져오기",
        "description": "클라이언트 엔드포인트. 현재 사용자의 일일 보상을 가져옵니다.\n\n<div class=\"notice\"><strong>알림</strong><br><br>메서드는 항목의 페이지 매김된 목록을 반환합니다. 최대 및 기본 값은 <strong>응답당 50개 항목입니다.</strong> 목록에서 더 많은 항목을 가져오려면 <code>limit</code> 및 <code>offset</code> 매개변수를 사용하여 더 많은 페이지를 가져오십시오. 예를 들어, <code>limit = 25</code> 및 <code>offset = 100</code>으로 메서드를 호출하면, 전체 목록에서 101번째 항목부터 시작하여 25개의 항목을 반환합니다.</div>\n\n<br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "현재 사용자의 ID로 일일 보상을 가져옵니다",
        "description": "클라이언트 엔드포인트. ID로 현재 사용자의 일일 보상을 가져옵니다. <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/daily_chain_id-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "사용자의 일일 보상을 성공적으로 검색했습니다.",
            "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": "일일 단계 보상 청구하기",
        "description": "클라이언트 엔드포인트. 현재 사용자의 일일 보상에서 단계 보상을 청구합니다. 모든 단계는 순차적으로만 청구할 수 있습니다. 누락된 단계의 보상은 가상 또는 실제 통화로, 또는 광고 시청으로 얻을 수 없습니다. <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "현재 사용자의 일일 보상 단계에 대한 단계 보상을 성공적으로 청구했습니다."
          },
          "401": {
            "$ref": "#/components/responses/401-client-auth-error"
          },
          "404": {
            "$ref": "#/components/responses/404-daily-chain-step-not-found"
          },
          "422": {
            "description": "청구할 수 없는 단계입니다.",
            "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": "현재 사용자의 혜택 체인 가져오기",
        "description": "현재 사용자의 혜택 체인을 가져옵니다.\n\n<div class=\"notice\"><strong>참고</strong><br><br>모든 프로젝트에서 단일 응답에 반환할 수 있는 아이템 수는 제한되어 있습니다. 기본값 및 최대값은 <strong>응답당 30개 아이템</strong>입니다. 더 많은 데이터를 가져오려면 페이지 설정에서 <code>limit</code> 및 <code>offset</code> 쿼리 매개 변수를 사용하세요.</div>\n\n<br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "ID로 현재 사용자의 혜택 체인 가져오기",
        "description": "현재 사용자의 혜택 체인을 혜택 체인의 ID로 가져옵니다. <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "security": [
          {
            "XsollaLoginUserJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/offer_chain_id-path-param"
          }
        ],
        "responses": {
          "200": {
            "description": "사용자의 혜택 체인을 성공적으로 검색했습니다.",
            "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": "무료 혜택 체인 단계",
        "description": "현재 사용자의 혜택 체인 단계 진행을 완료하고 관련 리워드를 지급합니다.\n\n<div class=\"notice\">\n  <strong>알림</strong><br><br>\n 혜택 체인의 무료 단계에서만 이 호출을 사용해 주세요.\n 실제 통화로 결제해야 하는 단계의 경우, <a href=\"/ko/api/shop-builder/operation/order-user-offer-chain-step-reward\">유료 오퍼 체인 단계 주문 생성</a> 호출을 대신 사용해 주세요.\n</div>\n\n<br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "무료 단계가 성공적으로 완료되어 보상이 지급되었습니다.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "order_id": {
                      "type": "integer",
                      "description": "주문 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": "이 단계는 신청할 수 없습니다. 이전 단계가 모두 완료되었고 해당 단계가 무료 단계로 표시되어 있는지 확인해 주세요.",
            "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": "유료 혜택 체인 단계 주문 생성",
        "description": "지정된 유료 혜택 체인 단계와 연결된 아이템의 주문을 생성합니다. 생성된 주문은 `new` 주문 상태를 가져옵니다.\n\n결제 UI를 새 창에서 열려면 `https://secure.xsolla.com/paystation4/?token={token}` 링크를 사용합니다. 여기서 `{token}`은 수신한 토큰입니다.\n\n테스트를 진행할 때에는 `https://sandbox-secure.xsolla.com/paystation4/?token={token}` URL을 사용합니다.\n\n<div class=\"notice\">\n  <strong>알림</strong> <br><br>\n 이 메서드는 클라이언트 측에서 사용해야 합니다. 사용자의 IP 주소는 통화 및 사용 가능한 결제 방법에 영향을 미치는 국가를 결정하는 데 사용됩니다. 서버 측에서 이 메서드를 사용하면 통화가 잘못 감지되어 <a href=\"https://developers.xsolla.com/ko/doc/pay-station/\">페이 스테이션</a>의 결제 방식에 영향을 줄 수 있습니다.\n</div>\n\n<br>\n\n<div class=\"notice\">\n  <strong>알림</strong><br><br>\n 유료 혜택 체인 단계에서만 이 호출을 사용하세요.\n 무료 단계의 경우 <a href=\"/ko/api/shop-builder/operation/claim-user-offer-chain-step-reward\">무료 혜택 체인 단계 신청</a> 호출을 대신 사용해 주세요.\n</div>\n\n<br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>",
        "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": "이 단계는 구매할 수 없습니다.",
            "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": "혜택 체인 목록 가져오기",
        "description": "관리할 혜택 체인 목록을 가져옵니다.\n\n<div class=\"notice\"><strong>참고</strong><br><br>모든 프로젝트에서 단일 응답에 반환할 수 있는 아이템 수는 제한되어 있습니다. 기본값 및 최댓값은 <strong>응답당 10개 아이템</strong>입니다. 더 많은 데이터를 얻으려면 페이지 설정에서 <code>limit</code> 및 <code>offset</code> 쿼리 매개 변수를 사용해 주세요.</div>",
        "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": "혜택 체인 생성",
        "description": "혜택 체인을 생성합니다.",
        "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": "혜택 체인 가져오기",
        "description": "관리할 특정 혜택 체인을 가져옵니다.",
        "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": "혜택 체인 업데이트",
        "description": "특정 혜택 체인을 업데이트합니다.",
        "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": "혜택 체인을 성공적으로 업데이트했습니다.",
            "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": "혜택 체인 삭제",
        "description": "특정 혜택 체인을 삭제합니다.\n\n삭제 후:<ul><li>사용자가 이미 받은 모든 리워드는 유지됩니다.</li><li>완료되지 않은 단계는 사용할 수 없게 되며 해당 리워드는 더 이상 받을 수 없습니다.</li></ul>\n\n<a href=\"/ko/api/shop-builder/operation/admin-toggle-offer-chain\">혜택 체인 토글 전환</a> 호출을 통해 혜택 체인을 비활성화하는 것과 달리, 삭제는 취소할 수 없으며 사용자 진행 상황은 보존되지 않습니다.",
        "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": "혜택 체인을 성공적으로 삭제했습니다.",
            "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": "혜택 체인 토글 전환",
        "description": "혜택 체인을 활성화 또는 비활성화합니다.\n\n혜택 체인을 비활성화하면 사용자는 일시적으로 액세스 권한을 잃지만 진행 상황은 유지됩니다.\n\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": "혜택 체인이 비활성화/활성화되었습니다.",
            "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": "프로젝트에서 상향 판매에 사용되는 구성 세부 정보 및 아이템 목록.",
            "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": "프로젝트의 상향 판매에 대한 정보 얻기",
        "description": "프로젝트의 상향 판매에 대한 정보(사용 여부, 상향 판매 유형 및 이 상향 판매의 일부인 아이템의 SKU 목록)를 검색합니다."
      },
      "post": {
        "tags": [
          "upsell-admin"
        ],
        "operationId": "post-upsell",
        "summary": "상향 판매 생성",
        "description": "프로젝트에 대한 상향 판매를 생성합니다. <br>\n\n<div class=\"notice\">\n  <strong>Notice</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    <code>Authorization</code> 헤더에 <code>Bearer &lt;user_JWT&gt;</code> 형식으로 토큰을 포함하세요. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하세요.\n</div>",
        "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": "프로젝트를 위해 상향 판매가 생성되었습니다."
          },
          "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": "상향 판매 업데이트",
        "description": "프로젝트에 대한 상향 판매를 업데이트합니다. <br>\n\n<div class=\"notice\">\n  <strong>Notice</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    <code>Authorization</code> 헤더에 <code>Bearer &lt;user_JWT&gt;</code> 형식으로 토큰을 포함하세요. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하세요.\n</div>",
        "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": "프로젝트에 대한 상향 판매가 업데이트되었습니다."
          },
          "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": "프로젝트의 상향 판매가 활성화되거나 비활성화되었습니다."
          },
          "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": "활성화 상태.",
            "schema": {
              "type": "string",
              "example": "activate"
            }
          }
        ],
        "summary": "프로젝트의 상향 판매 활성화/비활성화",
        "description": "프로젝트에서 상향 판매의 상태를 활성 또는 비활성으로 변경합니다. <br>\n\n<div class=\"notice\">\n  <strong>Notice</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    <code>Authorization</code> 헤더에 <code>Bearer &lt;user_JWT&gt;</code> 형식으로 토큰을 포함하세요. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하세요.\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": "프로젝트에서 상향 판매 아이템 목록 가져 오기",
        "description": "이미 설정된 경우 프로젝트의 상향 판매 아이템 목록을 가져옵니다. <br>\n\n<div class=\"note\">\n  <strong>참고</strong><br><br>\n    이 API 호출은 인증을 위해 사용자 JWT를 사용합니다.<br><br>\n    이 토큰은 <code>Authorization</code> 헤더에 다음 형식으로 포함해야 합니다: <code>Bearer &lt;user_JWT&gt;</code>. 사용자 JWT에 대한 자세한 내용은 이 호출의 <strong>보안</strong> 블록을 참조하십시오.\n</div>"
      }
    },
    "/projects/{project_id}/users/{user_id}/points/{point_id}/balance": {
      "servers": [
        {
          "url": "https://loyalty-points.xsolla.com"
        }
      ],
      "get": {
        "summary": "사용자의 로열티 포인트 잔액 조회",
        "description": "지정된 로열티 포인트의 현재 잔액을 반환합니다.",
        "tags": [
          "loyalty-program-admin"
        ],
        "operationId": "loyalty-get-user-point-balance",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/user_id-path-param"
          },
          {
            "$ref": "#/components/parameters/point_id-path-param"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-get-point-balance"
          },
          "401": {
            "$ref": "#/components/responses/ItemGroup_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-user-or-point-not-found"
          }
        }
      }
    },
    "/projects/{project_id}/users/{user_id}/points/{point_id}/balance/debit": {
      "servers": [
        {
          "url": "https://loyalty-points.xsolla.com"
        }
      ],
      "post": {
        "summary": "사용자의 로열티 포인트 잔액 차감",
        "description": "지정된 금액만큼 사용자의 로열티 포인트 잔액을 차감합니다.",
        "tags": [
          "loyalty-program-admin"
        ],
        "operationId": "loyalty-debit-user-point-balance",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/user_id-path-param"
          },
          {
            "$ref": "#/components/parameters/point_id-path-param"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/debit-point-balance"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-debit-point-balance"
          },
          "400": {
            "$ref": "#/components/responses/400-bad-request"
          },
          "401": {
            "$ref": "#/components/responses/ItemGroup_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-user-or-point-not-found"
          },
          "422": {
            "$ref": "#/components/responses/422-insufficient-balance"
          }
        }
      }
    },
    "/projects/{project_id}/users/{user_id}/points/{point_id}/balance/credit": {
      "servers": [
        {
          "url": "https://loyalty-points.xsolla.com"
        }
      ],
      "post": {
        "summary": "사용자의 로열티 포인트 잔액 적립",
        "description": "지정된 금액만큼 사용자의 로열티 포인트 잔액을 적립합니다.",
        "tags": [
          "loyalty-program-admin"
        ],
        "operationId": "loyalty-credit-user-point-balance",
        "x-badges": [
          {
            "name": "Server-side",
            "color": "#95ff80"
          },
          {
            "name": "Admin",
            "color": "#d7dee0"
          }
        ],
        "security": [
          {
            "basicAuth": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/project_id-path-param"
          },
          {
            "$ref": "#/components/parameters/user_id-path-param"
          },
          {
            "$ref": "#/components/parameters/point_id-path-param"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/credit-point-balance"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/200-credit-point-balance"
          },
          "400": {
            "$ref": "#/components/responses/400-bad-request"
          },
          "401": {
            "$ref": "#/components/responses/ItemGroup_401-invalid-basic-auth"
          },
          "404": {
            "$ref": "#/components/responses/404-user-or-point-not-found"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "basicAuth": {
        "type": "http",
        "description": "서버 측 호출은 `basicAuth` 인증 체계를 사용합니다. API에 대한 모든 요청은 `Authorization: Basic <your_authorization_basic_key>` 헤더를 포함해야 하며, 여기에서 `your_authorization_basic_key`는 Base64 표준에 따라 인코딩된 `project_id:api_key` 쌍입니다.\n\n필요한 경우 `project_id` 대신 `merchant_id`를 사용할 수 있습니다. 기능에는 영향을 미치지 않습니다.\n\n다음과 같이 매개 변수 값을 확인하려면 [관리자 페이지](https://publisher.xsolla.com/)로 이동합니다.\n\n* `merchant_id`는 다음 위치에 표시됩니다:\n  * **Company settings > Company** 섹션\n  * 관리자 페이지의 모든 페이지에서 브라우저 주소 표시줄의 URL. URL 형식은 다음과 같습니다: `https://publisher.xsolla.com/<merchant_id>`.\n* `api_key`는 생성 시 관리자 페이지에서 한 번만 표시되며, 귀하의 측에서 저장해야 합니다. 새 키는 다음 섹션에서 생성할 수 있습니다:\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\n필수 API 호출에 `project_id` 경로 매개 변수가 포함되어 있지 않으면, 모든 회사 프로젝트에 대해 유효한 API 키를 사용하여 인증하세요.\n{% /html %}\n\n* `project_id`는 다음 위치에 표시됩니다:\n  * 프로젝트 이름 옆의 관리자 페이지.\n  * 관리자 페이지에서 프로젝트 작업 시 브라우저 주소 표시줄의 URL. URL 형식은 다음과 같습니다: `https://publisher.xsolla.com/<merchant_id>/projects/<project_id>`.\n\nAPI 키 작업에 대한 자세한 정보는 [API 레퍼런스](https://developers.xsolla.com/ko/api/getting-started/#api_keys_overview)를 참조하세요.",
        "scheme": "basic"
      },
      "XsollaLoginUserJWT": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "클라이언트 측 호출은 `XsollaLoginUserJWT` 인증 체계를 사용합니다. 요청에는 Bearer `<user_JWT>` 형식으로 `Authorization` 헤더에 사용자의 JWT를 포함해야 합니다. 이 토큰은 사용자를 식별하고 개인화된 데이터에 대한 액세스 를 제공합니다. 토큰 생성 방법에 대한 자세한 내용은 [엑솔라 로그인 API 문서](/ko/api/login/authentication-schemes#getting-user-token)를 참조하십시오.\n\n또는 [결제 UI를 여는 토큰](/ko/api/pay-station/token/create-token)을 사용할 수 있습니다."
      },
      "AuthForCart": {
        "type": "http",
        "scheme": "bearer",
        "description": "이 `AuthForCart` 인증 체계는 장바구니 구매에 사용되며 두 가지 모드를 지원합니다.\n\n1. 사용자의 JWT로 인증합니다. 토큰은 인증 헤더에 `Authorization: Bearer <user_JWT>` 형식으로 전달되며, `<user_JWT>`는 사용자 토큰입니다. 이 토큰은 사용자를 식별하고 사용자 맞춤 설정된 데이터에 대한 액세스를 제공합니다.\n\n또는 [결제 UI를 여는 토큰](/ko/api/pay-station/token/create-token)을 사용할 수 있습니다.\n\n2. `Authorization` 헤더가 없는 간소화된 모드. 이 모드는 인증되지 않은 사용자만 사용하며, [게임 키 판매](/ko/doc/buy-button/how-to/set-up-authentication/#guides_buy_button_selling_items_not_authenticated_users)에만 적용할 수 있습니다. 토큰 대신 요청에 다음 헤더를 포함해야 합니다.\n* 요청 ID와 `x-unauthorized-id`\n* Base64로 인코딩된 사용자의 이메일 주소와 `x-user`."
      },
      "basicMerchantAuth": {
        "type": "http",
        "description": "서버 측 호출은 `basicMerchantAuth` 인증 체계를 사용합니다. 모든 API 요청에는 `Authorization: Basic <your_authorization_basic_key>` 헤더가 포함되어야 하며, 여기서 `your_authorization_basic_key`는 Base64 표준에 따라 인코딩된 `merchant_id:api_key` 쌍입니다.\n\n다음과 같이 매개 변수 값을 확인하려면 [관리자 페이지](https://publisher.xsolla.com/)로 이동합니다.\n\n* `merchant_id`는 다음 위치에 표시됩니다:\n  * **Company settings > Company** 섹션\n  * 관리자 페이지의 모든 페이지에서 브라우저 주소 표시줄의 URL에 표시됩니다. URL 형식은 다음과 같습니다: `https://publisher.xsolla.com/<merchant_id>`\n* `api_key`는 생성 시 관리자 페이지에 한 번만 표시되며, 귀하의 측에서 저장해야 합니다. 새로운 키는 [Company settings > API keys](https://publisher.xsolla.com/0/settings/api_key) 섹션에서 생성할 수 있습니다.\n\nAPI 키 작업에 대한 자세한 정보는 [API 레퍼런스](https://developers.xsolla.com/ko/api/getting-started/#api_keys_overview)를 참조하세요.",
        "scheme": "basic"
      }
    },
    "parameters": {
      "project_id-path-param": {
        "name": "project_id",
        "in": "path",
        "required": true,
        "description": "프로젝트 ID. 이 매개 변수는 프로젝트 이름 옆의 [관리자 페이지](https://publisher.xsolla.com/0/projects/0/)에서 또는 프로젝트 작업 시 브라우저 주소 표시줄에서 확인할 수 있습니다. URL 형식은 다음과 같습니다: `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": "페이지 요소 개수 제한입니다.",
        "schema": {
          "type": "integer",
          "example": 50,
          "minimum": 1
        }
      },
      "offset-query-param": {
        "name": "offset",
        "in": "query",
        "required": false,
        "example": 0,
        "description": "목록이 생성된 요소의 개수입니다(개수는 0부터 시작함).",
        "schema": {
          "type": "integer",
          "example": 0,
          "minimum": 0
        }
      },
      "enabled-query-param": {
        "name": "enabled",
        "in": "query",
        "required": false,
        "description": "`is_enabled` 플래그로 요소를 필터링합니다.",
        "schema": {
          "type": "integer"
        }
      },
      "promotion_id-path-param": {
        "name": "promotion_id",
        "in": "path",
        "required": true,
        "description": "프로모션 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다.",
        "schema": {
          "type": "integer",
          "example": 111425
        }
      },
      "code-path-param": {
        "name": "code",
        "in": "path",
        "required": true,
        "description": "대/소문자를 구분하는 고유한 코드입니다. 문자와 숫자를 포함합니다.",
        "schema": {
          "type": "string",
          "example": "WINTER2021",
          "minLength": 1,
          "maxLength": 128
        }
      },
      "coupon_code-path-param": {
        "name": "coupon_code",
        "in": "path",
        "required": true,
        "description": "고유한 대/소문자 구분 코드입니다. 문자와 숫자를 포함합니다.",
        "schema": {
          "type": "string",
          "example": "WINTER2021",
          "minLength": 1,
          "maxLength": 128
        }
      },
      "external_id-promotion-path-param": {
        "name": "external_id",
        "in": "path",
        "required": true,
        "description": "프로모션 외부 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다.",
        "schema": {
          "type": "integer",
          "example": "coupon_44056_1"
        }
      },
      "promocode_code-path-param": {
        "name": "promocode_code",
        "in": "path",
        "required": true,
        "description": "고유한 대/소문자 구분 코드입니다. 문자와 숫자를 포함합니다.",
        "schema": {
          "type": "string",
          "example": "SO6rew99j9",
          "minLength": 1,
          "maxLength": 128
        }
      },
      "user_external_id-query-param": {
        "name": "user_external_id",
        "in": "query",
        "required": true,
        "description": "사용자 외부 ID",
        "schema": {
          "type": "string",
          "example": "d342dad2-9d59-11e9-a384-42010aa8003f"
        }
      },
      "codes-query-param": {
        "name": "codes[]",
        "in": "query",
        "description": "고유한 대/소문자 구분 코드입니다. 문자와 숫자만 포함합니다.",
        "schema": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          }
        }
      },
      "is_enabled-query-param": {
        "name": "is_enabled",
        "in": "query",
        "required": false,
        "description": "`is_enabled` 플래그로 요소를 필터링합니다.",
        "schema": {
          "type": "integer"
        }
      },
      "personalized-catalog-rule_id-path-param": {
        "name": "rule_id",
        "in": "path",
        "required": true,
        "description": "규칙 ID입니다.",
        "schema": {
          "type": "number",
          "example": 1
        }
      },
      "item_sku-path-param": {
        "name": "item_sku",
        "in": "path",
        "required": true,
        "description": "아이템 SKU입니다.",
        "schema": {
          "type": "string",
          "example": "booster_mega_1"
        }
      },
      "value_point_sku-path-param": {
        "name": "value_point_sku",
        "in": "path",
        "required": true,
        "description": "가치 포인트 SKU입니다.",
        "schema": {
          "type": "string",
          "example": "value_point_3"
        }
      },
      "reward_chain_id-path-param": {
        "name": "reward_chain_id",
        "in": "path",
        "required": true,
        "description": "보상 체인 ID입니다.",
        "schema": {
          "type": "integer",
          "example": 101
        }
      },
      "reward_chain_step_id-path-param": {
        "name": "step_id",
        "in": "path",
        "required": true,
        "description": "보상 체인의 단계 ID입니다.",
        "schema": {
          "type": "integer",
          "example": 120
        }
      },
      "is_expired-daily-chain-query-param": {
        "name": "is_expired",
        "in": "query",
        "required": false,
        "description": "만료된 보상만 표시하도록 일일 보상을 필터링합니다.",
        "schema": {
          "type": "integer"
        }
      },
      "type-daily-chain-query-param": {
        "name": "type",
        "in": "query",
        "required": false,
        "description": "필터를 통해 일일 보상을 필터링하여 지정된 유형만 반환합니다.",
        "schema": {
          "type": "string",
          "enum": [
            "calendar_hard",
            "rolling_skippable",
            "rolling_unskippable"
          ]
        }
      },
      "daily_chain_id-path-param": {
        "name": "daily_chain_id",
        "in": "path",
        "required": true,
        "description": "일일 보상 ID입니다.",
        "schema": {
          "type": "integer",
          "example": 101
        }
      },
      "daily_chain_step_number-path-param": {
        "name": "step_number",
        "in": "path",
        "required": true,
        "description": "일일 보상 단계 번호입니다.",
        "schema": {
          "type": "integer",
          "example": 1
        }
      },
      "offer_chain_id-path-param": {
        "name": "offer_chain_id",
        "in": "path",
        "required": true,
        "description": "혜택 체인 ID입니다.",
        "schema": {
          "type": "integer",
          "example": 101
        }
      },
      "offer_chain_step_number-path-param": {
        "name": "step_number",
        "in": "path",
        "required": true,
        "description": "혜택 체인 단계 번호입니다.",
        "schema": {
          "type": "integer",
          "example": 1
        }
      },
      "user_id-path-param": {
        "name": "user_id",
        "in": "path",
        "required": true,
        "description": "시스템의 사용자 ID입니다. 이 ID는 `user.id` 매개 변수 전달하는 값과 일치해야 합니다. 이 매개 변수는 [결제 토큰 생성](https://developers.xsolla.com/ko/api/pay-station/token/create-token) 시 사용되며, 로열티 포인트는 이 사용자 ID와 연결됩니다.",
        "schema": {
          "type": "string",
          "example": "d342dad2-9d59-11e9-a384-42010aa8003f"
        }
      },
      "point_id-path-param": {
        "name": "point_id",
        "in": "path",
        "required": true,
        "description": "로열티 포인트 ID입니다. 로열티 포인트는 관리자 페이지의 [LiveOps > 로열티 프로그램](https://publisher.xsolla.com/0/projects/0/storefront/loyalty-program) 섹션에서 구성합니다. ID를 가져오려면 [카탈로그 조회 API 호출](https://developers.xsolla.com/ko/api/catalog/virtual-items-currency-catalog/get-virtual-items)을 사용합니다. ID는 `loyalty_rewards[].sku` 매개 변수로 반환됩니다.",
        "schema": {
          "type": "string",
          "format": "uuid",
          "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
        }
      }
    },
    "schemas": {
      "Promotions_promotion_id": {
        "type": "integer",
        "description": "프로모션 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다.",
        "example": 1
      },
      "promotion_periods": {
        "type": "array",
        "nullable": false,
        "description": "프로모션의 유효 기간. 기간이 여러 개 지정된 경우 `date_from`와 `date_until`가 모두 필요합니다.",
        "items": {
          "type": "object",
          "properties": {
            "date_from": {
              "type": "string",
              "format": "date-time",
              "nullable": false,
              "example": "2020-08-11T10:00:00+03:00",
              "description": "지정된 프로모션의 시작 날짜."
            },
            "date_until": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time",
              "example": "2020-08-11T20:00:00+03:00",
              "description": "지정된 프로모션의 종료 날짜. `null`로 설정된 경우 프로모션은 무기한입니다. 단일 유효 기간이 지정된 경우에만 `null`로 설정할 수 있습니다."
            }
          },
          "required": [
            "date_from"
          ]
        }
      },
      "Promotions_coupon_name": {
        "type": "object",
        "description": "프로모션의 이름입니다. 키가 \"^[a-z]{2}-[A-Z]{2}$\" 형식의 로케일인\n키/값 쌍을 포함해야 하며 값은 문자열입니다.",
        "additionalProperties": {
          "type": "string"
        },
        "example": {
          "en-US": "Coupon title",
          "de-DE": "Gutscheintitel"
        },
        "default": {
          "en-US": "Coupon title",
          "de-DE": "Gutscheintitel"
        }
      },
      "unit_items": {
        "type": "array",
        "description": "플랫폼별 게임 키 모음. 아이템 유형이 `unit`(`bonus.item.type = 'unit'`)인 경우에만 사용됩니다. 게임 키 패키지에 플랫폼별 키가 포함되어 있는 경우, 사용자는 그중 하나를 보너스로 선택할 수 있습니다.",
        "items": {
          "type": "object",
          "properties": {
            "sku": {
              "type": "string",
              "example": "cool_game_steam",
              "pattern": "^[a-zA-Z0-9_\\-.]*$",
              "description": "고유한 플랫폼별 게임 키 패키지 ID. 허용된 문자: a–z, A–Z, 0–9, 맞침표(`.`), 하이픈(`-`), 밑줄(`_`). `bonus.item.​sku` 및 `bonus.item.unit_items.drm_sku` 값을 결합합니다. 예를 들어, `bonus.item.​sku = 'cool_game'` 및 `bonus.item.unit_items.drm_sku = 'steam'`인 경우, 값은 `cool_game_steam`이 됩니다."
            },
            "is_free": {
              "type": "boolean"
            },
            "type": {
              "type": "string",
              "enum": [
                "game_key"
              ],
              "description": "아이템이 게임 키인지 여부를 나타냅니다."
            },
            "name": {
              "type": "string",
              "example": "Awesome Game",
              "description": "게임 타이틀입니다."
            },
            "drm_name": {
              "type": "string",
              "example": "Steam",
              "description": "DRM 이름입니다."
            },
            "drm_sku": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_\\-.]*$",
              "example": "steam",
              "description": "플랫폼별 게임 키를 나타내기 위해 접미사로 사용되는 고유한 DRM ID. 허용되는 문자: a–z, A–Z, 0–9, 맞침표(`.`), 하이픈(`-`), 밑줄(`_`)."
            }
          }
        }
      },
      "Promotions_200-coupon-bonus-reward": {
        "type": "object",
        "properties": {
          "item": {
            "type": "object",
            "properties": {
              "sku": {
                "type": "string",
                "example": "game_01",
                "description": "고유 아이템 ID입니다. SKU는 소문자 및 대문자 라틴 영숫자, 마침표, 대시 및 밑줄만 포함할 수 있습니다."
              },
              "name": {
                "type": "object",
                "example": {
                  "en": "Game name"
                },
                "description": "아이템 이름입니다."
              },
              "type": {
                "type": "string",
                "example": "unit",
                "description": "아이템 유형. 가능한 값:<ul><li><code>virtual_good</code> - 가상 아이템</li><li><code>virtual_currency</code> - 가상 통화</li><li><code>bundle</code> - 번들</li><li><code>unit</code> - 게임 키 패키지</li></ul>"
              },
              "bundle_type": {
                "type": "string",
                "description": "번들 유형입니다. 아이템 유형이 번들인 경우 반환됩니다.",
                "enum": [
                  "standard",
                  "virtual_currency_package"
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "Game description",
                "description": "아이템 설명입니다."
              },
              "image_url": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                "description": "이미지 URL입니다."
              },
              "content": {
                "type": "array"
              },
              "unit_items": {
                "$ref": "#/components/schemas/unit_items"
              }
            }
          },
          "quantity": {
            "type": "number",
            "description": "아이템 수량입니다.",
            "default": 1
          }
        }
      },
      "Promotions_sku": {
        "type": "string",
        "example": "booster_mega_1",
        "description": "고유 아이템 ID입니다. SKU는 소문자 및 대문자 라틴 영숫자, 마침표, 대시 및 밑줄만 포함할 수 있습니다."
      },
      "Promotions_name": {
        "type": "object",
        "description": "아이템의 이름입니다. 키가 \"^[a-z]{2}-[A-Z]{2}$\" 형식의 로케일인\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": "아이템의 유형: `virtual_good`/`virtual_currency`/`bundle`/`physical_good`/`unit`."
      },
      "Promotions_redeem_code_limit": {
        "type": [
          "integer",
          "null"
        ],
        "description": "코드당 사용 횟수입니다.",
        "example": 10,
        "default": 10
      },
      "Promotions_promotion_condition": {
        "type": [
          "array",
          "null"
        ],
        "items": {
          "description": "사용자가 보너스로 받은 아이템의 목록입니다.",
          "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": "아이템 설명입니다."
                },
                "image_url": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "example": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                  "description": "이미지 URL입니다."
                },
                "external_id": {
                  "type": "string",
                  "description": "프로모션 외부 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다.",
                  "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": "프로모션 유형입니다.",
        "example": "item_discount"
      },
      "Promotions_promotion_discount_percent": {
        "type": [
          "string",
          "null"
        ],
        "description": "퍼센트 할인입니다.\n이 퍼센트를 사용하여 계산한 값을 사용하여 장바구니 항목의 가격을 낮추어 계산한 다음 소수점 이하 2자리로 반올림합니다.",
        "default": "10.00",
        "example": "10.00"
      },
      "promotion_recurrent_schedule_response": {
        "type": [
          "object",
          "null"
        ],
        "description": "새로고침 기간을 제한합니다.",
        "properties": {
          "per_user": {
            "type": [
              "object",
              "null"
            ],
            "description": "사용자 제한 새로고침 기간입니다.",
            "oneOf": [
              {
                "type": "object",
                "title": "interval_type = 일일",
                "description": "일일 사용자 유형 제한 설정을 새로고침합니다.",
                "properties": {
                  "interval_type": {
                    "type": "string",
                    "description": "반복 새로고침 기간 유형입니다.",
                    "enum": [
                      "daily"
                    ]
                  },
                  "time": {
                    "type": "string",
                    "description": "원하는 시간대의 제한 시간 새로고침 시간입니다(시간 단위로 반올림).",
                    "format": "full-time",
                    "example": "11:00:00+03:00"
                  },
                  "reset_next_date": {
                    "type": "integer",
                    "description": "새로고침 제한 설정이 적용되는 날짜 및 시간입니다(Unix 타임스탬프)",
                    "example": 1677553200
                  },
                  "displayable_reset_start_date": {
                    "description": "첫 번째 제한 설정을 새로고침하는 날짜 및 시간입니다(ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  },
                  "displayable_reset_next_date": {
                    "description": "제한 설정을 재설정해야 하는 날짜 및 시간입니다(ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  }
                }
              },
              {
                "type": "object",
                "title": "interval_type = 주간",
                "description": "주간 사용자 유형 제한 설정을 새로고침합니다.",
                "properties": {
                  "interval_type": {
                    "type": "string",
                    "description": "반복 새로고침 기간 유형입니다.",
                    "enum": [
                      "weekly"
                    ]
                  },
                  "day_of_week": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "제한을 새로고침하는 요일입니다. 여기서 1은 월요일이고 7은 일요일입니다. `weekly` 제한 설정 새로고침 기간 유형만 `null`이 아닙니다.",
                    "minimum": 1,
                    "maximum": 7
                  },
                  "time": {
                    "type": "string",
                    "description": "원하는 시간대의 제한 시간 새로고침 시간입니다(시간 단위로 반올림).",
                    "format": "full-time",
                    "example": "11:00:00+03:00"
                  },
                  "reset_next_date": {
                    "type": "integer",
                    "description": "새로고침 제한 설정이 적용되는 날짜 및 시간입니다(Unix 타임스탬프)",
                    "example": 1677553200
                  },
                  "displayable_reset_start_date": {
                    "description": "첫 번째 제한 설정을 새로고침하는 날짜 및 시간입니다(ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  },
                  "displayable_reset_next_date": {
                    "description": "제한 설정을 재설정해야 하는 날짜 및 시간입니다(ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  }
                }
              },
              {
                "type": "object",
                "title": "interval_type = 월간",
                "description": "월간 사용자 제한 설정 새로고침 유형입니다.",
                "properties": {
                  "interval_type": {
                    "type": "string",
                    "description": "반복 새로고침 기간 유형입니다.",
                    "enum": [
                      "monthly"
                    ]
                  },
                  "day_of_month": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "제한 설정을 새로고침하는 날짜입니다. 해당 월의 일수가 짧아 선택한 날짜가 없으면 해당 월의 마지막 날에 새로고침합니다. `monthly` 제한 설정 새로고침 기간 유형만 `null`이 아닙니다.",
                    "minimum": 1,
                    "maximum": 31
                  },
                  "time": {
                    "type": "string",
                    "description": "원하는 시간대의 제한 시간 새로고침 시간입니다(시간 단위로 반올림).",
                    "format": "full-time",
                    "example": "11:00:00+03:00"
                  },
                  "reset_next_date": {
                    "type": "integer",
                    "description": "새로고침 제한 설정이 적용되는 날짜 및 시간입니다(Unix 타임스탬프)",
                    "example": 1677553200
                  },
                  "displayable_reset_start_date": {
                    "description": "첫 번째 제한 설정을 새로고침하는 날짜 및 시간입니다(ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  },
                  "displayable_reset_next_date": {
                    "description": "제한 설정을 재설정해야 하는 날짜 및 시간입니다(ISO 8601).",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-02-28T11:00:00+08:00"
                  }
                }
              }
            ]
          }
        }
      },
      "Promotions_promotion_limits_response": {
        "type": "object",
        "description": "프로모션 제한입니다.",
        "properties": {
          "per_user": {
            "type": [
              "object",
              "null"
            ],
            "description": "개별 사용자에 대한 프로모션 제한입니다.",
            "properties": {
              "total": {
                "type": "integer",
                "description": "사용자 한 명이 구매할 수 있는 총 아이템 개수입니다. 관리자 페이지에서 개수를 설정하거나 스토어 엔터티(제한 개체)에 관리 엔드포인트를 사용할 수 있습니다.",
                "example": 5
              }
            }
          },
          "per_item": {
            "type": [
              "integer",
              "null"
            ],
            "description": "전역 항목 제한 사항입니다.",
            "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": "총 프로모션 개수입니다."
      },
      "active_promotions_count": {
        "type": "integer",
        "description": "활성 프로모션의 수입니다."
      },
      "inactive_promotions_count": {
        "type": "integer",
        "description": "비활성 프로모션의 수입니다."
      },
      "Promotions_coupon-external_id": {
        "type": "string",
        "example": "coupon_external_id",
        "default": "coupon_external_id",
        "description": "고유 프로모션 ID입니다. `external_id`는 소문자 및 대문자 라틴 영숫자, 마침표, 대시 및 밑줄만 포함할 수 있습니다."
      },
      "Promotions_coupon_bonus": {
        "type": [
          "array",
          "null"
        ],
        "items": {
          "description": "사용자의 구매 항목에 보너스로 추가될 아이템의 목록입니다.",
          "type": "object",
          "properties": {
            "sku": {
              "type": "string",
              "description": "아이템 SKU입니다.",
              "default": "elven_shield"
            },
            "quantity": {
              "type": "number",
              "description": "아이템 수량입니다.",
              "default": 1
            }
          }
        }
      },
      "Promotions_coupon-redeem_total_limit": {
        "type": [
          "integer",
          "null"
        ],
        "description": "총 쿠폰 수를 제한합니다.",
        "example": 10,
        "default": 10
      },
      "Promotions_coupon-redeem_user_limit": {
        "type": [
          "integer",
          "null"
        ],
        "description": "단일 사용자가 사용한 총 쿠폰 수를 제한합니다.",
        "example": 10,
        "default": 10
      },
      "Promotions_coupon_total_limit_state": {
        "type": [
          "object",
          "null"
        ],
        "description": "각 쿠폰 코드별 사용 제한입니다.",
        "properties": {
          "available": {
            "type": "integer",
            "description": "쿠폰을 사용할 수 있는 남은 횟수입니다.",
            "example": 3
          },
          "reserved": {
            "type": "integer",
            "description": "쿠폰의 예약 횟수입니다.",
            "example": 3
          },
          "used": {
            "type": "integer",
            "description": "쿠폰이 사용된 횟수입니다.",
            "example": 5
          }
        }
      },
      "Promotions_cart_item_discount": {
        "type": "string",
        "nullable": false,
        "description": "퍼센트 할인입니다.\n\n이 퍼센트를 사용하여 계산한 값을 사용하여\n장바구니 아이템의 가격이 낮아지게 한 다음\n소수점 이하 2자리로 반올림합니다.",
        "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": "프로모션 코드에만 해당됩니다.",
            "properties": {
              "percent": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "퍼센트 할인입니다.\n이 퍼센트를 사용하여 계산한 값을 사용하여 장바구니 항목의 가격을 낮추어 계산한 다음 소수점 이하 2자리로 반올림합니다.",
                "default": "10.00",
                "example": "10.00"
              }
            },
            "example": {
              "discount": {
                "percent": "10.99"
              }
            }
          },
          "discounted_items": {
            "type": [
              "array",
              "null"
            ],
            "description": "프로모션 코드로 할인한 아이템의 목록입니다. 프로모션 코드에만 해당됩니다.",
            "items": {
              "description": "장바구니의 특정 아이템에 대한 할인입니다.",
              "type": "object",
              "properties": {
                "sku": {
                  "type": "string",
                  "description": "아이템 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": "사용자가 보너스로 선택한 플랫폼 전용 게임 키. 키로 [received](/ko/api/liveops/promotions-coupons/get-coupon-rewards-by-code#promotions-coupons/get-coupon-rewards-by-code/t=response&c=200&path=bonus/item) `bonus.item.sku`를 전달학고 값으로 선택된 `bonus.item.unit_items.sku`를 전달합니다.",
        "additionalProperties": {
          "type": "string"
        },
        "example": {
          "game_1": "game_1_steam",
          "game_2": "game_2_playstation"
        }
      },
      "Promotions_200-coupon-discount-reward": {
        "type": [
          "object",
          "null"
        ],
        "description": "퍼센트 할인입니다.\n이 퍼센트를 사용하여 계산한 값을 사용하여 장바구니 항목의 가격을 낮추어 계산한 다음 소수점 이하 2자리로 반올림합니다.",
        "properties": {
          "percent": {
            "type": "string",
            "example": "10.00"
          }
        }
      },
      "Promotions_422_limit_error": {
        "description": "사용 한도에 도달했습니다.",
        "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": "쿠폰을 사용자의 지역에서 사용할 수 없습니다.",
        "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": "사용자 특성 코드입니다.",
        "minLength": 1,
        "maxLength": 255,
        "pattern": "^[-_.\\d\\w]+$"
      },
      "user-attribute_conditions_properties_type-string": {
        "type": "string",
        "enum": [
          "string"
        ],
        "description": "사용자 특성 유형입니다."
      },
      "user-attribute_conditions_properties_operator_string": {
        "type": "string",
        "enum": [
          "eq",
          "ne"
        ],
        "description": "조건에 따라 수행하는 작업 유형입니다. <code>string</code> 특성 유형에 해당합니다.\n\n가능한 값:\n- `eq` - 동일\n- `ne` - 동일하지 않음"
      },
      "user-attribute_conditions_properties_value": {
        "type": "string",
        "description": "사용자 특성 값을 비교할 조건 값입니다. 유형은 특성 유형에 따라 다릅니다.",
        "maxLength": 255
      },
      "user-attribute_conditions_properties_can_be_missing": {
        "type": "boolean",
        "description": "사용자 특성에서 특성이 누락된 경우에도 조건이 충족됨을 나타냅니다. 이 특성이 없는 사용자에게 항목을 표시하려면 `true`를 전달하십시오. 특성이 있지만 값이 조건에 지정된 값과 일치하지 않는 사용자는 항목을 볼 수 없습니다. `false` - 특성이 있지만 값이 조건에 지정된 값과 일치하지 않거나 특성이 누락된 사용자는 항목을 볼 수 없습니다."
      },
      "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_conditions_properties_operator_number": {
        "type": "string",
        "enum": [
          "eq",
          "ne",
          "gt",
          "ge",
          "lt",
          "le"
        ],
        "description": "조건에 따라 수행하는 작업 유형입니다. <code>number</code> 특성 유형에 해당합니다.\n\n가능한 값:\n- `eq` - 동일\n- `ne` - 동일하지 않음\n- `gt` - 초과\n- `ge` - 이상\n- `lt` - 미만\n- `le` - 이하"
      },
      "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_conditions_properties_operator_date": {
        "type": "string",
        "enum": [
          "eq",
          "ne",
          "lt",
          "gt",
          "le",
          "ge"
        ],
        "description": "조건에 따라 수행하는 작업 유형입니다. <code>date</code> 특성 유형에 해당합니다.\n\n가능한 값:\n- `eq` - 동일\n- `ne` - 동일하지 않음\n- `lt` - 보다 작음\n- `gt` - 보다 큼\n- `le` - 보다 작거나 동일\n- `ge` - 보다 크거나 동일"
      },
      "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": "사용자 특성 검증 조건. 사용자 특성이 지정된 모든 조건과 일치하는지 여부에 따라 프로모션의 가용성을 결정합니다."
          }
        ]
      },
      "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": "사용자 특성 검증 조건. 사용자 특성이 지정된 모든 조건과 일치하는지 여부에 따라 프로모션의 가용성을 결정합니다."
          }
        ]
      },
      "Promotions_coupon_code": {
        "type": "string",
        "description": "고유한 대/소문자 구분 코드입니다. 문자와 숫자를 포함합니다.",
        "minLength": 1,
        "maxLength": 128,
        "example": "WINTER2021",
        "default": "WINTER2021",
        "pattern": "^[a-zA-Z0-9]+$"
      },
      "Promotions_coupon-generate-count": {
        "type": "integer",
        "minimum": 1,
        "maximum": 50000,
        "example": 10
      },
      "value-is_free": {
        "type": "boolean",
        "example": false,
        "default": false,
        "description": "아이템이 무료인지 여부입니다."
      },
      "Catalog_item_promotions": {
        "type": "array",
        "description": "장바구니의 특정 아이템에 적용된 프로모션. 다음의 경우 배열이 반환됩니다.\n\n* 특정 아이템에 대한 할인 프로모션이 구성된 경우\n\n* **선택한 아이템 할인** 설정이 있는 프로모션 코드가 적용된 경우\n\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": "보너스 아이템 유형입니다.",
                    "enum": [
                      "virtual_good",
                      "virtual_currency",
                      "bundle",
                      "physical_good",
                      "game_key",
                      "nft"
                    ]
                  },
                  "name": {
                    "type": "string",
                    "description": "보너스 아이템 이름입니다. `physical_good` 보너스 아이템 유형에는 사용할 수 없습니다."
                  },
                  "image_url": {
                    "type": "string",
                    "description": "보너스 아이템 이미지 URL입니다. `physical_good` 보너스 아이템 유형에는 사용할 수 없습니다."
                  },
                  "bundle_type": {
                    "type": "string",
                    "description": "보너스 번들 아이템 유형입니다. `bundle` 보너스 아이템 유형에서만 사용할 수 있습니다.",
                    "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": "`true`일 경우 사용자는 아이템을 구매할 수 있습니다."
      },
      "item_id": {
        "type": "integer",
        "example": 1,
        "description": "내부 고유 아이템 ID입니다."
      },
      "value-point-sku": {
        "type": "string",
        "description": "고유 가치 포인트 ID입니다."
      },
      "value-point-amount": {
        "type": "integer",
        "description": "가치 포인트의 금액입니다."
      },
      "value-point-name": {
        "type": "string",
        "description": "가치 포인트 이름입니다."
      },
      "Common_admin-image_url": {
        "type": "string",
        "example": "https://image.example.com",
        "description": "이미지 URL입니다."
      },
      "is_clan": {
        "type": "boolean",
        "description": "값 포인트가 클랜 보상 체인에서 사용되는지 여부입니다.",
        "example": true
      },
      "client-item-value-point-reward": {
        "type": "array",
        "description": "아이템의 가치 포인트 리워드 목록입니다.",
        "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": "아이템이 사용자의 반복 새로고침 기간을 제한합니다.",
        "oneOf": [
          {
            "type": "object",
            "title": "interval_type = 일일",
            "description": "일일 사용자 유형 제한 설정을 새로고침합니다.",
            "properties": {
              "interval_type": {
                "type": "string",
                "description": "반복 새로고침 기간 유형입니다.",
                "enum": [
                  "daily"
                ]
              },
              "reset_next_date": {
                "type": "integer",
                "description": "재설정 제한이 적용되는 날짜 및 시간입니다(Unix 타임스탬프)",
                "example": 1677553200
              }
            }
          },
          {
            "type": "object",
            "title": "interval_type = 주간",
            "description": "주간 사용자 유형 제한 설정을 새로고침합니다.",
            "properties": {
              "interval_type": {
                "type": "string",
                "description": "반복 새로고침 기간 유형입니다.",
                "enum": [
                  "weekly"
                ]
              },
              "reset_next_date": {
                "type": "integer",
                "description": "재설정 제한이 적용되는 날짜 및 시간입니다(Unix 타임스탬프)",
                "example": 1677553200
              }
            }
          },
          {
            "type": "object",
            "title": "interval_type = 월간",
            "description": "월간 사용자 제한 설정 새로고침 유형입니다.",
            "properties": {
              "interval_type": {
                "type": "string",
                "description": "반복 새로고침 기간 유형입니다.",
                "enum": [
                  "monthly"
                ]
              },
              "reset_next_date": {
                "type": "integer",
                "description": "재설정 제한이 적용되는 날짜 및 시간입니다(Unix 타임스탬프)",
                "example": 1677553200
              }
            }
          },
          {
            "type": "object",
            "title": "interval_type = 시간",
            "description": "사용자 제한이 지정된 시간 간격(시간 단위)으로 재설정됩니다.",
            "properties": {
              "interval_type": {
                "type": "string",
                "description": "반복 새로고침 기간 유형입니다.",
                "enum": [
                  "hourly"
                ]
              },
              "reset_next_date": {
                "type": "integer",
                "description": "재설정 제한이 적용되는 날짜 및 시간입니다(Unix 타임스탬프)",
                "example": 1677553200
              }
            }
          }
        ]
      },
      "limit_exceeded_visibility": {
        "type": "string",
        "example": "show",
        "enum": [
          "show",
          "hide"
        ],
        "description": "구매 한도에 도달한 후 다음 한도 재설정 때까지 카탈로그 내 아이템의 표시 여부를 결정합니다.\n\n`recurrent_schedule` 배열에서 반복 한도 재설정이 구성된 아이템에 적용됩니다.\n\n구매 한도에 도달한 후, 한도 초기화를 구성하지 않았다면`limit_exceeded_visibility` 값과 관계없이 해당 아이템은 카탈로그에 표시되지 않습니다.\n\n사용 가능한 값: - `show` - 구매 한도에 도달한 이후에도 카탈로그 검색 API 호출 시 해당 아이템이 반환됩니다. 클라이언트 측 카탈로그 검색 API 호출에서 한도에 도달하면, 해당 아이템은 `can_be_bought: false` 플래그와 함께 반환됩니다. 다음 재설정 날짜는 `reset_next_date`에 반환됩니다. - `hide` - 구매 한도에 도달한 후, 한도가 재설정될 때까지 해당 아이템은 카탈로그 검색 API 호출에서 반환되지 않습니다.",
        "default": "show"
      },
      "Catalog_item_limits": {
        "description": "아이템 제한 사항입니다.",
        "properties": {
          "per_user": {
            "type": [
              "object",
              "null"
            ],
            "description": "사용자 한 명에 대한 아이템 제한 사항입니다.",
            "properties": {
              "total": {
                "type": "integer",
                "description": "사용자 한 명이 구매할 수 있는 최대 아이템 수량입니다.",
                "example": 5
              },
              "available": {
                "type": "integer",
                "description": "현재 사용자가 구매할 수 있는 남은 아이템 수량.",
                "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": "한 개 아이템에 대한 아이템 제한 사항입니다.",
            "properties": {
              "total": {
                "type": "integer",
                "description": "모든 사용자가 구매할 수 있는 최대 아이템 수량.",
                "example": 5
              },
              "available": {
                "type": "integer",
                "description": "모든 사용자가 구매할 수 있는 남은 아이템 수량.",
                "example": 3
              }
            }
          }
        },
        "type": [
          "object",
          "null"
        ]
      },
      "item-periods": {
        "type": [
          "array",
          "null"
        ],
        "description": "아이템 판매 기간입니다.",
        "items": {
          "type": "object",
          "properties": {
            "date_from": {
              "type": "string",
              "format": "date-time",
              "example": "2020-08-11T10:00:00+03:00",
              "description": "지정된 아이템을 판매할 수 있는 날짜입니다."
            },
            "date_until": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time",
              "example": "2020-08-11T20:00:00+03:00",
              "description": "지정된 아이템을 판매할 수 없게 되는 날짜입니다. `null`일 수 있습니다."
            }
          }
        }
      },
      "Promotions_200-promo-code-bonus-reward": {
        "type": "object",
        "properties": {
          "item": {
            "type": "object",
            "properties": {
              "sku": {
                "type": "string",
                "example": "game_01",
                "description": "고유 아이템 ID입니다. SKU는 소문자 및 대문자 라틴 영숫자, 마침표, 대시 및 밑줄만 포함할 수 있습니다."
              },
              "name": {
                "type": "string",
                "example": "Game name",
                "description": "아이템 이름입니다."
              },
              "type": {
                "type": "string",
                "example": "unit",
                "description": "아이템 유형. 가능한 값:<ul><li><code>virtual_good</code> - 가상 아이템</li><li><code>virtual_currency</code> - 가상 통화</li><li><code>bundle</code> - 번들</li><li><code>unit</code> - 게임 키 패키지</li></ul>"
              },
              "description": {
                "type": "string",
                "example": "Game description",
                "description": "아이템 설명입니다."
              },
              "image_url": {
                "type": "string",
                "example": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
                "description": "이미지 URL입니다."
              },
              "unit_items": {
                "$ref": "#/components/schemas/unit_items"
              }
            }
          },
          "quantity": {
            "type": "number",
            "description": "아이템 수량입니다.",
            "default": 1
          }
        }
      },
      "Promotions_discounted_items": {
        "type": [
          "array",
          "null"
        ],
        "description": "프로모션 코드로 할인한 아이템의 목록입니다.",
        "items": {
          "description": "장바구니의 특정 아이템에 대한 할인입니다.",
          "type": "object",
          "properties": {
            "sku": {
              "type": "string",
              "description": "아이템 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": "`true`인 경우 사용자는 프로모션 코드를 사용하기 전에 보너스를 선택해야 합니다."
          }
        }
      },
      "admin-attribute-external_id": {
        "type": "string",
        "minLength": 1,
        "maxLength": 255,
        "pattern": "^[a-zA-Z0-9-_]+$",
        "example": "attribute_1",
        "description": "고유 특성 ID입니다. `external_id`는 소문자 및 대문자 라틴 영숫자, 대시 및 밑줄만 포함할 수 있습니다."
      },
      "value-external_id": {
        "type": "string",
        "minLength": 1,
        "maxLength": 255,
        "pattern": "^[-_.\\d\\w]+$",
        "example": "attribute_value",
        "description": "특성의 고유한 값 ID입니다. `external_id`에는 소문자 라틴어 영숫자, 대시, 밑줄만 사용할 수 있습니다."
      },
      "client-attributes": {
        "type": "array",
        "description": "아이템에 해당하는 특성 및 해당 값의 목록입니다. 카탈로그 필터링에 사용할 수 있습니다.",
        "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": "특성의 이름입니다.",
              "example": "Genre"
            },
            "values": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "$ref": "#/components/schemas/value-external_id"
                  },
                  "value": {
                    "type": "string",
                    "description": "특성의 값입니다.",
                    "example": "Strategy"
                  }
                }
              }
            }
          }
        }
      },
      "Promotions_promocode_total_limit_state": {
        "type": [
          "object",
          "null"
        ],
        "description": "각 고유 프로모션 코드별 사용 제한입니다.",
        "properties": {
          "available": {
            "type": "integer",
            "description": "프로모션 코드를 사용할 수 있는 남은 횟수입니다.",
            "example": 3
          },
          "reserved": {
            "type": "integer",
            "description": "프로모션 코드가 예약된 횟수입니다.",
            "example": 3
          },
          "used": {
            "type": "integer",
            "description": "프로모션 코드가 사용된 횟수입니다.",
            "example": 5
          }
        }
      },
      "price_conditions_items": {
        "description": "각 개체는 가격에 적용되는 규칙을 설명합니다.",
        "type": "object",
        "properties": {
          "operator": {
            "type": "string",
            "description": "프로모션을 적용하기 위한 가격 범위를 설정하기 위한 비교 연산자입니다.\n\n가능한 값:\n- `ge` - 이상\n- `gt` - 초과\n- `le` - 이하\n- `lt` - 미만\n- `eq` - 동일\n- `ne` - 동일하지 않음",
            "enum": [
              "ge",
              "gt",
              "le",
              "lt",
              "eq",
              "ne"
            ]
          },
          "value": {
            "type": "string",
            "description": "프로모션을 적용하기 위한 가격 범위를 결정하기 위한 값입니다.",
            "pattern": "^\\d+(\\.\\d{1,4})?$"
          }
        },
        "required": [
          "operator",
          "value"
        ]
      },
      "price_conditions_promocode": {
        "type": [
          "array",
          "null"
        ],
        "description": "프로모션을 전체 카트에 적용하기 위한 가격 범위를 설정하는 조건을 가진 개체 배열입니다.<br>\n 사용자 장바구니에 있는 모든 아이템의 총 가격을 조건에 지정된 가격 범위와 비교합니다.[보너스](/ko/api/shop-builder/operation/create-promo-code/#!path=bonus&t=request) 및 [할인](/ko/api/shop-builder/operation/create-promo-code/#!path=discount&t=request)은 장바구니의 가격이 지정된 조건을 충족할 경우 장바구니의 모든 아이템에 적용됩니다.<br>\n이 배열을 전달할 경우 [discounted_items](/ko/api/shop-builder/operation/create-promo-code/#!path=discounted_items&t=request) 배열의 값이 `null`로 설정됩니다.",
        "items": {
          "$ref": "#/components/schemas/price_conditions_items"
        }
      },
      "item_price_conditions_promocode": {
        "type": [
          "array",
          "null"
        ],
        "description": "장바구니의 특정 아이템에 프로모션을 적용하기 위한 가격 범위를 설정하는 조건을 가진 개체 배열입니다.<br>\n사용자 장바구니에 있는 각 아이템의 가격은 조건에 지정된 가격 범위와 비교됩니다.[보너스](/ko/api/shop-builder/operation/create-promo-code/#!path=bonus&t=request) 및 [할인](/ko/api/shop-builder/operation/create-promo-code/#!path=discount&t=request)은 가격이 조건을 충족하는 장바구니에 있는 아이템에만 적용됩니다.<br>\n이 배열을 전달하면 [discounted_items](/ko/api/shop-builder/operation/create-promo-code/#!path=discounted_items&t=request) 배열의 값이 `null`로 설정됩니다.",
        "items": {
          "$ref": "#/components/schemas/price_conditions_items"
        }
      },
      "excluded_promotions": {
        "type": "array",
        "items": {
          "type": "integer"
        },
        "example": [
          12,
          789
        ],
        "description": "이 프로모션을 적용할 때 제외할 프로모션 ID 목록입니다. <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": "프로모션 활성화 여부."
      },
      "price_conditions_discount": {
        "type": [
          "array",
          "null"
        ],
        "description": "프로모션을 적용하기 위한 가격 범위를 설정하는 조건을 가진 개체 배열입니다.<br> 프로모션은 가격이 배열의 모든 조건을 충족하는 아이템에만 적용됩니다. 이 배열을 전달하는 경우 [아이템](/ko/api/shop-builder/operation/create-item-promotion/#!path=items&t=request) 개체의 값이 `null`로 설정됩니다.",
        "items": {
          "$ref": "#/components/schemas/price_conditions_items"
        }
      },
      "Promotions_promotion_limits": {
        "type": "object",
        "description": "프로모션 제한입니다.",
        "properties": {
          "per_user": {
            "type": [
              "integer",
              "null"
            ],
            "description": "개별 사용자에 대한 프로모션 제한입니다."
          },
          "recurrent_schedule": {
            "$ref": "#/components/schemas/promotion_recurrent_schedule_response"
          }
        }
      },
      "price_conditions_bonus": {
        "type": [
          "array",
          "null"
        ],
        "description": "프로모션을 적용하기 위한 가격 범위를 설정하는 조건을 가진 개체 배열입니다.<br> 프로모션은 가격이 배열의 모든 조건을 충족하는 아이템에만 적용됩니다. 이 배열을 전달하는 경우 [조건](/ko/api/shop-builder/operation/create-bonus-promotion/#!path=condition&t=request) 개체의 값이 `null`로 설정됩니다.",
        "items": {
          "$ref": "#/components/schemas/price_conditions_items"
        }
      },
      "Promotions_200-get-bonus-promotion-model": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "프로모션 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다."
          },
          "promotion_periods": {
            "$ref": "#/components/schemas/promotion_periods"
          },
          "name": {
            "type": "object",
            "description": "프로모션의 이름입니다. 키가 \"^[a-z]{2}-[A-Z]{2}$\" 형식의 로케일인\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": "프로모션을 적용하기 위해 구매 항목에 포함되어야 하는 아이템 세트입니다. 이 매개 변수가 `null`이면 프로젝트 내의 모든 구매 항목에 프로모션이 적용됩니다.",
            "items": {
              "type": "object",
              "properties": {
                "sku": {
                  "type": "string",
                  "description": "아이템 SKU입니다.",
                  "default": "elven_sword"
                }
              }
            }
          },
          "bonus": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "description": "사용자의 구매 항목에 보너스로 추가될 아이템의 목록입니다.",
              "type": "object",
              "properties": {
                "sku": {
                  "type": "string",
                  "description": "아이템 SKU입니다.",
                  "default": "elven_shield"
                },
                "quantity": {
                  "type": "number",
                  "description": "아이템 수량입니다.",
                  "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": "`true`인 경우 사용자는 쿠폰을 사용하기 전에 보너스를 선택해야 합니다."
          }
        }
      },
      "Promotions_discounted_items_verify": {
        "type": [
          "array",
          "null"
        ],
        "description": "프로모션 코드로 할인한 아이템의 목록입니다.",
        "items": {
          "description": "특정 아이템에 대한 할인입니다.",
          "type": "object",
          "properties": {
            "sku": {
              "type": "string",
              "example": "game_01",
              "description": "고유 아이템 ID입니다. SKU는 소문자 및 대문자 라틴 영숫자, 마침표, 대시 및 밑줄만 포함할 수 있습니다."
            },
            "name": {
              "type": "string",
              "example": "Game name",
              "description": "아이템 이름입니다."
            },
            "type": {
              "type": "string",
              "example": "unit",
              "description": "아이템 유형. 가능한 값:<ul><li><code>virtual_good</code> - 가상 아이템</li><li><code>virtual_currency</code> - 가상 통화</li><li><code>bundle</code> - 번들</li><li><code>unit</code> - 게임 키 패키지</li></ul>"
            },
            "description": {
              "type": "string",
              "example": "Game description",
              "description": "아이템 설명입니다."
            },
            "image_url": {
              "type": "string",
              "example": "https://cdn.xsolla.net/img/misc/images/b79342cdf24f0f8557b63c87e8326e62.png",
              "description": "이미지 URL입니다."
            },
            "unit_items": {
              "$ref": "#/components/schemas/unit_items"
            },
            "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": "`true`인 경우 사용자는 프로모션 코드를 사용하기 전에 보너스를 선택해야 합니다."
          }
        }
      },
      "sku": {
        "type": "string",
        "minLength": 1,
        "maxLength": 255,
        "pattern": "^[a-zA-Z0-9_\\-–.]*$",
        "example": "booster_mega_1",
        "description": "고유 아이템 ID입니다. SKU는 소문자 및 대문자 라틴 영숫자, 마침표, 대시 및 밑줄만 포함할 수 있습니다."
      },
      "Promotions_unique_catalog_offer_items": {
        "type": "array",
        "description": "고유 카탈로그 혜택을 이용한 후 사용할 수 있는 아이템 SKU 목록입니다.",
        "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": "프로모션이 시작되는 날짜입니다."
      },
      "Promotions_coupon_date_end": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "default": "2020-04-15T18:16:00+05:00",
        "description": "프로모션이 완료되는 날짜입니다. `null`일 수 있습니다. `date_end`가 `null`이면 프로모션이 시간 제한을 받지 않습니다."
      },
      "User-limit-promo-code": {
        "type": "object",
        "properties": {
          "per_user": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "example": 10,
                "description": "사용자가 프로모션 코드를 사용할 수 있는 최대 횟수입니다."
              },
              "available": {
                "type": "integer",
                "example": 9,
                "description": "사용자가 프로모션 코드를 사용할 수 있는 남은 횟수입니다."
              }
            }
          }
        }
      },
      "User-limit-coupon": {
        "type": "object",
        "properties": {
          "per_user": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "example": 10,
                "description": "사용자가 쿠폰을 사용할 수 있는 최대 횟수입니다."
              },
              "available": {
                "type": "integer",
                "example": 9,
                "description": "사용자가 쿠폰을 사용할 수 있는 남은 횟수입니다."
              }
            }
          }
        }
      },
      "Code-limit-promo-code": {
        "type": "object",
        "properties": {
          "code": {
            "$ref": "#/components/schemas/Promotions_coupon_code"
          },
          "per_code": {
            "type": "object",
            "properties": {
              "total": {
                "type": "integer",
                "description": "프로모션 코드를 사용할 수 있는 최대 횟수입니다."
              },
              "available": {
                "type": "integer",
                "description": "프로모션 코드를 사용할 수 있는 남은 횟수입니다."
              },
              "used": {
                "type": "integer",
                "description": "프로모션 코드가 사용된 횟수입니다."
              },
              "reserved": {
                "type": "integer",
                "description": "프로모션 코드가 예약된 횟수입니다."
              }
            }
          }
        }
      },
      "personalized-catalog_user-attribute_conditions_model-get": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-get"
          },
          {
            "description": "사용자 특성 검증 조건. 사용자 특성이 지정된 모든 조건과 일치하는지 여부에 따라 카탈로그의 아이템 가용성을 결정합니다."
          }
        ]
      },
      "user-attribute_personalized-catalog": {
        "type": "object",
        "properties": {
          "rule_id": {
            "type": "number",
            "description": "규칙 ID입니다."
          },
          "name": {
            "type": "string",
            "description": "규칙의 읽을 수 있는 이름입니다. 관리자 페이지에서 규칙을 표시할 때 사용합니다."
          },
          "is_enabled": {
            "type": "boolean",
            "description": "규칙을 사용할 수 있는 경우."
          },
          "is_satisfied_for_unauth": {
            "type": "boolean",
            "description": "인증되지 않은 사용자에게 아이템이 표시되는지 여부입니다. `true`이면 카탈로그 표시 규칙에 관계없이 인증되지 않은 사용자에게 아이템이 표시됩니다. 기본값은 `false`입니다."
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/personalized-catalog_user-attribute_conditions_model-get"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "특성 값이 조건을 충족하는 경우 사용자에게 표시되는 아이템입니다.",
              "properties": {
                "item_id": {
                  "type": "number",
                  "description": "아이템 ID입니다."
                },
                "sku": {
                  "type": "string",
                  "description": "아이템 SKU입니다."
                },
                "name": {
                  "type": "string",
                  "description": "아이템 이름입니다."
                },
                "type": {
                  "type": "string",
                  "description": "아이템 유형입니다.",
                  "enum": [
                    "virtual_good",
                    "virtual_currency",
                    "bundle",
                    "physical_good",
                    "unit"
                  ]
                },
                "bundle_type": {
                  "type": "string",
                  "description": "번들 유형입니다. 아이템 유형이 번들인 경우 반환됩니다.",
                  "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": "사용자 특성 검증 조건. 사용자 특성이 지정된 모든 조건과 일치하는지 여부에 따라 카탈로그의 아이템 가용성을 결정합니다."
          }
        ]
      },
      "user-attribute_personalized-catalog-body-required": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "규칙의 읽을 수 있는 이름입니다. 관리자 페이지에서 규칙을 표시할 때 사용합니다.",
            "minLength": 1,
            "maxLength": 255,
            "pattern": "^\\S"
          },
          "is_enabled": {
            "type": "boolean",
            "description": "규칙을 사용할 수 있는 경우."
          },
          "is_satisfied_for_unauth": {
            "type": "boolean",
            "description": "인증되지 않은 사용자에게 아이템이 표시되는지 여부입니다. `true`이면 카탈로그 표시 규칙에 관계없이 인증되지 않은 사용자에게 아이템이 표시됩니다. 기본값은 `false`입니다."
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/personalized-catalog_user-attribute_conditions_model-post"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "description": "특성 값이 조건을 충족하는 경우 사용자에게 표시되는 아이템입니다.",
                  "properties": {
                    "item_id": {
                      "type": "number",
                      "description": "아이템 ID입니다."
                    }
                  },
                  "required": [
                    "item_id"
                  ]
                },
                {
                  "type": "object",
                  "description": "특성 값이 조건을 충족하는 경우 사용자에게 표시되는 아이템입니다.",
                  "properties": {
                    "sku": {
                      "type": "string",
                      "description": "아이템 SKU입니다."
                    }
                  },
                  "required": [
                    "sku"
                  ]
                }
              ]
            }
          }
        },
        "required": [
          "name",
          "is_enabled",
          "attribute_conditions",
          "items"
        ]
      },
      "422-invalid-request": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "description": "응답 상태 코드입니다.",
            "example": 422
          },
          "errorCode": {
            "type": "number",
            "description": "오류 코드.",
            "example": 1102
          },
          "errorMessage": {
            "type": "string",
            "description": "읽을 수 있는 오류 메시지입니다.",
            "example": "[0401-1102]: Unprocessable Entity. The property `external_id` is required"
          },
          "transactionId": {
            "type": "string",
            "description": "요청의 고유 ID입니다.",
            "example": "da145238620011eb8e24fe6913ff226a"
          }
        }
      },
      "user-attribute_personalized-catalog_all": {
        "type": "object",
        "properties": {
          "rule_id": {
            "type": "number",
            "description": "규칙 ID입니다."
          },
          "name": {
            "type": "string",
            "description": "규칙의 읽을 수 있는 이름입니다. 관리자 페이지에서 규칙을 표시할 때 사용합니다."
          },
          "is_enabled": {
            "type": "boolean",
            "description": "규칙을 사용할 수 있는 경우."
          },
          "is_satisfied_for_unauth": {
            "type": "boolean",
            "description": "인증되지 않은 사용자에게 아이템이 표시되는지 여부입니다. `true`이면 카탈로그 표시 규칙에 관계없이 인증되지 않은 사용자에게 아이템이 표시됩니다. 기본값은 `false`입니다."
          }
        },
        "required": [
          "rule_id",
          "name",
          "is_enabled"
        ]
      },
      "user-attribute_personalized-catalog-body": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "규칙의 읽을 수 있는 이름입니다. 관리자 페이지에서 규칙을 표시할 때 사용합니다.",
            "minLength": 1,
            "maxLength": 255,
            "pattern": "^\\S"
          },
          "is_enabled": {
            "type": "boolean",
            "description": "규칙을 사용할 수 있는 경우."
          },
          "is_satisfied_for_unauth": {
            "type": "boolean",
            "description": "인증되지 않은 사용자에게 아이템이 표시되는지 여부입니다. `true`이면 카탈로그 표시 규칙에 관계없이 인증되지 않은 사용자에게 아이템이 표시됩니다. 기본값은 `false`입니다."
          },
          "attribute_conditions": {
            "$ref": "#/components/schemas/personalized-catalog_user-attribute_conditions_model-post"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "description": "특성 값이 조건을 충족하는 경우 사용자에게 표시되는 아이템입니다.",
                  "properties": {
                    "item_id": {
                      "type": "number",
                      "description": "아이템 ID입니다."
                    }
                  },
                  "required": [
                    "item_id"
                  ]
                },
                {
                  "type": "object",
                  "description": "특성 값이 조건을 충족하는 경우 사용자에게 표시되는 아이템입니다.",
                  "properties": {
                    "sku": {
                      "type": "string",
                      "description": "아이템 SKU입니다."
                    }
                  },
                  "required": [
                    "sku"
                  ]
                }
              ]
            }
          }
        }
      },
      "User-limit_user-external-id": {
        "description": "사용자 외부 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": "사용자가 프로모션을 사용할 수 있는 최대 횟수입니다."
              },
              "available": {
                "type": "integer",
                "example": 9,
                "description": "사용자가 프로모션을 사용할 수 있는 남은 횟수입니다."
              }
            }
          }
        }
      },
      "User-limit_available_flexible": {
        "type": "integer",
        "minimum": 0,
        "description": "적용된 제한 설정 내에서 사용자가 사용할 수 있는 남은 아이템 또는 프로모션 사용 수량입니다."
      },
      "User-limit_available": {
        "type": "integer",
        "minimum": 1,
        "description": "적용된 제한 설정 내에서 사용자가 사용할 수 있는 남은 아이템 또는 프로모션 사용 수량입니다."
      },
      "two-letter-locale": {
        "type": [
          "object",
          "null"
        ],
        "description": "두 글자 소문자 언어 코드입니다.",
        "title": "두 글자",
        "properties": {
          "en": {
            "type": [
              "string",
              "null"
            ],
            "description": "영어"
          },
          "ar": {
            "type": [
              "string",
              "null"
            ],
            "description": "아랍어"
          },
          "bg": {
            "type": [
              "string",
              "null"
            ],
            "description": "불가리아어"
          },
          "cn": {
            "type": [
              "string",
              "null"
            ],
            "description": "중국어(간체)"
          },
          "cs": {
            "type": [
              "string",
              "null"
            ],
            "description": "체코어"
          },
          "de": {
            "type": [
              "string",
              "null"
            ],
            "description": "독일어"
          },
          "es": {
            "type": [
              "string",
              "null"
            ],
            "description": "스페인어(스페인)"
          },
          "fr": {
            "type": [
              "string",
              "null"
            ],
            "description": "프랑스어"
          },
          "he": {
            "type": [
              "string",
              "null"
            ],
            "description": "히브리어"
          },
          "it": {
            "type": [
              "string",
              "null"
            ],
            "description": "이탈리아어"
          },
          "ja": {
            "type": [
              "string",
              "null"
            ],
            "description": "일본어"
          },
          "ko": {
            "type": [
              "string",
              "null"
            ],
            "description": "한국어"
          },
          "pl": {
            "type": [
              "string",
              "null"
            ],
            "description": "폴란드어"
          },
          "pt": {
            "type": [
              "string",
              "null"
            ],
            "description": "포르투칼어"
          },
          "ro": {
            "type": [
              "string",
              "null"
            ],
            "description": "로마니아어"
          },
          "ru": {
            "type": [
              "string",
              "null"
            ],
            "description": "러시아어"
          },
          "th": {
            "type": [
              "string",
              "null"
            ],
            "description": "태국어"
          },
          "tr": {
            "type": [
              "string",
              "null"
            ],
            "description": "터키어"
          },
          "tw": {
            "type": [
              "string",
              "null"
            ],
            "description": "중국어(번체)"
          },
          "vi": {
            "type": [
              "string",
              "null"
            ],
            "description": "베트남어"
          },
          "km": {
            "type": [
              "string",
              "null"
            ],
            "description": "크메르어"
          },
          "id": {
            "type": [
              "string",
              "null"
            ],
            "description": "인도네시아어"
          },
          "lo": {
            "type": [
              "string",
              "null"
            ],
            "description": "라오스어"
          },
          "my": {
            "type": [
              "string",
              "null"
            ],
            "description": "버마어"
          },
          "ph": {
            "type": [
              "string",
              "null"
            ],
            "description": "필리핀어"
          },
          "ne": {
            "type": [
              "string",
              "null"
            ],
            "description": "네팔어"
          }
        }
      },
      "five-letter-locale": {
        "type": [
          "object",
          "null"
        ],
        "description": "다섯 글자 로케일 코드.",
        "title": "다섯 글자",
        "properties": {
          "en-US": {
            "type": [
              "string",
              "null"
            ],
            "description": "영어"
          },
          "ar-AE": {
            "type": [
              "string",
              "null"
            ],
            "description": "아랍어"
          },
          "bg-BG": {
            "type": [
              "string",
              "null"
            ],
            "description": "불가리아어"
          },
          "zh-CN": {
            "type": [
              "string",
              "null"
            ],
            "description": "중국어(간체)"
          },
          "cs-CZ": {
            "type": [
              "string",
              "null"
            ],
            "description": "체코어"
          },
          "de-DE": {
            "type": [
              "string",
              "null"
            ],
            "description": "독일어"
          },
          "es-ES": {
            "type": [
              "string",
              "null"
            ],
            "description": "스페인어(스페인)"
          },
          "fr-FR": {
            "type": [
              "string",
              "null"
            ],
            "description": "프랑스어"
          },
          "he-IL": {
            "type": [
              "string",
              "null"
            ],
            "description": "히브리어"
          },
          "it-IT": {
            "type": [
              "string",
              "null"
            ],
            "description": "이탈리아어"
          },
          "ja-JP": {
            "type": [
              "string",
              "null"
            ],
            "description": "일본어"
          },
          "ko-KR": {
            "type": [
              "string",
              "null"
            ],
            "description": "한국어"
          },
          "pl-PL": {
            "type": [
              "string",
              "null"
            ],
            "description": "폴란드어"
          },
          "pt-BR": {
            "type": [
              "string",
              "null"
            ],
            "description": "포르투갈어(브라질)"
          },
          "ro-RO": {
            "type": [
              "string",
              "null"
            ],
            "description": "로마니아어"
          },
          "ru-RU": {
            "type": [
              "string",
              "null"
            ],
            "description": "러시아어"
          },
          "th-TH": {
            "type": [
              "string",
              "null"
            ],
            "description": "태국어"
          },
          "tr-TR": {
            "type": [
              "string",
              "null"
            ],
            "description": "터키어"
          },
          "zh-TW": {
            "type": [
              "string",
              "null"
            ],
            "description": "중국어(번체)"
          },
          "vi-VN": {
            "type": [
              "string",
              "null"
            ],
            "description": "베트남어"
          },
          "km-KH": {
            "type": [
              "string",
              "null"
            ],
            "description": "크메르어"
          },
          "id-ID": {
            "type": [
              "string",
              "null"
            ],
            "description": "인도네시아어"
          },
          "lo-LA": {
            "type": [
              "string",
              "null"
            ],
            "description": "라오스어"
          },
          "my-MM": {
            "type": [
              "string",
              "null"
            ],
            "description": "버마어"
          },
          "ph-PH": {
            "type": [
              "string",
              "null"
            ],
            "description": "필리핀어"
          },
          "ne-NP": {
            "type": [
              "string",
              "null"
            ],
            "description": "네팔어"
          }
        }
      },
      "name-localization-object": {
        "type": [
          "object",
          "null"
        ],
        "description": "아이템 이름에 대한 현지화가 있는 개체입니다. 두 글자 소문자 언어 코드(예: `en`) 또는 다섯 글자 언어 코드(예: `en-US`) 두 가지 형식 중 하나로 되어 있는 값을 허용합니다. 두 형식 모두 입력으로 허용되지만 응답은 두 글자 소문자 언어 코드를 반환합니다. 동일한 언어에 대한 두 옵션(예: `en` 및 `en-US`)이 모두 제공되면 마지막으로 제공된 값이 저장됩니다. 지원되는 언어의 전체 목록은 [문서](/ko/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": "아이템 설명에 대한 현지화가 있는 개체입니다. 두 글자 소문자 언어 코드(예: `en`) 또는 다섯 글자 로케일 코드(예: `en-US`) 두 가지 형식 중 하나로 되어 있는 값을 허용합니다. 두 형식 모두 입력으로 허용되지만 응답은 두 글자 소문자 언어 코드를 반환합니다. 동일한 언어에 대한 두 옵션(예: `en` 및 `en-US`)이 모두 제공되면 마지막으로 제공된 값이 저장됩니다. 지원되는 언어의 전체 목록은 [문서](/ko/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": "아이템의 긴 설명에 대한 현지화가 있는 개체입니다. 두 글자 소문자 언어 코드(예: `en`) 또는 5자 로케일 코드(예 `en-US`: ) 두 가지 형식 중 하나로 값을 허용합니다. 두 형식 모두 입력으로 허용되지만 응답은 두 글자 소문자 언어 코드를 반환합니다. 동일한 언어에 대한 두 변수(예: `en` 및 `en-US`)가 모두 제공되면 마지막으로 제공된 값이 저장됩니다. 지원되는 언어의 전체 목록은 [문서](/ko/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": "고유 아이템 ID입니다. SKU는 소문자 및 대문자 라틴 영숫자, 마침표, 대시 및 밑줄만 포함할 수 있습니다."
          },
          "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": "스크린샷, 게임 플레이 동영상 등과 같은 아이템의 추가 자산입니다.",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "image",
                    "video"
                  ],
                  "example": "image",
                  "description": "미디어 유형: `image`/`video`."
                },
                "url": {
                  "type": "string",
                  "example": "https://cdn3.xsolla.com/img/misc/images/71ab1e12126f2103e1868076f0acb21a.jpg",
                  "description": "리소스 파일입니다."
                }
              }
            }
          },
          "type": {
            "type": "string",
            "description": "아이템 유형입니다."
          },
          "image_url": {
            "type": "string"
          },
          "is_enabled": {
            "type": "boolean"
          },
          "order": {
            "type": "integer",
            "example": 1,
            "description": "배열 순서를 정의합니다."
          },
          "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": "스크린샷, 게임 플레이 동영상 등과 같은 아이템의 추가 자산입니다.",
        "items": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "image",
                "video"
              ],
              "example": "image",
              "description": "미디어 유형: `image`/`video`."
            },
            "url": {
              "type": "string",
              "example": "https://cdn3.xsolla.com/img/misc/images/71ab1e12126f2103e1868076f0acb21a.jpg",
              "description": "리소스 파일입니다."
            }
          }
        }
      },
      "order": {
        "type": "integer",
        "example": 1,
        "description": "배열 순서를 정의합니다."
      },
      "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": "고유 아이템 ID입니다. SKU는 소문자 및 대문자 라틴 영숫자, 마침표, 대시 및 밑줄만 포함할 수 있습니다."
          },
          "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": "스크린샷, 게임 플레이 동영상 등과 같은 아이템의 추가 자산입니다.",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "image",
                    "video"
                  ],
                  "example": "image",
                  "description": "미디어 유형: `image`/`video`."
                },
                "url": {
                  "type": "string",
                  "example": "https://cdn3.xsolla.com/img/misc/images/71ab1e12126f2103e1868076f0acb21a.jpg",
                  "description": "리소스 파일입니다."
                }
              }
            }
          },
          "type": {
            "type": "string",
            "description": "아이템 유형입니다."
          },
          "image_url": {
            "type": "string"
          },
          "is_enabled": {
            "type": "boolean"
          },
          "order": {
            "type": "integer",
            "example": 1,
            "description": "배열 순서를 정의합니다."
          },
          "can_delete": {
            "type": "boolean",
            "description": "가치 포인트를 삭제할 수 있는지 여부입니다. `false`인 경우, 가치 포인트가 사용되는 보상 체인이 하나 이상 있기 때문에 삭제할 수 없습니다. 가치 포인트를 삭제하려면 우선 가치 포인트를 포함하고 있는 모든 보상 체인을 [삭제](https://developers.xsolla.com/ko/api/shop-builder/operation/admin-delete-reward-chain/)하십시오.\n\n`true`인 경우, 가치 포인트가 어떠한 보상 체인에도 사용되지 않으므로 이를 [삭제](https://developers.xsolla.com/ko/api/shop-builder/operation/admin-delete-value-point/)할 수 있습니다."
          },
          "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": "가치 포인트의 금액입니다."
          },
          "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": "가치 포인트의 금액입니다."
            }
          },
          "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": "가치 포인트의 금액입니다.",
              "minimum": 0
            }
          },
          "required": [
            "sku",
            "amount"
          ],
          "maxItems": 100
        }
      },
      "image_url": {
        "type": [
          "string",
          "null"
        ],
        "example": "https://image.example.com",
        "description": "이미지 URL입니다."
      },
      "date_start": {
        "type": "string",
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "보상 체인이 시작되는 날짜입니다."
      },
      "date_end": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "보상 체인 프로모션이 종료되는 날짜입니다. `null`일 수 있습니다. `date_end`가 `null`이면 보상 체인이 시간 제한을 받지 않습니다."
      },
      "clan_type": {
        "type": [
          "string",
          "null"
        ],
        "description": "클랜 유형.",
        "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": "인증 프로세스 중에 엑솔라로 전송되는 사용자 ID입니다. 사용자 ID는 사용자를 엑솔라 로그인 프로젝트와 연결하는 데 사용되며 별명으로 표시됩니다. [ 사용자 ID](https://developers.xsolla.com/ko/solutions/web-shop/create-web-shop/set-up-authentication/?tabs=100-UserIDAuth&link=100-UserIDAuth)에 따라 인증을 사용하는 경우, [ 웹훅 응답](https://developers.xsolla.com/ko/webhooks/operation/user-validation-in-webshop/)에 <code>name</code> 매개 변수를 전달하는 것이 좋습니다. 이 매개 변수에는 별명으로 사용될 사용자 이름이 포함되어 있습니다."
          },
          "contributed_amount": {
            "type": "integer",
            "example": 100,
            "description": "사용자가 획득한 가치 포인트의 금액입니다."
          }
        }
      },
      "value-point-description": {
        "type": [
          "string",
          "null"
        ],
        "description": "가치 포인트 설명입니다."
      },
      "value-point-long-description": {
        "type": [
          "string",
          "null"
        ],
        "description": "가치 포인트에 대한 긴 설명입니다."
      },
      "interval_type_weekly": {
        "type": "string",
        "description": "보상 체인의 반복 재설정 빈도입니다.",
        "enum": [
          "weekly"
        ]
      },
      "interval_type_monthly": {
        "type": "string",
        "description": "보상 체인의 반복 재설정 빈도입니다.",
        "enum": [
          "monthly"
        ]
      },
      "interval_type_hourly_rc": {
        "type": "string",
        "description": "보상 체인의 반복 재설정 빈도입니다.",
        "enum": [
          "hourly"
        ]
      },
      "reset_next_date": {
        "type": "integer",
        "description": "다음에 보상 체인이 재설정되는 날짜와 시간의 계산 결과 <a href=\"https://en.wikipedia.org/wiki/Unix_time\" target=\"_blank\">(유닉스 타임 스탬프)</a>. <br><br> 예를 들어 보상 체인은 2024년 3월 1일부터 쿠알라룸푸르 시간(GMT+8)을 기준으로 01:00에 매월 초기화됩니다. 다음 보상 체인 재설정 날짜 및 시간은 쿠알라룸푸르 시간(GMT+8)으로 2024년 4월 1일 01:00이며, 이는 2024년 3월 31일 17:00 GMT+0 또는 유닉스 타임 스탬프 형식으로 `1711904400000`에 해당합니다. <br><br> 예: `1711904400000`"
      },
      "recurrent_schedule_client_side": {
        "type": [
          "object",
          "null"
        ],
        "description": "보상 체인의 반복 재설정 기간입니다.",
        "properties": {
          "interval_type": {
            "oneOf": [
              {
                "title": "interval_type = 주간",
                "$ref": "#/components/schemas/interval_type_weekly"
              },
              {
                "title": "interval_type = 월간",
                "$ref": "#/components/schemas/interval_type_monthly"
              },
              {
                "title": "interval_type = 시간",
                "$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": "클랜 보상 체인 툴팁 팝업 창의 헤더에 대한 현지화가 있는 개체입니다. 2자리 소문자 [언어 코드](https://developers.xsolla.com/ko/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": "클랜 보상 체인 툴팁 팝업 창의 지시를 위한 현지화가 있는 개체입니다. 2자리 소문자 [언어 코드](https://developers.xsolla.com/ko/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": "클랜 보상 체인 툴팁 팝업 창 이미지입니다.",
        "format": "uri"
      },
      "client-reward-chain-item-model": {
        "type": "object",
        "properties": {
          "reward_chain_id": {
            "type": "integer",
            "example": 9,
            "description": "보상 체인 ID입니다."
          },
          "name": {
            "type": "string",
            "example": "Weekly quest",
            "description": "보상 체인의 이름입니다."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "example": "Major weekly quest",
            "description": "리워드 체인에 대한 설명입니다."
          },
          "long_description": {
            "type": [
              "string",
              "null"
            ],
            "example": "You can get a lot of additional items just by shopping during the week",
            "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": "보상 체인의 단계입니다.",
              "properties": {
                "step_id": {
                  "type": "integer",
                  "example": 10,
                  "description": "단계 ID입니다."
                },
                "name": {
                  "type": "string",
                  "example": "Level 1",
                  "description": "단계 이름."
                },
                "is_claimed": {
                  "type": "boolean",
                  "example": false,
                  "description": "단계 보상이 청구되는지 여부입니다."
                },
                "image_url": {
                  "$ref": "#/components/schemas/Common_admin-image_url"
                },
                "price": {
                  "type": "object",
                  "properties": {
                    "amount": {
                      "type": "integer",
                      "example": 100,
                      "description": "사용자가 단계에 대해 청구하는 값 포인트의 수입니다."
                    }
                  }
                },
                "reward": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "sku": {
                        "$ref": "#/components/schemas/sku"
                      },
                      "name": {
                        "type": "string",
                        "example": "Super box",
                        "description": "아이템 이름입니다."
                      },
                      "type": {
                        "type": "string",
                        "example": "bundle",
                        "description": "아이템 유형입니다."
                      },
                      "description": {
                        "type": "string",
                        "example": "Super box with items",
                        "description": "아이템 설명입니다."
                      },
                      "image_url": {
                        "$ref": "#/components/schemas/Common_admin-image_url"
                      },
                      "quantity": {
                        "type": "integer",
                        "example": 2,
                        "description": "아이템 수량입니다."
                      }
                    }
                  }
                }
              }
            }
          },
          "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": "페이지가 더 있다는 표시로 사용됩니다."
      },
      "reward_chain_id": {
        "type": "integer",
        "example": 9,
        "description": "고유한 보상 체인 ID입니다."
      },
      "periods": {
        "type": "array",
        "nullable": false,
        "description": "리워드 체인의 유효 기간. 기간이 여러 개 지정된 경우 `date_from`와 `date_until`가 모두 필요합니다.",
        "items": {
          "type": "object",
          "properties": {
            "date_from": {
              "type": "string",
              "format": "date-time",
              "nullable": false,
              "example": "2020-08-11T10:00:00+03:00",
              "description": "지정된 리워드 체인의 시작 날짜."
            },
            "date_until": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time",
              "example": "2020-08-11T20:00:00+03:00",
              "description": "지정된 리워드 체인의 종료 날짜. 단일 유효 기간이 지정된 경우에만 `null`일 수 있습니다."
            }
          },
          "required": [
            "date_from"
          ]
        }
      },
      "day_of_week": {
        "type": "integer",
        "description": "보상 체인이 초기화되는 요일. 여기서 `1`은 월요일, `7`은 일요일입니다.",
        "minimum": 1,
        "maximum": 7
      },
      "time": {
        "type": "string",
        "description": "원하는 시간대에서 보상 체인이 재설정되는 시간입니다(시간 단위로 반올림). <br><br> 예를 들어, 쿠알라룸푸르 시간대(GMT+8)의 경우 보상 체인 재설정 시간은 01:00입니다. 이 경우 `time` 매개 변수의 값은 `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": "보상 체인의 첫 번째 재설정 날짜 및 시간. <br><br> 예를 들어 보상 체인의 첫 번째 재설정 날짜 및 시간은 쿠알라룸푸르 시간으로 2024년 3월 1일 01:00이며 이는 <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> 형식으로 `2024-03-01T01:00:00+08:00`입니다. <br><br> 예: `2024-03-01T01:00:00+08:00`",
        "type": "string",
        "format": "date-time"
      },
      "displayable_reset_next_date": {
        "description": "다음에 보상 체인이 재설정되는 날짜와 시간 계산 결과 <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">(ISO 8601)</a>. <br><br> 예를 들어, 보상 체인은 2024년 3월 1일부터 쿠알라룸푸르 시간으로 01:00에 매월 초기화됩니다. 다음 보상 체인 재설정 날짜와 시간은 쿠알라룸푸르 시간으로 2024년 4월 1일 01:00이며, 이는 <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> 형식으로 `2024-04-01T01:00:00+08:00`에 해당합니다. <br><br> 예: `2024-04-01T01:00:00+08:00`",
        "type": "string",
        "format": "date-time"
      },
      "day_of_month": {
        "type": "integer",
        "description": "보상 체인이 초기화되는 월의 날짜입니다. 해당 월의 일수가 지정된 날짜의 서수보다 작으면 해당 월의 마지막 날에 보상 체인이 초기화됩니다.",
        "minimum": 1,
        "maximum": 31
      },
      "reward_chain_hours_interval": {
        "type": "integer",
        "description": "리워드 체인이 재설정되는 시간 간격(시간). <br><br> 카운트다운은 <a href=\"https://developers.xsolla.com/ko/api/shop-builder/operation/admin-create-offer-chain/#!path=date_start&t=request\">date_start</a> 매개 변수에서 시작됩니다. <br><br> 예를 들어, `date_start = \"2025-11-15T18:15:00+05:00\"`이고 `hours_interval = 2`인 경우, 오퍼 체인은 `\"2025-11-15T20:15:00+05:00\"`부터 2시간마다 재설정됩니다.",
        "minimum": 1,
        "maximum": 10000
      },
      "admin_recurrent_schedule": {
        "type": [
          "object",
          "null"
        ],
        "description": "보상 체인의 반복 재설정 기간입니다.",
        "oneOf": [
          {
            "type": "object",
            "title": "interval_type = 주간",
            "description": "보상 체인의 주간 재설정입니다.",
            "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 = 월간",
            "description": "보상 체인의 월간 재설정입니다.",
            "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 = 시간",
            "description": "보상 체인이 지정된 시간 간격(시간 단위)으로 재설정됩니다.",
            "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": "사용자 특성 검증 조건. 사용자 특성이 지정된 모든 조건과 일치하는지 여부에 따라 체인의 가용성을 결정합니다."
          }
        ]
      },
      "chain_is_always_visible": {
        "description": "해당 체인이 모든 사용자에게 표시되는지 여부입니다. `true`인 경우, 사용자의 인증 상태나 특성과 관계없이 체인이 항상 표시됩니다.\n\n사용자 맞춤 설정을 구성하려면 `false`를 전달해야 합니다. 체인 표시 로직은 다음과 같습니다:\n  * `false`가 전달되고 `attribute_conditions` 배열에 표시 조건이 지정된 경우, 해당 체인은 사용자 맞춤 설정된 것으로 간주되어 지정된 조건을 충족하는 승인된 사용자에게만 표시됩니다.\n  * `false`가 전달되었으나 `attribute_conditions` 목록이 전달되지 않았거나 비어 있는 경우, 체인은 권한이 없는 사용자에게 표시되며, 권한이 있는 사용자에게도 일치하는 체인이 발견되지 않은 경우에도 표시됩니다.",
        "type": "boolean",
        "default": true,
        "example": true
      },
      "is_reset_after_end": {
        "description": "종료 날짜 이후 리워드 체인 재설정 여부(모든 사용자의 밸류 포인트 및 진행 사항)\n* `true`인 경우, 리워드 체인은 종료 날짜 이후 재설정됩니다.\n* `false`인 경우, 리워드 체인은 종료 날짜 이후 재설정되지 않습니다.\n\n<br>\n\n<div class=\"notice\"><strong>주의</strong><br><br>\n다음의 경우 <code>true</code>일 수 없음:<br>\n<ul>\n  <li><code>recurrent_schedule</code>으로 재설정 기간이 설정된 경우.</li>\n  <li><code>periods.date_until</code>에 <code>null</code> 값이 전달된 경우.</li>\n</ul>\n</div>",
        "type": "boolean",
        "default": false,
        "example": false
      },
      "admin-get-reward-chain-item-basic-model": {
        "type": "object",
        "description": "보상 체인입니다.",
        "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": "클랜 보상 체인입니다.",
            "properties": {
              "value_point": {
                "type": "object",
                "description": "클랜 보상 체인에 대해 설정된 가치 포인트입니다.",
                "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": "가치 포인트의 단계 가격입니다."
      },
      "reward_step_price": {
        "type": "object",
        "properties": {
          "amount": {
            "$ref": "#/components/schemas/step_price_amount"
          }
        },
        "required": [
          "amount"
        ]
      },
      "reward_item_quantity": {
        "type": "integer",
        "example": 2,
        "description": "아이템 수량입니다."
      },
      "reward-chain-step-reward_user-attribute_conditions_model-post": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-post"
          },
          {
            "description": "사용자 특성 검증 조건. 사용자 특성이 지정된 모든 조건과 일치하는지 여부에 따라 리워드 체인 단계의 리워드 가용성을 결정합니다."
          }
        ]
      },
      "create_reward_step": {
        "type": "object",
        "description": "보상 체인의 단계입니다.",
        "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": "보상 체인의 반복 재설정 기간입니다.",
        "oneOf": [
          {
            "type": "object",
            "title": "interval_type = 주간",
            "description": "보상 체인의 주간 새로고침 유형입니다.",
            "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 = 월간",
            "description": "보상 체인의 월간 새로고침 유형입니다.",
            "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 = 시간",
            "description": "보상 체인이 지정된 시간 간격(시간 단위)으로 재설정됩니다.",
            "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": "사용자 특성 검증 조건. 사용자 특성이 지정된 모든 조건과 일치하는지 여부에 따라 체인의 가용성을 결정합니다."
          }
        ]
      },
      "create-reward-chain-model": {
        "type": "object",
        "description": "보상 체인입니다.",
        "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": "클랜 보상 체인입니다.",
            "properties": {
              "value_point": {
                "type": "object",
                "description": "클랜 보상 체인에 대해 설정된 가치 포인트입니다.",
                "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": "고유 단계 ID입니다."
      },
      "reward-chain-step-reward_user-attribute_conditions_model-get": {
        "allOf": [
          {
            "$ref": "#/components/schemas/user-attribute_conditions_model-get"
          },
          {
            "description": "사용자 특성 검증 조건. 사용자 특성이 지정된 모든 조건과 일치하는지 여부에 따라 리워드 체인 단계의 리워드 가용성을 결정합니다."
          }
        ]
      },
      "reward_step_short": {
        "type": "object",
        "description": "보상 체인의 단계입니다.",
        "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": "보상 체인입니다.",
        "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": "클랜 보상 체인입니다.",
            "properties": {
              "value_point": {
                "type": "object",
                "description": "클랜 보상 체인에 대해 설정된 가치 포인트입니다.",
                "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": "보상 체인의 단계입니다.",
        "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": "보상 체인입니다.",
        "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": "클랜 보상 체인입니다.",
            "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": "사용자가 보상을 청구할 수 있는 시점을 결정하는 일일 보상 유형입니다.\n\n사용 가능한 값: - `calendar_hard` - 24시간마다 다음 단계 보상을 해제합니다. 다음 단계 보상이 제공되기 시작하면 아직 수령하지 않은 단계 보상은 영구적으로 소멸됩니다. - `rolling_skippable` - `date_start`를 기준으로 24시간마다 다음 단계 보상을 해제합니다. 진행은 순차적으로 이루어집니다: 이전 보상을 수령한 이후에 새로운 보상이 해제됩니다. 사용자가 하루 이상을 건너뛰더라도 중단된 지점부터 계속 진행되며, 건너뛴 날에 대해 보상이 중복 지급되지 않습니다. - `rolling_unskippable` - `date_start`를 기준으로 24시간마다 다음 단계 보상을 해제합니다. 진행은 순차적으로 이루어집니다: 이전 보상을 수령하기 전까지는 새로운 보상이 해제되지 않습니다. 그러나 사용자가 하루를 건너뛰면 진행 상황이 초기화되며 첫 번째 단계부터 다시 시작해야 합니다."
      },
      "calendar_hard_date_start": {
        "type": "string",
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "일일 보상이 시작되는 날짜입니다."
      },
      "calendar_hard_is_recurrent": {
        "type": "boolean",
        "example": true,
        "default": false,
        "description": "일일 보상이 반복되는지 여부. `true`인 경우, 일일 보상은 종료일 이후 자동으로 초기화됩니다. 다음 `start_date` 및 `end_date` 일정은 일일 보상 단계 수와 `start_date`에 설정된 초기 시간에 기반합니다."
      },
      "calendar-hard-daily-chain-base": {
        "type": "object",
        "description": "`calendar_hard` 일일 보상 유형의 기본 특성.",
        "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": "일일 보상 고유 ID입니다."
      },
      "daily_chain_date_end": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "일일 보상이 종료되는 날짜입니다. `null`일 수 있습니다. 유형을 `calendar_hard`로 설정하면 이 날짜가 추가된 걸음 수에 따라 자동으로 설정되므로 이 부분을 `null`로 둘 수 있습니다."
      },
      "daily_chain_number_of_step": {
        "type": "integer",
        "example": 3,
        "description": "일일 보상에서 구성한 걸음 수입니다. 여기서 각 걸음은 일일 보상의 하루를 의미합니다."
      },
      "admin-calendar-hard-daily-chain-short-model": {
        "allOf": [
          {
            "$ref": "#/components/schemas/calendar-hard-daily-chain-base"
          },
          {
            "type": "object",
            "description": "`calendar_hard` 일일 보상(짧은 버전).",
            "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": "일일 보상이 시작되는 날짜와 시간. 이 시간은 사용자가 보상을 청구할 수 있는 일일 재설정 시점도 정의합니다."
      },
      "rolling_date_end": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "일일 보상이 종료되는 날짜입니다."
      },
      "rolling_is_recurrent": {
        "type": "boolean",
        "example": true,
        "default": false,
        "description": "일일 보상이 반복되는지 여부. `true`인 경우, 사용자가 모든 단계를 완료하면 일일 보상이 초기화되어 1단계부터 다시 시작할 수 있습니다. 재발생은 `date_start`와 `date_end`로 정의된 활성 보상 기간 내에서만 유효합니다."
      },
      "rolling-skippable-daily-chain-base": {
        "type": "object",
        "description": "`rolling_skippable` 일일 보상 유형의 기본 특성입니다.",
        "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": "`rolling_skippable` 일일 보상(짧은 버전).",
            "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": "`rolling_unskippable` 일일 보상 유형의 기본 특성입니다.",
        "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": "`rolling_unskippable` 일일 보상(짧은 버전).",
            "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": "단계 번호입니다.",
        "nullable": false,
        "minimum": 1
      },
      "modify-daily-chain-item-model": {
        "type": "object",
        "properties": {
          "sku": {
            "$ref": "#/components/schemas/sku"
          },
          "quantity": {
            "type": "integer",
            "description": "이 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": "`calendar_hard` 유형의 일일 보상입니다.",
            "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": "`rolling_skippable` 유형의 일일 보상입니다.",
            "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": "`rolling_unskippable` 유형의 일일 보상입니다.",
            "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": "일일 보상 단계의 고유 식별자입니다.",
        "minimum": 1
      },
      "item_type": {
        "type": "string",
        "description": "아이템 유형: `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": "아이템의 개수입니다.",
            "minimum": 1,
            "example": 1
          }
        }
      },
      "admin-daily-chain-step-model": {
        "type": "object",
        "description": "일일 보상 단계입니다.",
        "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": "관리자 응답에 대한 calendar_hard 일일 보상.",
            "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": "관리 보상에 대한 rolling_skippable 일일 보상.",
            "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": "관리 보상에 대한 `rolling_unskippable` 일일 보상.",
            "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": "일일 보상 단계의 고유 식별자입니다. 이 단계에 대한 사용자 진행 상황을 유지하려면 업데이트 중에 지정합니다.",
        "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": "`calendar_hard` 유형의 일일 보상입니다.",
            "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": "`rolling_skippable` 유형의 일일 보상입니다.",
            "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": "`rolling_unskippable` 유형의 일일 보상입니다.",
            "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": "아이템 이름입니다."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "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": "아이템의 개수입니다.",
            "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": "일일 보상 단계입니다.",
        "properties": {
          "step_number": {
            "$ref": "#/components/schemas/daily_chain_step_number"
          },
          "status": {
            "type": "string",
            "example": "claimed",
            "enum": [
              "claimed",
              "claimable",
              "blocked",
              "claim_in_future"
            ],
            "description": "단계의 현재 청구 상태를 정의합니다.\n\n가능한 값: - `claimed` - 해당 단계는 이미 할당되었습니다. - `claimable` - 해당 단계를 할당할 수 있습니다. - `blocked` - 해당 단계를 할당할 수 없습니다:   - 권한이 없는 사용자의 경우: 모든 단계가 차단됩니다.   - `calendar_hard`의 경우: 해당 단계는 할당되지 않았으며 현재 과거에 속합니다.    - `rolling_skippable`의 경우: 이전 단계가 할당될 때까지 해당 단계가 잠겨 있습니다. - `claim_in_future` - 해당 단계는 할당되지 않았으며, 아직 미래에 속해 있습니다."
          },
          "unlocked_date": {
            "type": "integer",
            "format": "int64",
            "description": "단계가 잠금 해제되는 시점의 유닉스 타임스탬프입니다."
          },
          "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": "클라이언트 응답에 대한 calendar_hard일일 보상.",
            "properties": {
              "id": {
                "type": "integer",
                "example": 9,
                "description": "일일 보상 ID입니다."
              },
              "name": {
                "type": "string",
                "example": "Weekly quest",
                "description": "일일 보상 이름입니다."
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "Major weekly quest",
                "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": "클라이언트 응답에 대한 rolling_skippable 일일 보상.",
            "properties": {
              "id": {
                "type": "integer",
                "example": 9,
                "description": "일일 보상 ID입니다."
              },
              "name": {
                "type": "string",
                "example": "Weekly quest",
                "description": "일일 보상 이름입니다."
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "Major weekly quest",
                "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": "클라이언트 응답에 대한 `rolling_unskippable` 일일 보상.",
            "properties": {
              "id": {
                "type": "integer",
                "example": 9,
                "description": "일일 보상 ID입니다."
              },
              "name": {
                "type": "string",
                "example": "Weekly quest",
                "description": "일일 보상 이름입니다."
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "example": "Major weekly quest",
                "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": "혜택 체인이 시작되는 날짜입니다."
      },
      "offer_chain_date_end": {
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "example": "2020-04-15T18:16:00+05:00",
        "description": "혜택 체인이 종료되는 날짜입니다. `null`일 수 있습니다. `date_end`이(가) `null`인 경우 혜택 체인에는 기간 제한이 없습니다."
      },
      "offer_chain_step_number": {
        "type": "integer",
        "example": 2,
        "description": "단계 번호입니다.",
        "nullable": false,
        "minimum": 1
      },
      "offer_chain_is_free": {
        "type": "boolean",
        "description": "혜택 체인 단계가 무료인지 여부를 나타냅니다.<ul><li><code>true</code>인 경우 <a href=\"/ko/api/shop-builder/operation/claim-user-offer-chain-step-reward\">무료 혜택 체인 단계 신청</a> 호출을 사용하여 해당 단계를 신청해야 합니다.</li><li><code>false</code>인 경우 <a href=\"/ko/api/shop-builder/operation/order-user-offer-chain-step-reward\">유료 혜택 체인 단계 주문 생성</a> 호출을 사용하여 구매해야 합니다.</li></ul>"
      },
      "offer_chain_step_price_amount": {
        "type": "number",
        "example": 99.99,
        "description": "실제 화폐로 표시된 단계 가격입니다."
      },
      "offer_chain_step_price_currency": {
        "type": "string",
        "example": "USD",
        "description": "아이템 가격 통화입니다. [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)에 따른 3자리 코드입니다."
      },
      "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": "아이템 이름입니다."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "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": "아이템의 개수입니다.",
            "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": "혜택 체인의 단계입니다.",
        "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": "단계 리워드가 청구되었는지 또는 구매되었는지를 나타냅니다."
          },
          "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": "리워드 시스템에서 리워드로 부여되는 가치 포인트의 배열입니다.",
            "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": "로열티 포인트 이름."
                },
                "sku": {
                  "type": "string",
                  "example": "0c745ef0-4243-46e1-aa90-54dee07da622",
                  "description": "로열티 포인트의 SKU."
                },
                "description": {
                  "type": "string",
                  "example": "First Loyalty Point Desc",
                  "description": "로열티 포인트의 설명입니다."
                },
                "image_url": {
                  "$ref": "#/components/schemas/image_url"
                },
                "amount": {
                  "type": "integer",
                  "example": 1,
                  "description": "로열티 포인트 개수."
                }
              }
            }
          }
        }
      },
      "offer_chain_reset_next_date": {
        "type": "integer",
        "description": "<a href=\"https://en.wikipedia.org/wiki/Unix_time\" target=\"_blank\">유닉스 타임 스탬프</a> 형식으로 표시한 다음에 혜택 체인이 재설정되는 날짜와 시간입니다. <br><br> 예를 들어, 월간 혜택 체인의 재설정은 2024년 3월 1일 01:00(쿠알라룸푸르 시간(GMT+8))에 시작됩니다. 다음 재설정은 2024년 4월 1일 01:00(쿠알라룸푸르 시간(GMT+8))에 진행하며, 이는 2024년 3월 31일 17:00 GMT+0 또는 유닉스 타임 스탬프 형식으로 `1711904400000`에 해당합니다. <br><br> 예: `1711904400000`"
      },
      "offer_chain_recurrent_schedule_client_side": {
        "type": [
          "object",
          "null"
        ],
        "description": "혜택 체인의 재설정 기간입니다.",
        "properties": {
          "interval_type": {
            "type": "string",
            "description": "혜택 체인의 재설정 빈도입니다.",
            "enum": [
              "weekly",
              "monthly",
              "hourly"
            ]
          },
          "reset_next_date": {
            "$ref": "#/components/schemas/offer_chain_reset_next_date"
          }
        }
      },
      "client-offer-chain-model": {
        "type": "object",
        "description": "혜택 체인입니다.",
        "properties": {
          "id": {
            "type": "integer",
            "example": 9,
            "description": "혜택 체인 ID입니다."
          },
          "name": {
            "type": "string",
            "example": "Weekly quest",
            "description": "혜택 체인의 이름입니다."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "example": "Major weekly quest",
            "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": "다음 혜택 체인의 단계 번호입니다. 혜택 체인이 완료된 경우 `null`입니다.",
            "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": "고유한 혜택 체인 ID입니다."
      },
      "offer_chain_interval_type_weekly": {
        "type": "string",
        "description": "혜택 체인의 재설정 빈도입니다.",
        "enum": [
          "weekly"
        ]
      },
      "offer_chain_day_of_week": {
        "type": "integer",
        "description": "혜택 체인이 재설정되는 요일입니다. 여기서 `1`은 월요일, `7`은 일요일입니다.",
        "minimum": 1,
        "maximum": 7
      },
      "offer_chain_time": {
        "type": "string",
        "description": "혜택 체인이 지정된 시간대에서 재설정되는 시간(시간 단위로 반올림)입니다. <br><br> 예를 들어 쿠알라룸푸르 시간대(GMT+8)의 경우 재설정 시간이 01:00로 설정되어 있다면 `time` 매개 변수의 값은 `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": "혜택 체인의 첫 번째 재설정 날짜 및 시간입니다. <br><br> 예를 들어 2024년 3월 1일 01:00(쿠알라룸푸르 시간)으로 예정된 첫 번째 재설정은 <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> 형식으로 `2024-03-01T01:00:00+08:00`에 해당합니다. <br><br> 예시: `2024-03-01T01:00:00+08:00`",
        "type": "string",
        "format": "date-time"
      },
      "offer_chain_displayable_reset_next_date": {
        "description": "<a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> 형식으로 표시한 혜택 체인이 다음에 재설정되는 날짜와 시간입니다.<br><br> 예를 들어, 월간 혜택 체인 재설정은 2024년 3월 1일 01:00(쿠알라룸푸르 시간)에 시작됩니다. 다음 재설정은 2024년 4월 1일 01:00(쿠알라룸푸르 시간)에 진행하며, 이는 <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">ISO 8601</a> 형식으로 `2024-04-01T01:00:00+08:00`에 해당합니다.<br><br> 예시: `2024-04-01T01:00:00+08:00`",
        "type": "string",
        "format": "date-time"
      },
      "offer_chain_interval_type_monthly": {
        "type": "string",
        "description": "혜택 체인의 재설정 빈도입니다.",
        "enum": [
          "monthly"
        ]
      },
      "offer_chain_day_of_month": {
        "type": "integer",
        "description": "혜택 체인이 재설정되는 월의 날짜입니다. 한 달의 일수가 지정된 날짜보다 이전인 경우 해당 월의 마지막 날에 재설정됩니다.",
        "minimum": 1,
        "maximum": 31
      },
      "offer_chain_interval_type_hourly": {
        "type": "string",
        "description": "혜택 체인의 재설정 빈도입니다.",
        "enum": [
          "hourly"
        ]
      },
      "offer_chain_hours_interval": {
        "type": "integer",
        "description": "오퍼 체인이 재설정되는 시간 간격(시간). <br><br> 카운트다운은 <a href=\"https://developers.xsolla.com/ko/api/shop-builder/operation/admin-create-offer-chain/#!path=date_start&t=request\">date_start</a> 매개 변수에서 시작됩니다. <br><br> 예를 들어, `date_start = \"2025-11-15T18:15:00+05:00\"`이고 `hours_interval = 2`인 경우, 오퍼 체인은 `\"2025-11-15T20:15:00+05:00\"`부터 2시간마다 재설정됩니다.",
        "minimum": 1,
        "maximum": 10000
      },
      "offer_chain_recurrent_schedule": {
        "type": [
          "object",
          "null"
        ],
        "description": "혜택 체인의 반복 재설정 기간입니다.",
        "oneOf": [
          {
            "type": [
              "object",
              "null"
            ],
            "title": "interval_type = 주간",
            "description": "혜택 체인의 주간 재설정입니다.",
            "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 = 월간",
            "description": "혜택 체인의 월간 재설정입니다.",
            "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 = 시간",
            "description": "혜택 체인이 지정된 시간 간격(시간 단위)으로 재설정됩니다.",
            "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": "혜택 체인입니다.",
        "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": "혜택 체인의 재설정 기간입니다.",
        "oneOf": [
          {
            "type": [
              "object",
              "null"
            ],
            "title": "interval_type = 주간",
            "description": "혜택 체인의 주간 재설정입니다.",
            "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 = 월간",
            "description": "혜택 체인의 월간 재설정입니다.",
            "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 = 시간",
            "description": "혜택 체인이 지정된 시간 간격(시간 단위)으로 재설정됩니다.",
            "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": "이 체인 단계에 대한 리워드 아이템의 수량입니다.",
            "minimum": 1
          },
          "order": {
            "description": "혜택 체인 단계에 대한 리워드 주문입니다.",
            "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": "혜택 체인입니다.",
        "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": "체인 단계의 고유 ID입니다.",
        "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": "아이템의 개수입니다.",
            "minimum": 1,
            "example": 1
          },
          "order": {
            "$ref": "#/components/schemas/order"
          }
        }
      },
      "admin-offer-chain-step-model": {
        "type": "object",
        "description": "혜택 체인의 단계입니다.",
        "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": "혜택 체인입니다.",
        "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": "고유한 체인 단계 ID입니다. 이 단계에 대한 사용자 진행 상황을 유지하려면 업데이트 중에 지정합니다.",
        "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": "혜택 체인입니다.",
        "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": "번들 유형입니다. 아이템 유형이 번들인 경우 반환됩니다.",
        "enum": [
          "standard",
          "virtual_currency_package",
          "partner_side_content"
        ]
      },
      "unit_type": {
        "type": "string",
        "example": "game",
        "description": "유닛의 유형: `game`."
      },
      "drm_name": {
        "type": "string",
        "example": "Steam",
        "description": "게임 키 DRM 이름입니다."
      },
      "drm_sku": {
        "type": "string",
        "example": "steam",
        "description": "DRM 고유 ID입니다."
      },
      "Upsell-model": {
        "type": "object",
        "description": "업셀링 유형입니다.",
        "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": "아이템 SKU의 배열입니다.",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "is_enabled",
          "type",
          "items"
        ]
      },
      "Upsell-model-not-fixed-list": {
        "type": "object",
        "description": "업셀링 유형입니다.",
        "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": "아이템 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": "아이템이 속한 그룹입니다.",
        "items": {
          "type": "object",
          "properties": {
            "external_id": {
              "type": "string",
              "example": "horror"
            },
            "name": {
              "type": "object",
              "description": "아이템의 이름입니다. 키가 \"^[a-z]{2}\" 형식의 로케일인\n키/값 쌍을 포함해야 하며 값은 문자열입니다.",
              "example": {
                "en": "Horror",
                "de": "Horror"
              },
              "default": {
                "en": "Horror"
              },
              "additionalProperties": {
                "type": "string"
              }
            }
          }
        }
      },
      "Virtual-Items-Currency_client-attributes": {
        "type": "array",
        "description": "아이템에 해당하는 특성 및 해당 값의 목록입니다. 카탈로그 필터링에 사용할 수 있습니다.",
        "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": "특성의 이름입니다.",
              "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": "특성의 값입니다.",
                    "example": "Strategy"
                  }
                }
              }
            }
          }
        }
      },
      "client_virtual_prices_response": {
        "type": "array",
        "description": "가상 가격입니다.",
        "items": {
          "type": "object",
          "description": "가상 가격입니다.",
          "properties": {
            "amount": {
              "type": "integer",
              "example": 100,
              "description": "인게임 재화로 표시된 아이템 가격입니다."
            },
            "amount_without_discount": {
              "type": "integer",
              "example": 200,
              "description": "할인 없이 인게임 재화로 표시된 아이템 가격입니다. 인게임 재화 가격에는 할인이 적용되지 않으므로 항상 `amount`와 같습니다."
            },
            "sku": {
              "type": "string",
              "example": "vc_gold",
              "description": "인게임 재화 SKU입니다."
            },
            "is_default": {
              "type": "boolean",
              "example": true,
              "description": "인게임 재화의 기본 가격인지 여부입니다."
            },
            "image_url": {
              "type": [
                "string",
                "null"
              ],
              "example": "http://image.png",
              "description": "인게임 재화의 이미지 URL입니다."
            },
            "name": {
              "type": "string",
              "example": "Gold",
              "description": "인게임 재화의 이름입니다."
            },
            "type": {
              "type": "string",
              "example": "virtual_currency",
              "description": "아이템 유형. 인게임 재화의 경우 `virtual_currency`입니다."
            },
            "description": {
              "type": [
                "string",
                "null"
              ],
              "example": "In-game currency used to purchase weapons and upgrades",
              "description": "인게임 재화 설명입니다."
            }
          }
        }
      },
      "item-periods-response": {
        "type": "array",
        "description": "아이템 판매 기간입니다.",
        "items": {
          "type": "object",
          "properties": {
            "date_from": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time",
              "example": "2020-08-11T10:00:00+03:00",
              "description": "지정된 아이템을 판매할 수 있는 날짜입니다."
            },
            "date_until": {
              "type": [
                "string",
                "null"
              ],
              "format": "date-time",
              "example": "2020-08-11T20:00:00+03:00",
              "description": "지정된 아이템을 판매할 수 없게 되는 날짜입니다. `null`일 수 있습니다."
            }
          }
        }
      },
      "item-custom-attributes-response": {
        "type": "object",
        "description": "아이템 특성 및 값이 포함된 JSON 개체입니다.",
        "format": "json"
      },
      "Upsell_item": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string",
            "example": "big_rocket",
            "description": "고유 아이템 ID입니다. SKU는 소문자 및 대문자 라틴 영숫자, 마침표, 대시 및 밑줄만 포함할 수 있습니다."
          },
          "name": {
            "type": "string",
            "example": "Big Rocket",
            "description": "아이템 이름입니다."
          },
          "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": "아이템 유형: `virtual_good`/`virtual_currency`/`bundle`."
          },
          "description": {
            "type": "string",
            "example": "Big Rocket - description",
            "description": "아이템 설명입니다."
          },
          "image_url": {
            "type": "string",
            "example": "https://popmedia.blob.core.windows.net/popyourself/male/outfit/male_armor_white_a-01.png",
            "description": "이미지 URL입니다."
          },
          "is_free": {
            "$ref": "#/components/schemas/value-is_free"
          },
          "price": {
            "type": [
              "object",
              "null"
            ],
            "description": "아이템 가격입니다.",
            "properties": {
              "amount": {
                "type": "string",
                "example": "100.99",
                "description": "할인된 아이템 가격입니다."
              },
              "amount_without_discount": {
                "type": "string",
                "example": "100.99",
                "description": "아이템 가격입니다."
              },
              "currency": {
                "type": "string",
                "example": "USD",
                "description": "아이템 가격 통화입니다. [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)에 따른 3자리 코드입니다."
              }
            }
          },
          "virtual_prices": {
            "$ref": "#/components/schemas/client_virtual_prices_response"
          },
          "can_be_bought": {
            "$ref": "#/components/schemas/Can_be_bought"
          },
          "virtual_item_type": {
            "type": "string",
            "example": "non-consumable",
            "description": "가상 아이템의 유형입니다.\n\n사용 가능한 값: - `consumable` - 사용 후 인벤토리에서 사라지는 아이템(예: 탄약). - `non_consumable` - 인벤토리에 무기한으로 남아 있는 아이템. - `non_renewing_subscription` - 일정 기간 동안 서비스나 콘텐츠에 대한 이용 권한을 나타낼 수 있는 기간 한정 아이템.",
            "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"
            }
          }
        }
      },
      "error-response-base": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "integer",
            "description": "HTTP 응답 상태."
          },
          "errorCode": {
            "type": "integer",
            "description": "오류 코드."
          },
          "errorMessage": {
            "type": "string",
            "description": "간단한 오류 설명."
          },
          "transactionId": {
            "type": "string",
            "description": "요청 ID. 이 특정 요청 또는 작업과 관련된 로그 엔트리를 추적하고 연결하는 데 사용되는 ID입니다. 이 ID는 문제 해결, 디버깅 및 감사 목적으로 유용하게 활용될 수 있습니다."
          }
        }
      }
    },
    "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.",
        "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=\"/ko/api/shop-builder/operation/order-user-offer-chain-step-reward\">Create order for paid offer chain step</a>, <a href=\"/ko/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>",
        "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=\"/ko/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=\"/ko/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": "프로모션 목록을 성공적으로 수신했습니다.",
        "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": "기본 인증이 전달되지 않았거나 잘못되었습니다. 기본 인증 또는 올바른 자격 증명을 사용했는지 확인해야 합니다.",
        "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": "잘못된 요청입니다.",
        "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": "프로모션을 성공적으로 수신했습니다.",
        "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": "기본 인증이 전달되지 않았거나 잘못되었습니다. 기본 인증 또는 올바른 자격 증명을 사용했는지 확인해야 합니다.",
        "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": "사용 가능한 코드를 찾을 수 없습니다. 제공된 코드 값이 올바른지 확인해 주세요.",
        "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": "잘못된 교환 가능한 코드 형식입니다. 코드에는 문자와 숫자만 사용할 수 있습니다.",
        "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": "쿠폰을 성공적으로 사용했습니다.",
        "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": "아이템 가격입니다.",
                        "properties": {
                          "amount": {
                            "type": "string",
                            "example": "2.9900",
                            "description": "할인된 아이템 가격입니다."
                          },
                          "amount_without_discount": {
                            "type": "string",
                            "example": "2.9900",
                            "description": "아이템 가격입니다."
                          },
                          "currency": {
                            "type": "string",
                            "example": "USD",
                            "description": "아이템 가격 통화입니다. [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)에 따른 3자리 코드입니다."
                          }
                        }
                      },
                      "type": {
                        "type": "string"
                      },
                      "virtual_item_type": {
                        "type": "string",
                        "example": "non-consumable",
                        "description": "가상 아이템의 유형입니다.\n\n사용 가능한 값: - `consumable` - 사용 후 인벤토리에서 사라지는 아이템(예: 탄약). - `non_consumable` - 인벤토리에 무기한으로 남아 있는 아이템. - `non_renewing_subscription` - 일정 기간 동안 서비스나 콘텐츠에 대한 이용 권한을 나타낼 수 있는 기간 한정 아이템.",
                        "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": "인증을 통과하지 못했거나 잘못되었습니다.",
        "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": "인증 헤더가 전송되지 않았습니다.",
        "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": "유효한 쿠폰 코드를 입력해야 합니다.",
        "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": "잘못된 요청입니다.",
        "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": "쿠폰 보상 목록을 성공적으로 수신했습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "bonus": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Promotions_200-coupon-bonus-reward"
                  }
                },
                "is_selectable": {
                  "type": "boolean",
                  "description": "`true`인 경우 사용자는 쿠폰을 사용하기 전에 보너스를 선택해야 합니다."
                },
                "discount": {
                  "$ref": "#/components/schemas/Promotions_200-coupon-discount-reward"
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-get-coupon-rewards"
              }
            }
          }
        }
      },
      "Promotions_422-rewards": {
        "description": "잘못된 요청입니다.",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Promotions_422_limit_error"
                },
                {
                  "$ref": "#/components/schemas/Promotions_422_reglock_error"
                }
              ]
            }
          }
        }
      },
      "Promotions_200-get-coupons": {
        "description": "쿠폰 목록을 성공적으로 수신했습니다.",
        "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": "잘못된 요청입니다.",
        "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": "쿠폰을 찾을 수 없습니다. `external_id`가 올바른지 확인해야 합니다.",
        "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": "프로모션 서비스로부터 프로모션을 수신하는 동안 오류가 발생했습니다.",
        "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": "쿠폰 코드 목록을 성공적으로 수신했습니다.",
        "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": "쿠폰 코드의 총 개수입니다."
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-coupon-code-list"
              }
            }
          }
        }
      },
      "Promotions_201-coupon-promocode-code-created": {
        "description": "코드를 성공적으로 생성했습니다.",
        "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": "잘못된 요청입니다. 이미 있는 코드입니다.",
        "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": "프로모션 코드를 찾을 수 없습니다. `external_id`이 올바른지 확인해 주십시오.",
        "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": "프로모션 코드를 성공적으로 사용했습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "cart_id": {
                  "type": "string",
                  "example": "cart_id",
                  "description": "장바구니 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": "장바구니 가격입니다."
                },
                "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": "유효한 프로모션 코드를 입력해주세요.",
        "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": "프로모션 코드를 성공적으로 취소했습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "cart_id": {
                  "type": "string",
                  "example": "cart_id",
                  "description": "장바구니 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": "장바구니 가격입니다."
                },
                "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": "가상 아이템의 유형입니다.\n\n사용 가능한 값: - `consumable` - 사용 후 인벤토리에서 사라지는 아이템(예: 탄약). - `non_consumable` - 인벤토리에 무기한으로 남아 있는 아이템. - `non_renewing_subscription` - 일정 기간 동안 서비스나 콘텐츠에 대한 이용 권한을 나타낼 수 있는 기간 한정 아이템.",
                        "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": "아이템 가격입니다.",
                        "properties": {
                          "amount": {
                            "type": "string",
                            "example": "2.9900",
                            "description": "할인된 아이템 가격입니다."
                          },
                          "amount_without_discount": {
                            "type": "string",
                            "example": "2.9900",
                            "description": "아이템 가격입니다."
                          },
                          "currency": {
                            "type": "string",
                            "example": "USD",
                            "description": "아이템 가격 통화입니다. [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)에 따른 3자리 코드입니다."
                          }
                        }
                      },
                      "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": "잘못된 요청입니다.",
        "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": "프로모션 코드 보상 목록을 성공적으로 수신했습니다.",
        "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": "프로모션 코드 목록을 성공적으로 수신했습니다.",
        "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": "프로모션 코드용 코드 목록을 성공적으로 수신했습니다.",
        "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": "프로모션 코드의 총 코드 개수입니다."
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-coupon-code-list"
              }
            }
          }
        }
      },
      "Promotions_200-get-item-promotions": {
        "description": "아이템 프로모션 목록을 성공적으로 접수했습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "promotions": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "integer",
                        "description": "프로모션 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다."
                      },
                      "promotion_periods": {
                        "$ref": "#/components/schemas/promotion_periods"
                      },
                      "is_enabled": {
                        "$ref": "#/components/schemas/Promotions_is_enabled"
                      },
                      "name": {
                        "type": "object",
                        "description": "프로모션의 이름입니다. 키/값 쌍을 포함해야 합니다. 여기에서 키는 \"^[a-z]{2}-[A-Z]{2}$\" 형식의 로케일이며 값은 문자열입니다.",
                        "additionalProperties": {
                          "type": "string"
                        },
                        "example": {
                          "en-US": "Promotion",
                          "ru-RU": "Акция"
                        }
                      },
                      "discount": {
                        "type": "object",
                        "properties": {
                          "percent": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "퍼센트 할인입니다.\n이 퍼센트를 사용하여 계산한 값을 사용하면 아이템의 가격이 낮아지게 됩니다.",
                            "default": "10.00"
                          }
                        }
                      },
                      "items": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "description": "할인 대상 아이템 목록입니다.",
                          "type": "object",
                          "properties": {
                            "sku": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "description": "아이템 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": "프로모션을 성공적으로 생성했습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "promotion_id": {
                  "type": "integer",
                  "description": "프로모션 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다."
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "promotion_id": 2384756
                }
              }
            }
          }
        }
      },
      "Promotions_422-admin-promotion-missed-items-property": {
        "description": "잘못된 요청입니다.",
        "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_id`가 올바른지 확인해야 합니다.",
        "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": "보너스 프로모션 목록을 성공적으로 수신했습니다.",
        "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": "잘못된 요청입니다.",
        "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": "보너스 프로모션을 성공적으로 수신했습니다.",
        "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": "코드에 대한 정보입니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "description": "코드 유형: `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` 값이 올바른지 확인해 주세요.",
        "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": "잘못된 코드 프로모션입니다.",
        "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": "쿠폰 목록을 성공적으로 수신했습니다.",
        "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": "고유 카탈로그 혜택용 코드 목록을 성공적으로 수신했습니다.",
        "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": "고유 카탈로그 혜택 코드의 총 개수입니다."
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/Promotions_200-coupon-code-list"
              }
            }
          }
        }
      },
      "200-admin-get-user-promo-code-limits": {
        "description": "사용자에 대한 프로모션 코드 제한 사항을 성공적으로 수신했습니다.",
        "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": "기본 인증 자격 증명이 제공되지 않았거나 올바르지 않습니다. 기본 인증을 사용하고 있는지 확인하고 자격 증명이 올바른지 확인해 주세요.",
        "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": "사용자에 대한 쿠폰 제한 사항을 성공적으로 수신했습니다.",
        "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": "코드에 대한 프로모션 코드 제한 사항을 성공적으로 수신했습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "promotion_id": {
                  "type": "integer",
                  "description": "프로모션 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Code-limit-promo-code"
                  }
                },
                "total_items_count": {
                  "type": "number",
                  "description": "총 코드 개수입니다."
                },
                "has_more": {
                  "type": "boolean",
                  "description": "코드가 존재하는 다른 페이지가 있는 경우입니다."
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/code-limit"
              }
            }
          }
        }
      },
      "200-admin-get-code-coupon-limits": {
        "description": "코드에 대한 쿠폰 제한 사항을 성공적으로 수신했습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "promotion_id": {
                  "type": "integer",
                  "description": "프로모션 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Code-limit-promo-code"
                  }
                },
                "total_items_count": {
                  "type": "number",
                  "description": "총 코드 개수입니다."
                },
                "has_more": {
                  "type": "boolean",
                  "description": "코드가 존재하는 다른 페이지가 있는 경우입니다."
                }
              }
            },
            "examples": {
              "response": {
                "$ref": "#/components/examples/code-limit"
              }
            }
          }
        }
      },
      "Common_401-complex": {
        "description": "인증이 통과되지 않았거나 잘못되었습니다. 인증 또는 올바른 자격 증명을 사용했는지 확인해야 합니다.",
        "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": "인증 헤더가 전송되지 않았습니다.",
        "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": "요청 유효성 검사 오류입니다.",
        "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": "사용자 한 명에 대한 프로모션 제한 설정을 성공적으로 수신했습니다.",
        "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": "가치 포인트 목록을 성공적으로 수신했습니다.",
        "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": "가치 포인트를 성공적으로 생성했습니다.",
        "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": "잘못된 요청입니다.",
        "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": "지정한 가치 포인트를 성공적으로 수신했습니다.",
        "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": "가치 포인트 보상이 있는 아이템 목록을 성공적으로 수신했습니다.",
        "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": "아이템을 찾을 수 없습니다. `project_id`과 `sku`가 올바른지 확인해야 합니다.",
        "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": "사용자의 보상 체인 검색을 성공적으로 완료했습니다.",
        "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": "페이지가 더 있다는 표시로 사용됩니다."
                },
                "total_items_count": {
                  "type": "integer",
                  "example": 10,
                  "description": "시스템에 있는 보상 체인의 총 수량입니다."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/client-reward-chain-item-model"
                  }
                }
              }
            }
          }
        }
      },
      "200-client-get-user-reward-chain-balance": {
        "description": "사용자의 가치 포인트 잔액 검색을 성공적으로 완료했습니다.",
        "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": "가치 포인트 수량입니다."
                },
                "is_clan": {
                  "$ref": "#/components/schemas/is_clan"
                }
              }
            }
          }
        }
      },
      "404-reward-chain-step-not-found": {
        "description": "보상 체인 단계를 찾을 수 없습니다.",
        "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": "단계 보상을 청구할 수 없습니다.",
        "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": "사용자의 클랜이 성공적으로 업데이트되었습니다.",
        "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": "아이템 이름입니다."
                      },
                      "type": {
                        "type": "string",
                        "example": "bundle",
                        "description": "아이템 유형입니다."
                      },
                      "description": {
                        "type": "string",
                        "example": "Super box with items",
                        "description": "아이템 설명입니다."
                      },
                      "image_url": {
                        "$ref": "#/components/schemas/Common_admin-image_url"
                      },
                      "quantity": {
                        "type": "integer",
                        "example": 2,
                        "description": "아이템 수량입니다."
                      },
                      "bundle_type": {
                        "type": "string",
                        "description": "번들 유형. 아이템 유형이 번들인 경우 반환됩니다.",
                        "enum": [
                          "standard",
                          "virtual_currency_package"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "200-admin-get-list-reward-chains": {
        "description": "보상 체인 목록을 성공적으로 수신했습니다.",
        "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": "보상 체인을 성공적으로 생성했습니다.",
        "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": "지정된 보상 체인을 성공적으로 수신했습니다.",
        "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": "보상 체인을 찾을 수 없습니다.",
        "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": "보상 체인을 성공적으로 업데이트했습니다.",
        "content": {}
      },
      "204-admin-delete-reward-chain": {
        "description": "보상 체인을 성공적으로 삭제했습니다.",
        "content": {}
      },
      "204-admin-toggle-reward-chain": {
        "description": "보상 체인이 비활성화/활성화되었습니다.",
        "content": {}
      },
      "204-admin-reset-reward-chain": {
        "description": "보상 체인이 재설정되었습니다.",
        "content": {}
      },
      "200-admin-get-list-daily-chains": {
        "description": "일일 보상 목록이 성공적으로 검색되었습니다.",
        "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": "일일 보상의 총 개수입니다."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/admin-daily-chain-short-model"
                  }
                }
              }
            }
          }
        }
      },
      "201-admin-create-daily-chain": {
        "description": "일일 보상을 성공적으로 생성했습니다.",
        "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": "잘못된 일일 보상 구성 오류입니다.",
        "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": "일일 보상 데이터를 성공적으로 조회했습니다.",
        "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": "일일 보상을 찾을 수 없습니다.",
        "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": "잘못된 일일 보상 구성 오류입니다.",
        "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": "사용자의 일일 보상이 성공적으로 검색되었습니다.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-client-daily-chain-list"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "has_more": {
                  "type": "boolean",
                  "example": true,
                  "description": "페이지가 더 있다는 표시로 사용됩니다."
                },
                "total_items_count": {
                  "type": "integer",
                  "example": 3,
                  "description": "일일 보상의 총 개수입니다."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/client-daily-chain-model"
                  }
                }
              }
            }
          }
        }
      },
      "401-client-auth-error": {
        "description": "인증을 통과하지 못했거나 잘못되었습니다.",
        "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": "일일 보상 또는 일일 보상 단계를 찾을 수 없습니다.",
        "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": "혜택 체인 목록을 성공적으로 수신했습니다.",
        "content": {
          "application/json": {
            "examples": {
              "response": {
                "$ref": "#/components/examples/200-client-offer-chain-list"
              }
            },
            "schema": {
              "type": "object",
              "properties": {
                "has_more": {
                  "type": "boolean",
                  "example": true,
                  "description": "더 많은 페이지를 사용할 수 있는지 여부를 나타냅니다."
                },
                "total_items_count": {
                  "type": "integer",
                  "example": 10,
                  "description": "사용 가능한 혜택 체인의 총 개수입니다."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/client-offer-chain-model"
                  }
                }
              }
            }
          }
        }
      },
      "404-offer-chain-not-found": {
        "description": "혜택 체인을 찾을 수 없습니다.",
        "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": "혜택 체인 또는 단계를 찾을 수 없습니다.",
        "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": "주문을 성공적으로 생성했습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "order_id": {
                  "type": "integer",
                  "description": "주문 ID입니다."
                },
                "token": {
                  "type": "string",
                  "description": "결제 토큰입니다."
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "order_id": 641,
                  "token": "f4puMEFFDZcx9nv5HoNHIkPe9qghvBQo"
                }
              }
            }
          }
        }
      },
      "200-admin-get-list-offer-chains": {
        "description": "혜택 체인 목록이 성공적으로 검색되었습니다.",
        "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": "혜택 체인을 성공적으로 생성했습니다.",
        "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": "혜택 체인 구성이 잘못되었습니다.",
        "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": "혜택 체인 데이터를 성공적으로 조회했습니다.",
        "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": "혜택 체인 구성이 잘못되었습니다.",
        "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": "아이템을 찾을 수 없습니다.",
        "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": "잘못된 요청입니다.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Upsell-422-invalid-request"
            }
          }
        }
      },
      "Upsell-200-get-client-list": {
        "description": "상향 판매 아이템 목록이 성공적으로 접수되었습니다.",
        "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": []
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "200-get-point-balance": {
        "description": "로열티 포인트 잔액을 성공적으로 조회했습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "balance"
              ],
              "properties": {
                "balance": {
                  "type": "number",
                  "format": "double",
                  "description": "현재 로열티 포인트 잔액.",
                  "example": 150.5
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "balance": 150.5
                }
              }
            }
          }
        }
      },
      "ItemGroup_401-invalid-basic-auth": {
        "description": "기본 인증에 실패했거나 잘못된 자격 증명이 입력되었습니다. 기본 인증을 사용하고 올바른 자격 증명을 입력했는지 확인하십시오.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/error-response-base"
            },
            "examples": {
              "response": {
                "value": {
                  "statusCode": 401,
                  "errorCode": 1020,
                  "errorMessage": "[0401-1020]: Error in Authentication method occurred",
                  "transactionId": "x-x-x-x-transactionId-mock-x-x-x"
                }
              }
            }
          }
        }
      },
      "404-user-or-point-not-found": {
        "description": "사용자 계정 또는 로열티 포인트를 찾을 수 없습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "message_id",
                "message"
              ],
              "properties": {
                "message_id": {
                  "type": "string",
                  "description": "오류 코드.",
                  "example": "error_not_found"
                },
                "message": {
                  "type": "string",
                  "description": "간단한 오류 설명.",
                  "example": "User account or loyalty points not found."
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "message_id": "error_not_found",
                  "message": "User account or loyalty points not found."
                }
              }
            }
          }
        }
      },
      "200-debit-point-balance": {
        "description": "로열티 포인트 잔액이 성공적으로 차감되었습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "transaction_id",
                "previous_balance",
                "new_balance",
                "amount"
              ],
              "properties": {
                "transaction_id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "이 요청으로 생성된 차감 트랜잭션의 ID.",
                  "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
                },
                "previous_balance": {
                  "type": "number",
                  "format": "double",
                  "description": "차감 전 잔액.",
                  "example": 150.5
                },
                "new_balance": {
                  "type": "number",
                  "format": "double",
                  "description": "차감 후 잔액.",
                  "example": 100.5
                },
                "amount": {
                  "type": "number",
                  "format": "double",
                  "description": "잔액에서 차감된 금액.",
                  "example": 50
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "transaction_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "previous_balance": 150.5,
                  "new_balance": 100.5,
                  "amount": 50
                }
              }
            }
          }
        }
      },
      "400-bad-request": {
        "description": "잘못된 요청입니다. 요청에 잘못된 매개 변수가 포함되어 있습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "message_id",
                "message"
              ],
              "properties": {
                "message_id": {
                  "type": "string",
                  "description": "오류 코드.",
                  "example": "error_bad_request"
                },
                "message": {
                  "type": "string",
                  "description": "간단한 오류 설명.",
                  "example": "Invalid request body."
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "message_id": "error_bad_request",
                  "message": "Invalid request body."
                }
              }
            }
          }
        }
      },
      "422-insufficient-balance": {
        "description": "차감 작업에 필요한 로열티 포인트 잔액이 부족합니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "message_id",
                "message"
              ],
              "properties": {
                "message_id": {
                  "type": "string",
                  "description": "오류 코드.",
                  "example": "error_bad_request"
                },
                "message": {
                  "type": "string",
                  "description": "간단한 오류 설명.",
                  "example": "Insufficient loyalty point balance."
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "message_id": "error_bad_request",
                  "message": "Insufficient loyalty point balance."
                }
              }
            }
          }
        }
      },
      "200-credit-point-balance": {
        "description": "로열티 포인트 잔액이 성공적으로 적립되었습니다.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "transaction_id",
                "previous_balance",
                "new_balance",
                "amount"
              ],
              "properties": {
                "transaction_id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "이 요청의 결과로 생성된 적립 트랜잭션의 ID.",
                  "example": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
                },
                "previous_balance": {
                  "type": "number",
                  "format": "double",
                  "description": "적립 전 잔액.",
                  "example": 100.5
                },
                "new_balance": {
                  "type": "number",
                  "format": "double",
                  "description": "적립 후 잔액.",
                  "example": 150.5
                },
                "amount": {
                  "type": "number",
                  "format": "double",
                  "description": "잔액에 적립된 금액.",
                  "example": 50
                }
              }
            },
            "examples": {
              "response": {
                "value": {
                  "transaction_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                  "previous_balance": 100.5,
                  "new_balance": 150.5,
                  "amount": 50
                }
              }
            }
          }
        }
      }
    },
    "requestBodies": {
      "Promotions_redeem-coupon-model": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "coupon_code": {
                  "type": "string",
                  "description": "고유한 쿠폰 코드입니다. 문자와 숫자를 포함합니다.",
                  "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": "고유한 프로모션 코드입니다. 문자와 숫자를 포함합니다.",
                  "minLength": 1,
                  "maxLength": 128,
                  "example": "SUMMER2021",
                  "default": "SUMMER2021"
                },
                "cart": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "장바구니 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": "장바구니 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": "프로모션의 이름입니다. 키/값 쌍을 포함해야 합니다.\n여기에서 키는 \"^[a-z]{2}-[A-Z]{2}$\" 형식의 로케일이며 값은 문자열입니다.",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "example": {
                    "en-US": "Promotion",
                    "ru-RU": "Акция"
                  }
                },
                "promotion_periods": {
                  "$ref": "#/components/schemas/promotion_periods"
                },
                "discount": {
                  "type": "object",
                  "properties": {
                    "percent": {
                      "type": "string",
                      "description": "퍼센트 할인입니다.\n이 퍼센트를 사용하여 계산한 값을 사용하여 아이템의 가격이 낮아지게 한 다음 소수점 이하 2자리로 반올림합니다.",
                      "example": 10
                    }
                  },
                  "required": [
                    "percent"
                  ]
                },
                "items": {
                  "type": "array",
                  "items": {
                    "description": "할인 대상 아이템 목록입니다.",
                    "type": "object",
                    "properties": {
                      "sku": {
                        "type": "string",
                        "description": "아이템 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": "프로모션 데이터가 있는 개체입니다.",
        "required": true
      },
      "Promotions_create-update-bonus-promotion": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "condition",
                "bonus",
                "name"
              ],
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "프로모션 ID입니다. 프로젝트 내부의 고유 프로모션 식별자입니다."
                },
                "promotion_periods": {
                  "$ref": "#/components/schemas/promotion_periods"
                },
                "name": {
                  "type": "object",
                  "description": "프로모션의 이름입니다. 키가 \"^[a-z]{2}-[A-Z]{2}$\" 형식의 로케일인 키/값 쌍을 포함해야 하며 값은 문자열입니다.",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "example": {
                    "en-US": "Summer season bonus",
                    "de-DE": "Sommersaison Bonus"
                  }
                },
                "condition": {
                  "type": [
                    "array",
                    "null"
                  ],
                  "description": "프로모션을 적용하기 위해 구매 항목에 포함되어야 하는 아이템 세트입니다. 이 매개 변수가 `null`이면 프로젝트 내의 모든 구매 항목에 프로모션이 적용됩니다.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "sku": {
                        "type": "string",
                        "description": "아이템 SKU입니다.",
                        "default": "elven_sword"
                      }
                    }
                  }
                },
                "attribute_conditions": {
                  "$ref": "#/components/schemas/promotion_user-attribute_conditions_model-post"
                },
                "bonus": {
                  "type": [
                    "array",
                    "null"
                  ],
                  "items": {
                    "description": "사용자의 구매 항목에 보너스로 추가될 아이템의 목록입니다.",
                    "type": "object",
                    "properties": {
                      "sku": {
                        "type": "string",
                        "description": "아이템 SKU입니다.",
                        "default": "elven_shield"
                      },
                      "quantity": {
                        "type": "number",
                        "description": "아이템 수량입니다.",
                        "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": "Non-personalized 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": "Offer chain displayed when no personalized offer chains are found 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": []
                }
              }
            }
          }
        }
      },
      "debit-point-balance": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "amount",
                "reason"
              ],
              "properties": {
                "amount": {
                  "type": "number",
                  "format": "double",
                  "description": "차감할 로열티 포인트 금액입니다. 양수여야 합니다.",
                  "example": 50
                },
                "reason": {
                  "type": "string",
                  "description": "자유 텍스트 형식의 잔액 변경 사유입니다(예: 리워드, 보상, 수동 조정).",
                  "example": "Manual adjustment"
                }
              }
            },
            "examples": {
              "request": {
                "value": {
                  "amount": 50,
                  "reason": "Manual adjustment"
                }
              }
            }
          }
        }
      },
      "credit-point-balance": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "amount",
                "reason"
              ],
              "properties": {
                "amount": {
                  "type": "number",
                  "format": "double",
                  "description": "적립할 로열티 포인트 금액입니다. 양수여야 합니다.",
                  "example": 50
                },
                "reason": {
                  "type": "string",
                  "description": "자유 텍스트 형식의 잔액 변경 사유입니다(예: 리워드, 보상, 수동 조정).",
                  "example": "Manual adjustment"
                }
              }
            },
            "examples": {
              "request": {
                "value": {
                  "amount": 50,
                  "reason": "Manual adjustment"
                }
              }
            }
          }
        }
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "프로모션",
      "tags": [
        "promotions-overview",
        "promotions-common",
        "promotions-coupons",
        "promotions-promo-codes",
        "promotions-unique-catalog-offers",
        "promotions-discounts",
        "promotions-bonuses"
      ]
    },
    {
      "name": "개인화",
      "tags": [
        "personalized-catalog"
      ]
    },
    {
      "name": "제한 사항",
      "tags": [
        "promotion-limits-overview",
        "user-limits-admin"
      ]
    },
    {
      "name": "보상 체인 및 밸류 포인트",
      "tags": [
        "reward-chain-value-points-overview",
        "reward-chain-value-points-admin",
        "reward-chain-client",
        "clan-reward-chain-client"
      ]
    },
    {
      "name": "일일 체인",
      "tags": [
        "daily-chain-overview",
        "daily-chain-admin",
        "daily-chain-client"
      ]
    },
    {
      "name": "혜택 체인",
      "tags": [
        "offer-chains-overview",
        "offer-chain-admin",
        "offer-chain-client"
      ]
    },
    {
      "name": "업셀링",
      "tags": [
        "upsell-overview",
        "upsell-admin",
        "upsell-client"
      ]
    },
    {
      "name": "로열티 서비스",
      "tags": [
        "loyalty-program-overview",
        "loyalty-program-admin"
      ]
    }
  ]
}