{
  "openapi": "3.1.0",
  "info": {
    "description": "# 개요\n\n웹훅은 시스템에서 발생하는 이벤트에 대한 참고입니다. 특정 이벤트가 발생하면 엑솔라는 이벤트 데이터가 송신되는 HTTP 요청을 애플리케이션에 \n보냅니다. 이는 일반적으로 JSON 형식의 POST 요청입니다.\n\n<strong>이벤트 예시:</strong>\n- 아이템 카탈로그와 사용자 상호 작용\n- 주문 결제 또는 취소\n\n설정한 이벤트가 발생하면 엑솔라는 웹훅을 통해 시스템에 해당 이벤트를 알립니다. 그 결과로 다음과 같은 작업을 수행할 수 있습니다.\n- 사용자의 잔액 충전\n- 결제 대금 환불\n- 사용자 계정에서 새 아이템 추가 또는 제거\n- 정기 결제 서비스 제공 시작\n- 부정 결제가 의심되는 경우 사용자 차단\n\n<b>결제 처리 웹훅 워크플로의 예시:</b>\n\n![결제 처리 웹훅](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks-general.svg)\n\n<div class=\"note\">\n<p><strong>메모</strong></p><p> 사용된 솔루션과 통합 유형에 따라 웹훅 세트와 상호작용 순서가 제공된 예시와 다를 수 있습니다.</p>\n</div>\n\n<b>엑솔라 웹훅 통합을 위한 동영상 가이드:</b>\n\n<div style=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; border-radius: 15px; overflow: hidden;\">\n  <iframe src=\"https://player.vimeo.com/video/1034591338\" style=\"position: absolute; top:0; left: 0; width: 100%; height: 100%; border:0; border-radius: 15px;\" allowfullscreen></iframe>\n</div>\n\n\n<b>엑솔라 상품 및 솔루션으로 작업 시 웹훅 설정:</b>\n\n<table>\n<thead>\n    <tr>\n        <th>상품/솔루션</th>\n        <th>필수/선택</th>\n        <th>웹훅 사용처</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>결제</td>\n        <td>필수</td>\n        <td>\n          <ul>\n            <li>사용자 유효성 검사.</li>\n            <li>결제 성공 또는 결제 환불 시 트랜잭션 세부 정보에 대한 정보 수신.</li>\n            <li>구매한 아이템을 사용자에게 추가하고 주문 취소 시 아이템을 제거.</li>\n          </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>인게임 스토어</td>\n        <td>필수</td>\n        <td>\n          <ul>\n            <li>사용자 유효성 검사.</li>\n            <li>결제 성공 또는 결제 환불 시 트랜잭션 세부 정보에 대한 정보 수신.</li>\n            <li>구매한 아이템을 사용자에게 추가하고 주문 취소 시 아이템을 제거.</li>\n          </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>게임 판매</td>\n        <td>선택 사항</td>\n        <td>게임 키 판매의 경우 사용자 유효성 검사 및 아이템 추가가 필요하지 않습니다. 결제나 주문 취소 등 이벤트 관련 정보를 수신하기 위해 웹훅을 연결할 수 있습니다.<br />웹훅을 연결하는 경우 들어오는 모든 <a href=\"/ko/webhooks/overview/#section/List-of-required-webhooks\">필수 웹훅</a>을 처리해야 합니다.\n</td>\n    </tr>\n    <tr>\n        <td>정기 결제</td>\n        <td>선택 사항</td>\n        <td>정기 결제 생성, 업데이트 또는 취소에 대한 정보를 받습니다. 또는 <a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_information_set_up_via_api\">API를 통해 정보를 요청</a>할 수 있습니다.\n</td>\n    </tr>\n    <tr>\n        <td>웹샵</td>\n        <td>필수</td>\n        <td>\n          <ul>\n            <li>사용자 유효성 검사.</li>\n            <li>결제 성공 또는 결제 환불 시 트랜잭션 세부 정보에 대한 정보 수신.</li>\n            <li>구매한 아이템을 사용자에게 추가하고 주문 취소 시 아이템을 제거.</li>\n            <li>사용자 ID를 통한 인증을 사용하는 경우 사용자 인증을 사용합니다. 또는 <a href=\"/solutions/web-shop/authentication-and-analytics/set-up-authentication/#web_shop_guide_shop_with_auth_set_up_auth_xsolla_login_how_to_get_it\">엑솔라 로그인을 통한 사용자 인증</a>을 사용할 수 있습니다.</li>\n          </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>디지털 배포 솔루션</td>\n        <td>필수</td>\n        <td>\n          <ul>\n            <li>사용자 유효성 검사.</li>\n            <li>엑솔라 측의 트랜잭션 ID와 시스템의 트랜잭션 ID를 연결.</li>\n            <li>주문에서 추가 트랜잭션 매개 변수를 전송.</li>\n            <li>구매한 아이템을 사용자에게 추가하고 주문 취소 시 아이템을 제거.</li>\n          </ul>\n          <p>디지털 배포 솔루션에 대한 웹훅 설정에 대한 자세한 내용은 <a href=\"/solutions/ddh/#integration_guide_ddh_webhook\">문서</a>를 참조하세요.</p>\n        </td>\n    </tr>\n    <tr>\n        <td>로그인</td>\n        <td>선택 사항</td>\n        <td>\n          <p>이벤트 정보 수신:</p>\n          <ul>\n            <li>사용자 등록/권한 부여</li>\n            <li>사용자 이메일 주소 확인</li>\n            <li>사용자의 소셜 미디어 계정 연결</li>\n          </ul>\n          <p>웹훅 설정 방법에 대한 자세한 정보는 <a href=\"/api/login/operation/add-webhook-for-event/\">로그인 문서</a>를 참조하십시오.</p>\n        </td>\n    </tr>\n</tbody>\n</table>\n\n# 필수 웹훅 목록\n웹훅 작업이 필요한 상품 및 솔루션을 사용하는 경우 <a href=\"/webhooks/overview/#section/Set-up-\nwebhooks-in-Publisher-Account\">관리자 페이지에서 웹훅을 활성화 및 테스트</a>하고 <a \nhref=\"/webhooks/overview/#section/Webhook-listener\">처리를 설정</a>합니다. 특정 이벤트가 발생하면 \n웹훅이 순차적으로 전송됩니다. 따라서 웹훅 중 하나를 처리하지 않으면 후속 웹훅이 전송되지 않습니다. 필수 웹훅 목록은 아래에 제시되어 \n있습니다.\n\n## 인게임 스토어 및 결제\n사이트에서 아이템을 구매하고 반품할 때 엑솔라 측에서 2개의 웹훅 전송 옵션이 설정되었습니다. 결제 및 트랜잭션 데이터가 포함된 정보와 구매한 \n아이템에 대한 정보는 별도로 제공되거나 하나의 웹훅으로 결합될 수 있습니다.\n\n<b>결합된 웹훅에서 정보 수신:</b>\n\n2025년 1월 22일 이후 <a href=\"https://publisher.xsolla.com/\">관리자 페이지</a>에 등록한 경우, <a \nhref=\"/webhooks/operation/successful-order-payment\">주문 결제 성공</a>(`order_paid`) \n및 <a href=\"/webhooks/operation/order-cancellation\">주문 취소</a>(`order_canceled`) \n웹훅의 모든 정보를 수신하게 됩니다. 이 경우, <a \nhref=\"/webhooks/operation/payment\">결제</a>(`payment`) 및 <a \nhref=\"/webhooks/operation/refund\">환불</a>(`refund`) 웹훅을 처리하지 않아도 됩니다.\n\n<b>개별 웹훅에서 정보 수신:</b>\n\n2025년 1월 22일 이후 <a href=\"https://publisher.xsolla.com/\">관리자 페이지</a>에 등록한 경우, 다음 \n웹훅을 받게 됩니다.\n- 결제 데이터 및 트랜잭션 세부 정보가 포함된 <a \n  href=\"/webhooks/operation/payment\">결제</a>(`payment`) 및 <a \n  href=\"/webhooks/operation/refund\">환불</a>(`refund`).\n- 구매한 아이템에 대한 정보가 포함된 <a href=\"/webhooks/operation/successful-order-payment-\n  separate\">주문 결제 성공</a>(`order_paid`) 및 <a href=\"/webhooks/operation/order-\n  cancellation-separate\">주문 취소</a>(`order_canceled`).\n\n유입되는 모든 웹훅을 처리해야 합니다. 결합된 웹훅을 수신하는 새로운 옵션으로 전환하려면 고객 성공 관리자에게 문의하거나 <a \nhref=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>으로 이메일을 보내십시오.\n\n인게임 스토어와 결제 관리를 완벽하게 운영하려면 주요 웹훅을 처리해야 합니다.\n\n<b>결합된 웹훅을 수신하는 경우</b>:\n\n<table>\n<thead>\n    <tr>\n        <th>웹훅 이름 및 유형</th>\n        <th>설명</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>사용자 유효성 검사 &gt; <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a>(<code>user_validation</code>)</td>\n        <td>사용자가 게임에 등록되었는지 확인하기 위해 결제 과정의 여러 단계에서 전송됩니다.</td>\n    </tr>\n    <tr>\n        <td>게임 서비스&gt; 결합된 웹훅 &gt; <a href=\"/webhooks/operation/successful-order-payment\">주문 결제 성공</a>(<code>order_paid</code>)</td>\n        <td>여기에는 결제 데이터, 트랜잭션 세부 정보 및 구매한 아이템에 대한 정보가 포함됩니다. 웹훅의 데이터를 사용하여 사용자에게 아이템을 추가합니다.</td>\n    </tr>\n    <tr>\n        <td>게임 서비스 &gt; 결합된 웹훅 &gt; <a href=\"/webhooks/operation/order-cancellation\">주문 취소</a>(<code>order_canceled</code>)</td>\n        <td>취소된 결제, 트랜잭션 세부 정보, 구매한 아이템에 대한 정보가 포함되어 있습니다. 웹훅의 데이터를 사용하여 구매한 아이템을 제거합니다.</td>\n    </tr>\n</tbody>\n</table>\n\n\n<b>개별 웹훅을 수신하는 경우</b>:\n\n<table>\n<thead>\n    <tr>\n        <th>웹훅 이름 및 유형</th>\n        <th>설명</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>사용자 유효성 검사 &gt; <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a>(<code>user_validation</code>)</td>\n        <td>사용자가 게임에 등록되었는지 확인하기 위해 결제 과정의 여러 단계에서 전송됩니다.</td>\n    </tr>\n    <tr>\n        <td>결제 &gt; <a href=\"/webhooks/operation/payment\">지불</a>(<code>payment</code>)</td>\n        <td>여기에는 결제 데이터와 트랜잭션 세부 정보가 포함되어 있습니다.</td>\n    </tr>\n    <tr>\n        <td>게임 서비스&gt; 개별 웹훅 &gt; <a href=\"/webhooks/operation/successful-order-payment-separate\">주문 결제 성공</a>(<code>order_paid</code>)</td>\n        <td>여기에는 구매한 아이템에 대한 정보가 포함되어 있습니다. 웹훅의 데이터를 사용하여 사용자에게 아이템을 추가합니다.</td>\n    </tr>\n    <tr>\n        <td>결제 &gt; <a href=\"/webhooks/operation/refund\">환불</a>(<code>refund</code>)</td>\n        <td>여기에는 결제 데이터와 트랜잭션 세부 정보가 포함되어 있습니다.</td>\n    </tr>\n    <tr>\n        <td>게임 서비스 &gt; 개별 웹훅 &gt; <a href=\"/webhooks/operation/order-cancellation-separate\">주문 취소</a>(<code>order_canceled</code>)</td>\n        <td>여기에는 구매한 아이템에 대한 정보와 취소된 트랜잭션 ID가 포함되어 있습니다. 웹훅의 데이터를 사용하여 구매한 아이템을 제거합니다.</td>\n    </tr>\n</tbody>\n</table>\n\n애플리케이션 측에 아이템 카탈로그 <a href=\"/doc/in-game-store/features/personalization\">개인 \n설정</a>이 구현된 경우 <a href=\"/webhooks/operation/personalized-partner-catalog\">파트너 \n측에서 카탈로그 개인화</a> 웹훅을 처리하도록 설정합니다.\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>실제 결제를 받으려면 <a href=\"/doc/in-game-store/integration-guide/sign-licensing-agreement/\">라이센스 계약을 체결</a>하고 웹훅을 처리하기만 하면 됩니다.</p>\n<p><ul><li>개별 웹훅을 수신하는 경우, <a href=\"/webhooks/operation/payment\">결제</a>, <a href=\"/webhooks/operation/successful-order-payment-separate\">주문 결제 성공</a> 및 <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a></li><li>결합된 웹훅을 수신하는 경우, <a href=\"/webhooks/operation/successful-order-payment\">주문 결제 성공</a> 및 <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a> </li></ul></p>\n</div>\n\n## 정기 결제\n정기 결제 플랜을 자동으로 관리하려면 기본 웹훅 처리를 구현해야 합니다.\n- <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 \n  검사</a>(`user_validation`) - 사용자가 게임에 등록되었는지 확인하기 위해 결제 과정의 여러 단계에서 전송됩니다.\n- <a href=\"/webhooks/operation/payment\">결제</a>(`payment`) - 주문이 결제될 때 전송되며 결제 \n  데이터와 트랜잭션 세부 정보가 포함되어 있습니다.\n- <a href=\"/webhooks/operation/created-subscription/\">생성된 정기 \n  결제</a>(`create_subscription`) - <a href=\"/webhooks/operation/payment\">결제</a> \n  웹훅이 성공적으로 처리되었거나 사용자가 평가판 사용 기간이 있는 정기 결제 구매했을 때 전송됩니다. 여기에는 구매한 정기 결제의 세부 정보 및 \n  사용자 데이터가 포함되어 있습니다. 웹훅 데이터를 사용하여 사용자에게 정기 결제를 추가할 수 있습니다.\n- <a href=\"/webhooks/operation/updated-subscription/\">업데이트된 정기 \n  결제</a>(`update_subscription`) - 정기 결제가 갱신되거나 변경될 때, <a \n  href=\"https://developers.xsolla.com/ko/webhooks/operation/payment\">결제</a> 웹훅이 \n  성공적으로 처리되었을 때 전송됩니다. 여기에는 구매한 정기 결제의 세부 정보와 사용자 데이터가 포함되어 있습니다. 웹훅 데이터를 사용하여 \n  사용자의 정기 결제를 연장하거나 정기 결제 매개 변수를 변경할 수 있습니다.\n- <a href=\"/webhooks/operation/refund\">환불</a>(`refund`) - 주문이 취소될 때 전송되며 취소된 결제 \n  데이터와 트랜잭션 세부 정보가 포함되어 있습니다.\n- <a href=\"/webhooks/operation/canceled-subscription/\">취소된 정기 \n  결제</a>(`cancel_subscription`) - <a href=\"/webhooks/operation/refund\">환불</a> 웹훅이 \n  성공적으로 처리되었거나 다른 사유로 정기 결제가 취소된 경우 전송됩니다. 여기에는 정기 결제 및 사용자 데이터에 대한 정보가 포함되어 \n  있습니다. 웹훅 데이터를 사용하여 구매한 정기 결제를 사용자로부터 제거합니다.\n\n# 관리자 페이지에서 웹훅 설정하기\n\n## 일반 설정\n\n웹훅 수신을 활성화하는 방법:\n1. 관리자 페이지의 프로젝트에서 <a \n   href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\"> 프로젝트 설정&gt; \n   웹훅</a> 섹션으로 이동하세요.\n2. <b>웹훅 서버</b> 필드에서 웹훅을 수신할 서버의 URL을 `https://example.com` 형식으로 지정합니다. 웹훅 테스트용 \n   도구에서 찾은 URL을 지정할 수도 있습니다.\n\n<div class=\"notice\">\n<p><strong>주의</strong></p>\n<p>데이터 전송에는 HTTPS 프로토콜이 사용되며 HTTP 프로토콜은 지원되지 않습니다.</p>\n</div>\n\n<p></p>\n\n3. 프로젝트 웹훅에 서명하기 위한 비밀 키는 기본적으로 생성됩니다. 새 비밀 키를 생성하려면 새로 고침 아이콘을 클릭합니다.\n4. <b>웹훅 활성화</b>를 클릭합니다.\n\n![Enable \nwebhooks](https://cdn.xsolla.net/developers/current/images/api_docs/enable.png)\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>웹훅을 테스트하려면 <a href=\"https://webhook.site/#!/\">webhook.site</a>와 같은 전용 웹사이트 또는 <a href=\"https://ngrok.com/\">ngrok</a>과 같은 플랫폼을 선택할 수 있습니다.</p>\n</div>\n\n<p></p>\n\n<div class=\"notice\">\n    <p><strong>참고</strong></p>\n    <p>웹훅을 동시에 다른 URL로 보낼 수 없습니다. 관리자 페이지에서 할 수 있는 작업은 먼저 테스트용 URL을 지정한 다음 실제 URL로 바꾸는 것입니다.</p>\n</div>\n\n웹훅 수신을 비활성화하는 방법:\n1. 관리자 페이지의 프로젝트에서 <a \n   href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\"> 프로젝트 설정&gt; \n   웹훅</a> 섹션으로 이동하세요.\n2. <b>웹훅 비활성화</b>를 클릭합니다.\n\n## 고급 설정\n\n웹훅의 경우 <a href=\"/webhooks/overview/#section/Test-webhooks-in-Publisher-\nAccount/Store\">결제 및 스토어</a> 섹션에서 고급 설정을 사용할 수 있습니다. 이러한 설정은 자동으로 <b>웹훅 수신</b> \n버튼을 클릭한 후 <a href=\"/webhooks/overview/#section/Set-up-webhooks-in-Publisher-\nAccount/General-settings\">일반 설정</a> 블록 아래에 나타납니다.\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>고급 설정이 표시되지 않으면 일반 설정에서 웹훅 수신이 연결되어 있는지 확인하고 <b>테스트 &gt; 결제 및 스토어</b> 탭에 있어야 합니다.</p>\n</div>\n\n이 섹션에서는 웹훅에서 추가 정보 수신을 설정할 수 있습니다. 이를 위해 해당 스위치를 활성 위치로 설정합니다. 각 권한의 줄은 설정을 \n변경하면 영향을 받는 웹훅을 나타냅니다.\n\n<table>\n<thead>\n    <tr>\n        <th>토글</th>\n        <th>설명</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>저장된 결제 계정에 대한 정보 표시</td>\n        <td>저장된 결제 방식에 대한 정보는 <code>payment_account</code> 사용자 정의 개체에서 전달됩니다.</td>\n    </tr>\n    <tr>\n        <td>저장된 결제 방식을 사용한 트랜잭션에 대한 정보 표시</td>\n        <td><p>정보는 웹훅의 다음 사용자 정의 매개 변수에서 전달됩니다.</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> - 저장된 결제 방식이 사용되지 않음</li><li><code>1</code> - 현재 결제를 진행할 때 결제 방식이 저장됨</li><li><code>2</code> - 이전에 저장한 결제 방식이 사용됨</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> - 일회성 결제</li><li><code>2</code> - 반복 결제</li></ul></li></ul></td>\n    </tr>\n    <tr>\n        <td>주문 개체를 웹훅에 추가</td>\n        <td>주문 관련 정보는 <a href=\"/webhooks/operation/payment/\">결제</a> 웹훅의 <code>order</code> 개체에서 전달됩니다.</td>\n    </tr>\n    <tr>\n        <td>민감한 데이터 없이 필수 사용자 매개 변수만 전송</td>\n        <td><p>사용자에 대한 다음 정보만 웹훅에서 전달됩니다.</p><ul><li>ID</li><li>국가</li></ul></td>\n    </tr>\n    <tr>\n        <td>사용자 정의 매개 변수 전송</td>\n        <td><a href=\"/api/pay-station/operation/create-token/\">사용자 정의 토큰 매개 변수</a> 관련 정보가 웹훅에서 전달됩니다.</td>\n    </tr>\n    <tr>\n        <td>카드 BIN 및 접미사 표시</td>\n        <td><p>은행 카드 번호에 대한 다음 정보가 웹훅에서 전달됩니다.</p><ul><li><code>card_bin</code> 매개 변수의 처음 6자리</li><li><code>card_suffix</code>의 마지막 4자리</li></ul></td>\n    </tr>\n    <tr>\n        <td>카드 브랜드 표시</td>\n        <td>결제에 사용된 카드의 브랜드. 예: Mastercard 또는 Visa.</td>\n    </tr>\n</tbody>\n</table>\n\n![고급 설정](https://cdn.xsolla.net/developers/current/images/api_docs/advanced-settings-upd.png)\n\n# 관리자 페이지에서 웹훅 테스트하기\n\n웹훅을 테스트하면 사용자 측과 엑솔라 측 모두에서 프로젝트를 올바르게 설정하는 데 도움이 돕니다.\n\n웹훅을 성공적으로 <a href=\"/webhooks/overview/#section/Set-up-webhooks-in-Publisher-\nAccount\">설정</a>하면 웹훅 설정 섹션 아래에 웹훅 테스트 섹션이 표시됩니다.\n\n![웹훅 테스트 \n섹션](https://cdn.xsolla.net/developers/current/images/api_docs/testing.png)\n\n관리자 페이지의 테스트 섹션은 웹훅 수신 옵션에 따라 다릅니다.\n\n<b>결합된 웹훅을 수신하는 경우</b>:\n\n<table>\n<thead>\n    <tr>\n        <th>웹훅 테스트를 위한 탭 이름</th>\n        <th>웹훅 이름 및 유형</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><b>결제 및 스토어</b></td>\n        <td>사용자 유효성 검사 &gt; <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a>(<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>게임 서비스&gt; 결합된 웹훅 &gt; <a href=\"/webhooks/operation/successful-order-payment\">주문 결제 성공</a>(<code>order_paid</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>게임 서비스 &gt; 결합된 웹훅 &gt; <a href=\"/webhooks/operation/order-cancellation\">주문 취소</a>(<code>order_canceled</code>)</td>\n    </tr>\n    <tr>\n        <td><b>정기 결제</b></td>\n        <td>사용자 유효성 검사 &gt; <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a>(<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>결제 &gt; <a href=\"/webhooks/operation/payment\">지불</a>(<code>payment</code>)</td>\n    </tr>\n</tbody>\n</table>\n\n\n<b>개별 웹훅을 수신하는 경우</b>:\n\n<table>\n<thead>\n    <tr>\n        <th>웹훅 테스트를 위한 탭 이름</th>\n        <th>웹훅 이름 및 유형</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><b>스토어</b></td>\n        <td>게임 서비스&gt; 개별 웹훅 &gt; <a href=\"/webhooks/operation/successful-order-payment-separate\">주문 결제 성공</a>(<code>order_paid</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>게임 서비스 &gt; 개별 웹훅 &gt; <a href=\"/webhooks/operation/order-cancellation-separate\">주문 취소</a>(<code>order_canceled</code>)</td>\n    </tr>\n    <tr>\n        <td><b>결제</b></td>\n        <td>사용자 유효성 검사 &gt; <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a>(<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>결제 &gt; <a href=\"/webhooks/operation/payment\">지불</a>(<code>payment</code>)</td>\n    </tr>\n    <tr>\n        <td><b>정기 결제</b></td>\n        <td>사용자 유효성 검사 &gt; <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a>(<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>결제 &gt; <a href=\"/webhooks/operation/payment\">지불</a>(<code>payment</code>)</td>\n    </tr>\n</tbody>\n</table>\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>테스트 섹션에 테스트를 통과하지 못했다는 경고가 표시되면 <a href=\"/webhooks/overview/#section/Webhook-listener\">웹훅 리스너</a>에서 웹훅 응답 설정을 확인합니다. 테스트 오류의 원인은 테스트 결과에 표시됩니다.</p>\n<p><b>예:</b></p>\n<p>전문 사이트 <a href=\"https://webhook.site/#!/\">webhook.site</a>를 테스트에 사용합니다.</p>\n<p><b>잘못된 서명에 대한 응답 테스트</b> 섹션에 오류가 표시됩니다.</p>\n<p>이는 엑솔라가 잘못된 서명이 포함된 웹훅을 전송하고 핸들러가 <code>INVALID_SIGNATURE</code> 오류 코드</p>를 지정하는 <code>4xx</code> HTTP 코드로 응답할 것으로 예상하기 때문에 발생합니다.\n<p><a href=\"https://webhook.site/#!/\">webhook.site</a>는 잘못된 서명이 있는 웹훅을 포함하여 모든 웹훅에 응답으로 <code>200</code> HTTP 코드를 전송합니다. 예상한 <code>4xx</code> HTTP 코드를 구할 수 없으므로 테스트 결과에 오류가 표시됩니다.</p>\n</div>\n\n![테스트 오류](https://cdn.xsolla.net/developers/current/images/api_docs/test-error.png)\n\n결합된 웹훅이 있는 시나리오를 테스트하는 프로세스는 아래와 같습니다.\n\n## 결제 및 스토어\n\n<b>결제 및 스토어</b> 탭에서 다음 웹훅을 테스트할 수 있습니다.\n- <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a>(`user_validation`)\n- <a href=\"/webhooks/operation/successful-order-payment\">주문 결제 \n  성공</a>(`order_paid`)\n- <a href=\"/webhooks/operation/order-cancellation\">주문 취소</a>(`order_canceled`)\n\n테스트 방법:\n1. 웹훅 테스트 섹션에서 <b>결제 및 스토어</b> 탭으로 이동합니다.\n2. 드롭다운 메뉴에서 아이템 유형을 선택합니다. 선택한 유형의 아이템이 관리자 페이지에 설정되어 있지 않으면 다음을 클릭합니다.\n   * <b>연결</b> - 이 유형의 아이템이 있는 모듈이 연결되어 있지 않은 경우\n   * <b>구성</b> - 이전에 모듈을 연결했지만 설정을 완료하지 않은 경우 <br/>버튼을 클릭하면 선택한 아이템의 유형에 해당하는 관리자 \n     페이지 섹션으로 리디렉션됩니다. 아이템을 생성한 후 웹훅 테스트 섹션으로 돌아가 다음 단계를 진행합니다.\n3. 필수 입력란을 채우세요. <ol type=\"a\"> <li>드롭다운 목록에서 아이템의 SKU를 선택하고 금액을 표시합니다. <b>+</b>를 \n   클릭하고 새 줄에 추가하여 동일한 유형의 아이템을 여러 개 선택할 수 있습니다.</li> <li><b>사용자 ID</b> - 테스트 시 문자와 \n   숫자의 조합을 사용할 수 있습니다.</li> <li><b>공개 사용자 ID</b> - 이메일이나 닉네임 등 사용자에게 알려진 ID. 이 필드는 \n   <b>페이 스테이션 &gt; 설정</b>의 프로젝트에서 공개 사용자 ID가 활성화된 경우 표시됩니다.</li> <li><b>엑솔라 주문 ID \n   필드</b>에 값을 입력합니다.</li> <li><b>엑솔라 인보이스 ID</b> - 엑솔라 측 트랜잭션 ID. 테스트 시 숫자 값을 사용할 \n   수 있습니다.</li> <li><b>인보이스 ID</b> - 게임 측의 트랜잭션 ID. 테스트 시 문자와 숫자의 조합을 자유롭게 사용할 수 \n   있습니다. 성공적인 결제를 위한 필수 매개 변수는 아니지만, 사용자 측의 트랜잭션 ID를 엑솔라 측의 트랜잭션 ID에 연결하기 위해 전달할 수 \n   있습니다.</li> <li><b>금액</b> - 결제 금액. 테스트할 시 어떤 숫자든 사용할 수 있습니다.</li> <li><b>통화</b> \n   - 드롭다운 목록에서 통화를 선택합니다.</li> </ol>\n\n4. <b>웹훅 테스트</b>를 클릭합니다.\n\n\n<a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a>, <a \nhref=\"/webhooks/operation/successful-order-payment\">주문 결제 성공</a> 및 <a \nhref=\"/webhooks/operation/order-cancellation\">주문 취소</a> 웹훅은 지정된 데이터가 포함된 웹훅을 \n제공된 URL로 전송합니다. 각 웹훅 유형의 테스트 결과는 <b>웹훅 테스트</b> 버튼 아래에 표시됩니다.\n\n프로젝트에서 공개 사용자 ID가 활성화된 경우 사용자 검색 검사 결과도 볼 수 있습니다.\n\n각 웹훅에 대해 성공한 시나리오와 오류가 있는 시나리오를 모두 처리하도록 구성해야 합니다.\n\n![결제 테스트 섹션](https://cdn.xsolla.net/developers/current/images/api_docs/payments-tab.png)\n\n## 정기 결제\n<b>정기 결제</b> 탭에서 다음 웹훅을 테스트할 수 있습니다.\n- <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a>(`user_validation`)\n- <a href=\"/webhooks/operation/payment\">결제</a> (`payment`)\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>관리자 페이지에서는 기본 사용자 유효성 검사 및 결제 웹훅만 테스트할 수 있습니다. 다른 웹훅 유형을 테스트하려면 다음으로 이동합니다.</p>\n<p><ul><li><a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_payment\">정기 결제 구매 테스트</a></li><li><a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_renewal\">정기 결제 갱신 테스트</a></li><li><a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_cancelation\">정기 결제 취소 테스트</a></li></ul></p>\n</div>\n\n<p></p>\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>웹훅을 테스트하려면 <b>관리자 페이지 &gt; 정기 결제 &gt; 정기 결제 플랜</b> 섹션에 하나 이상의 <a href=\"/doc/subscriptions/integration-guide/set-up-plan/\"> 생성된 정기 결제</a>가 있어야 합니다.</p>\n</div>\n\n테스트하는 방법: <ol> <li>테스트 섹션에서 <b>정기 결제</b> 탭으로 이동합니다.</li> <li>필수 입력 필드에 값을 \n입력합니다. <ol type=\"a\"> <li><b>사용자 ID</b> - 테스트 시 문자와 숫자의 조합을 사용할 수 있습니다.</li><li><b>엑솔라 인보이스 ID</b> - 엑솔라 측의 트랜잭션 ID입니다. 테스트 시 숫자 값을 사용할 수 있습니다.</li><li><b>공개 사용자 ID</b> - 사용자에게 알려진 ID(예: 이메일 또는 닉네임). 이 필드는 페이 스테이션 &gt; 설정 &gt; \n추가 설정 섹션의 프로젝트에서 공개 사용자 ID가 활성화된 경우에 표시됩니다.</li> <li><b>통화</b> - 드롭다운 목록에서 통화를 \n선택합니다.</li> <li><b>플랜 ID</b> - 정기 결제 플랜입니다. 드롭다운 목록에서 플랜을 선택합니다.</li> <li><b>정기 \n결제 상품</b> - 드롭다운 목록에서 상품을 선택합니다(선택 사항).</li> <li><b>금액</b> - 결제 금액입니다. 테스트할 때는 \n아무 숫자나 사용할 수 있습니다.</li> <li><b>인보이스 ID</b> - 게임 측의 트랜잭션 ID입니다. 테스트할 때 문자와 숫자를 \n조합하여 사용할 수 있습니다. 성공적인 결제를 위한 필수 매개 변수는 아니지만 트랜잭션 ID를 엑솔라 측과 연결하기 위해 전달할 수 \n있습니다.</li> <li><b>평가 기간</b>. <a href=\"/doc/subscriptions/integration-guide/get-\nsubscription-\ninformation/#guides_subscriptions_get_subscription_set_up_webhooks_sandbox\">평가 \n기간 없이 정기 결제 구매를 테스트</a>하거나 <a href=\"/doc/subscriptions/integration-guide/get-\nsubscription-\ninformation/#guides_subscriptions_get_subscription_set_up_webhooks_test_renewal\">정기 결제 갱신</a>을 테스트하려면 <code>0</code> 값을 지정합니다.</li> </ol> </li> <li><b>웹훅 \n테스트</b>를 클릭합니다.</li> </ol>\n\n지정된 URL로 데이터가 채워진 웹훅을 받게 됩니다. 성공적인 시나리오와 오류가 있는 시나리오 모두에 대한 각 웹훅의 테스트 결과가 <b>웹훅 \n테스트</b> 버튼 아래에 표시됩니다.\n\n<a id=\"webhook-listener\"></a>\n\n# 웹훅 리스너\n\n웹훅 리스너는 지정된 URL 주소로 들어오는 웹훅을 수신하고, <a href=\"/webhooks/overview/#section/Webhook-\nlistener/Generation-of-signature\">서명을 생성하며</a>, 엑솔라 웹훅 서버로 <a \nhref=\"/webhooks/overview/#section/Webhook-listener/Sending-responses-to-\nwebhook\">응답을 전송</a>하는 프로그램 코드입니다.\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>웹훅 처리를 위한 기성 클래스가 포함된 <a href=\"https://developers.xsolla.com/ko/sdk/php/\">페이 스테이션 PHP SDK 라이브러리</a>를 사용할 수 있습니다.</p>\n</div>\n\n<!-- IMPORTANT! Changing the list of IP addresses should be coordinated with the administrators. Request for Director of Infrastructure and IT approval in the ticket for changing the IP address list. -->\n\n애플리케이션 측의 다음 IP 주소에서 웹훅 수신을 구현합니다.\n- `185.30.20.0/24`\n- `185.30.21.0/24`\n- `185.30.22.0/24`\n- `185.30.23.0/24`\n- `34.102.38.178`\n- `34.94.43.207`\n- `35.236.73.234`\n- `34.94.69.44`\n- `34.102.22.197`\n\n<a href=\"/doc/login/\">로그인</a> 제품을 통합한 경우, 다음 IP 주소에서 처리 웹훅을 추가로 추가합니다:\n\n- `34.94.0.85`\n- `34.94.14.95`\n- `34.94.25.33`\n- `34.94.115.185`\n- `34.94.154.26`\n- `34.94.173.132`\n- `34.102.48.30`\n- `35.235.99.248`\n- `35.236.32.131`\n- `35.236.35.100`\n- `35.236.117.164`\n\n제한 사항:\n- 애플리케이션의 데이터베이스에 동일한 ID로 성공한 트랜잭션이 있으면 안 됩니다.\n- 웹훅 리스너가 데이터베이스에 이미 존재하는 ID로 웹훅을 수신한 경우 이 트랜잭션의 이전 처리 결과를 반환해야 합니다. 사용자에게 중복 구매 \n  항목을 추가하고 데이터베이스에 중복 레코드를 생성하는 것은 좋지 않습니다.\n\n## 서명 생성\n\n데이터의 안전한 전송을 보장하려면 웹훅이 실제로 엑솔라 서버에서 전송되었으며 전송 중에 변경되지 않았는지 확인해야 합니다. 이렇게 하려면, \n요청 본문 페이로드를 기반으로 자체 서명을 생성하고 수신 요청의`authorization` 헤더에서 제공된 서명과 비교해야 합니다. 서명이 \n일치하면 웹훅은 진짜이며 안전하게 처리된 것입니다.\n\n확인 단계:\n\n1. 들어오는 웹훅 요청의`authorization` 헤더에서 서명을 조회합니다. 헤더 형식은 `서명 <signature_value>`입니다.\n2. 웹훅 요청 본문을 JSON 형식으로 조회합니다. <div class=\"notice\"><p><strong>알림</strong></p><p>수신한 \n   JSON 페이로드를 그대로 사용하세요. 페이로드를 구문 분석하거나 다시 인코딩하면 서식이 변경되어 서명 확인에 실패할 수 있으므로 페이로드를 \n   구문 분석하거나 다시 인코딩해선 안 됩니다.</p></div><p></p>\n\n3. 비교를 위해 자체 서명을 생성합니다.<ol type=\"a\"> <li>문자열 끝에 키를 추가하여 JSON 페이로드를 프로젝트의 비밀 키와 \n   연결합니다.</li> <li>결과 문자열에 SHA-1 암호화 해시 함수를 적용합니다. 결과는 소문자 16진수 문자열이 됩니다.</li> \n   </ol>\n4. 생성된 서명과 `authorization` 헤더의 서명을 비교합니다. 일치하면 웹훅이 진짜인 것입니다.\n\n아래에서 C#, C++, Go, PHP, Node.js 언어로 서명 생성 구현 예시를 확인할 수 있습니다.\n\n### 웹훅(HTTP) 예시:\n\n```http\nPOST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 165\nauthorization: Signature 52eac2713985e212351610d008e7e14fae46f902\n{\n  \"notification_type\":\"user_validation\",\n  \"user\":{\n      \"ip\":\"127.0.0.1\",\n      \"phone\":\"18777976552\",\n      \"email\":\"email@example.com\",\n      \"id\":1234567,\n      \"name\":\"Xsolla User\",\n      \"country\":\"US\"\n  }\n}\n```\n\n### 웹훅(curl) 예시:\n\n```bash\ncurl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'authorization: Signature 52eac2713985e212351610d008e7e14fae46f902' \\\n-d '{\n  \"notification_type\":\n    \"user_validation\",\n    \"user\":\n      {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": 1234567,\n        \"name\": \"Xsolla User\",\n        \"country\": \"US\"\n      }\n    }'\n```\n\n### 서명 생성을 구현하는 C#의 예시(일반 예시):\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p> 이 코드 샘플은 .NET Framework 4.0 이상 버전, .NET Core 및 기타 최신 .NET 버전과 호환됩니다. 서명 검증은 타이밍 공격을 방지하는 데 도움이 되는 <code>ConstantTimeEquals</code> 메서드를 통해 일정 시간 비교 방법을 사용합니다.</p>\n</div>\n\n```csharp\nusing System;\nusing System.Security.Cryptography;\nusing System.Text;\npublic static class XsollaWebhookSignature\n{\n    public static string ComputeSha1(string jsonBody, string secretKey)\n    {\n        // Concatenation of the JSON from the request body and the project's secret key\n        string dataToSign = jsonBody + secretKey;\n        using (SHA1 sha1 = SHA1.Create())\n        {\n            byte[] hashBytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));\n            // Convert hash bytes to lowercase hexadecimal string\n            var hexString = new StringBuilder(hashBytes.Length * 2);\n            foreach (byte b in hashBytes)\n            {\n                hexString.Append(b.ToString(\"x2\"));\n            }\n            return hexString.ToString();\n        }\n    }\n    public static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)\n    {\n        string computedSignature = ComputeSha1(jsonBody, secretKey);\n        string receivedSignatureLower = receivedSignature.ToLower();\n        // Use constant-time comparison to prevent timing attacks\n        return ConstantTimeEquals(computedSignature, receivedSignatureLower);\n    }\n    private static bool ConstantTimeEquals(string a, string b)\n    {\n        if (a.Length != b.Length)\n        {\n            return false;\n        }\n        int result = 0;\n        for (int i = 0; i < a.Length; i++)\n        {\n            result |= a[i] ^ b[i];\n        }\n        return result == 0;\n    }\n}\n```\n\n### 서명 생성을 구현하는 C# 예시(.NET 5.0 이상 버전):\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p><code>Convert.ToHexString</code> 메서드를 사용하려면 .NET 5.0 이상 버전이 필요합니다.<p></p>.NET 7.0 이상 버전인 경우, <code>ConstantTimeEquals</code> 대신 <code>CryptographicOperations.FixedTimeEquals</code> 메서드를 사용할 수도 있습니다.</p>\n</div>\n\n```csharp\n// For .NET 5.0 and later, you can use the more concise Convert.ToHexString method:\nusing System;\nusing System.Security.Cryptography;\nusing System.Text;\npublic static class XsollaWebhookSignature\n{\n    public static string ComputeSha1(string jsonBody, string secretKey)\n    {\n        string dataToSign = jsonBody + secretKey;\n        using var sha1 = SHA1.Create();\n        byte[] hashBytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));\n        return Convert.ToHexString(hashBytes).ToLower();\n    }\n    public static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)\n    {\n        string computedSignature = ComputeSha1(jsonBody, secretKey);\n        string receivedSignatureLower = receivedSignature.ToLower();\n        // Use constant-time comparison to prevent timing attacks\n        return ConstantTimeEquals(computedSignature, receivedSignatureLower);\n    }\n    private static bool ConstantTimeEquals(string a, string b)\n    {\n        if (a.Length != b.Length)\n        {\n            return false;\n        }\n        int result = 0;\n        for (int i = 0; i < a.Length; i++)\n        {\n            result |= a[i] ^ b[i];\n        }\n        return result == 0;\n    }\n}\n```\n\n### 서명 생성을 구현하는 C# 예시(.NET 7.0 이상 버전):\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>.NET 7.0 이상 버전인 경우 <code>CryptographicOperations.FixedTimeEquals</code> 메서드를 사용할 수도 있습니다.</p>\n</div>\n\n```csharp\n// For .NET 7.0+, you can use the built-in CryptographicOperations.FixedTimeEquals:\nusing System.Security.Cryptography;\npublic static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)\n{\n    string computedSignature = ComputeSha1(jsonBody, secretKey);\n    byte[] computedBytes = Encoding.UTF8.GetBytes(computedSignature);\n    byte[] receivedBytes = Encoding.UTF8.GetBytes(receivedSignature.ToLower());\n    return CryptographicOperations.FixedTimeEquals(computedBytes, receivedBytes);\n}\n```\n\n### 서명 생성을 구현하는 C++의 예시:\n\n```c++\n#include <string>\n#include <sstream>\n#include <iomanip>\n#include <openssl/sha.h>\nclass XsollaWebhookSignature {\npublic:\n    static std::string computeSha1(const std::string& jsonBody, const std::string& secretKey) {\n        // Concatenation of the JSON from the request body and the project's secret key\n        std::string dataToSign = jsonBody + secretKey;\n        unsigned char digest[SHA_DIGEST_LENGTH];\n        // Create SHA1 hash\n        SHA1(reinterpret_cast<const unsigned char*>(dataToSign.c_str()),\n             dataToSign.length(), digest);\n        // Convert to lowercase hexadecimal string\n        std::ostringstream hexStream;\n        hexStream << std::hex << std::setfill('0');\n        for (int i = 0; i < SHA_DIGEST_LENGTH; ++i) {\n            hexStream << std::setw(2) << static_cast<unsigned int>(digest[i]);\n        }\n        return hexStream.str();\n    }\n    static bool verifySignature(const std::string& jsonBody, const std::string& secretKey, const std::string& receivedSignature) {\n        std::string computedSignature = computeSha1(jsonBody, secretKey);\n        // Timing-safe comparison\n        if (computedSignature.length() != receivedSignature.length()) {\n            return false;\n        }\n        volatile unsigned char result = 0;\n        for (size_t i = 0; i < computedSignature.length(); ++i) {\n            result |= (computedSignature[i] ^ receivedSignature[i]);\n        }\n        return result == 0;\n    }\n};\n```\n\n### 서명 생성을 구현하는 Go 예시:\n\n```go\npackage main\nimport (\n\t\"crypto/sha1\"\n    \"crypto/subtle\"\n\t\"encoding/hex\"\n\t\"strings\"\n)\ntype XsollaWebhookSignature struct{}\nfunc (x *XsollaWebhookSignature) ComputeSha1(jsonBody, secretKey string) string {\n\t// Concatenation of the JSON from the request body and the project's secret key\n\tdataToSign := jsonBody + secretKey\n\t// Create SHA1 hash\n\th := sha1.New()\n\th.Write([]byte(dataToSign))\n\tsignature := h.Sum(nil)\n\t// Convert to lowercase hexadecimal string\n\treturn strings.ToLower(hex.EncodeToString(signature))\n}\nfunc (x *XsollaWebhookSignature) VerifySignature(jsonBody, secretKey, receivedSignature string) bool {\n\tcomputedSignature := x.ComputeSha1(jsonBody, secretKey)\n\treceivedSignatureLower := strings.ToLower(receivedSignature)\n\t// Use constant time comparison to prevent timing attacks\n\treturn subtle.ConstantTimeCompare([]byte(computedSignature), []byte(receivedSignatureLower)) == 1\n}\n```\n\n### 서명 생성을 구현하는 PHP의 예시:\n\n```php\n<?php\nclass XsollaWebhookSignature\n{\n    /**\n     * Compute SHA1 signature from webhook JSON body and secret key\n     *\n     * @param string $jsonBody The raw JSON body from webhook\n     * @param string $secretKey The project's secret key\n     * @return string The lowercase SHA1 signature\n     */\n    public static function computeSha1(string $jsonBody, string $secretKey): string\n    {\n        // Concatenation of the JSON from the request body and the project's secret key\n        $dataToSign = $jsonBody . $secretKey;\n        // Generate SHA1 signature\n        $signature = sha1($dataToSign);\n        return strtolower($signature);\n    }\n    /**\n     * Verify webhook signature using timing-safe comparison\n     *\n     * @param string $jsonBody The raw JSON body from webhook\n     * @param string $secretKey The project's secret key  \n     * @param string $receivedSignature The signature from authorization header\n     * @return bool True if signature is valid, false otherwise\n     */\n    public static function verifySignature(string $jsonBody, string $secretKey, string $receivedSignature): bool\n    {\n        $computedSignature = self::computeSha1($jsonBody, $secretKey);\n        // Use hash_equals for timing-safe comparison\n        return hash_equals($computedSignature, strtolower($receivedSignature));\n    }\n}\n?>\n```\n\n### 서명 생성을 구현하는 Node.js의 예시:\n\n```js\nconst crypto = require('crypto');\nclass XsollaWebhookSignature {\n    // IMPORTANT: jsonBody must be the raw JSON string exactly as received from Xsolla\n    static computeSha1(jsonBody, secretKey) {\n        // Concatenation of the JSON from the request body and the project's secret key\n        const dataToSign = jsonBody + secretKey;\n        // Create SHA1 hash\n        const hash = crypto.createHash('sha1');\n        hash.update(dataToSign, 'utf8');\n        // Convert to lowercase hexadecimal string\n        return hash.digest('hex').toLowerCase();\n    }\n    static verifySignature(jsonBody, secretKey, receivedSignature) {\n        const computedSignature = this.computeSha1(jsonBody, secretKey);\n        const cleanReceivedSignature = receivedSignature.toLowerCase();\n        // Check if signatures have the same length before using timingSafeEqual\n        if (computedSignature.length !== cleanReceivedSignature.length) {\n            return false;\n        }\n        try {\n            return crypto.timingSafeEqual(\n                Buffer.from(computedSignature, 'hex'),\n                Buffer.from(cleanReceivedSignature, 'hex')\n            );\n        } catch (error) {\n            // Return false if there's any error (e.g., invalid hex characters)\n            return false;\n        }\n    }\n}\n```\n\n## 웹훅에 응답 보내기\n\n웹훅 수신을 확인하려면 서버가 다음을 반환해야 합니다.\n* 성공적인 응답의 경우 `200`, `201` 또는 `204` HTTP 코드.\n* 지정한 사용자를 찾을 수 없거나 잘못된 서명이 전달된 경우 <a \n  href=\"/webhooks/overview/#section/오류\">문제 설명</a>이 포함된 `400` HTTP 코드. 서버에 \n  일시적인 문제가 발생한 경우 웹훅 핸들러가 `5xx` HTTP 코드를 반환할 수도 있습니다.\n\n엑솔라 서버가 <a href=\"/webhooks/operation/successful-order-payment\">주문 결제 성공</a> 및 \n<a href=\"/webhooks/operation/order-cancellation\">주문 취소</a> 웹훅에 대한 응답을 수신하지 않았거나 \n`5xx` 코드가 포함된 응답을 수신한 경우 다음 일정에 따라 웹훅이 재전송됩니다.\n* 5분 간격으로 2번 시도\n* 15분 간격으로 7번 시도\n* 60분 간격으로 10번 시도\n\n웹훅 전송은 첫 번째 시도 후 12시간 이내에 최대 20회까지 시도할 수 있습니다.\n\n<a href=\"/webhooks/operation/payment\">결제</a> 및 <a \nhref=\"/webhooks/operation/refund\">환불</a> 웹훅에 대한 재시도 로직은 개별 웹훅 페이지에 설명되어 있습니다.\n\n<div class=\"notice\">\n<p><strong>주의</strong></p>\n<p>다음 조건을 모두 충족하는 경우에도 사용자에게 결제가 환불됩니다:<ul><li>환불이 엑솔라 측에서 요청한 경우.</li><li>웹훅에 대한 응답으로, <code>4xx</code> 상태 코드가 반환되거나 모든 재시도 후 응답을 받지 않거나 <code>5xx</code> 상태 코드가 반환된 경우.</li></ul></p>\n</div>\n\n엑솔라 서버가 <a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a> 웹훅에 대한 \n응답을 수신하지 않았거나 `400` 또는 `5xx` 코드가 있는 응답을 수신한 경우 <a href=\"/webhooks/operation\n/user-validation/\">사용자 유효성 검사</a> 웹훅은 재전송되지 않습니다. 이 경우 사용자에게 오류가 표시되며 <a \nhref=\"/webhooks/operation/payment\">결제</a> 및 <a href=\"/webhooks/operation\n/successful-order-payment\">주문 결제 성공</a> 웹훅이 전송되지 않습니다.\n\n# 오류\n\nHTTP 코드 400에 대한 오류 코드:\n\n<table>\n<thead>\n    <tr>\n        <th>코드</th>\n        <th>메시지</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>INVALID_USER</td>\n        <td>잘못된 게임유저</td>\n    </tr>\n    <tr>\n        <td>INVALID_PARAMETER</td>\n        <td>잘못된 매개 변수</td>\n    </tr>\n    <tr>\n        <td>INVALID_SIGNATURE</td>\n        <td>잘못된 서명</td>\n    </tr>\n    <tr>\n        <td>INCORRECT_AMOUNT</td>\n        <td>잘못된 금액</td>\n    </tr>\n    <tr>\n        <td>INCORRECT_INVOICE</td>\n        <td>잘못된 인보이스</td>\n    </tr>\n</tbody>\n</table>\n\n```\nHTTP/1.1 400 Bad Request\n{\n    \"error\":{\n        \"code\":\"INVALID_USER\",\n        \"message\":\"Invalid user\"\n    }\n}\n```\n\n# Webhook 목록\n\n<div class=\"note\">\n<p><strong>주의</strong></p>\n<p>참고 유형은 <code>notification_type</code> 매개 변수로 전송됩니다.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>웹훅</th>\n        <th>알림 유형</th>\n        <th>설명</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><a href=\"/webhooks/operation/user-validation/\">사용자 유효성 검사</a></td>\n        <td><code>user_validation</code></td>\n        <td>게임 시스템 내 유저의 존재를 확인하기 위해 보냅니다.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/user-search/\">사용자 검색</a></td>\n        <td><code>user_search</code></td>\n        <td>공개 사용자 ID별로 사용자 정보를 가져오기 위해 보냅니다.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/payment/\">결제</a></td>\n        <td><code>payment</code></td>\n        <td>유저가 결제 프로세스를 완료했을 때 보냅니다.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/refund/\">환불</a></td>\n        <td><code>refund</code></td>\n        <td>알 수 없는 이유로 결제가 취소되었을 때 보냅니다.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/partial-refund/\">부분 환불</a></td>\n        <td><code>partial_refund</code></td>\n        <td>어떤 이유로든 결제를 부분적으로 취소해야 할 때 전송됩니다.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/payment-declined/\">거부된 결제</a></td>\n        <td><code>ps_declined</code></td>\n        <td>결제 시스템에 의해 결제가 거부되었을 때 전송됩니다.</td>\n    </tr>\n    <tr>\n        <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/afs-rejected-transaction/\">AFS 거부 트랜잭션 </a></td>\n        <td><code>afs_reject</code></td>\n        <td>AFS 확인 중에 트랜잭션이 거부된 경우 전송.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/afs-rejected-blocklist/\">AFS 업데이트된 차단 목록</a></td>\n      <td><code>afs_black_list</code></td>\n      <td>AFS 차단 목록이 업데이트될 때 보냅니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/created-subscription/\">정기 결제 생성</a></td>\n      <td><code>create_subscription</code></td>\n      <td>유저가 정기 결제를 만들면 보냅니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/updated-subscription/\">업데이트된 정기 결제</a></td>\n      <td><code>update_subscription</code></td>\n      <td>정기 결제가 갱신되거나 변경되었을 때 보냅니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/canceled-subscription/\">취소된 정기 결제</a></td>\n      <td><code>cancel_subscription</code></td>\n      <td>정기 결제가 취소되었을 때 보냅니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/nonrenewing-subscription/\">비갱신 정기 결제</a></td>\n      <td><code>non_renewal_subscription</code></td>\n      <td>상태가 비갱신으로 설정되면 보냅니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/add-payment-account/\">결제 계정 추가</a></td>\n      <td><code>payment_account_add</code></td>\n      <td>사용자가 결제 계정을 추가하거나 저장할 때 보냅니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/remove-payment-account/\">결제 계정 제거</a></td>\n      <td><code>payment_account_remove</code></td>\n      <td>사용자가 저장된 계정에서 결제 계정을 제거할 때 보냅니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/user-validation-in-webshop\">웹 상점에서 사용자 유효성 검사</a></td>\n      <td><code>-</code></td>\n      <td>사용자가 게임에 존재하는지 확인하기 위해 웹 상점에서 전송됩니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/personalized-partner-catalog\">파트너 측의 카탈로그 개인 설정</a></td>\n      <td><code>partner_side_catalog</code></td>\n      <td>사용자가 스토어와 상호작용할 때 전송됩니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/successful-order-payment\">주문 결제 성공</a></td>\n      <td><code>order_paid</code></td>\n      <td>주문이 결제되면 전송됩니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/order-cancellation\">주문 취소</a></td>\n      <td><code>order_canceled</code></td>\n      <td>주문이 취소되면 전송됩니다.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ko/webhooks/operation/dispute\">분쟁</a></td>\n      <td><code>dispute</code></td>\n      <td>새로운 분쟁이 열리면 전송됩니다.</td>\n    </tr>\n</tbody>\n</table>\n",
    "title": "웹훅",
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://api.xsolla.com/merchant/v2"
    }
  ],
  "tags": [
    {
      "name": "user-validation",
      "x-displayName": "사용자 유효성 검사"
    },
    {
      "name": "payments",
      "x-displayName": "결제"
    },
    {
      "name": "game-services",
      "x-displayName": "게임 서비스"
    },
    {
      "name": "anti-fraud",
      "x-displayName": "부정 결제 방지"
    },
    {
      "name": "subscriptions",
      "x-displayName": "정기 결제"
    },
    {
      "name": "combined-webhooks",
      "x-displayName": "결합된 웹훅"
    },
    {
      "name": "separate-webhooks",
      "x-displayName": "개별 웹훅"
    },
    {
      "name": "personalization",
      "x-displayName": "개인화 웹훅"
    }
  ],
  "webhooks": {
    "add-payment-account": {
      "post": {
        "description": "엑솔라는 사용자가 게임 내에서 상품을 구매할 때 결제 계정을 추가하거나 결제 계정을 저장할 때마다 웹훅 URL에 `payment_account_add` 타입의 웹훅을 전송합니다. 이 웹훅을 수신하려면 고객 성공 매니저에게 문의하거나 <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>으로 이메일을 보내주세요.",
        "operationId": "add-payment-account",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "payment_account": {
                    "description": "결제 계정 세부내역 (객체).",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/payment_account.country"
                      },
                      "id": {
                        "$ref": "#/components/schemas/payment_account.id"
                      },
                      "name": {
                        "$ref": "#/components/schemas/payment_account.name"
                      },
                      "payment_method": {
                        "$ref": "#/components/schemas/payment_account.payment_method"
                      },
                      "type": {
                        "$ref": "#/components/schemas/payment_account.type"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체)입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체)입니다.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "$ref": "#/components/schemas/user.email"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "ip": {
                        "$ref": "#/components/schemas/user.ip"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      },
                      "zip": {
                        "$ref": "#/components/schemas/user.zip"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "결제 계정 추가",
        "tags": [
          "payments"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\":\"payment_account_add\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\",\n        \"zip\": \"12345\"\n    },\n    \"payment_account\": {\n        \"id\": \"12345678\",\n        \"name\": \"email@example.com\",\n        \"payment_method\": \"24\",\n        \"country\": \"US\",\n        \"type\": \"paypal\"\n    }\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 255\ncontent-type:   application/json\nauthorization:  Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843\n\n{\n    \"notification_type\": \"payment_account_add\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\",\n        \"zip\": \"12345\"\n    },\n    \"payment_account\": {\n        \"id\": \"12345678\",\n        \"name\": \"email@example.com\",\n        \"payment_method\": \"24\",\n        \"country\": \"US\",\n        \"type\": \"paypal\"\n    }\n}"
          }
        ]
      }
    },
    "afs-rejected-blocklist": {
      "post": {
        "description": "부정 결제 방지 시스템 차단 목록이 업데이트되면(매개 변수 추가 또는 제거) 엑솔라는 웹훅 URL로 `afs_black_list` 유형의 웹훅을 전송합니다. 매개 변수 추가는 엑솔라 측에서 자동으로 또는 요청 시 수행됩니다. 매개 변수 제거는 요청 시에만 가능합니다. 이 웹훅을 수신하려면 고객 성공 매니저에게 문의하거나 <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>으로 이메일을 보내주세요.",
        "operationId": "afs-rejected-blocklist",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "description": "AFS 차단 목록 이벤트에 대한 정보가 있는 개체.",
                    "properties": {
                      "action": {
                        "description": "이벤트 유형입니다.",
                        "enum": [
                          "adding",
                          "removing"
                        ],
                        "type": "string"
                      },
                      "date_of_last_action": {
                        "description": "가장 최근의 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 형식의 AFS 차단 목록 이벤트.",
                        "type": "string"
                      },
                      "parameter": {
                        "description": "이벤트가 발생한 매개변수의 이름입니다.",
                        "enum": [
                          "nick",
                          "email",
                          "ps_account",
                          "ip_address",
                          "card_issuer",
                          "phone"
                        ],
                        "type": "string",
                        "x-enumDescriptions": {
                          "card_issuer": "사용자의 신용카드 발급 은행",
                          "email": "사용자의 이메일 주소",
                          "ip_address": "사용자의 IP 주소",
                          "nick": "사용자의 별명",
                          "phone": "사용자의 전화번호",
                          "ps_account": "사용자의 청구 계정"
                        }
                      },
                      "parameter_value": {
                        "description": "이벤트가 발생하는 매개 변수의 값.",
                        "type": "string"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      },
                      "reason": {
                        "description": "이벤트의 원인입니다.",
                        "enum": [
                          "chargeback",
                          "fraud_activity",
                          "suspicious_activity",
                          "ps_reported_fraud",
                          "linked_chargeback",
                          "partner_request",
                          "friendly_fraud",
                          "user_reported_fraud",
                          "linked_parameter",
                          "other_data_in_blacklist",
                          "by_afs_filters",
                          "wrongly_added",
                          "removed_by_cs_review",
                          "other_forgiveness_reason"
                        ],
                        "type": "string",
                        "x-enumDescriptions": {
                          "by_afs_filters": "AFS 필터(추가)",
                          "chargeback": "지불 거절(추가)",
                          "fraud_activity": "부정 결제(추가)",
                          "friendly_fraud": "우호적인 부정 결제(추가)",
                          "linked_chargeback": "지불 거절 관계(추가)",
                          "linked_parameter": "AFS 차단 목록의 연결된 매개변수(추가)",
                          "other_data_in_blacklist": "AFS 차단 목록의 기타 매개변수(추가)",
                          "other_forgiveness_reason": "제거의 기타 이유(제거)",
                          "partner_request": "요청 시(추가)",
                          "ps_reported_fraud": "부정 결제 관련 결제 시스템 알림(추가)",
                          "removed_by_cs_review": "엑솔라 기술 지원에 보고 후 제거됨(제거)",
                          "suspicious_activity": "수상한 활동(추가)",
                          "user_reported_fraud": "부정 결제 관련 사용자 신고(추가)",
                          "wrongly_added": "실수로 추가됨(제거)"
                        }
                      },
                      "transaction_id": {
                        "description": "이벤트가 발생한 매개 변수와 관련된 트랜잭션 ID.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  }
                },
                "required": [
                  "notification_type",
                  "event"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "부정 결제 방지 차단 목록 업데이트",
        "tags": [
          "anti-fraud"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'authorization: Signature 32c64a80d2527dc08906ae1891bac4489509b9f6' \\\n-d '{\n  \"event\": {\n    \"action\": \"adding\",\n    \"date_of_last_action\": \"2020-11-27T10:09:05+03:00\",\n    \"parameter\": \"email\",\n    \"parameter_value\": \"email@example.com\",\n    \"reason\": \"ps_reported_fraud\",\n    \"transaction_id\": \"111111111\",\n    \"project_id\": \"123456\"\n  },\n  \"notification_type\": \"afs_black_list\"\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 233\nauthorization: Signature 32c64a80d2527dc08906ae1891bac4489509b9f6\n\n{\n  \"event\": {\n    \"action\": \"adding\",\n    \"date_of_last_action\": \"2020-11-27T10:09:05+03:00\",\n    \"parameter\": \"email\",\n    \"parameter_value\": \"email@example.com\",\n    \"reason\": \"ps_reported_fraud\",\n    \"transaction_id\": \"111111111\",\n    \"project_id\": \"123456\"\n  },\n  \"notification_type\": \"afs_black_list\"\n}"
          }
        ]
      }
    },
    "afs-rejected-transaction": {
      "post": {
        "description": "부정 결제 방지 시스템 검사 중에 트랜잭션이 거부되면 엑솔라는 `afs_reject` 유형이 포함된 웹훅의 트랜잭션 세부 정보를 웹훅 URL로 \n보냅니다. 이 웹훅을 수신하려면 고객 성공 관리자에게 문의하거나 <a \nhref=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>으로 이메일을 보내십시오.\n\n관리자 페이지에 웹훅 URL을 저장하면 웹훅에서 자세한 정보를 수신할 수 있는 권한을 부여할 수 있습니다. 이렇게 하려면 <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">프로젝트 설정 \n&gt;웹훅&gt; 고급 설정</a> 섹션의 관리자 페이지에서 다음 토글을 활성화로 설정하십시오.\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>2025년 1월 22일 또는 그 이전에 관리자 페이지에 등록한 경우, <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">프로젝트 설정 &gt;웹훅 &gt; 테스트 &gt; 결제 &gt; 고급 설정</a> 섹션에서 토글을 찾을 수 있습니다.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>토글</th>\n        <th>설명</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>저장된 결제 방식을 사용한 트랜잭션에 대한 정보 표시</td>\n        <td><p>정보는 웹훅의 다음 사용자 정의 매개 변수에서 전달됩니다.</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> - 저장된 결제 방식이 사용되지 않음</li><li><code>1</code> - 현재 결제를 진행할 때 결제 방식이 저장됨</li><li><code>2</code> - 이전에 저장한 결제 방식이 사용됨</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> - 일회성 결제</li><li><code>2</code> - 반복 결제</li></ul></li></ul></td>\n    </tr>\n</tbody>\n</table>\n",
        "operationId": "afs-rejected-transaction",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "refund_details": {
                    "description": "환불 세부 정보(오브젝트).",
                    "properties": {
                      "author": {
                        "description": "환불 시작자. 필드 값이 다음 표에 따라 전달됩니다.\n\n<table>\n    <thead>\n    <tr>\n        <th>환불 시작자</th>\n        <th>필드 값</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>게임(API를 통해).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>게시자 계정 사용자(자동 환불).</td>\n        <td>사용자 이메일</td>\n    </tr>\n    <tr>\n        <td>게시자 계정 사용자(엑솔라 고객 지원의 도움을 받아).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>엑솔라(엑솔라 고객 지원의 도움을 받아).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "string"
                      },
                      "code": {
                        "description": "코드 ID.\n\n<table>\n    <thead>\n    <tr>\n        <th>코드</th>\n        <th>환불 이유</th>\n        <th>설명</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>Cancellation by the user request / the game request</td>\n        <td>Cancellation initiated from Publisher Account.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td>Chargeback</td>\n        <td>거래 지불 거절 요청되었습니다.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error</td>\n        <td>Issues in integration between Xsolla and the game.<br /><b>Recommendation: Do not add the user to blocklist.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td>Potential fraud</td>\n        <td>부정 결제가 의심됩니다.<br /><b>권장사항: 사용자를 차단 목록에 추가하세요.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment</td>\n        <td>Test transaction followed by cancellation.<br /><b>Recommendation: Do not add the user to blocklist.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td>User invoice expired</td>\n        <td>후불 결제 방식에 의해 트랜잭션이 이뤄진 경우 사용됩니다.</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS</td>\n        <td>결제 시스템에서 결제가 거부되었습니다. PS에서 잠재적 사기를 감지했습니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하세요.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td>Cancellation by the PS request</td>\n        <td>결제시스템이 취소를 요청한 경우 사용됩니다.<br /><b>권장사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request</td>\n        <td>The user was not satisfied with the game or the purchase for any reason.<br /><b>Recommendation: Do not add the user to blocklist.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Cancellation requested by the game.<br /><b>Recommendation: Do not add the user to blocklist.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td>Account holder called to report fraud</td>\n        <td>계정 소유자가 본인 미사용 결제로 신고한 경우입니다.</td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td>Friendly fraud</td>\n        <td>우호적인 부정결제에 대한 메시지를 수신했을 때 사용됩니다.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td>Duplicate</td>\n        <td>동일 인보이스에 대하여 거래 복제.</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "integer"
                      },
                      "reason": {
                        "description": "환불 이유입니다.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체)입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "트랜잭션 데이터 관련 값입니다.",
                    "properties": {
                      "agreement": {
                        "description": "계약 ID입니다.",
                        "type": "integer"
                      },
                      "dry_run": {
                        "description": "테스트 트랜잭션(거래). 테스트 트랜잭션의 경우 매개변수는 1개 값을 갖습니다. 또는, 트랜잭션(거래)이 실제로 이루어지는 경우 매개변수가 전송되지 않습니다.",
                        "type": "integer"
                      },
                      "external_id": {
                        "description": "트랜잭션 외부 ID 입니다.",
                        "type": "string"
                      },
                      "id": {
                        "description": "트랜잭션 ID.",
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체)입니다.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "$ref": "#/components/schemas/user.email"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "ip": {
                        "$ref": "#/components/schemas/user.ip"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      },
                      "phone": {
                        "description": "유저 전화 번호입니다(국제 형식).",
                        "type": "string"
                      },
                      "zip": {
                        "$ref": "#/components/schemas/user.zip"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "transaction"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "부정 결제 방지 시스템에서 거부한 트랜잭션",
        "tags": [
          "anti-fraud"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-d '{\n  \"notification_type\": \"afs_reject\",\n  \"settings\": {\n    \"project_id\": 18404,\n    \"merchant_id\": 2340\n  },\n  \"user\": {\n    \"ip\": \"127.0.0.1\",\n    \"phone\": \"18777976552\",\n    \"email\": \"email@example.com\",\n    \"id\": \"1234567\",\n    \"name\": \"John Smith\",\n    \"country\": \"US\"\n  },\n  \"transaction\": {\n    \"id\": 1,\n    \"external_id\": 1,\n    \"dry_run\": 1,\n    \"agreement\": 1\n  },\n  \"refund_details\": {\n    \"code\": 4,\n    \"reason\": \"Potential fraud\"\n  }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n  'notification_type' => 'afs_reject',\n  'settings' => array(\n    'project_id' => 18404,\n    'merchant_id' => 2340\n  ),\n  'user' => array(\n    'ip' => '127.0.0.1',\n    'phone' => '18777976552',\n    'email' => 'email@example.com',\n    'id' => '1234567',\n    'country' => 'US'\n  ),\n  'transaction' => array(\n    'id' => 87654321,\n    'payment_method' => 1380,\n    'dry_run' => 1\n  ),\n  'refund_details' => array(\n    'code' => 4,\n    'reason' => 'Potential fraud'\n  )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 1220\nauthorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7\n\n{\n  \"notification_type\": \"afs_reject\",\n  \"settings\": {\n    \"project_id\": 18404,\n    \"merchant_id\": 2340\n  },\n  \"user\": {\n    \"ip\": \"127.0.0.1\",\n    \"phone\": \"18777976552\",\n    \"email\": \"email@example.com\",\n    \"id\": \"1234567\",\n    \"name\": \"John Smith\",\n    \"country\": \"US\"\n  },\n  \"transaction\": {\n    \"id\": 1,\n    \"external_id\": 1,\n    \"dry_run\": 1,\n    \"agreement\": 1\n  },\n  \"refund_details\": {\n    \"code\": 4,\n    \"reason\": \"Potential fraud\"\n  }\n}"
          }
        ]
      }
    },
    "canceled-subscription": {
      "post": {
        "description": "정기 결제가 취소되면 엑솔라는 `cancel_subscription` 유형이 포함된 웹훅을 웹훅 URL로 전송합니다.",
        "operationId": "canceled-subscription",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체)입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "subscription": {
                    "description": "정기결제 세부 정보(오브젝트).",
                    "properties": {
                      "date_create": {
                        "$ref": "#/components/schemas/subscription.date_create"
                      },
                      "date_end": {
                        "$ref": "#/components/schemas/subscription.date_end"
                      },
                      "plan_id": {
                        "$ref": "#/components/schemas/subscription.plan_id"
                      },
                      "product_id": {
                        "$ref": "#/components/schemas/subscription.product_id"
                      },
                      "subscription_id": {
                        "$ref": "#/components/schemas/subscription.subscription_id"
                      },
                      "tags": {
                        "$ref": "#/components/schemas/subscription.tags"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체)입니다.",
                    "properties": {
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "취소된 정기결제",
        "tags": [
          "subscriptions"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n        \"notification_type\": \"cancel_subscription\",\n        \"settings\": {\n          \"project_id\": 18404,\n          \"merchant_id\": 2340\n        },\n        \"user\": {\n            \"id\": \"1234567\",\n            \"name\": \"John Smith\"\n        },\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"product_id\": \"Demo Product\",\n            \"date_create\": \"2014-09-22T19:25:25+04:00\",\n            \"date_end\": \"2015-01-22T19:25:25+04:00\"\n        }\n    }'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'cancel_subscription',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'user' => array(\n        'id' => '1234567',\n        'name' => 'John Smith'\n    ),\n    'subscription' => array(\n        'plan_id' => 'b5dac9c8',\n        'subscription_id' => '10',\n        'product_id' => 'Demo Product',\n        'date_create' => '2014-09-22T19:25:25+04:00',\n        'date_end' => '2015-01-22T19:25:25+04:00',\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"cancel_subscription\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\":{\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\"\n    },\n    \"subscription\": {\n        \"plan_id\": \"b5dac9c8\",\n        \"subscription_id\": \"10\",\n        \"product_id\": \"Demo Product\",\n        \"date_create\": \"2014-09-22T19:25:25+04:00\",\n        \"date_end\": \"2015-01-22T19:25:25+04:00\"\n    }\n}"
          }
        ]
      }
    },
    "created-subscription": {
      "post": {
        "description": "사용자가 정기 결제를 생성하면 엑솔라는 `create_subscription` 유형이 포함된 웹훅을 웹훅 URL로 전송합니다.",
        "operationId": "created-subscription",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "사용자 정의 매개 변수입니다.",
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체)입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "subscription": {
                    "description": "정기결제 세부 정보(오브젝트).",
                    "properties": {
                      "date_create": {
                        "$ref": "#/components/schemas/subscription.date_create"
                      },
                      "date_next_charge": {
                        "$ref": "#/components/schemas/subscription.date_next_charge"
                      },
                      "is_gift": {
                        "$ref": "#/components/schemas/subscription.is_gift"
                      },
                      "plan_id": {
                        "$ref": "#/components/schemas/subscription.plan_id"
                      },
                      "product_id": {
                        "$ref": "#/components/schemas/subscription.product_id"
                      },
                      "subscription_id": {
                        "$ref": "#/components/schemas/subscription.subscription_id"
                      },
                      "tags": {
                        "$ref": "#/components/schemas/subscription.tags"
                      },
                      "trial": {
                        "description": "정기결제 평가 기간 데이터와 관련된 값입니다.",
                        "properties": {
                          "type": {
                            "description": "평가 기간 형식(day)입니다.",
                            "type": "string"
                          },
                          "value": {
                            "description": "무료체험 기간 길이입니다.",
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체)입니다.",
                    "properties": {
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "정기결제 생성",
        "tags": [
          "subscriptions"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n        \"notification_type\": \"create_subscription\",\n        \"settings\": {\n          \"project_id\": 18404,\n          \"merchant_id\": 2340\n        },\n        \"user\": {\n            \"id\": \"1234567\",\n            \"name\": \"John Smith\"\n        },\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"product_id\": \"Demo Product\",\n            \"date_create\": \"2014-09-22T19:25:25+04:00\",\n            \"date_next_charge\": \"2015-01-22T19:25:25+04:00\",\n            \"trial\": {\n                    \"value\": 90,\n                    \"type\": \"day\"\n                },\n            \"is_gift\": true\n        }\n    }'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'create_subscription',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'user' => array(\n        'id' => '1234567',\n        'name' => 'John Smith'\n    ),\n    'subscription' => array(\n        'plan_id' => 'b5dac9c8',\n        'subscription_id' => '10',\n        'product_id' => 'Demo Product',\n        'date_create' => '2014-09-22T19:25:25+04:00',\n        'date_next_charge' => '2015-01-22T19:25:25+04:00',\n        'trial' =>  array(\n                'value' =>  90,\n                'type' =>  'day'\n            ),\n        'is_gift' => true,\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nHost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"create_subscription\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\"\n    },\n    \"subscription\": {\n        \"plan_id\": \"b5dac9c8\",\n        \"subscription_id\": \"10\",\n        \"product_id\": \"Demo Product\",\n        \"date_create\": \"2014-09-22T19:25:25+04:00\",\n        \"date_next_charge\": \"2015-01-22T19:25:25+04:00\",\n        \"trial\": {\n                \"value\": 90,\n                \"type\": \"day\"\n            },\n        \"is_gift\": true\n    }\n}"
          }
        ]
      }
    },
    "dispute": {
      "post": {
        "description": "새 분쟁이 발생하거나 분쟁 상태가 변경되면 엑솔라는 해당 `dispute` 유형이 포함된 웹훅을 웹훅 URL로 보냅니다. 이 웹훅을 수신하려면 고객 성공 매니저에게 문의하거나 <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>으로 이메일을 보내주세요.",
        "operationId": "dispute",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "action": {
                    "description": "작업 유형입니다.",
                    "enum": [
                      "adding",
                      "updating"
                    ],
                    "type": "string",
                    "x-enumDescriptions": {
                      "adding": "새로운 분쟁이 발생했습니다.",
                      "updating": "분쟁 상태가 변경되었습니다."
                    }
                  },
                  "dispute": {
                    "description": "분쟁에 대한 정보가 있는 개체입니다.",
                    "properties": {
                      "incoming_date": {
                        "$ref": "#/components/schemas/dispute-date"
                      },
                      "reason": {
                        "$ref": "#/components/schemas/dispute-reason"
                      },
                      "status": {
                        "$ref": "#/components/schemas/dispute-status"
                      },
                      "type": {
                        "$ref": "#/components/schemas/dispute-type"
                      }
                    },
                    "required": [
                      "incoming_date",
                      "reason",
                      "type",
                      "status"
                    ],
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정에 대한 정보가 있는 개체입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "required": [
                      "project_id",
                      "merchant_id"
                    ],
                    "type": "object"
                  },
                  "transaction": {
                    "description": "거래에 대한 정보가 있는 개체입니다.",
                    "properties": {
                      "country_code": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "date_create": {
                        "$ref": "#/components/schemas/date-create"
                      },
                      "external_id": {
                        "$ref": "#/components/schemas/external-id"
                      },
                      "id": {
                        "$ref": "#/components/schemas/transaction-id"
                      },
                      "payment_method": {
                        "$ref": "#/components/schemas/dispute-payment-method"
                      },
                      "total": {
                        "description": "거래 금액에 대한 정보가 있는 개체입니다.",
                        "properties": {
                          "amount": {
                            "$ref": "#/components/schemas/transaction-total-amount"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "required": [
                          "amount",
                          "currency"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "id",
                      "date_create",
                      "total",
                      "payment_method",
                      "country_code"
                    ],
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자에 대한 정보가 있는 개체입니다.",
                    "properties": {
                      "email": {
                        "$ref": "#/components/schemas/user.email"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "action",
                  "transaction",
                  "settings",
                  "user",
                  "dispute"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "분쟁",
        "tags": [
          "anti-fraud"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'authorization: Signature 32c64a80d2527dc08906ae1891bac4489509b9f6' \\\n-d '{\n  \"notification_type\": \"dispute\",\n  \"action\": \"adding\",\n  \"transaction\": {\n    \"id\": 123456789,\n    \"date_create\": \"2023-08-24T10:21:00+04:00\",\n    \"total\": {\n      \"amount\": 1,\n      \"currency\": \"EUR\"\n    },\n    \"payment_method\": \"credit_debit_card\"\n  },\n  \"settings\": {\n    \"project_id\": 18404,\n    \"merchant_id\": 2340\n  },\n  \"user\": {\n    \"id\": \"1234567\",\n    \"email\": \"email@example.com\",\n    \"country_code\": \"US\"\n  },\n  \"dispute\": {\n    \"incoming_date\": \"2024-01-25T01:02:03+04:00\",\n    \"reason\": \"not_as_described\",\n    \"type\": \"retrieval\",\n    \"status\": \"new\"\n  }\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-Type: application/json\ncontent-Length: 578\nauthorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7\n\n{\n  \"notification_type\": \"dispute\",\n  \"action\": \"adding\",\n  \"transaction\": {\n    \"id\": 123456789,\n    \"date_create\": \"2023-08-24T10:21:00+04:00\",\n    \"total\": {\n      \"amount\": 1,\n      \"currency\": \"EUR\"\n    },\n    \"payment_method\": \"credit_debit_card\"\n  },\n  \"settings\": {\n    \"project_id\": 18404,\n    \"merchant_id\": 2340\n  },\n  \"user\": {\n    \"id\": \"1234567\",\n    \"email\": \"email@example.com\",\n    \"country_code\": \"US\"\n  },\n  \"dispute\": {\n    \"incoming_date\": \"2024-01-25T01:02:03+04:00\",\n    \"reason\": \"not_as_described\",\n    \"type\": \"retrieval\",\n    \"status\": \"new\"\n  }\n}"
          }
        ]
      }
    },
    "nonrenewing-subscription": {
      "post": {
        "description": "정기 결제 상태가 비갱신으로 설정된 경우 엑솔라는 `non_renewal_subscription` 유형이 포함된 웹훅을 웹훅 URL로 보냅니다. 이 웹훅을 수신하려면 고객 성공 매니저에게 문의하거나 <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>으로 이메일을 보내주세요.",
        "operationId": "nonrenewing-subscription",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체)입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "required": [
                      "project_id"
                    ],
                    "type": "object"
                  },
                  "subscription": {
                    "description": "정기결제 세부 정보(오브젝트).",
                    "properties": {
                      "amount": {
                        "description": "구매 금액입니다.",
                        "format": "float",
                        "type": "number"
                      },
                      "currency": {
                        "$ref": "#/components/schemas/currency"
                      },
                      "date_create": {
                        "$ref": "#/components/schemas/subscription.date_create"
                      },
                      "date_next_charge": {
                        "description": "다음 청구일. 정기 결제가 비갱신으로 설정되기 전 다음 지불 예정일입니다. 날짜 및 시간 당 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).",
                        "type": "string"
                      },
                      "plan_id": {
                        "$ref": "#/components/schemas/subscription.plan_id"
                      },
                      "subscription_id": {
                        "$ref": "#/components/schemas/subscription.subscription_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체)입니다.",
                    "properties": {
                      "email": {
                        "$ref": "#/components/schemas/user.email"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "비갱신 정기결제",
        "tags": [
          "subscriptions"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n        \"notification_type\": \"non_renewal_subscription\",\n        \"settings\": {\n          \"project_id\": 12345,\n          \"merchant_id\": 1234\n        },\n        \"user\": {\n            \"id\": \"1234567\",\n            \"email\": \"email@example.com\"\n        },\n        \"subscription\": {\n            \"plan_id\": \"a1bcd2e3\",\n            \"subscription_id\": \"10\",\n            \"date_create\": \"2014-12-22T15:25:25+04:00\",\n            \"date_next_charge\": \"2015-01-22T19:25:25+04:00\",\n            \"currency\": \"USD\",\n            \"amount\": 0.03\n        }\n    }'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'non_renewal_subscription',\n    'settings' => array(\n      'project_id' => 12345,\n      'merchant_id' => 1234\n    ),\n    'user' => array(\n        'id' => '1234567',\n        'email' => 'email@example.com'\n    ),\n    'subscription' => array(\n        'plan_id' => 'a1bcd2e3',\n        'subscription_id' => '10',\n        'date_create' => '2014-12-22T15:25:25+04:00',\n        'date_next_charge' => '2015-01-22T19:25:25+04:00',\n        'currency' => 'USD',\n        'amount' => 0.03\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"non_renewal_subscription\",\n    \"settings\": {\n      \"project_id\": 12345,\n      \"merchant_id\": 1234\n    },\n    \"user\": {\n        \"id\": \"1234567\",\n        \"email\": \"email@example.com\"\n    },\n    \"subscription\": {\n        \"plan_id\": \"a1bcd2e3\",\n        \"subscription_id\": \"10\",\n        \"date_create\": \"2014-12-22T15:25:25+04:00\",\n        \"date_next_charge\": \"2015-01-22T19:25:25+04:00\",\n        \"currency\": \"USD\",\n        \"amount\": 0.03\n    }\n}"
          }
        ]
      }
    },
    "order-cancellation": {
      "post": {
        "description": "사용자, 파트너 또는 자동으로 결제가 취소된 경우 엑솔라 측에서 지정된 URL로 <code>order_canceled</code> 웹훅을 \n전송합니다. 웹훅에는 반품된 아이템 정보, 결제 데이터, 취소된 주문의 세부 정보가 포함되어 있습니다.\n\n결제에 실패할 경우 웹훅이 전송되지 않습니다. 예:\n* 결제 UI가 열렸지만 사용자가 주문을 결제하지 않은 경우\n* 결제 UI가 열렸지만 결제 중 오류가 발생한 경우\n\n권장되는 웹훅 처리 시간은 3초 이내입니다.\n",
        "operationId": "order-cancellation",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "billing": {
                    "description": "거래 및 결제 세부 정보.",
                    "properties": {
                      "notification_type": {
                        "$ref": "#/components/schemas/notification_type"
                      },
                      "payment_details": {
                        "description": "결제 내역 관련 값.",
                        "properties": {
                          "country_wht": {
                            "description": "국경 간 거래(대상)로 인해 특정 국가에서 적용되는 원천징수세.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "국가 원천징수세율(%).",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "direct_wht": {
                            "description": "직접 원천징수세.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "직접 원천징수세율.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "payment": {
                            "description": "게임유저 결제 데이터 관련 값.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payment_method_fee": {
                            "description": "결제 방식 수수료율.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payment_method_sum": {
                            "description": "결제 방법에서 청구된 금액에 대한 데이터가 포함된 값.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payout": {
                            "description": "지급 내역 관련 값.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payout_currency_rate": {
                            "description": "결제 통화를 지급 통화로 환전할 때의 환율.",
                            "type": "string"
                          },
                          "repatriation_commission": {
                            "description": "본국 송금 비용에 대한 데이터가 있는 오브젝트. 타사가 엑솔라에 부과.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "sales_tax": {
                            "description": "판매세(미국과 캐나다만 해당).",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "판매세율.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "user_acquisition_fee": {
                            "description": "제휴 네트워크 및 인플루언서를 통한 구매에 대해 공제된 사용자 확보 수수료의 총액(대상)입니다.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "사용자 확보 수수료율(%).",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "vat": {
                            "description": "VAT 세율(유럽연합만 해당).",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "부가가치세율.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_balance_sum": {
                            "description": "엑솔라 잔액에서 청구된 금액에 대한 데이터가 포함된 값.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_fee": {
                            "description": "엑솔라 수수료 요율.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "type": "object"
                      },
                      "purchase": {
                        "description": "구매 데이터 관련 값.",
                        "properties": {
                          "subscription": {
                            "description": "정기결제 내역 관련 값.",
                            "properties": {
                              "amount": {
                                "$ref": "#/components/schemas/amount-float"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "date_create": {
                                "$ref": "#/components/schemas/subscription.date_create"
                              },
                              "plan_id": {
                                "$ref": "#/components/schemas/subscription.plan_id"
                              },
                              "subscription_id": {
                                "$ref": "#/components/schemas/subscription.subscription_id"
                              },
                              "tags": {
                                "$ref": "#/components/schemas/subscription.tags"
                              }
                            },
                            "type": "object"
                          },
                          "total": {
                            "description": "구매 총 가격 데이터 관련 값.",
                            "properties": {
                              "amount": {
                                "description": "총 구매 금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "required": [
                          "total"
                        ],
                        "type": "object"
                      },
                      "refund_details": {
                        "description": "환불 세부 정보(오브젝트).",
                        "properties": {
                          "author": {
                            "description": "환불 시작자. 필드 값이 다음 표에 따라 전달됩니다.\n\n<table>\n    <thead>\n    <tr>\n        <th>환불 시작자</th>\n        <th>필드 값</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>게임(API를 통해).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>게시자 계정 사용자(자동 환불).</td>\n        <td>사용자 이메일</td>\n    </tr>\n    <tr>\n        <td>게시자 계정 사용자(엑솔라 고객 지원의 도움을 받아).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>엑솔라(엑솔라 고객 지원의 도움을 받아).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n",
                            "type": "string"
                          },
                          "code": {
                            "description": "코드 ID.",
                            "type": "integer"
                          },
                          "reason": {
                            "description": "환불 이유입니다.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "settings": {
                        "description": "사용자 정의 프로젝트 설정 관련 값.",
                        "properties": {
                          "merchant_id": {
                            "$ref": "#/components/schemas/settings.merchant_id"
                          },
                          "project_id": {
                            "$ref": "#/components/schemas/settings.project_id"
                          }
                        },
                        "type": "object"
                      },
                      "transaction": {
                        "description": "트랜잭션 데이터 관련 값.",
                        "properties": {
                          "agreement": {
                            "description": "계약 ID.",
                            "type": "integer"
                          },
                          "dry_run": {
                            "description": "테스트 트랜잭션. 테스트 트랜잭션의 경우 매개 변수는 1개 값을 갖습니다. 또는, 트랜잭션이 실제로 이루어지는 경우 매개 변수가 전송되지 않습니다.",
                            "type": "integer"
                          },
                          "external_id": {
                            "description": "트랜잭션 외부 ID 입니다.",
                            "type": "string"
                          },
                          "id": {
                            "description": "트랜잭션 ID.",
                            "type": "integer"
                          },
                          "payment_method_order_id": {
                            "description": "결제 시스템의 결제 ID.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "notification_type",
                      "transaction",
                      "payment_details"
                    ],
                    "type": "object"
                  },
                  "custom_parameters": {
                    "description": "추가 정보입니다.",
                    "type": "object"
                  },
                  "items": {
                    "description": "사용자가 구매한 아이템 목록입니다.\n\n배열에 포함된 매개 변수 집합은 웹훅 버전에 따라 다릅니다. 버전 2에는 `is_free`, `is_bonus` 및 \n`is_bundle_content`와 같은 추가 매개 변수가 포함되어 있습니다. 버전을 전환하려면 [웹훅 \n설정](/ko/api/igs/operation/update-webhook/) API 호출에 대한 정보 업데이트에서 `version` 매개 변수 \n번호를 전달하십시오.\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "아이템 수량에 따른 총 비용입니다.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "아이템 특성 및 값이 포함된 JSON 개체입니다.",
                              "type": "object"
                            },
                            "is_pre_order": {
                              "description": "`true`이면 항목이 사전 판매됩니다.",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "아이템 수량.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order"
                          ],
                          "title": "버전 = 1",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "amount": {
                              "description": "아이템 수량에 따른 총 비용입니다.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "아이템 특성 및 값이 포함된 JSON 개체입니다.",
                              "type": "object"
                            },
                            "is_bonus": {
                              "description": "`true`이면 항목이 보너스입니다.",
                              "type": "boolean"
                            },
                            "is_bundle_content": {
                              "description": "`true`이면 항목이 번들에 포함됩니다.",
                              "type": "boolean"
                            },
                            "is_free": {
                              "description": "`true`이면 아이템이 무료입니다.",
                              "type": "boolean"
                            },
                            "is_pre_order": {
                              "description": "`true`이면 항목이 사전 판매됩니다.",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "아이템 수량.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order",
                            "is_free",
                            "is_bonus",
                            "is_bundle_content"
                          ],
                          "title": "버전 = 2",
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "order": {
                    "description": "주문에 대한 정보입니다.",
                    "properties": {
                      "amount": {
                        "description": "선택한 통화를 기준으로 한 장바구니의 총 비용입니다.",
                        "type": "string"
                      },
                      "comment": {
                        "description": "주문에 대한 사용자의 코멘트.",
                        "nullable": true,
                        "type": "string"
                      },
                      "coupons": {
                        "description": "적용된 쿠폰. 쿠폰을 적용되지 않았으면 배열이 돌아오지 않습니다.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "적용된 쿠폰 코드.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "외부 ID.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "currency": {
                        "description": "주문 통화. 가상 화폐는 SKU를 사용하고 실제 화폐는 3글자 [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) 코드를 사용합니다.",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "엑솔라 측에서 사용자 주문의 고유 식별자입니다.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "실질 화폐 결제 인보이스 ID. 인게임 재화 결제 또는 무료 아이템은 `null` 값을 사용합니다.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "결제 모드. 실제 결제에는 `default`를 사용합니다. 테스트 결제에는 `sandbox`를 사용합니다.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "결제 플랫폼. 엑솔라를 통한 결제에 `xsolla` 값을 사용합니다. 다른 결제의 경우 `playstation_network`, `xbox_live`, `pc_standalone`, `nintendo_shop`, `google_play`, `app_store_ios`, `android_standalone`, `ios_standalone`, `android_other`, `ios_other`, `pc_other`와 같이 게임 퍼블리싱 플랫폼의 이름에 해당하는 값을 사용합니다.",
                        "enum": [
                          "xsolla",
                          "playstation_network",
                          "xbox_live",
                          "pc_standalone",
                          "nintendo_shop",
                          "google_play",
                          "app_store_ios",
                          "android_standalone",
                          "ios_standalone",
                          "android_other",
                          "ios_other",
                          "pc_other"
                        ],
                        "nullable": true,
                        "type": "string"
                      },
                      "promocodes": {
                        "description": "적용된 프로모션 코드. 프로모션 코드가 적용되지 않았으면 배열이 돌아오지 않습니다.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "적용된 프로모션 코드의 코드.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "외부 ID.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "promotions": {
                        "$ref": "#/components/schemas/order.promotions"
                      },
                      "status": {
                        "description": "주문 상태.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "mode",
                      "currency_type",
                      "currency",
                      "amount",
                      "status",
                      "platform",
                      "comment",
                      "invoice_id",
                      "promotions"
                    ],
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 정보.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "description": "사용자 이메일 주소.",
                        "type": "string"
                      },
                      "external_id": {
                        "description": "사용자 ID.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "external_id",
                      "email"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "items",
                  "order",
                  "user",
                  "transaction",
                  "payment_details"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "성공적인 처리 표시를 반환합니다."
          },
          "400": {
            "description": "제공된 정보에 오류가 있는 경우 반환합니다(예: 필수 매개변수 누락, 인증 실패 등)."
          }
        },
        "summary": "주문 취소(결제 및 거래 세부 정보 포함)",
        "tags": [
          "combined-webhooks"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\": \"order_canceled\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\": {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": null,\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"email@example.com\",\n      \"country\": \"US\"\n    },\n    \"billing\": {\n      \"notification_type\": \"refund\",\n      \"settings\": {\n        \"project_id\": 18404,\n        \"merchant_id\": 2340\n      },\n      \"purchase\": {\n              \"subscription\": {\n                  \"plan_id\": \"b5dac9c8\",\n                  \"subscription_id\": \"10\",\n                  \"date_create\": \"2014-09-22T19:25:25+04:00\",\n                  \"currency\": \"USD\",\n                  \"amount\": 9.99\n              },\n              \"total\":{\n                  \"currency\": \"USD\",\n                  \"amount\": 200\n              }\n          },\n      \"transaction\": {\n              \"id\": 1,\n              \"external_id\": 1,\n              \"dry_run\": 1,\n              \"agreement\": 1\n          },\n      \"refund_details\": {\n              \"code\": 4,\n              \"reason\": \"Potential fraud\"\n          },\n      \"payment_details\": {\n              \"sales_tax\": {\n                  \"currency\": \"USD\",\n                  \"amount\": 0\n              },\n              \"direct_wht\": {\n                  \"currency\": \"USD\",\n                  \"amount\": 0.70\n              },\n              \"xsolla_fee\": {\n                  \"currency\": \"USD\",\n                  \"amount\": \"10\"\n              },\n              \"payout\": {\n                  \"currency\": \"USD\",\n                  \"amount\": \"200\"\n              },\n              \"payment_method_fee\": {\n                  \"currency\": \"USD\",\n                  \"amount\": \"20\"\n              },\n              \"payment\": {\n                  \"currency\": \"USD\",\n                  \"amount\": \"230\"\n              },\n              \"repatriation_commission\": {\n                  \"currency\": \"USD\",\n                  \"amount\": 10\n              }\n          }\n    }\n}"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 258\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n\n{\n    \"notification_type\": \"order_canceled\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\": {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": null,\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"email@example.com\",\n      \"country\": \"US\"\n    },\n    \"billing\": {\n      \"notification_type\": \"refund\",\n      \"settings\": {\n        \"project_id\": 18404,\n        \"merchant_id\": 2340\n      },\n      \"purchase\": {\n          \"subscription\": {\n              \"plan_id\": \"b5dac9c8\",\n              \"subscription_id\": \"10\",\n              \"date_create\": \"2014-09-22T19:25:25+04:00\",\n              \"currency\": \"USD\",\n              \"amount\": 9.99\n          },\n          \"total\": {\n              \"currency\": \"USD\",\n              \"amount\": 200\n          }\n      },\n      \"transaction\": {\n          \"id\": 1,\n          \"external_id\": 1,\n          \"dry_run\": 1,\n          \"agreement\": 1\n      },\n      \"refund_details\": {\n          \"code\": 4,\n          \"reason\": \"Potential fraud\"\n      },\n      \"payment_details\": {\n          \"sales_tax\": {\n              \"currency\": \"USD\",\n              \"amount\": 0\n          },\n          \"direct_wht\": {\n              \"currency\": \"USD\",\n              \"amount\": 0.70\n          },\n          \"xsolla_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": \"10\"\n          },\n          \"payout\": {\n              \"currency\": \"USD\",\n              \"amount\": \"200\"\n          },\n          \"payment_method_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": \"20\"\n          },\n          \"payment\": {\n              \"currency\": \"USD\",\n              \"amount\": \"230\"\n          },\n          \"repatriation_commission\": {\n              \"currency\": \"USD\",\n              \"amount\": 10\n          }\n        }\n      }\n    }"
          }
        ]
      }
    },
    "order-cancellation-separate": {
      "post": {
        "description": "사용자, 파트너 또는 자동으로 결제가 취소된 경우 엑솔라 측에서 지정된 URL로 <code>order_canceled</code> 웹훅을 \n전송합니다. 웹훅에는 반품된 아이템 정보와 취소된 주문의 세부 정보가 포함되어 있습니다.\n\n결제에 실패할 경우 웹훅이 전송되지 않습니다. 예:\n* 결제 UI가 열렸지만 사용자가 주문을 결제하지 않은 경우\n* 결제 UI가 열렸지만 결제 중 오류가 발생한 경우\n\n권장되는 웹훅 처리 시간은 3초 이내입니다.\n",
        "operationId": "order-cancellation-separate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "추가 정보입니다.",
                    "type": "object"
                  },
                  "items": {
                    "description": "사용자가 구매한 아이템 목록입니다.\n\n배열에 포함된 매개 변수 집합은 웹훅 버전에 따라 다릅니다. 버전 2에는 `is_free`, `is_bonus` 및 \n`is_bundle_content`와 같은 추가 매개 변수가 포함되어 있습니다. 버전을 전환하려면 [웹훅 \n설정](/ko/api/igs/operation/update-webhook/) API 호출에 대한 정보 업데이트에서 `version` 매개 변수 \n번호를 전달하십시오.\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "아이템 수량에 따른 총 비용입니다.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "아이템 특성 및 값이 포함된 JSON 개체입니다.",
                              "type": "object"
                            },
                            "is_pre_order": {
                              "description": "`true`이면 항목이 사전 판매됩니다.",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "아이템 수량.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order"
                          ],
                          "title": "버전 = 1",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "amount": {
                              "description": "아이템 수량에 따른 총 비용입니다.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "아이템 특성 및 값이 포함된 JSON 개체입니다.",
                              "type": "object"
                            },
                            "is_bonus": {
                              "description": "`true`이면 항목이 보너스입니다.",
                              "type": "boolean"
                            },
                            "is_bundle_content": {
                              "description": "`true`이면 항목이 번들에 포함됩니다.",
                              "type": "boolean"
                            },
                            "is_free": {
                              "description": "`true`이면 아이템이 무료입니다.",
                              "type": "boolean"
                            },
                            "is_pre_order": {
                              "description": "`true`이면 항목이 사전 판매됩니다.",
                              "type": "boolean"
                            },
                            "promotions": {
                              "description": "적용된 프로모션. 프로모션이 적용되지 않은 경우, 매개변수에 빈 배열이 전달됩니다.",
                              "items": {
                                "properties": {
                                  "amount_with_discount": {
                                    "description": "할인이 적용된 아이템의 총 비용.",
                                    "type": "string"
                                  },
                                  "amount_without_discount": {
                                    "description": "할인이 미적용된 아이템의 총 비용.",
                                    "type": "string"
                                  },
                                  "sequence": {
                                    "description": "프로모션 신청 순서입니다.",
                                    "type": "integer"
                                  }
                                },
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "quantity": {
                              "description": "아이템 수량.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order",
                            "is_free",
                            "is_bonus",
                            "is_bundle_content"
                          ],
                          "title": "버전 = 2",
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "order": {
                    "description": "주문에 대한 정보입니다.",
                    "properties": {
                      "amount": {
                        "description": "선택한 통화를 기준으로 한 장바구니의 총 비용입니다.",
                        "type": "string"
                      },
                      "comment": {
                        "description": "주문에 대한 사용자의 코멘트.",
                        "nullable": true,
                        "type": "string"
                      },
                      "coupons": {
                        "description": "적용된 쿠폰. 쿠폰을 적용되지 않았으면 배열이 돌아오지 않습니다.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "적용된 쿠폰 코드.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "외부 ID.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "currency": {
                        "description": "주문 통화. 가상 화폐는 SKU를 사용하고 실제 화폐는 3글자 [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) 코드를 사용합니다.",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "엑솔라 측에서 사용자 주문의 고유 식별자입니다.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "실질 화폐 결제 인보이스 ID. 인게임 재화 결제 또는 무료 아이템은 `null` 값을 사용합니다.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "결제 모드. 실제 결제에는 `default`를 사용합니다. 테스트 결제에는 `sandbox`를 사용합니다.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "결제 플랫폼. 엑솔라를 통한 결제에 `xsolla` 값을 사용합니다. 다른 결제의 경우 `playstation_network`, `xbox_live`, `pc_standalone`, `nintendo_shop`, `google_play`, `app_store_ios`, `android_standalone`, `ios_standalone`, `android_other`, `ios_other`, `pc_other`와 같이 게임 퍼블리싱 플랫폼의 이름에 해당하는 값을 사용합니다.",
                        "enum": [
                          "xsolla",
                          "playstation_network",
                          "xbox_live",
                          "pc_standalone",
                          "nintendo_shop",
                          "google_play",
                          "app_store_ios",
                          "android_standalone",
                          "ios_standalone",
                          "android_other",
                          "ios_other",
                          "pc_other"
                        ],
                        "nullable": true,
                        "type": "string"
                      },
                      "promocodes": {
                        "description": "적용된 프로모션 코드. 프로모션 코드가 적용되지 않았으면 배열이 돌아오지 않습니다.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "적용된 프로모션 코드의 코드.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "외부 ID.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "promotions": {
                        "$ref": "#/components/schemas/order.promotions"
                      },
                      "status": {
                        "description": "주문 상태.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "mode",
                      "currency_type",
                      "currency",
                      "amount",
                      "status",
                      "platform",
                      "comment",
                      "invoice_id",
                      "promotions"
                    ],
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 정보.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "description": "사용자 이메일 주소.",
                        "type": "string"
                      },
                      "external_id": {
                        "description": "사용자 ID.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "external_id",
                      "email"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "items",
                  "order",
                  "user"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "성공적인 처리 표시를 반환합니다."
          },
          "400": {
            "description": "제공된 정보에 오류가 있는 경우 반환합니다(예: 필수 매개변수 누락, 인증 실패 등)."
          }
        },
        "summary": "주문 취소(결제 및 거래 세부 정보 없음)",
        "tags": [
          "separate-webhooks"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\": \"order_canceled\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\": {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": \"[null]\",\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"email@example.com\",\n      \"country\": \"US\"\n    }\n\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 258\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n\n{\n    \"notification_type\": \"order_canceled\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\": {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": \"[null]\",\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"email@example.com\",\n      \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    },
    "partial-refund": {
      "post": {
        "description": "부분 환불이 이루어지면 엑솔라는 `partial_refund` 유형이 포함된 웹훅의 취소된 거래에 대한 세부 정보를 웹훅 URL로 전송합니다. \n부분 환불 절차에 대한 자세한 내용은 [지침](/ko/doc/pay-station/features/refund/#pay_station_features_refund_how_it_works_partial_refund_flow)을 참조해 주세요.\n\n관리자 페이지에 웹훅 URL을 저장하면 웹훅에서 자세한 정보를 수신할 수 있는 권한을 부여할 수 있습니다. 이렇게 하려면 <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">프로젝트 설정 \n&gt;웹훅&gt; 고급 설정</a> 섹션의 관리자 페이지에서 다음 토글을 활성화로 설정하십시오.\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>2025년 1월 22일 또는 그 이전에 관리자 페이지에 등록한 경우, <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">프로젝트 설정 &gt;웹훅 &gt; 테스트 &gt; 결제 &gt; 고급 설정</a> 섹션에서 토글을 찾을 수 있습니다.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>토글</th>\n        <th>설명</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>저장된 결제 방식을 사용한 트랜잭션에 대한 정보 표시</td>\n        <td><p>정보는 웹훅의 다음 사용자 정의 매개 변수에서 전달됩니다.</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> - 저장된 결제 방식이 사용되지 않음</li><li><code>1</code> - 현재 결제를 진행할 때 결제 방식이 저장됨</li><li><code>2</code> - 이전에 저장한 결제 방식이 사용됨</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> - 일회성 결제</li><li><code>2</code> - 반복 결제</li></ul></li></ul></td>\n    </tr>\n</tbody>\n</table>\n\n환불 코드:\n\n<table>\n    <thead>\n    <tr>\n        <th>코드</th>\n        <th>환불 이유</th>\n        <th>설명</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>사용자 요청/게임 요청에 의한 취소</td>\n        <td>관리자 페이지에서 취소가 요청된 경우 사용됩니다.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>연동 오류</td>\n        <td>엑솔라와 게임 사이의 연동에 문제가 있을 경우 사용됩니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>테스트 결제</td>\n        <td>테스트 트랜잭션인 경우 사용되며 이후 취소로 이어집니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>PS에서 전송된 사기 참고</td>\n        <td>결제 시스템에서 결제가 거부되었습니다. PS에서 잠재적 사기를 감지했습니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하세요.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>사용자 요청에 의한 취소</td>\n        <td>사용자의 요청에 의한 환불 사유입니다. 어떤 이유로 사용자가 게임 또는 구매에 만족하지 못한 못하였음을 의미합니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>게임 요청에 의한 취소</td>\n        <td>게임을 통해 취소를 요청한 경우 사용됩니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    </tbody>\n</table>\n",
        "operationId": "partial-refund",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "사용자 정의 매개 변수입니다.",
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "payment_details": {
                    "description": "결제 내역 관련 값입니다.",
                    "properties": {
                      "direct_wht": {
                        "description": "직접 원천징수세.",
                        "properties": {
                          "amount": {
                            "description": "총계.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "직접 원천징수세율",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "payment": {
                        "description": "게임유저 결제 데이터 관련 값입니다.",
                        "properties": {
                          "amount": {
                            "description": "총계.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_fee": {
                        "description": "결제 방식 수수료율입니다.",
                        "properties": {
                          "amount": {
                            "description": "총계.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_sum": {
                        "description": "결제 방법에서 청구된 금액에 대한 데이터가 포함된 값입니다.",
                        "properties": {
                          "amount": {
                            "description": "총계.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout": {
                        "description": "지급 내역 관련 값입니다.",
                        "properties": {
                          "amount": {
                            "description": "총계.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout_currency_rate": {
                        "description": "결제 통화를 지급 통화로 환전할 때의 환율입니다.",
                        "type": "string"
                      },
                      "repatriation_commission": {
                        "description": "본국 송금 비용에 대한 데이터가 있는 오브젝트. 타사가 엑솔라에 부과.",
                        "properties": {
                          "amount": {
                            "description": "총계.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "sales_tax": {
                        "description": "판매세(대상; 미국과 캐나다만).",
                        "properties": {
                          "amount": {
                            "description": "총계.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "판매세율.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "vat": {
                        "description": "VAT 세율입니다(유럽연합만 해당).",
                        "properties": {
                          "amount": {
                            "description": "총계.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "부가가치세율.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_balance_sum": {
                        "description": "엑솔라 잔액에서 청구된 금액에 대한 데이터가 포함된 값입니다.",
                        "properties": {
                          "amount": {
                            "description": "총계.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_fee": {
                        "description": "엑솔라 수수료 요율입니다.",
                        "properties": {
                          "amount": {
                            "description": "총계.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "purchase": {
                    "description": "구매 데이터 관련 값입니다.",
                    "properties": {
                      "checkout": {
                        "description": "결제 파라미터 데이터와 관련된 값입니다.",
                        "properties": {
                          "amount": {
                            "description": "구매 금액입니다.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "total": {
                        "description": "구매 총 가격 데이터와 관련된 값입니다.",
                        "properties": {
                          "amount": {
                            "description": "부분 환불 결제 금액입니다.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "total"
                    ],
                    "type": "object"
                  },
                  "refund_details": {
                    "description": "환불 세부 정보(오브젝트).",
                    "properties": {
                      "author": {
                        "description": "환불 시작자. 필드 값이 다음 표에 따라 전달됩니다.\n\n<table>\n    <thead>\n    <tr>\n        <th>환불 시작자</th>\n        <th>필드 값</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>게임(API를 통해).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>게시자 계정 사용자(자동 환불).</td>\n        <td>사용자 이메일</td>\n    </tr>\n    <tr>\n        <td>게시자 계정 사용자(엑솔라 고객 지원의 도움을 받아).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>엑솔라(엑솔라 고객 지원의 도움을 받아).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "string"
                      },
                      "code": {
                        "description": "코드 ID.",
                        "type": "integer"
                      },
                      "date": {
                        "description": "환불 날짜입니다.",
                        "type": "string"
                      },
                      "reason": {
                        "description": "환불 이유입니다.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체)입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "트랜잭션 데이터 관련 값입니다.",
                    "properties": {
                      "agreement": {
                        "description": "계약 ID입니다.",
                        "type": "integer"
                      },
                      "date": {
                        "description": "트랜잭션 날짜입니다.",
                        "type": "string"
                      },
                      "dry_run": {
                        "description": "테스트 트랜잭션(거래). 테스트 트랜잭션의 경우 매개변수는 1개 값을 갖습니다. 또는, 트랜잭션(거래)이 실제로 이루어지는 경우 매개변수가 전송되지 않습니다.",
                        "type": "integer"
                      },
                      "external_id": {
                        "description": "트랜잭션 외부 ID 입니다.",
                        "type": "string"
                      },
                      "id": {
                        "description": "트랜잭션 ID.",
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체)입니다.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "$ref": "#/components/schemas/user.email"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "ip": {
                        "$ref": "#/components/schemas/user.ip"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      },
                      "phone": {
                        "$ref": "#/components/schemas/user.phone"
                      },
                      "zip": {
                        "$ref": "#/components/schemas/user.zip"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "transaction",
                  "payment_details"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "부분 환불",
        "tags": [
          "payments"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-d '{\n        \"notification_type\": \"partial_refund\",\n        \"settings\": {\n          \"project_id\": 18404,\n          \"merchant_id\": 2340\n        },\n        \"purchase\": {\n            \"checkout\": {\n                \"currency\": \"USD\",\n                \"amount\": 50\n            },\n            \"total\":{\n                \"currency\": \"USD\",\n                \"amount\": 200\n            }\n        },\n        \"user\": {\n            \"ip\": \"127.0.0.1\",\n            \"phone\": \"18777976552\",\n            \"email\": \"email@example.com\",\n            \"id\": \"1234567\",\n            \"name\": \"John Smith\",\n            \"country\": \"US\"\n        },\n        \"transaction\": {\n            \"id\": 1,\n            \"external_id\": 1,\n            \"dry_run\": 1,\n            \"agreement\": 1,\n            \"date\": \"2022-03-01 10:53:15\"\n        },\n        \"refund_details\": {\n            \"author\": \"email@example.com\",\n            \"date\": \"2022-03-01 10:56:48\"\n        },\n        \"payment_details\": {\n            \"sales_tax\": {\n                \"currency\": \"USD\",\n                \"amount\": 0\n            },\n            \"direct_wht\": {\n                \"currency\": \"USD\",\n                \"amount\": 0.70\n            },\n            \"xsolla_fee\": {\n                \"currency\": \"USD\",\n                \"amount\": \"10\"\n            },\n            \"payout\": {\n                \"currency\": \"USD\",\n                \"amount\": \"200\"\n            },\n            \"payment_method_fee\": {\n                \"currency\": \"USD\",\n                \"amount\": \"20\"\n            },\n            \"payment\": {\n                \"currency\": \"USD\",\n                \"amount\": \"230\"\n            },\n            \"repatriation_commission\": {\n                \"currency\": \"USD\",\n                \"amount\": 10\n            }\n        }\n    }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'partial_refund',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'purchase' => array(\n        'total' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        )\n    ),\n    'user' => array(\n        'ip' => '127.0.0.1',\n        'phone' => '18777976552',\n        'email' => 'email@example.com',\n        'id' => '1234567',\n        'country' => 'US'\n    ),\n    'transaction' => array(\n        'id' => 87654321,\n        'payment_date' => '2014-09-23T19:25:25+04:00',\n        'payment_method' => 1380,\n        'dry_run' => 1,\n        'date' => '2022-03-31 10:53:15'\n    ),\n    'refund_details' => array(\n            'author' => 'email@example.com',\n            'date' => '2022-03-01 10:56:48'\n    ),\n    'payment_details' => array(\n        'payment' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        ),\n        'vat' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'sales_tax' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'direct_wht' => array(\n            'currency' => 'USD',\n            'amount' => 70\n        ),\n        'payout_currency_rate' => 1,\n        'payout' => array(\n            'currency' => 'USD',\n            'amount' => 9.49\n        ),\n        'xsolla_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.19\n        ),\n        'payment_method_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.31\n        ),\n        'repatriation_commission' => array(\n            'currency' => 'USD',\n            'amount' => 0.2\n        )\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 1220\nauthorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7\n\n{\n    \"notification_type\": \"partial_refund\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"purchase\": {\n        \"checkout\": {\n            \"currency\": \"USD\",\n            \"amount\": 50\n        },\n        \"total\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        }\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    },\n    \"transaction\": {\n        \"id\": 1,\n        \"external_id\": 1,\n        \"dry_run\": 1,\n        \"agreement\": 1,\n        \"date\": \"2022-03-31 10:53:15\"\n    },\n    \"refund_details\": {\n        \"author\": \"email@example.com\",\n        \"date\": \"2022-03-31 10:56:48\"\n    },\n    \"payment_details\": {\n        \"sales_tax\": {\n            \"currency\": \"USD\",\n            \"amount\": 0\n        },\n        \"direct_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 0.70\n        },\n        \"xsolla_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": \"10\"\n        },\n        \"payout\": {\n            \"currency\": \"USD\",\n            \"amount\": \"200\"\n        },\n        \"payment_method_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": \"20\"\n        },\n        \"payment\": {\n            \"currency\": \"USD\",\n            \"amount\": \"230\"\n        },\n        \"repatriation_commission\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        }\n    }\n}"
          }
        ]
      }
    },
    "payment": {
      "post": {
        "description": "사용자가 결제를 완료하면 엑솔라는 `payment` 유형이 포함된 웹훅의 결제 세부 정보를 웹훅 URL로 전송합니다.\n\n예상되는 응답 코드는 <b>Responses</b> 섹션에 설명되어 있지만 다른 응답 코드도 사용할 수 있습니다.\n\n<table>\n    <thead>\n    <tr>\n        <th>응답 코드</th>\n        <th>설명</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td><code>200</code>, <code>201</code>, <code>204</code></td>\n        <td>성공적인 응답입니다.</td>\n    </tr>\n    <tr>\n        <td><code>4xx</code></td>\n        <td>오류가 발생했습니다. 예를 들어, 지정된 사용자를 찾을 수 없거나 잘못된 서명이 전달된 경우입니다.</td>\n    </tr>\n    <tr>\n        <td><code>5xx</code></td>\n        <td>일시적인 서버 오류입니다. 이 응답이 수신되면 엑솔라는 자동으로 웹훅 전송을 재시도하며, 수신자가 수신을 확인할 때까지 시도 간격을 점차 늘립니다. 최대 재시도 횟수는 48시간 동안 12회입니다.</td>\n    </tr>\n    </tbody>\n</table>\n\n<a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">관리자 \n페이지</a>에서 웹훅 URL을 저장할 때 웹훅을 통해 추가 정보를 수신하도록 설정할 수도 있습니다.\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>2025년 1월 22일 또는 그 이전에 관리자 페이지에 등록한 경우, <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">설정 &gt;웹훅 &gt; 테스트 &gt; 결제 &gt; 고급 설정</a> 섹션에서 토글을 찾을 수 있습니다.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>토글</th>\n        <th>설명</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>저장된 결제 계정에 대한 정보 표시</td>\n        <td>저장된 결제 방식에 대한 정보는 <code>payment_account</code> 사용자 정의 개체에서 전달됩니다.</td>\n    </tr>\n    <tr>\n        <td>저장된 결제 방식을 사용한 트랜잭션에 대한 정보 표시</td>\n        <td><p>정보는 웹훅의 다음 사용자 정의 매개 변수에서 전달됩니다.</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> - 저장된 결제 방식이 사용되지 않음</li><li><code>1</code> - 현재 결제를 진행할 때 결제 방식이 저장됨</li><li><code>2</code> - 이전에 저장한 결제 방식이 사용됨</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> - 일회성 결제</li><li><code>2</code> - 반복 결제</li></ul></li></ul></td>\n    </tr>\n    <tr>\n        <td>주문 개체를 웹훅에 추가</td>\n        <td>주문 관련 정보는 <a href=\"/ko/webhooks/operation/payment/\">결제</a> 웹훅의 <code>order</code> 개체에서 전달됩니다.</td>\n    </tr>\n    <tr>\n        <td>민감한 데이터 없이 필수 사용자 매개 변수만 전송</td>\n        <td><p>사용자에 대한 다음 정보만 웹훅에서 전달됩니다.</p><ul><li>ID</li><li>국가</li></ul></td>\n    </tr>\n    <tr>\n        <td>카드 BIN 및 접미사 표시</td>\n        <td><p>은행 카드 번호에 대한 다음 정보가 웹훅에서 전달됩니다.</p><ul><li><code>card_bin</code> 매개 변수의 처음 6자리</li><li><code>card_suffix</code>의 마지막 4자리</li></ul></td>\n    </tr>\n    <tr>\n        <td>카드 브랜드 표시</td>\n        <td>결제에 사용된 카드의 브랜드. 예: Mastercard 또는 Visa.</td>\n    </tr>\n</tbody>\n</table>\n\n<div class=\"notice\">\n<p><strong>참고</strong></p>\n<p>웹훅으로 전송되는 필드 세트는 <ul><li>관리자 페이지에서 구성한 고급 설정</li><li>엑솔라 측에 구성한 사용자 지정 설정</li></ul></p><p>에 따라 달라집니다. 질문이 있는 경우, 고객 성공 관리자에게 문의하거나 <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>으로 이메일을 보내십시오.</p>\n</div>\n",
        "operationId": "payment",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "사용자 정의 매개 변수.",
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "payment_details": {
                    "description": "결제 내역 관련 값.",
                    "properties": {
                      "country_wht": {
                        "description": "국경 간 거래(대상)로 인해 특정 국가에서 적용되는 원천징수세.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "국가 원천징수세율(%).",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "direct_wht": {
                        "description": "직접 원천징수세.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "직접 원천징수세율.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "payment": {
                        "description": "게임유저 결제 데이터 관련 값.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_fee": {
                        "description": "결제 방식 수수료율.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_sum": {
                        "description": "결제 방법에서 청구된 금액에 대한 데이터가 포함된 값.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout": {
                        "description": "지급 내역 관련 값.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout_currency_rate": {
                        "description": "결제 통화를 지급 통화로 환전할 때의 환율.",
                        "type": "string"
                      },
                      "repatriation_commission": {
                        "description": "본국 송금 비용에 대한 데이터가 있는 오브젝트. 타사가 엑솔라에 부과.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "sales_tax": {
                        "description": "판매세(미국과 캐나다만 해당).",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "판매세율.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "user_acquisition_fee": {
                        "description": "제휴 네트워크 및 인플루언서를 통한 구매에 대해 공제된 사용자 확보 수수료의 총액(대상)입니다.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "사용자 확보 수수료율(%).",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "vat": {
                        "description": "VAT 세율(유럽연합만 해당).",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "부가가치세율.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_balance_sum": {
                        "description": "엑솔라 잔액에서 청구된 금액에 대한 데이터가 포함된 값.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_fee": {
                        "description": "엑솔라 수수료 요율.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "purchase": {
                    "description": "구매 데이터 관련 값.",
                    "properties": {
                      "checkout": {
                        "description": "체크아웃 내역 관련 값.",
                        "properties": {
                          "amount": {
                            "description": "구매 금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "coupon": {
                        "description": "쿠폰 데이터 관련 값(이 트랜잭션에 쿠폰이 사용된 경우).",
                        "properties": {
                          "campaign_code": {
                            "description": "쿠폰 캠페인 코드.",
                            "type": "string"
                          },
                          "coupon_code": {
                            "description": "쿠폰 코드.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "gift": {
                        "description": "기프트 내역 관련 값.",
                        "properties": {
                          "giver_id": {
                            "description": "제공자 ID.",
                            "type": "string"
                          },
                          "hide_giver_from_receiver": {
                            "description": "수신자에서 제공자 ID를 숨길지 여부.",
                            "type": "string"
                          },
                          "message": {
                            "description": "제공자로부터 전송된 메시지.",
                            "type": "string"
                          },
                          "receiver_email": {
                            "description": "기프트 수령인 이메일.",
                            "type": "string"
                          },
                          "receiver_id": {
                            "description": "기프트 수령인 ID.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "order": {
                        "$ref": "#/components/schemas/order",
                        "properties": {
                          "id": {
                            "description": "주문 ID.",
                            "type": "integer"
                          },
                          "lineitems": {
                            "description": "아잍템에 대한 정보를 포함하는 매개 변수 배열.",
                            "items": {
                              "properties": {
                                "price": {
                                  "description": "아이템 가격에 대한 정보가 포함된 개체.",
                                  "properties": {
                                    "amount": {
                                      "description": "선택한 통화로 표시된 아이템의 총 가격.",
                                      "format": "float",
                                      "type": "number"
                                    },
                                    "currency": {
                                      "description": "아이템 가격의 통화.",
                                      "type": "string"
                                    }
                                  },
                                  "type": "object"
                                },
                                "quantity": {
                                  "description": "아이템 수량.",
                                  "type": "integer"
                                },
                                "sku": {
                                  "description": "아이템 SKU.",
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          }
                        }
                      },
                      "promotions": {
                        "description": "이 트랜잭션에 적용된 프로모션.",
                        "items": {
                          "properties": {
                            "id": {
                              "description": "프로모션 ID.",
                              "type": "integer"
                            },
                            "technical_name": {
                              "description": "프로모션의 기술명.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "subscription": {
                        "description": "정기결제 내역 관련 값.",
                        "properties": {
                          "amount": {
                            "$ref": "#/components/schemas/amount-float"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "date_create": {
                            "$ref": "#/components/schemas/subscription.date_create"
                          },
                          "date_next_charge": {
                            "description": "다음 충전 날짜. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)에 따른 날짜 및 시간.",
                            "type": "string"
                          },
                          "plan_id": {
                            "$ref": "#/components/schemas/subscription.plan_id"
                          },
                          "product_id": {
                            "description": "상품 ID(액세스 토큰으로 보낸 경우).",
                            "type": "string"
                          },
                          "subscription_id": {
                            "$ref": "#/components/schemas/subscription.subscription_id"
                          },
                          "tags": {
                            "$ref": "#/components/schemas/subscription.tags"
                          }
                        },
                        "type": "object"
                      },
                      "total": {
                        "description": "구매 총 가격 데이터 관련 값.",
                        "properties": {
                          "amount": {
                            "description": "총 구매 금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "total"
                    ],
                    "type": "object"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "트랜잭션 데이터 관련 값.",
                    "properties": {
                      "agreement": {
                        "description": "계약 ID.",
                        "type": "integer"
                      },
                      "dry_run": {
                        "description": "테스트 트랜잭션. 테스트 트랜잭션의 경우 매개 변수는 1개 값을 갖습니다. 또는, 트랜잭션이 실제로 이루어지는 경우 매개 변수가 전송되지 않습니다.",
                        "type": "integer"
                      },
                      "external_id": {
                        "$ref": "#/components/schemas/external-id"
                      },
                      "id": {
                        "description": "트랜잭션 ID.",
                        "type": "integer"
                      },
                      "payment_date": {
                        "description": "결제 날짜.",
                        "type": "string"
                      },
                      "payment_method": {
                        "description": "결제 수단 ID.",
                        "type": "integer"
                      },
                      "payment_method_name": {
                        "description": "결제 방식 이름.",
                        "type": "string"
                      },
                      "payment_method_order_id": {
                        "description": "결제 시스템의 결제 ID.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체).",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "$ref": "#/components/schemas/user.email"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "ip": {
                        "$ref": "#/components/schemas/user.ip"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      },
                      "phone": {
                        "$ref": "#/components/schemas/user.phone"
                      },
                      "zip": {
                        "$ref": "#/components/schemas/user.zip"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "transaction",
                  "payment_details"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400-payment"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "결제",
        "tags": [
          "payments"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-d '{\n    \"notification_type\": \"payment\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"purchase\": {\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"product_id\": \"Demo Product\",\n            \"date_create\": \"2014-09-22T19:25:25+04:00\",\n            \"date_next_charge\": \"2014-10-22T19:25:25+04:00\",\n            \"currency\": \"USD\",\n            \"amount\": 9.99\n        },\n        \"checkout\": {\n            \"currency\": \"USD\",\n            \"amount\": 50\n        },\n        \"total\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        },\n        \"promotions\": [{\n            \"technical_name\": \"Demo Promotion\",\n            \"id\": 853\n        }],\n        \"coupon\": {\n            \"coupon_code\": \"ICvj45S4FUOyy\",\n            \"campaign_code\": \"1507\"\n        },\n        \"order\": {\n          \"id\": 1234\n          \"lineitems\": [\n          {\n            \"sku\": \"com.xsolla.item_1\",\n            \"quantity\": 1,\n            \"price\": {\n              \"currency\": \"EUR\",\n              \"amount\": 6.5\n              }\n          }\n          ]\n          }\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    },\n    \"transaction\": {\n        \"id\": 1,\n        \"external_id\": 1,\n        \"payment_date\": \"2014-09-24T20:38:16+04:00\",\n        \"payment_method\": 1,\n        \"payment_method_name\": \"PayPal\",\n        \"payment_method_order_id\": 1234567890123456789,\n        \"dry_run\": 1,\n        \"agreement\": 1\n    },\n    \"payment_details\": {\n        \"payment\": {\n            \"currency\": \"USD\",\n            \"amount\": 230\n        },\n        \"vat\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 20\n        },\n        \"sales_tax\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 0\n        },\n        \"direct_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 0\n        },\n        \"payout_currency_rate\": \"1\",\n        \"payout\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        },\n        \"country_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 2,\n            \"percent\": 10\n        },\n        \"user_acquisition_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 2,\n            \"percent\": 1\n        },\n        \"xsolla_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        },\n        \"payment_method_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 20\n        },\n        \"repatriation_commission\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        }\n    },\n    \"custom_parameters\": {\n        \"parameter1\": \"value1\",\n        \"parameter2\": \"value2\"\n    }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'payment',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'purchase' => array(\n        'total' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        )\n    ),\n    'user' => array(\n        'ip' => '127.0.0.1',\n        'phone' => '18777976552',\n        'email' => 'email@example.com',\n        'id' => '1234567',\n        'country' => 'US'\n    ),\n    'transaction' => array(\n        'id' => 87654321,\n        'payment_date' => '2014-09-23T19:25:25+04:00',\n        'payment_method' => 1380,\n        'payment_method_name' => 'PayPal'\n        'payment_method_order_id' => 1234567890123456789,\n        'dry_run' => 1\n    ),\n    'payment_details' => array(\n        'payment' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        ),\n        'vat' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'sales_tax' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'direct_wht' => array(\n            'currency' => 'USD',\n            'amount' => 70\n        ),\n        'payout_currency_rate' => '1',\n        'country_wht ' => array(\n            'currency' => 'USD',\n            'amount' => 2,\n            'percent' => 10\n        ),\n        'user_acquisition_fee' => array(\n            'currency' => 'USD',\n            'amount' => 2,\n            'percent' => 1\n        ),\n        'payout' => array(\n            'currency' => 'USD',\n            'amount' => 9.49\n        ),\n        'xsolla_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.19\n        ),\n        'payment_method_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.31\n        ),\n        'repatriation_commission' => array(\n            'currency' => 'USD',\n            'amount' => 0.2\n        )\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 1721\nauthorization: Signature 34553d151e656110c656696c919f9a10e05de542\n\n{\n    \"notification_type\": \"payment\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"purchase\":{\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"product_id\": \"Demo Product\",\n            \"date_create\": \"2014-09-22T19:25:25+04:00\",\n            \"date_next_charge\": \"2014-10-22T19:25:25+04:00\",\n            \"currency\": \"USD\",\n            \"amount\": 9.99\n        },\n        \"checkout\": {\n            \"currency\": \"USD\",\n            \"amount\": 50\n        },\n        \"total\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        },\n        \"promotions\": [{\n            \"technical_name\": \"Demo Promotion\",\n            \"id\": 853\n        }],\n        \"coupon\": {\n            \"coupon_code\": \"ICvj45S4FUOyy\",\n            \"campaign_code\": \"1507\"\n        },\n        \"order\": {\n          \"id\": 1234\n          \"lineitems\": [\n          {\n            \"sku\": \"com.xsolla.item_1\",\n            \"quantity\": 1,\n            \"price\": {\n              \"currency\": \"EUR\",\n              \"amount\": 6.5\n              }\n          }\n          ]\n          }\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    },\n    \"transaction\": {\n        \"id\": 1,\n        \"external_id\": 1,\n        \"payment_date\": \"2014-09-24T20:38:16+04:00\",\n        \"payment_method\": 1,\n        \"payment_method_name\": \"PayPal\"\n        \"payment_method_order_id\": 1234567890123456789,\n        \"dry_run\": 1,\n        \"agreement\": 1\n    },\n    \"payment_details\": {\n        \"payment\": {\n            \"currency\": \"USD\",\n            \"amount\": 230\n        },\n        \"vat\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 20\n        },\n        \"sales_tax\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 0\n        },\n        \"direct_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 0,\n            \"percent\": 0\n        },\n        \"payout_currency_rate\": \"1\",\n        \"country_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 2,\n            \"percent\": 10\n        },\n        \"user_acquisition_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 2,\n            \"percent\": 1\n        },\n        \"payout\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        },\n        \"xsolla_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        },\n        \"payment_method_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": 20\n        },\n        \"repatriation_commission\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        }\n    },\n    \"custom_parameters\": {\n        \"parameter1\": \"value1\",\n        \"parameter2\": \"value2\"\n    }\n}"
          }
        ]
      }
    },
    "payment-declined": {
      "post": {
        "description": "결제 시스템에서 트랜잭션이 거부되면 엑솔라는 구성된 웹훅 URL 측의 `ps_declined` 유형 웹훅에 트랜잭션 세부 정보를 전송합니다. \n웹훅은 승인 또는 결제 처리 단계에서 전송됩니다. 이 경우, [payment](/ko/webhooks/operation/payment/)\\ \n[order_paid](/ko/webhooks/operation/successful-order-payment/) 웹훅이 전송되지 않았습니다.\n\n결제 시스템이 거부되는 일반적인 이유:\n\n* 카드 승인에 실패(예: 기술적 오류 또는 은행의 응답이 없어 결제 시스템이 승인 절차를 완료하지 못함)했거나 거부되었습니다(예: 은행에서 \n  응답했지만 자금이 부족하거나 카드 정보가 유효하지 않아 트랜잭션을 거부함).\n* 3-D Secure 검증에 실패했거나, 완료되지 않았거나, 사용자 확인 시간이 초과되었습니다.\n* 계좌 폐쇄 또는 유효하지 않은 카드 번호 등 되돌릴 수 없는 오류로 인해 처리업체 또는 매입 은행이 일시적으로 접속이 불가능하거나 강제 거부 \n  메시지를 반환합니다. 근본적인 문제를 해결하지 않고 재시도하면 트랜잭션이 성공적으로 이루어지지 않습니다.\n\n다음과 혼동되어서는 안 됩니다.\n\n* 사기 방지 거부는 [afs_reject](https://developers.xsolla.com/ko/webhooks/operation/afs-rejected-transaction/) 웹훅을 통해 보고됩니다.\n* 성공적인 결제 후 환불 및 부분 환불은 \n  [환불](https://developers.xsolla.com/ko/webhooks/operation/refund/) 및 \n  [partial_refund](https://developers.xsolla.com/ko/webhooks/operation/partial-refund/) 웹훅을 통해 보고됩니다.\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p><code>ps_declined</code> 웹훅을 수신하려면 고객 성공 매니저에게 문의하거나 <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>으로 이메일을 보내주세요.</p>\n</div>\n",
        "operationId": "payment-declined",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "refund_details": {
                    "description": "환불 세부 정보(개체).",
                    "properties": {
                      "author": {
                        "description": "환불 시작자. 필드 값이 다음 표에 따라 전달됩니다.\n\n<table>\n    <thead>\n    <tr>\n        <th>환불 시작자</th>\n        <th>필드 값</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>게임(API를 통해).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>게시자 계정 사용자(자동 환불).</td>\n        <td>사용자 이메일</td>\n    </tr>\n    <tr>\n        <td>게시자 계정 사용자(엑솔라 고객 지원의 도움을 받아).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>엑솔라(엑솔라 고객 지원의 도움을 받아).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "string"
                      },
                      "code": {
                        "description": "코드 ID.\n\n<table>\n    <thead>\n    <tr>\n        <th>코드</th>\n        <th>환불 이유</th>\n        <th>설명</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>Cancellation by the user request / the game request</td>\n        <td>Cancellation initiated from Publisher Account.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td>Chargeback</td>\n        <td>거래 지불 거절 요청되었습니다.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error</td>\n        <td>Issues in integration between Xsolla and the game.<br /><b>Recommendation: Do not add the user to blocklist.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td>Potential fraud</td>\n        <td>부정 결제가 의심됩니다.<br /><b>권장사항: 사용자를 차단 목록에 추가하세요.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment</td>\n        <td>Test transaction followed by cancellation.<br /><b>Recommendation: Do not add the user to blocklist.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td>User invoice expired</td>\n        <td>후불 결제 방식에 의해 트랜잭션이 이뤄진 경우 사용됩니다.</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS</td>\n        <td>결제 시스템에서 결제가 거부되었습니다. PS에서 잠재적 사기를 감지했습니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하세요.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td>Cancellation by the PS request</td>\n        <td>결제시스템이 취소를 요청한 경우 사용됩니다.<br /><b>권장사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request</td>\n        <td>The user was not satisfied with the game or the purchase for any reason.<br /><b>Recommendation: Do not add the user to blocklist.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Cancellation requested by the game.<br /><b>Recommendation: Do not add the user to blocklist.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td>Account holder called to report fraud</td>\n        <td>계정 소유자가 본인 미사용 결제로 신고한 경우입니다.</td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td>Friendly fraud</td>\n        <td>우호적인 부정결제에 대한 메시지를 수신했을 때 사용됩니다.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td>Duplicate</td>\n        <td>동일 인보이스에 대하여 거래 복제.</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "integer"
                      },
                      "reason": {
                        "description": "환불 이유.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "트랜잭션 데이터 관련 값.",
                    "properties": {
                      "dry_run": {
                        "description": "테스트 트랜잭션. 테스트 트랜잭션의 경우 매개 변수는 1개 값을 갖습니다. 또는, 트랜잭션이 실제로 이루어지는 경우 매개 변수가 전송되지 않습니다.",
                        "type": "integer"
                      },
                      "external_id": {
                        "description": "트랜잭션 외부 ID.",
                        "type": "string"
                      },
                      "id": {
                        "description": "트랜잭션 ID.",
                        "type": "integer"
                      },
                      "payment_method": {
                        "description": "결제 수단 ID.",
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체).",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "$ref": "#/components/schemas/user.email"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "ip": {
                        "$ref": "#/components/schemas/user.ip"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "transaction"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400-payment"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "거부된 결제",
        "tags": [
          "payments"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'Accept: application/json' \\\n-H 'Content-Type: application/json' \\\n-H 'Authorization: Signature 80543ba63e1e50cf05f15150fe75e7245da9a898' \\\n-d '{\n  \"notification_type\": \"ps_declined\",\n  \"settings\": {\n    \"project_id\": \"18404\",\n    \"merchant_id\": \"2340\"\n  },\n  \"user\": {\n    \"ip\": \"127.0.0.1\",\n    \"email\": \"email@example.com\",\n    \"id\": \"1234567\",\n    \"country\": \"US\"\n  },\n  \"transaction\": {\n    \"id\": \"1\",\n    \"dry_run\": \"1\",\n    \"payment_method\": \"1\"\n  },\n  \"refund_details\": {\n    \"author\": \"support@xsolla.com\",\n    \"code\": \"8\",\n    \"reason\": \"Cancellation by the PS request\",\n    \"reason_detail\": \"Insufficient funds\"\n  }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n  'notification_type' => 'ps_declined',\n  'settings' => array(\n    'project_id' => '18404',\n    'merchant_id' => '2340',\n  ),\n  'user' => array(\n    'ip' => '127.0.0.1',\n    'email' => 'email@example.com',\n    'id' => '1234567',\n    'country' => 'US',\n  ),\n  'transaction' => array(\n    'id' => '1',\n    'dry_run' => '1',\n    'payment_method' => '1',\n  ),\n  'refund_details' => array(\n    'author' => 'support@xsolla.com',\n    'code' => '8',\n    'reason' => 'Cancellation by the PS request',\n    'reason_detail' => 'Insufficient funds',\n  ),\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 338\nauthorization: Signature 80543ba63e1e50cf05f15150fe75e7245da9a898\n\n{\n  \"notification_type\": \"ps_declined\",\n  \"settings\": {\n    \"project_id\": \"18404\",\n    \"merchant_id\": \"2340\"\n  },\n  \"user\": {\n    \"ip\": \"127.0.0.1\",\n    \"email\": \"email@example.com\",\n    \"id\": \"1234567\",\n    \"country\": \"US\"\n  },\n  \"transaction\": {\n    \"id\": \"1\",\n    \"dry_run\": \"1\",\n    \"payment_method\": \"1\"\n  },\n  \"refund_details\": {\n    \"author\": \"support@xsolla.com\",\n    \"code\": \"8\",\n    \"reason\": \"Cancellation by the PS request\",\n    \"reason_detail\": \"Insufficient funds\"\n  }\n}"
          }
        ]
      }
    },
    "personalized-partner-catalog": {
      "post": {
        "description": "사용자가 스토어와 상호 작용하면 엑솔라는 웹훅 URL로 사용자 및 프로젝트 매개변수가 포함된 \n<code>partner_side_catalog</code> 웹훅을 보냅니다.\n\n응답으로 사용자가 사용할 수 있는 <code>item_id</code> 또는 아이템 SKU 목록을 반환합니다. 이 경우 특정 사용자가 특정 \n제품을 지정된 횟수만큼 구매할 수 있다는 정보도 포함할 수 있습니다. 이 기능을 사용하여 사용자가 장바구니에 추가하고 구매할 수 있는 제품의 \n수와 유형을 제어할 수 있습니다.\n\n<code>partner_side_catalog</code> 웹훅의 처리 시간은 3초 이내로 하는 것이 좋습니다.\n",
        "operationId": "personalized-partner-catalog",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "user": {
                    "description": "사용자 세부 사항(개체).",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "currency": {
                        "$ref": "#/components/schemas/currency"
                      },
                      "locale": {
                        "$ref": "#/components/schemas/locale"
                      },
                      "user_id": {
                        "description": "사용자 ID. 사용자가 인증되지 않은 경우 `null` 값이 전송됩니다.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "user_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "user"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": [
                  {
                    "date_from": "2024-08-11T23:59:59+08:00",
                    "date_until": "2024-08-12T23:59:59+08:00",
                    "quantity": 0,
                    "sku": "com.xsolla.boots_1"
                  },
                  {
                    "date_from": "2024-08-11T23:59:59+08:00",
                    "date_until": "2024-08-12T23:59:59+08:00",
                    "quantity": null,
                    "sku": "com.xsolla.sword_1"
                  },
                  {
                    "quantity": 1,
                    "sku": "com.xsolla.helmet_1"
                  },
                  {
                    "content": [
                      {
                        "description": "Description of custom content item",
                        "image_url": "https://example.com/content_image.png",
                        "name": "Custom content item",
                        "quantity": 5
                      }
                    ],
                    "description": "Custom description",
                    "image_url": "https://example.com/image.png",
                    "json_attributes": {
                      "purchased": 0,
                      "type": "lootbox"
                    },
                    "name": "Custom name",
                    "quantity": null,
                    "sku": "com.xsolla.custom_item_1"
                  },
                  {
                    "available": 7,
                    "sku": "com.xsolla.limited_item_1",
                    "total": 10
                  }
                ],
                "schema": {
                  "items": {
                    "anyOf": [
                      {
                        "oneOf": [
                          {
                            "properties": {
                              "quantity": {
                                "$ref": "#/components/schemas/quantity"
                              }
                            },
                            "title": "quantity"
                          },
                          {
                            "properties": {
                              "available": {
                                "$ref": "#/components/schemas/available"
                              },
                              "total": {
                                "$ref": "#/components/schemas/total"
                              }
                            },
                            "title": "available"
                          }
                        ],
                        "properties": {
                          "content": {
                            "$ref": "#/components/schemas/bundle_content"
                          },
                          "date_from": {
                            "$ref": "#/components/schemas/date_from"
                          },
                          "date_until": {
                            "$ref": "#/components/schemas/date_until"
                          },
                          "description": {
                            "$ref": "#/components/schemas/description"
                          },
                          "image_url": {
                            "$ref": "#/components/schemas/image_url"
                          },
                          "json_attributes": {
                            "$ref": "#/components/schemas/json_attributes"
                          },
                          "name": {
                            "$ref": "#/components/schemas/name"
                          },
                          "sku": {
                            "$ref": "#/components/schemas/sku"
                          }
                        },
                        "required": [
                          "sku"
                        ],
                        "title": "sku"
                      },
                      {
                        "oneOf": [
                          {
                            "properties": {
                              "quantity": {
                                "$ref": "#/components/schemas/quantity"
                              }
                            },
                            "title": "quantity"
                          },
                          {
                            "properties": {
                              "available": {
                                "$ref": "#/components/schemas/available"
                              },
                              "total": {
                                "$ref": "#/components/schemas/total"
                              }
                            },
                            "title": "available"
                          }
                        ],
                        "properties": {
                          "content": {
                            "$ref": "#/components/schemas/bundle_content"
                          },
                          "date_from": {
                            "$ref": "#/components/schemas/date_from"
                          },
                          "date_until": {
                            "$ref": "#/components/schemas/date_until"
                          },
                          "description": {
                            "$ref": "#/components/schemas/description"
                          },
                          "image_url": {
                            "$ref": "#/components/schemas/image_url"
                          },
                          "item_id": {
                            "$ref": "#/components/schemas/item_id"
                          },
                          "json_attributes": {
                            "$ref": "#/components/schemas/json_attributes"
                          },
                          "name": {
                            "$ref": "#/components/schemas/name"
                          }
                        },
                        "required": [
                          "item_id"
                        ],
                        "title": "item_id"
                      }
                    ],
                    "type": "object"
                  },
                  "type": "array"
                }
              }
            },
            "description": "사용자가 사용할 수 있는 아이템 목록과 특정 사용자가 특정 아이템을 구매할 수 있는 횟수를 반환합니다."
          },
          "404": {
            "description": "사용자를 찾을 수 없습니다."
          }
        },
        "summary": "파트너 측의 카탈로그 개인 설정",
        "tags": [
          "personalization"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d90d319f05df7b0f86d2485f48e7079f0f752523' \\\n-d '{\n        \"notification_type\": \"partner_side_catalog\",\n        \"user\": {\n            \"user_id\": \"12345\",\n            \"country\": \"US\"\n        }\n    }'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n{\n    \"notification_type\": \"partner_side_catalog\",\n    \"user\": {\n      \"user_id\": \"12345\",\n      \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    },
    "refund": {
      "post": {
        "description": "결제가 취소되면 엑솔라는 취소된 거래 내역을 `refund` 유형의 웹훅으로 웹훅 URL로 전송합니다.\n\n웹훅 재시도 메커니즘은 환불을 시작한 사람에 따라 달라집니다:\n* 환불이 귀하 측에서 요청된 경우 웹훅은 재전송되지 않습니다. 웹훅에 대한 응답 여부와 관계없이 결제 금액은 사용자에게 환불됩니다.\n* 제3자(예: 결제 시스템 또는 엑솔라 고객 지원팀)가 환불을 요청했고 웹훅에 대한 응답으로 `5xx` 상태 코드가 반환된 경우, 웹훅은 점점 \n  더 빠른 간격으로 재전송됩니다. 재시도 횟수는 첫 번째 시도 후 48시간 이내에 최대 12회입니다.\n\n환불 절차에 대한 자세한 내용은 [지침](/ko/doc/pay-station/features/refund/)을 참조하세요.\n\n<div class=\"notice\">\n<p><strong>주의</strong></p>\n<p>다음 조건을 모두 충족하는 경우에도 사용자에게 결제가 환불됩니다:<ul><li>환불이 엑솔라 측에서 요청한 경우.</li><li>웹훅에 대한 응답으로, <code>4xx</code> 상태 코드가 반환되거나 모든 재시도 후 응답을 받지 않거나 <code>5xx</code> 상태 코드가 반환된 경우.</li></ul></p>\n</div>\n\n<a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">관리자 \n페이지</a>에서 웹훅 URL을 저장할 때 웹훅을 통해 추가 정보를 수신하도록 설정할 수도 있습니다.\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>2025년 1월 22일 또는 그 이전에 관리자 페이지에 등록한 경우, <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">설정 &gt;웹훅 &gt; 테스트 &gt; 결제 &gt; 고급 설정</a> 섹션에서 토글을 찾을 수 있습니다.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>토글</th>\n        <th>설명</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>저장된 결제 방식을 사용한 트랜잭션에 대한 정보 표시</td>\n        <td><p>정보는 웹훅의 다음 사용자 정의 매개 변수에서 전달됩니다.</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> - 저장된 결제 방식이 사용되지 않음</li><li><code>1</code> - 현재 결제를 진행할 때 결제 방식이 저장됨</li><li><code>2</code> - 이전에 저장한 결제 방식이 사용됨</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> - 일회성 결제</li><li><code>2</code> - 반복 결제</li></ul></li></ul></td>\n    </tr>\n</tbody>\n</table>\n\n환불 코드:\n\n<table>\n    <thead>\n    <tr>\n        <th>코드</th>\n        <th>환불 이유</th>\n        <th>설명</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>사용자 요청/게임 요청에 의한 취소</td>\n        <td>관리자 페이지에서 취소가 요청된 경우 사용됩니다.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td>지불 거절</td>\n        <td>거래 지불 거절 요청되었습니다.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>연동 오류</td>\n        <td>엑솔라와 게임 사이의 연동에 문제가 있을 경우 사용됩니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td>잠재적 사기</td>\n        <td>부정 결제가 의심됩니다.<br /><b>권장사항: 사용자를 차단 목록에 추가하세요.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>테스트 결제</td>\n        <td>테스트 트랜잭션인 경우 사용되며 이후 취소로 이어집니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td>사용자 인보이스 만료</td>\n        <td>후불 결제 방식에 의해 트랜잭션이 이뤄진 경우 사용됩니다.</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>PS에서 전송된 사기 참고</td>\n        <td>결제 시스템에서 결제가 거부되었습니다. PS에서 잠재적 사기를 감지했습니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하세요.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td>PS 요청에 의한 취소</td>\n        <td>결제시스템이 취소를 요청한 경우 사용됩니다.<br /><b>권장사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>사용자 요청에 의한 취소</td>\n        <td>사용자의 요청에 의한 환불 사유입니다. 어떤 이유로 사용자가 게임 또는 구매에 만족하지 못한 못하였음을 의미합니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>게임 요청에 의한 취소</td>\n        <td>게임을 통해 취소를 요청한 경우 사용됩니다.<br /><b>권장 사항: 사용자를 차단 목록에 추가하지 마세요.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td>계정 소유자가 사기 신고를 위해 전화한 경우</td>\n        <td>계정 소유자가 본인 미사용 결제로 신고한 경우입니다.</td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td>지불 거절 사기</td>\n        <td>우호적인 부정결제에 대한 메시지를 수신했을 때 사용됩니다.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td>복제</td>\n        <td>동일 인보이스에 대하여 거래 복제.</td>\n    </tr>\n    </tbody>\n</table>\n",
        "operationId": "refund",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "사용자 정의 매개 변수.",
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "payment_details": {
                    "description": "결제 내역 관련 값.",
                    "properties": {
                      "country_wht": {
                        "description": "국경 간 거래(대상)로 인해 특정 국가에서 적용되는 원천징수세.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "국가 원천징수세율(%).",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "direct_wht": {
                        "description": "직접 원천징수세.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "직접 원천징수세율.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "payment": {
                        "description": "게임유저 결제 데이터 관련 값.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_fee": {
                        "description": "결제 방식 수수료율.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_sum": {
                        "description": "결제 방법에서 청구된 금액에 대한 데이터가 포함된 값.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout": {
                        "description": "지급 내역 관련 값.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout_currency_rate": {
                        "description": "결제 통화를 지급 통화로 환전할 때의 환율.",
                        "type": "string"
                      },
                      "repatriation_commission": {
                        "description": "본국 송금 비용에 대한 데이터가 있는 오브젝트. 타사가 엑솔라에 부과.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "sales_tax": {
                        "description": "판매세(미국과 캐나다만 해당).",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "판매세율.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "user_acquisition_fee": {
                        "description": "제휴 네트워크 및 인플루언서를 통한 구매에 대해 공제된 사용자 확보 수수료의 총액(대상)입니다.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "사용자 확보 수수료율(%).",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "vat": {
                        "description": "VAT 세율(유럽연합만 해당).",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "부가가치세율.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_balance_sum": {
                        "description": "엑솔라 잔액에서 청구된 금액에 대한 데이터가 포함된 값.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_fee": {
                        "description": "엑솔라 수수료 요율.",
                        "properties": {
                          "amount": {
                            "description": "금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "purchase": {
                    "description": "구매 데이터 관련 값.",
                    "properties": {
                      "checkout": {
                        "description": "체크아웃 내역 관련 값.",
                        "properties": {
                          "amount": {
                            "description": "구매 금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "subscription": {
                        "description": "정기결제 내역 관련 값.",
                        "properties": {
                          "amount": {
                            "$ref": "#/components/schemas/amount-float"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "date_create": {
                            "$ref": "#/components/schemas/subscription.date_create"
                          },
                          "plan_id": {
                            "$ref": "#/components/schemas/subscription.plan_id"
                          },
                          "subscription_id": {
                            "$ref": "#/components/schemas/subscription.subscription_id"
                          },
                          "tags": {
                            "$ref": "#/components/schemas/subscription.tags"
                          }
                        },
                        "type": "object"
                      },
                      "total": {
                        "description": "구매 총 가격 데이터 관련 값.",
                        "properties": {
                          "amount": {
                            "description": "총 구매 금액.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "total"
                    ],
                    "type": "object"
                  },
                  "refund_details": {
                    "description": "환불 세부 정보(오브젝트).",
                    "properties": {
                      "author": {
                        "description": "환불 시작자. 필드 값이 다음 표에 따라 전달됩니다.\n\n<table>\n    <thead>\n    <tr>\n        <th>환불 시작자</th>\n        <th>필드 값</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>게임(API를 통해).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>게시자 계정 사용자(자동 환불).</td>\n        <td>사용자 이메일</td>\n    </tr>\n    <tr>\n        <td>게시자 계정 사용자(엑솔라 고객 지원의 도움을 받아).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>엑솔라(엑솔라 고객 지원의 도움을 받아).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "string"
                      },
                      "code": {
                        "description": "코드 ID.",
                        "type": "integer"
                      },
                      "reason": {
                        "description": "환불 이유입니다.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정 관련 값.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "트랜잭션 데이터 관련 값.",
                    "properties": {
                      "agreement": {
                        "description": "계약 ID.",
                        "type": "integer"
                      },
                      "dry_run": {
                        "description": "테스트 트랜잭션. 테스트 트랜잭션의 경우 매개 변수는 1개 값을 갖습니다. 또는, 트랜잭션이 실제로 이루어지는 경우 매개 변수가 전송되지 않습니다.",
                        "type": "integer"
                      },
                      "external_id": {
                        "description": "트랜잭션 외부 ID 입니다.",
                        "type": "string"
                      },
                      "id": {
                        "description": "트랜잭션 ID.",
                        "type": "integer"
                      },
                      "payment_method_order_id": {
                        "description": "결제 시스템의 결제 ID.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항 관련 값.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "$ref": "#/components/schemas/user.email"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "ip": {
                        "$ref": "#/components/schemas/user.ip"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      },
                      "phone": {
                        "$ref": "#/components/schemas/user.phone"
                      },
                      "zip": {
                        "$ref": "#/components/schemas/user.zip"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "transaction",
                  "payment_details"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "환불",
        "tags": [
          "payments"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-d '{\n        \"notification_type\": \"refund\",\n        \"settings\": {\n          \"project_id\": 18404,\n          \"merchant_id\": 2340\n        },\n        \"purchase\": {\n            \"subscription\": {\n                \"plan_id\": \"b5dac9c8\",\n                \"subscription_id\": \"10\",\n                \"date_create\": \"2014-09-22T19:25:25+04:00\",\n                \"currency\": \"USD\",\n                \"amount\": 9.99\n            },\n            \"checkout\": {\n                \"currency\": \"USD\",\n                \"amount\": 50\n            },\n            \"total\":{\n                \"currency\": \"USD\",\n                \"amount\": 200\n            }\n        },\n        \"user\": {\n            \"ip\": \"127.0.0.1\",\n            \"phone\": \"18777976552\",\n            \"email\": \"email@example.com\",\n            \"id\": \"1234567\",\n            \"name\": \"John Smith\",\n            \"country\": \"US\"\n        },\n        \"transaction\": {\n            \"id\": 1,\n            \"external_id\": 1,\n            \"dry_run\": 1,\n            \"agreement\": 1\n        },\n        \"refund_details\": {\n            \"code\": 4,\n            \"reason\": \"Potential fraud\"\n        },\n        \"payment_details\": {\n            \"sales_tax\": {\n                \"currency\": \"USD\",\n                \"amount\": 0\n            },\n            \"direct_wht\": {\n                \"currency\": \"USD\",\n                \"amount\": 0.70\n            },\n            \"xsolla_fee\": {\n                \"currency\": \"USD\",\n                \"amount\": \"10\"\n            },\n            \"payout\": {\n                \"currency\": \"USD\",\n                \"amount\": \"200\"\n            },\n            \"payment_method_fee\": {\n                \"currency\": \"USD\",\n                \"amount\": \"20\"\n            },\n            \"payment\": {\n                \"currency\": \"USD\",\n                \"amount\": \"230\"\n            },\n            \"repatriation_commission\": {\n                \"currency\": \"USD\",\n                \"amount\": 10\n            }\n        }\n    }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'refund',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'purchase' => array(\n        'total' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        )\n    ),\n    'user' => array(\n        'ip' => '127.0.0.1',\n        'phone' => '18777976552',\n        'email' => 'email@example.com',\n        'id' => '1234567',\n        'country' => 'US'\n    ),\n    'transaction' => array(\n        'id' => 87654321,\n        'payment_date' => '2014-09-23T19:25:25+04:00',\n        'payment_method' => 1380,\n        'dry_run' => 1\n    ),\n    'refund_details' => array(\n            'code' => 4,\n            'reason' => 'Potential fraud'\n    ),\n    'payment_details' => array(\n        'payment' => array(\n            'currency' => 'USD',\n            'amount' => 9.99\n        ),\n        'vat' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'sales_tax' => array(\n            'currency' => 'USD',\n            'amount' => 0\n        ),\n        'direct_wht' => array(\n            'currency' => 'USD',\n            'amount' => 70\n        ),\n        'payout_currency_rate' => 1,\n        'payout' => array(\n            'currency' => 'USD',\n            'amount' => 9.49\n        ),\n        'xsolla_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.19\n        ),\n        'payment_method_fee' => array(\n            'currency' => 'USD',\n            'amount' => 0.31\n        ),\n        'repatriation_commission' => array(\n            'currency' => 'USD',\n            'amount' => 0.2\n        )\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 1220\nauthorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7\n\n{\n    \"notification_type\": \"refund\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"purchase\": {\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"date_create\": \"2014-09-22T19:25:25+04:00\",\n            \"currency\": \"USD\",\n            \"amount\": 9.99\n        },\n        \"checkout\": {\n            \"currency\": \"USD\",\n            \"amount\": 50\n        },\n        \"total\": {\n            \"currency\": \"USD\",\n            \"amount\": 200\n        }\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    },\n    \"transaction\": {\n        \"id\": 1,\n        \"external_id\": 1,\n        \"dry_run\": 1,\n        \"agreement\": 1\n    },\n    \"refund_details\": {\n        \"code\": 4,\n        \"reason\": \"Potential fraud\"\n    },\n    \"payment_details\": {\n        \"sales_tax\": {\n            \"currency\": \"USD\",\n            \"amount\": 0\n        },\n        \"direct_wht\": {\n            \"currency\": \"USD\",\n            \"amount\": 0.70\n        },\n        \"xsolla_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": \"10\"\n        },\n        \"payout\": {\n            \"currency\": \"USD\",\n            \"amount\": \"200\"\n        },\n        \"payment_method_fee\": {\n            \"currency\": \"USD\",\n            \"amount\": \"20\"\n        },\n        \"payment\": {\n            \"currency\": \"USD\",\n            \"amount\": \"230\"\n        },\n        \"repatriation_commission\": {\n            \"currency\": \"USD\",\n            \"amount\": 10\n        }\n    }\n}"
          }
        ]
      }
    },
    "remove-payment-account": {
      "post": {
        "description": "사용자가 저장된 계정에서 결제 계정을 제거하면 엑솔라는 `payment_account_remove` 유형이 포함된 웹훅을 웹훅 URL로 보냅니다. 이 웹훅을 수신하려면 고객 성공 매니저에게 문의하거나 <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>으로 이메일을 보내주세요.",
        "operationId": "remove-payment-account",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "payment_account": {
                    "description": "결제 계정 세부내역 (객체).",
                    "properties": {
                      "id": {
                        "$ref": "#/components/schemas/payment_account.id"
                      },
                      "name": {
                        "$ref": "#/components/schemas/payment_account.name"
                      },
                      "payment_method": {
                        "$ref": "#/components/schemas/payment_account.payment_method"
                      },
                      "type": {
                        "$ref": "#/components/schemas/payment_account.type"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체)입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체)입니다.",
                    "properties": {
                      "email": {
                        "$ref": "#/components/schemas/user.email"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "결제 계정 제거",
        "tags": [
          "payments"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\": \"payment_account_remove\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\"\n    },\n    \"payment_account\": {\n        \"id\": \"12345678\",\n        \"name\": \"email@example.com\",\n        \"payment_method\": \"24\",\n        \"type\": \"paypal\"\n    }\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 258\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n\n{\n    \"notification_type\": \"payment_account_remove\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\"\n    },\n    \"payment_account\": {\n        \"id\": \"12345678\",\n        \"name\": \"email@example.com\",\n        \"payment_method\": \"24\",\n        \"type\": \"paypal\"\n    }\n}"
          }
        ]
      }
    },
    "successful-order-payment": {
      "post": {
        "description": "엑솔라는 사용자가 주문에 대한 결제를 성공적으로 완료하면 지정된 URL로 <code>order_paid</code> 웹훅을 전송합니다.\n\n<code>order_paid</code> 웹훅에는 구매한 아이템, 결제 데이터 및 거래 세부 정보에 대한 정보가 포함되어 있습니다.\n\n결제가 성공하지 못한 경우 <code>order_paid</code> 웹훅이 전송되지 않습니다. 예:\n* 결제 양식이 열렸지만 사용자가 주문을 결제하지 않았습니다.\n* 결제창이 열렸으나 결제 중 오류가 발생했습니다.\n\n<code>order_paid</code> 웹훅의 처리 시간은 3초 이내로 하는 것이 좋습니다.\n\n<div class=\"notice\">\n<p><strong>참고</strong></p>\n<p>웹훅에 전송되는 필드 세트는 <ul><li><a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">프로젝트 설정 &gt; 웹훅 &gt; 고급 설정</a> 섹션의 관리자 페이지에서 구성한 설정</li><li>엑솔라 측에서 구성한 설정</li></ul> 설정에 따라 달라집니다.</p><p>질문이 있을 경우, 고객 성공 관리자에게 문의하거나 <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>으로 이메일을 보내십시오.</p>\n</div>\n\n<b>응답</b> 섹션에서 예상 답변을 볼 수 있습니다. 다른 응답 코드를 사용할 수도 있습니다. 응답 코드 및 자동 결제 환불 기능 연결에 \n따른 엑솔라 측의 웹훅 처리 로직은 다음과 같습니다.\n\n<table>\n    <thead>\n    <tr>\n        <th>응답 코드</th>\n        <th>자동 결제 환불이 비활성화됨(기본값)</th>\n        <th>자동 결제 환불이 비활성화됨</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td><code>400</code>, <code>401</code>, <code>402</code>, <code>403</code>, <code>404</code>, <code>409</code>, <code>422</code>, <code>415</code></td>\n        <td>작업 없음</td>\n        <td>사용자에게 자동 환불</td>\n    </tr>\n    <tr>\n        <td><code>200</code>, <code>201</code>, <code>204</code></td>\n        <td>작업 없음</td>\n        <td>작업 없음</td>\n    </tr>\n    <tr>\n        <td>웹훅에 다른 코드 또는 응답 없음</td>\n        <td>5분 간격으로 2번, 15분 간격으로 7번, 60분 간격으로 10번 등 지정한 시간 간격으로 웹훅을 여러 번 전송합니다. </td>\n        <td>5분 간격으로 2번, 15분 간격으로 7번, 60분 간격으로 10번 등 지정한 시간 간격으로 웹훅을 여러 번 전송합니다. 모든 웹훅을 전송해도 응답을 성공적으로 받지 못하면 사용자에게 환불이 자동으로 이루어집니다.</td>\n    </tr>\n    </tbody>\n</table>\n\n자동 환불 기능을 연결하려면 고객 성공 관리자에게 문의하거나 csm@xsolla.com으로 이메일 전송하십시오.\n",
        "operationId": "successful-order-payment",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "billing": {
                    "description": "거래 및 결제 세부 정보.",
                    "properties": {
                      "notification_type": {
                        "$ref": "#/components/schemas/notification_type"
                      },
                      "payment_details": {
                        "description": "결제 내역 관련 값.",
                        "properties": {
                          "country_wht": {
                            "description": "국경 간 거래(대상)로 인해 특정 국가에서 적용되는 원천징수세.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "국가 원천징수세율(%).",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "direct_wht": {
                            "description": "직접 원천징수세.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "직접 원천징수세율.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "payment": {
                            "description": "게임유저 결제 데이터 관련 값.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payment_method_fee": {
                            "description": "결제 방식 수수료율.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payment_method_sum": {
                            "description": "결제 방법에서 청구된 금액에 대한 데이터가 포함된 값.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payout": {
                            "description": "지급 내역 관련 값.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payout_currency_rate": {
                            "description": "결제 통화를 지급 통화로 환전할 때의 환율.",
                            "type": "string"
                          },
                          "repatriation_commission": {
                            "description": "본국 송금 비용에 대한 데이터가 있는 오브젝트. 타사가 엑솔라에 부과.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "sales_tax": {
                            "description": "판매세(미국과 캐나다만 해당).",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "판매세율.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "user_acquisition_fee": {
                            "description": "제휴 네트워크 및 인플루언서를 통한 구매에 대해 공제된 사용자 확보 수수료의 총액(대상)입니다.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "사용자 확보 수수료율(%).",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "vat": {
                            "description": "VAT 세율(유럽연합만 해당).",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "부가가치세율.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_balance_sum": {
                            "description": "엑솔라 잔액에서 청구된 금액에 대한 데이터가 포함된 값.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_fee": {
                            "description": "엑솔라 수수료 요율.",
                            "properties": {
                              "amount": {
                                "description": "금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "type": "object"
                      },
                      "purchase": {
                        "description": "구매 데이터 관련 값.",
                        "properties": {
                          "coupon": {
                            "description": "쿠폰 데이터 관련 값(이 트랜잭션에 쿠폰이 사용된 경우).",
                            "properties": {
                              "campaign_code": {
                                "description": "쿠폰 캠페인 코드.",
                                "type": "string"
                              },
                              "coupon_code": {
                                "description": "쿠폰 코드.",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "gift": {
                            "description": "기프트 내역 관련 값.",
                            "properties": {
                              "giver_id": {
                                "description": "제공자 ID.",
                                "type": "string"
                              },
                              "hide_giver_from_receiver": {
                                "description": "수신자에서 제공자 ID를 숨길지 여부.",
                                "type": "string"
                              },
                              "message": {
                                "description": "제공자로부터 전송된 메시지.",
                                "type": "string"
                              },
                              "receiver_email": {
                                "description": "기프트 수령인 이메일.",
                                "type": "string"
                              },
                              "receiver_id": {
                                "description": "기프트 수령인 ID.",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "promotions": {
                            "description": "이 트랜잭션에 적용된 프로모션.",
                            "items": {
                              "properties": {
                                "id": {
                                  "description": "프로모션 ID.",
                                  "type": "integer"
                                },
                                "technical_name": {
                                  "description": "프로모션의 기술명.",
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "subscription": {
                            "description": "정기결제 내역 관련 값.",
                            "properties": {
                              "amount": {
                                "$ref": "#/components/schemas/amount-float"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "date_create": {
                                "$ref": "#/components/schemas/subscription.date_create"
                              },
                              "date_next_charge": {
                                "description": "다음 충전 날짜. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)에 따른 날짜 및 시간.",
                                "type": "string"
                              },
                              "plan_id": {
                                "$ref": "#/components/schemas/subscription.plan_id"
                              },
                              "product_id": {
                                "description": "상품 ID(액세스 토큰으로 보낸 경우).",
                                "type": "string"
                              },
                              "subscription_id": {
                                "$ref": "#/components/schemas/subscription.subscription_id"
                              },
                              "tags": {
                                "$ref": "#/components/schemas/subscription.tags"
                              }
                            },
                            "type": "object"
                          },
                          "total": {
                            "description": "구매 총 가격 데이터 관련 값.",
                            "properties": {
                              "amount": {
                                "description": "총 구매 금액.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "required": [
                          "total"
                        ],
                        "type": "object"
                      },
                      "settings": {
                        "description": "사용자 정의 프로젝트 설정 관련 값.",
                        "properties": {
                          "merchant_id": {
                            "$ref": "#/components/schemas/settings.merchant_id"
                          },
                          "project_id": {
                            "$ref": "#/components/schemas/settings.project_id"
                          }
                        },
                        "type": "object"
                      },
                      "transaction": {
                        "description": "트랜잭션 데이터 관련 값.",
                        "properties": {
                          "agreement": {
                            "description": "계약 ID.",
                            "type": "integer"
                          },
                          "dry_run": {
                            "description": "테스트 트랜잭션. 테스트 트랜잭션의 경우 매개 변수는 1개 값을 갖습니다. 또는, 트랜잭션이 실제로 이루어지는 경우 매개 변수가 전송되지 않습니다.",
                            "type": "integer"
                          },
                          "external_id": {
                            "$ref": "#/components/schemas/external-id"
                          },
                          "id": {
                            "description": "트랜잭션 ID.",
                            "type": "integer"
                          },
                          "payment_date": {
                            "description": "결제 날짜.",
                            "type": "string"
                          },
                          "payment_method": {
                            "description": "결제 수단 ID.",
                            "type": "integer"
                          },
                          "payment_method_name": {
                            "description": "결제 방식 이름.",
                            "type": "string"
                          },
                          "payment_method_order_id": {
                            "description": "결제 시스템의 결제 ID.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "notification_type",
                      "transaction",
                      "payment_details"
                    ],
                    "type": "object"
                  },
                  "custom_parameters": {
                    "description": "추가 정보입니다.",
                    "type": "object"
                  },
                  "items": {
                    "description": "사용자가 구매한 아이템 목록입니다.\n\n배열에 포함된 매개 변수 집합은 웹훅 버전에 따라 다릅니다. 버전 2에는 `is_free`, `is_bonus` 및 \n`is_bundle_content`와 같은 추가 매개 변수가 포함되어 있습니다. 버전을 전환하려면 [웹훅 \n설정](/ko/api/igs/operation/update-webhook/) API 호출에 대한 정보 업데이트에서 `version` 매개 변수 \n번호를 전달하십시오.\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "아이템 수량에 따른 총 비용입니다.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "아이템 특성 및 값이 포함된 JSON 개체입니다.",
                              "type": "object"
                            },
                            "is_pre_order": {
                              "description": "`true`이면 항목이 사전 판매됩니다.",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "아이템 수량.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order"
                          ],
                          "title": "버전 = 1",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "amount": {
                              "description": "아이템 수량에 따른 총 비용입니다.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "아이템 특성 및 값이 포함된 JSON 개체입니다.",
                              "type": "object"
                            },
                            "is_bonus": {
                              "description": "`true`이면 항목이 보너스입니다.",
                              "type": "boolean"
                            },
                            "is_bundle_content": {
                              "description": "`true`이면 항목이 번들에 포함됩니다.",
                              "type": "boolean"
                            },
                            "is_free": {
                              "description": "`true`이면 아이템이 무료입니다.",
                              "type": "boolean"
                            },
                            "is_pre_order": {
                              "description": "`true`이면 항목이 사전 판매됩니다.",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "아이템 수량.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order",
                            "is_free",
                            "is_bonus",
                            "is_bundle_content"
                          ],
                          "title": "버전 = 2",
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "order": {
                    "description": "주문에 대한 정보입니다.",
                    "properties": {
                      "amount": {
                        "description": "선택한 통화를 기준으로 한 장바구니의 총 비용입니다.",
                        "type": "string"
                      },
                      "comment": {
                        "description": "주문에 대한 사용자의 코멘트.",
                        "nullable": true,
                        "type": "string"
                      },
                      "coupons": {
                        "description": "적용된 쿠폰. 쿠폰을 적용되지 않았으면 배열이 돌아오지 않습니다.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "적용된 쿠폰 코드.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "외부 ID.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "currency": {
                        "description": "주문 통화. 가상 화폐는 SKU를 사용하고 실제 화폐는 3글자 [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) 코드를 사용합니다.",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "엑솔라 측에서 사용자 주문의 고유 식별자입니다.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "실질 화폐 결제 인보이스 ID. 인게임 재화 결제 또는 무료 아이템은 `null` 값을 사용합니다.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "결제 모드. 실제 결제에는 `default`를 사용합니다. 테스트 결제에는 `sandbox`를 사용합니다.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "결제 플랫폼. `xsolla` 값은 엑솔라를 통한 결제에 사용됩니다. 기타 결제는 게임 퍼블리싱 플랫폼의 이름에 해당하는 값을 사용합니다.",
                        "enum": [
                          "xsolla",
                          "playstation_network",
                          "xbox_live",
                          "pc_standalone",
                          "nintendo_shop",
                          "google_play",
                          "app_store_ios",
                          "android_standalone",
                          "ios_standalone",
                          "android_other",
                          "ios_other",
                          "pc_other"
                        ],
                        "nullable": true,
                        "type": "string"
                      },
                      "promocodes": {
                        "description": "적용된 프로모션 코드. 프로모션 코드가 적용되지 않았으면 배열이 돌아오지 않습니다.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "적용된 프로모션 코드의 코드.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "외부 ID.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "promotions": {
                        "$ref": "#/components/schemas/order.promotions"
                      },
                      "status": {
                        "description": "주문 상태.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "mode",
                      "currency_type",
                      "currency",
                      "amount",
                      "status",
                      "platform",
                      "comment",
                      "invoice_id",
                      "promotions"
                    ],
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 정보.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "description": "사용자 이메일 주소.",
                        "type": "string"
                      },
                      "external_id": {
                        "description": "사용자 ID.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "external_id",
                      "email"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "items",
                  "order",
                  "user",
                  "transaction",
                  "payment_details"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "성공적인 처리 표시를 반환합니다."
          },
          "400": {
            "description": "제공된 정보에 오류가 있는 경우 반환합니다(예: 필수 매개변수 누락, 인증 실패 등)."
          }
        },
        "summary": "주문 결제 성공(결제 및 거래 세부 정보 포함)",
        "tags": [
          "combined-webhooks"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\": \"order_paid\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\":\n          {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": null,\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"gc_user@xsolla.com\",\n      \"country\": \"US\"\n    },\n    \"billing\": {\n      \"notification_type\": \"payment\",\n      \"settings\": {\n        \"project_id\": 18404,\n        \"merchant_id\": 2340\n      },\n      \"purchase\": {\n          \"subscription\": {\n              \"plan_id\": \"b5dac9c8\",\n              \"subscription_id\": \"10\",\n              \"product_id\": \"Demo Product\",\n              \"date_create\": \"2014-09-22T19:25:25+04:00\",\n              \"date_next_charge\": \"2014-10-22T19:25:25+04:00\",\n              \"currency\": \"USD\",\n              \"amount\": 9.99\n          },\n          \"total\": {\n              \"currency\": \"USD\",\n              \"amount\": 200\n          },\n          \"promotions\": [{\n              \"technical_name\": \"Demo Promotion\",\n              \"id\": 853\n          }],\n          \"coupon\": {\n              \"coupon_code\": \"ICvj45S4FUOyy\",\n              \"campaign_code\": \"1507\"\n          }\n        },\n      \"transaction\": {\n          \"id\": 1,\n          \"external_id\": 1,\n          \"payment_date\": \"2014-09-24T20:38:16+04:00\",\n          \"payment_method\": 1,\n          \"payment_method_name\": \"PayPal\",\n          \"payment_method_order_id\": 1234567890123456789,\n          \"dry_run\": 1,\n          \"agreement\": 1\n      },\n      \"payment_details\": {\n          \"payment\": {\n              \"currency\": \"USD\",\n              \"amount\": 230\n          },\n          \"vat\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 20\n          },\n          \"sales_tax\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 0\n          },\n          \"direct_wht\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 0\n          },\n          \"payout_currency_rate\": \"1\",\n          \"payout\": {\n              \"currency\": \"USD\",\n              \"amount\": 200\n          },\n          \"country_wht\": {\n              \"currency\": \"USD\",\n              \"amount\": 2,\n              \"percent\": 10\n          },\n          \"user_acquisition_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 2,\n              \"percent\": 1\n          },\n          \"xsolla_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 10\n          },\n          \"payment_method_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 20\n          },\n          \"repatriation_commission\": {\n              \"currency\": \"USD\",\n              \"amount\": 10\n          }\n      }\n    }\n ,\n  \"custom_parameters\": {\n    \"parameter1\": \"value1\",\n    \"parameter2\": \"value2\"\n  }\n}"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 258\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n\n{\n    \"notification_type\": \"order_paid\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\":\n          {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": null,\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"gc_user@xsolla.com\",\n      \"country\": \"US\"\n    },\n    \"billing\": {\n      \"notification_type\": \"payment\",\n      \"settings\": {\n        \"project_id\": 18404,\n        \"merchant_id\": 2340\n      },\n      \"purchase\":{\n          \"subscription\": {\n              \"plan_id\": \"b5dac9c8\",\n              \"subscription_id\": \"10\",\n              \"product_id\": \"Demo Product\",\n              \"date_create\": \"2014-09-22T19:25:25+04:00\",\n              \"date_next_charge\": \"2014-10-22T19:25:25+04:00\",\n              \"currency\": \"USD\",\n              \"amount\": 9.99\n          },\n          \"total\": {\n              \"currency\": \"USD\",\n              \"amount\": 200\n          },\n          \"promotions\": [{\n              \"technical_name\": \"Demo Promotion\",\n              \"id\": 853\n          }],\n          \"coupon\": {\n              \"coupon_code\": \"ICvj45S4FUOyy\",\n              \"campaign_code\": \"1507\"\n          }\n      },\n      \"transaction\": {\n          \"id\": 1,\n          \"external_id\": 1,\n          \"payment_date\": \"2014-09-24T20:38:16+04:00\",\n          \"payment_method\": 1,\n          \"payment_method_name\": \"PayPal\",\n          \"payment_method_order_id\": 1234567890123456789,\n          \"dry_run\": 1,\n          \"agreement\": 1\n      },\n      \"payment_details\": {\n          \"payment\": {\n              \"currency\": \"USD\",\n              \"amount\": 230\n          },\n          \"vat\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 20\n          },\n          \"sales_tax\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 0\n          },\n          \"direct_wht\": {\n              \"currency\": \"USD\",\n              \"amount\": 0,\n              \"percent\": 0\n          },\n          \"payout_currency_rate\": \"1\",\n          \"country_wht\": {\n              \"currency\": \"USD\",\n              \"amount\": 2,\n              \"percent\": 10\n          },\n          \"user_acquisition_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 2,\n              \"percent\": 1\n          },\n          \"payout\": {\n              \"currency\": \"USD\",\n              \"amount\": 200\n          },\n          \"xsolla_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 10\n          },\n          \"payment_method_fee\": {\n              \"currency\": \"USD\",\n              \"amount\": 20\n          },\n          \"repatriation_commission\": {\n              \"currency\": \"USD\",\n              \"amount\": 10\n          }\n      }\n    },\n    \"custom_parameters\": {\n        \"parameter1\": \"value1\",\n        \"parameter2\": \"value2\"\n        }\n    }"
          }
        ]
      }
    },
    "successful-order-payment-separate": {
      "post": {
        "description": "엑솔라는 다음 조건이 충족되면 지정된 URL로 <code>order_paid</code> 웹훅을 전송합니다.\n1. 사용자가 주문을 성공적으로 결제했습니다.\n2. 엑솔라는 [결제](/ko/webhooks/operation/payment/) 웹훅이 성공적으로 처리되었다는 응답을 받았습니다.\n\n<code>order_paid</code> 웹훅에는 구매한 아이템 및 거래 세부 정보에 대한 정보가 포함되어 있습니다.\n\n다음의 경우 <code>order_paid</code> 웹훅이 전송되지 않습니다.\n* 결제에 실패했습니다. 결제 실패 예시:\n  * 결제 양식이 열렸지만 사용자가 주문을 결제하지 않았습니다.\n  * 결제창이 열렸으나 결제 중 오류가 발생했습니다.\n* [결제](/ko/webhooks/operation/payment/) 웹훅을 성공적으로 처리했다는 응답을 받지 못했습니다.\n\n<code>order_paid</code> 웹훅의 처리 시간은 3초 이내로 하는 것이 좋습니다.\n\n<b>응답</b> 섹션에서 예상 답변을 볼 수 있습니다. 다른 응답 코드를 사용할 수도 있습니다. 응답 코드 및 자동 결제 환불 기능 연결에 \n따른 엑솔라 측의 웹훅 처리 로직은 다음과 같습니다.\n\n<table>\n    <thead>\n    <tr>\n        <th>응답 코드</th>\n        <th>자동 결제 환불이 비활성화됨(기본값)</th>\n        <th>자동 결제 환불이 비활성화됨</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td><code>400</code>, <code>401</code>, <code>402</code>, <code>403</code>, <code>404</code>, <code>409</code>, <code>422</code>, <code>415</code></td>\n        <td>작업 없음</td>\n        <td>사용자에게 자동 환불</td>\n    </tr>\n    <tr>\n        <td><code>200</code>, <code>201</code>, <code>204</code></td>\n        <td>작업 없음</td>\n        <td>작업 없음</td>\n    </tr>\n    <tr>\n        <td>웹훅에 다른 코드 또는 응답 없음</td>\n        <td>5분 간격으로 2번, 15분 간격으로 7번, 60분 간격으로 10번 등 지정한 시간 간격으로 웹훅을 여러 번 전송합니다. </td>\n        <td>5분 간격으로 2번, 15분 간격으로 7번, 60분 간격으로 10번 등 지정한 시간 간격으로 웹훅을 여러 번 전송합니다. 모든 웹훅을 전송해도 응답을 성공적으로 받지 못하면 사용자에게 환불이 자동으로 이루어집니다.</td>\n    </tr>\n    </tbody>\n</table>\n\n자동 환불 기능을 연결하려면 고객 성공 관리자에게 문의하거나 csm@xsolla.com으로 이메일 전송하십시오.\n",
        "operationId": "successful-order-payment-separate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "추가 정보입니다.",
                    "type": "object"
                  },
                  "items": {
                    "description": "사용자가 구매한 아이템 목록입니다.\n\n배열에 포함된 매개 변수 집합은 웹훅 버전에 따라 다릅니다. 버전 2에는 `is_free`, `is_bonus` 및 \n`is_bundle_content`와 같은 추가 매개 변수가 포함되어 있습니다. 버전을 전환하려면 [웹훅 \n설정](/ko/api/igs/operation/update-webhook/) API 호출에 대한 정보 업데이트에서 `version` 매개 변수 \n번호를 전달하십시오.\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "아이템 수량에 따른 총 비용입니다.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "아이템 특성 및 값이 포함된 JSON 개체입니다.",
                              "type": "object"
                            },
                            "is_pre_order": {
                              "description": "`true`이면 항목이 사전 판매됩니다.",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "아이템 수량.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order"
                          ],
                          "title": "버전 = 1",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "amount": {
                              "description": "아이템 수량에 따른 총 비용입니다.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "아이템 특성 및 값이 포함된 JSON 개체입니다.",
                              "type": "object"
                            },
                            "is_bonus": {
                              "description": "`true`이면 항목이 보너스입니다.",
                              "type": "boolean"
                            },
                            "is_bundle_content": {
                              "description": "`true`이면 항목이 번들에 포함됩니다.",
                              "type": "boolean"
                            },
                            "is_free": {
                              "description": "`true`이면 아이템이 무료입니다.",
                              "type": "boolean"
                            },
                            "is_pre_order": {
                              "description": "`true`이면 항목이 사전 판매됩니다.",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "아이템 수량.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order",
                            "is_free",
                            "is_bonus",
                            "is_bundle_content"
                          ],
                          "title": "버전 = 2",
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "order": {
                    "description": "주문에 대한 정보입니다.",
                    "properties": {
                      "amount": {
                        "description": "선택한 통화를 기준으로 한 장바구니의 총 비용입니다.",
                        "type": "string"
                      },
                      "comment": {
                        "description": "주문에 대한 사용자의 코멘트.",
                        "nullable": true,
                        "type": "string"
                      },
                      "coupons": {
                        "description": "적용된 쿠폰. 쿠폰을 적용되지 않았으면 배열이 돌아오지 않습니다.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "적용된 쿠폰 코드.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "외부 ID.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "currency": {
                        "description": "주문 통화. 가상 화폐는 SKU를 사용하고 실제 화폐는 3글자 [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) 코드를 사용합니다.",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "엑솔라 측에서 사용자 주문의 고유 식별자입니다.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "실질 화폐 결제 인보이스 ID. 인게임 재화 결제 또는 무료 아이템은 `null` 값을 사용합니다.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "결제 모드. 실제 결제에는 `default`를 사용합니다. 테스트 결제에는 `sandbox`를 사용합니다.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "결제 플랫폼. `xsolla` 값은 엑솔라를 통한 결제에 사용됩니다. 기타 결제는 게임 퍼블리싱 플랫폼의 이름에 해당하는 값을 사용합니다.",
                        "enum": [
                          "xsolla",
                          "playstation_network",
                          "xbox_live",
                          "pc_standalone",
                          "nintendo_shop",
                          "google_play",
                          "app_store_ios",
                          "android_standalone",
                          "ios_standalone",
                          "android_other",
                          "ios_other",
                          "pc_other"
                        ],
                        "nullable": true,
                        "type": "string"
                      },
                      "promocodes": {
                        "description": "적용된 프로모션 코드. 프로모션 코드가 적용되지 않았으면 배열이 돌아오지 않습니다.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "적용된 프로모션 코드의 코드.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "외부 ID.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "promotions": {
                        "$ref": "#/components/schemas/order.promotions"
                      },
                      "status": {
                        "description": "주문 상태.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "mode",
                      "currency_type",
                      "currency",
                      "amount",
                      "status",
                      "platform",
                      "comment",
                      "invoice_id",
                      "promotions"
                    ],
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 정보.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "description": "사용자 이메일 주소.",
                        "type": "string"
                      },
                      "external_id": {
                        "description": "사용자 ID.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "external_id",
                      "email"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "items",
                  "order",
                  "user"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "성공적인 처리 표시를 반환합니다."
          },
          "400": {
            "description": "제공된 정보에 오류가 있는 경우 반환합니다(예: 필수 매개변수 누락, 인증 실패 등)."
          }
        },
        "summary": "주문 결제 성공(결제 및 거래 세부 정보 없음)",
        "tags": [
          "separate-webhooks"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \\\n-d '{\n    \"notification_type\": \"order_paid\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\":\n          {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": \"[null]\",\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"gc_user@xsolla.com\",\n      \"country\": \"US\"\n    }\n\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-length: 258\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n\n{\n    \"notification_type\": \"order_paid\",\n    \"items\": [\n      {\n        \"sku\": \"com.xsolla.v.item_1\",\n        \"type\": \"virtual_good\",\n        \"is_pre_order\": false,\n        \"quantity\": 3,\n        \"amount\": \"1000\",\n        \"promotions\": [\n          {\n            \"amount_without_discount\": \"6000\",\n            \"amount_with_discount\": \"5000\",\n            \"sequence\": 1\n          },\n          {\n            \"amount_without_discount\": \"5000\",\n            \"amount_with_discount\": \"4000\",\n            \"sequence\": 2\n          }\n        ],\n        \"custom_attributes\":\n          {\n            \"purchased\": 0,\n            \"attr\": \"value\"\n          }\n      },\n      {\n        \"sku\": \"com.xsolla.v.item_new_1\",\n        \"type\": \"bundle\",\n        \"is_pre_order\": false,\n        \"quantity\": 1,\n        \"amount\": \"1000\",\n        \"promotions\": []\n      },\n      {\n        \"sku\": \"com.xsolla.gold_1\",\n        \"type\": \"virtual_currency\",\n        \"is_pre_order\": false,\n        \"quantity\": 1500,\n        \"amount\": \"[null]\",\n        \"promotions\": []\n      }\n    ],\n    \"order\": {\n      \"id\": 1,\n      \"mode\": \"default\",\n      \"currency_type\": \"virtual\",\n      \"currency\": \"sku_currency\",\n      \"amount\": \"2000\",\n      \"status\": \"paid\",\n      \"platform\": \"xsolla\",\n      \"comment\": null,\n      \"invoice_id\": \"1\",\n      \"promotions\": [\n        {\n          \"amount_without_discount\": \"4000\",\n          \"amount_with_discount\": \"2000\",\n          \"sequence\": 1\n        }\n      ],\n      \"promocodes\": [\n        {\n          \"code\": \"promocode_some_code\",\n          \"external_id\": \"promocode_sku\"\n        }\n      ],\n      \"coupons\": [\n        {\n          \"code\": \"WINTER2021\",\n          \"external_id\": \"coupon_sku\"\n        }\n      ]\n    },\n    \"user\": {\n      \"external_id\": \"id_xsolla_login_1\",\n      \"email\": \"gc_user@xsolla.com\",\n      \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    },
    "updated-subscription": {
      "post": {
        "description": "정기 결제의 일부 매개 변수(`plan_id`, `date_next_charge`)가 변경된 경우, 그리고 정기 결제가 갱신될 때마다 엑솔라는 `update_subscription` 유형이 포함된 웹훅을 웹훅 URL로 전송합니다.",
        "operationId": "updated-subscription",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체)입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "subscription": {
                    "description": "정기결제 세부 정보(오브젝트).",
                    "properties": {
                      "date_next_charge": {
                        "$ref": "#/components/schemas/subscription.date_next_charge"
                      },
                      "plan_id": {
                        "$ref": "#/components/schemas/subscription.plan_id"
                      },
                      "product_id": {
                        "$ref": "#/components/schemas/subscription.product_id"
                      },
                      "subscription_id": {
                        "$ref": "#/components/schemas/subscription.subscription_id"
                      },
                      "tags": {
                        "$ref": "#/components/schemas/subscription.tags"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체)입니다.",
                    "properties": {
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "업데이트된 정기결제",
        "tags": [
          "subscriptions"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n        \"notification_type\": \"update_subscription\",\n        \"settings\": {\n          \"project_id\": 18404,\n          \"merchant_id\": 2340\n        },\n        \"user\": {\n            \"id\": \"1234567\",\n            \"name\": \"John Smith\"\n        },\n        \"subscription\": {\n            \"plan_id\": \"b5dac9c8\",\n            \"subscription_id\": \"10\",\n            \"product_id\": \"Demo Product\",\n            \"date_next_charge\": \"2015-01-22T19:25:25+04:00\"\n        }\n    }'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'update_subscription',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'user' => array(\n        'id' => '1234567',\n        'name' => 'John Smith'\n    ),\n    'subscription' => array(\n        'plan_id' => 'b5dac9c8',\n        'subscription_id' => '10',\n        'product_id' => 'Demo Product',\n        'date_next_charge' => '2015-01-22T19:25:25+04:00'\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"update_subscription\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\"\n    },\n    \"subscription\": {\n        \"plan_id\": \"b5dac9c8\",\n        \"subscription_id\": \"10\",\n        \"product_id\": \"Demo Product\",\n        \"date_next_charge\": \"2015-01-22T19:25:25+04:00\"\n    }\n}"
          }
        ]
      }
    },
    "user-search": {
      "post": {
        "description": "<nt>Public User ID</nt>는 <nt>User ID</nt>와 달리 사용자를 고유하게 식별하고 사용자에게 알려진 매개 변수입니다(<nt>Public User ID</nt>는 이메일, 화면 이름 등일 수 있음). 엑솔라는 게임 스토어 외부(예: 현금 키오스크를 통한 구매 등)에서 구매가 이루어질 때 `user_search` 유형이 포함된 웹훅을 전송합니다.",
        "operationId": "user-search",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체)입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체)입니다.",
                    "properties": {
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "public_id": {
                        "$ref": "#/components/schemas/user.public_id"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "user"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "사용자 검색",
        "tags": [
          "user-validation"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n    \"notification_type\": \"user_search\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"public_id\": \"email@example.com\"\n    }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'user_search',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'user' => array(\n        'public_id' => 'email@example.com'\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"user_search\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"public_id\": \"email@example.com\"\n    }\n}"
          }
        ]
      }
    },
    "user-validation": {
      "post": {
        "description": "엑솔라는 사용자가 게임에 등록되어 있는지 확인하기 위해 `user_validation` 유형이 포함된 웹훅을 웹훅 URL로 전송합니다. 이 \n요청은 결제 프로세스의 일부이며 여러 번 전송됩니다.\n\n* 사용자가 결제 UI에서 결제 방법을 선택한 경우\n* 사용자가 결제 양식에 데이터를 입력한 경우(예: PayPal을 통해 결제할 경우 은행 카드 데이터 또는 우편번호)\n* 사용자가 **지금 지불**을 클릭하여 결제를 진행하는 경우\n* 결제 프로세스가 완료되고 거래 상태가 `done`로 변경되는 경우\n\n어떤 결제 방법으로 지불을 진행하여도 요청이 전송됩니다.\n\n관리자 페이지에 웹훅 URL을 저장하면 웹훅에서 자세한 정보를 수신할 수 있는 권한을 부여할 수 있습니다. 이렇게 하려면 <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">프로젝트 설정 \n&gt;웹훅&gt; 고급 설정</a> 섹션의 관리자 페이지에서 필요한 토글을 활성화로 설정하십시오.\n\n<div class=\"note\">\n<p><strong>참고</strong></p>\n<p>2025년 1월 22일 또는 그 이전에 관리자 페이지에 등록한 경우, <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">프로젝트 설정 &gt;웹훅 &gt; 테스트 &gt; 결제 &gt; 고급 설정</a> 섹션에서 토글을 찾을 수 있습니다.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>토글</th>\n        <th>설명</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>민감한 데이터 없이 필수 사용자 매개 변수만 전송</td>\n        <td><p>사용자에 대한 다음 정보만 웹훅에서 전달됩니다.</p><ul><li>ID</li><li>국가</li></ul></td>\n    </tr>\n    <tr>\n        <td>사용자 정의 매개 변수 전송</td>\n        <td><a href=\"/ko/api/pay-station/operation/create-token/\">사용자 정의 토큰 매개 변수</a> 관련 정보가 웹훅에서 전달됩니다.</td>\n    </tr>\n</tbody>\n</table>\n",
        "operationId": "user-validation",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정(개체)입니다.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항(개체)입니다.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "$ref": "#/components/schemas/user.email"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      },
                      "ip": {
                        "$ref": "#/components/schemas/user.ip"
                      },
                      "name": {
                        "$ref": "#/components/schemas/user.name"
                      },
                      "phone": {
                        "$ref": "#/components/schemas/user.phone"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type"
                ]
              }
            }
          }
        },
        "responses": {
          "204": {
            "$ref": "#/components/responses/204"
          },
          "400": {
            "$ref": "#/components/responses/400"
          },
          "500": {
            "$ref": "#/components/responses/500"
          }
        },
        "summary": "사용자 유효성 검사",
        "tags": [
          "user-validation"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \\\n-d '{\n    \"notification_type\":\"user_validation\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    }\n}'"
          },
          {
            "label": "PHP",
            "lang": "PHP",
            "source": "<?php\n\n$request = array(\n    'notification_type' => 'user_validation',\n    'settings' => array(\n      'project_id' => 18404,\n      'merchant_id' => 2340\n    ),\n    'user' => array(\n        'ip' => '127.0.0.1',\n        'phone' => '18777976552',\n        'email'=> 'email@example.com',\n        'id'=> '1234567',\n        'country' => 'US'\n    )\n);"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\nauthorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f\n\n{\n    \"notification_type\": \"user_validation\",\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": \"1234567\",\n        \"name\": \"John Smith\",\n        \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    },
    "user-validation-in-webshop": {
      "post": {
        "description": "엑솔라는 사용자가 게임에 존재하는지 확인하기 위해 웹샵 사이트에서 웹훅을 전송합니다. 웹훅이 다음 IP 주소 '34.102.38.178'로부터 전송되었습니다.\n<div class=\"note\"><strong>참고</strong> <br><br>\n웹훅은 웹샵 솔루션에서 사용자 확인에만 사용됩니다. 웹사이트 빌더에서 웹훅을 구성하는 방법에 대한 자세한 정보는 <a target=\"_blank\" href=\"https://developers.xsolla.com/ko/solutions/web-shop/authentication-and-analytics/set-up-authentication/\">지침</a>을 참조해 주세요.</div>",
        "operationId": "user-validation-in-webshop",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "settings": {
                    "description": "사용자 정의 프로젝트 설정 관련 값.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "사용자 세부 사항 관련 값.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "id": {
                        "$ref": "#/components/schemas/user.id"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "user"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "attributes": [
                    {
                      "key": "level",
                      "value": "2"
                    },
                    {
                      "key": "register_country",
                      "value": "AE"
                    }
                  ],
                  "removingKeys": [
                    "company"
                  ],
                  "user": {
                    "appPlayerId": "cuid12345",
                    "id": "1234567890",
                    "name": "test-name",
                    "picture": "https://example.com"
                  }
                },
                "schema": {
                  "properties": {
                    "attributes": {
                      "description": "맞춤 설정에 사용되는 사용자 특성. 자세한 정보는 <a target=\"_blank\" href=\"https://developers.xsolla.com/ko/doc/login/features/user-attributes/#login_features_user_attributes\">문서</a>를 참조하세요.",
                      "items": {
                        "properties": {
                          "key": {
                            "description": "특성 이름.",
                            "type": "string"
                          },
                          "value": {
                            "description": "특성 값."
                          }
                        },
                        "required": [
                          "key",
                          "value"
                        ]
                      },
                      "type": "array"
                    },
                    "removingKeys": {
                      "description": "삭제하려는 특성의 목록입니다. `attributes` 매개변수에서 동일한 특성을 지정하면 삭제되지 않습니다.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "user": {
                      "description": "사용자 세부 사항 관련 값.",
                      "properties": {
                        "appPlayerId": {
                          "$ref": "#/components/schemas/appPlayerId"
                        },
                        "id": {
                          "description": "사용자 ID.",
                          "type": "string"
                        },
                        "name": {
                          "description": "사용자 이름.",
                          "type": "string"
                        },
                        "picture": {
                          "description": "사용자 아바타에 대한 링크.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "id"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "user"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "사용자에 대한 정보를 반환."
          },
          "404": {
            "description": "사용자를 찾을 수 없습니다."
          }
        },
        "summary": "웹 상점에서 사용자 유효성 검사",
        "tags": [
          "user-validation"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-d '{\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"id\": \"1234567\",\n        \"country\": \"US\"\n    }\n}'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost: your.hostname\naccept: application/json\ncontent-type: application/json\ncontent-length: 240\n\n{\n    \"settings\": {\n      \"project_id\": 18404,\n      \"merchant_id\": 2340\n    },\n    \"user\": {\n        \"id\": \"1234567\",\n        \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "notification_type": {
        "description": "알림 유형.",
        "type": "string"
      },
      "payment_account.country": {
        "description": "결제 계정의 국가입니다. 예를 들어 카드를 발급한 은행의 국가 또는 PayPal 계정을 생성할 때 지정한 국가입니다. [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)에 따른 2자리 대문자 국가 코드입니다.",
        "type": "string"
      },
      "payment_account.id": {
        "description": "결제 계정 ID.",
        "type": "string"
      },
      "payment_account.name": {
        "description": "결제 시스템의 결제 계정 명칭(예: 결제 카드 번호, 이메일).",
        "type": "string"
      },
      "payment_account.payment_method": {
        "description": "결제 수단의 ID입니다.",
        "type": "integer"
      },
      "payment_account.type": {
        "description": "결제 계정 유형(예: 카드, PayPal)",
        "type": "string"
      },
      "settings.merchant_id": {
        "description": "판매자 ID입니다.",
        "type": "integer"
      },
      "settings.project_id": {
        "description": "프로젝트 ID. 이 매개 변수는 [관리자 페이지](https://publisher.xsolla.com/)의 프로젝트 이름 옆에서 확인할 수 있습니다.",
        "type": "integer"
      },
      "user.country": {
        "description": "사용자의 국가. [ISO 3166-1 alpha-2 standard](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)에 따른 2자로 된 국가 코드를 사용합니다.",
        "type": "string"
      },
      "user.email": {
        "description": "사용자 이메일.",
        "type": "string"
      },
      "user.id": {
        "description": "사용자 ID.",
        "type": "string"
      },
      "user.ip": {
        "description": "유저 IP 주소입니다.",
        "type": "string"
      },
      "user.name": {
        "description": "사용자 이름.",
        "type": "string"
      },
      "user.zip": {
        "description": "우편번호.",
        "type": "string"
      },
      "subscription.date_create": {
        "description": "정기결제 생성 날짜입니다. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)에 따른 날짜 및 시간입니다.",
        "type": "string"
      },
      "subscription.date_end": {
        "description": "정기결제 종료 날짜입니다. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)에 따른 날짜 및 시간입니다.",
        "type": "string"
      },
      "subscription.plan_id": {
        "description": "요금제 ID(API를 통해 생성된 경우, 외부 ID).",
        "type": "string"
      },
      "subscription.product_id": {
        "description": "상품 ID(액세스 토큰으로 보낸 경우)입니다.",
        "type": "string"
      },
      "subscription.subscription_id": {
        "description": "엑솔라 시스템 내의 정기결제 ID입니다.",
        "type": "integer"
      },
      "subscription.tags": {
        "description": "플랜 태그.",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "subscription.date_next_charge": {
        "description": "다음 충전 날짜입니다. [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)에 따른 날짜 및 시간입니다.",
        "type": "string"
      },
      "subscription.is_gift": {
        "description": "정기 결제를 선물했는지 여부입니다. 이 매개 변수는 값이 `true`인 경우에만 전달됩니다.",
        "type": "boolean"
      },
      "dispute-date": {
        "description": "[RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) 표준에 따른 분쟁 시작 날짜.",
        "type": "string"
      },
      "dispute-reason": {
        "description": "분쟁을 시작한 이유. 이유 그룹에 대한 설명은 [문서](/ko/payment-ui-and-flow/anti-fraud/chargeback/#payments_chargeback_reasons)를 참조해 주세요.",
        "enum": [
          "non_receipt",
          "not_as_described",
          "duplicate_processing",
          "paid_by_other_means",
          "incorrect_amount",
          "credit_not_processed",
          "general",
          "fraud",
          "cancelled_recurring",
          "cancelled_merchandise",
          "late_presentment",
          "no_authorization",
          "problem_with_remittance",
          "other"
        ],
        "type": "string"
      },
      "dispute-status": {
        "description": "분쟁 상태.",
        "enum": [
          "new",
          "accepted",
          "no_actions_required",
          "won",
          "lost"
        ],
        "type": "string",
        "x-enumDescriptions": {
          "accepted": "<b>수락됨</b>",
          "lost": "<b>분실</b>",
          "new": "<b>신규</b>",
          "no_actions_required": "<b>진행 중</b>",
          "won": "<b>승소</b>"
        }
      },
      "dispute-type": {
        "description": "분쟁 유형.",
        "enum": [
          "1st_time_chargeback",
          "2nd_time_chargeback",
          "arbitration",
          "retrieval",
          "representment",
          "chargeback_reversal",
          "representment_reversal",
          "reimbursement",
          "dispute",
          "chargeback",
          "claim",
          "reimbursement_reversal",
          "inquiry",
          "other"
        ],
        "type": "string",
        "x-enumDescriptions": {
          "1st_time_chargeback": "1차 지불 거절.",
          "2nd_time_chargeback": "2차 지불 거절(사전 중재).",
          "arbitration": "1차 지불 거절 및 2차 지불 거절이 거부된 경우 발급 은행과 판매자 간의 분쟁 해결.",
          "chargeback": "1차 지불 거절.",
          "chargeback_reversal": "지불 거절이 취소되었습니다.",
          "claim": "PayPal에서 고객과 판매자 간의 분쟁.",
          "dispute": "카드 소유자가 은행에 결제 세부 정보를 요청했습니다.",
          "inquiry": "카드 소유자가 은행에 결제 세부 정보를 요청했습니다.",
          "other": "다른 유형에 포함되지 않는 지불 거절 유형에 사용됨.",
          "reimbursement": "환불이 완료되었습니다.",
          "reimbursement_reversal": "지불 거절이 취소되었습니다.",
          "representment": "지불 거절 관리 팀에서 증거를 결제 시스템으로 보냈습니다.",
          "representment_reversal": "지불 거절이 취소되었습니다.",
          "retrieval": "카드 소유자가 은행에 결제 세부 정보를 요청했습니다."
        }
      },
      "date-create": {
        "description": "결제일.",
        "type": "string"
      },
      "external-id": {
        "description": "거래 외부 ID. 자세한 내용은 [FAQs](/ko/doc/pay-station/references/faq/#faq_payments_q_new_transaction_external_id)를 참조해 주세요.",
        "type": "string"
      },
      "transaction-id": {
        "description": "트랜잭션 ID.",
        "type": "integer"
      },
      "dispute-payment-method": {
        "description": "결제 방식.",
        "enum": [
          "credit_debit_card",
          "paypal"
        ],
        "type": "string",
        "x-enumDescriptions": {
          "credit_debit_card": "신용 카드 또는 직불 카드",
          "paypal": "PayPal"
        }
      },
      "transaction-total-amount": {
        "description": "결제 금액입니다.",
        "format": "float",
        "type": "number"
      },
      "currency": {
        "description": "통화. [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)에 따른 3자리 통화 코드입니다.",
        "type": "string"
      },
      "amount-float": {
        "description": "구매 금액입니다.",
        "format": "float",
        "type": "number"
      },
      "items.promotions": {
        "description": "주문의 특정 아이템에 프로모션을 적용했습니다.\n배열은 다음의 경우에 반환됩니다.\n  - 특정 아이템에 대한 할인 프로모션이 구성되어 있는 경우.\n  - **선택한 아이템에 대한 할인** 설정이 있는 프로모션 코드가 적용된 경우.\n\n아이템 수준 프로모션이 적용되지 않으면 빈 배열이 반환됩니다.",
        "items": {
          "properties": {
            "amount_with_discount": {
              "description": "할인이 적용된 아이템의 총 비용.",
              "type": "string"
            },
            "amount_without_discount": {
              "description": "할인이 미적용된 아이템의 총 비용.",
              "type": "string"
            },
            "sequence": {
              "description": "프로모션 신청 순서입니다.",
              "type": "integer"
            }
          },
          "type": "object"
        },
        "type": "array"
      },
      "items.sku": {
        "description": "아이템의 고유 ID입니다. `game_key` 유형의 아이템은 `sku_drm` 형식의 값을 사용합니다.",
        "type": "string"
      },
      "items.type": {
        "description": "아이템 유형.\n 인게임 재화 패키지를 포함한 `bundle` 유형의 아이템은 `items` 어레이가 표시됩니다:\n  - 번들 또는 인게임 재화 패키지의 매개 변수\n  - 번들에 포함된 아이템 또는 패키지에 포함된 화폐\n  \n [로열티 포인트](/ko/solutions/loyalty-as-service/) 작업에서 사용하는 `value_point` 유형(포인트를 사용하거나 지급하는 경우).",
        "enum": [
          "virtual_good",
          "virtual_currency",
          "game_key",
          "bundle",
          "value_point"
        ],
        "type": "string"
      },
      "currency-type": {
        "description": "결제 통화 유형. 무료 주문의 경우 `unknown` 값이 지정됩니다.",
        "enum": [
          "real",
          "virtual",
          "unknown",
          "loyalty_point"
        ],
        "type": "string",
        "x-enumDescriptions": {
          "loyalty_point": "로열티 포인트",
          "real": "실제 통화",
          "unknown": "무료 주문",
          "virtual": "인게임 재화"
        }
      },
      "order.promotions": {
        "description": "전체 주문에 프로모션을 적용했습니다.\n배열은 다음의 경우에 반환됩니다.\n  - 프로모션이 총 구매 금액에 영향을 미치는 경우(예: **구매 할인** 설정이 적용된 프로모션 코드).\n  - 구매에 할인이 적용되지 않지만, 보너스 아이템이 주문에 추가된 경우. 이 경우, 할인이 적용된 가격([amount_with_discount](/ko/webhooks/#operation/order-cancellation!path=order/promotions/amount_with_discount&t=request)) 및 할인이 적용되지 않은 가격([amount_without_discount](/ko/webhooks/#operation/order-cancellation!path=order/promotions/amount_without_discount&t=request))은 할인이 적용되지 않으므로 반환되고 동일하게 유지됩니다.\n\n주문 수준 프로모션이 적용되지 않으면 빈 배열이 반환됩니다.",
        "items": {
          "properties": {
            "amount_with_discount": {
              "description": "할인이 적용된 아이템의 총 비용.",
              "type": "string"
            },
            "amount_without_discount": {
              "description": "할인이 미적용된 아이템의 총 비용.",
              "type": "string"
            },
            "sequence": {
              "description": "프로모션 신청 순서입니다.",
              "type": "integer"
            }
          },
          "type": "object"
        },
        "type": "array"
      },
      "user.phone": {
        "description": "유저 전화 번호입니다(국제 형식).",
        "type": "string"
      },
      "order": {
        "description": "주문에 대한 정보가 포함된 개체입니다. 이 정보를 받으려면 **프로젝트 설정 &gt; 웹훅 &gt; 고급 설정** 섹션의 [관리자 페이지](https://publisher.xsolla.com/)에서 **웹훅에 주문 개체 추가** 토글을 **온**으로 설정해 주세요.",
        "type": "object"
      },
      "locale": {
        "description": "사용자 언어입니다. 두 자릿수 소문자 [언어 코드](https://developers.xsolla.com/ko/doc/pay-station/features/localization/)입니다.",
        "type": "string"
      },
      "quantity": {
        "deprecated": true,
        "description": "한 사용자가 구매할 수 있는 아이템 수량입니다. 수량 한도를 설정하려면 `null`을 전달하세요. 아이템을 구매할 수는 없지만 카탈로그에는 표시되도록 하려면 `0`을 전달하세요.\n\n이 매개 변수를 사용하면 구매 한도 정보가 카탈로그에 표시되지 않습니다. 카탈로그에 구매 한도 정보(예: `7/10`)를 표시하려면 `quantity` 대신 `available` 및 `total` 쌍을 전달하세요.",
        "type": "integer"
      },
      "available": {
        "description": "사용자가 구매할 수 있는 남은 아이템 수량입니다.\n\n 카탈로그에 구매 한도 정보(예: `7/10`)를 표시하려면 `available`과 `total` 쌍을 전달하세요.",
        "type": "integer"
      },
      "total": {
        "description": "사용자 한 명이 구매할 수 있는 최대 아이템 수량입니다.\n\n 카탈로그에 구매 한도 정보(예: `7/10`)를 표시하려면 `available`과 `total` 쌍을 전달하세요.",
        "exclusiveMinimum": 0,
        "type": "integer"
      },
      "bundle_content": {
        "description": "카탈로그에 표시할 번들 콘텐츠가 포함된 개체 배열입니다. 개체 배열은 번들 유형 [partner_side_content](https://developers.xsolla.com/ko/api/shop-builder/operation/admin-create-bundle/)에만 사용할 수 있습니다.",
        "items": {
          "properties": {
            "description": {
              "description": "카탈로그에 번들로 표시하기 위한 아이템 설명입니다. 입력하지 않으면`null` 값이 전달됩니다.",
              "maxLength": 255,
              "type": "string"
            },
            "image_url": {
              "description": "카탈로그에 번들로 표시될 아이템 이미지 URL입니다. HTTPS 프로토콜만 지원됩니다. 입력하지 않으면 `null` 값이 전달됩니다.",
              "format": "uri",
              "maxLength": 255,
              "type": "string"
            },
            "name": {
              "description": "카탈로그에 번들의 일부로 표시할 아이템 이름입니다. 입력하지 않으면 빈 문자열이 전달됩니다.",
              "maxLength": 255,
              "type": "string"
            },
            "quantity": {
              "default": 1,
              "description": "번들에 있는 아이템의 수량입니다.",
              "minimum": 1,
              "type": "integer"
            }
          },
          "type": "object"
        },
        "type": "array"
      },
      "date_from": {
        "description": "아이템을 판매할 수 있는 날짜입니다. 형식은 [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) 기준을 따릅니다.",
        "type": "string"
      },
      "date_until": {
        "description": "아이템을 판매할 수 있는 날짜입니다. 형식은 [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) 기준을 따릅니다.",
        "type": "string"
      },
      "description": {
        "description": "카탈로그에 표시할 아이템 설명입니다. 아이템에 저장된 설명을 덮어씁니다.",
        "maxLength": 255,
        "type": "string"
      },
      "image_url": {
        "description": "카탈로그에 표시할 이미지 URL입니다. 아이템에 저장된 이미지 URL을 덮어씁니다. HTTPS 프로토콜만 지원됩니다. URL이 요구 사항에 부합하지 않을 경우 무시됩니다.",
        "format": "uri",
        "maxLength": 255,
        "type": "string"
      },
      "json_attributes": {
        "description": "아이템 속성과 값을 포함하는 JSON 개체입니다. JSON 개체는 아이템에 저장된 [custom_attributes](https://developers.xsolla.com/ko/webhooks/operation/successful-order-payment/#!path=items/0/custom_attributes&t=request)를 아이템에 저장합니다. JSON이 요구 사항에 부합하지 않거나 최대 길이보다 길면 무시됩니다.",
        "format": "json",
        "maxLength": 500,
        "type": "object"
      },
      "name": {
        "description": "카탈로그에 표시할 아이템 이름입니다. 아이템에 저장된 이름을 덮어씁니다.",
        "maxLength": 255,
        "type": "string"
      },
      "sku": {
        "description": "게시자 계정에서 지정한 아이템의 고유 ID입니다. `sku` 또는 `item_id`를 전달해야 합니다.",
        "type": "string"
      },
      "item_id": {
        "description": "엑솔라 측의 고유 아이템 ID입니다. `sku` 또는 `item_id`를 전달해야 합니다.",
        "type": "integer"
      },
      "user.public_id": {
        "description": "공개 사용자 ID입니다.",
        "type": "string"
      },
      "appPlayerId": {
        "description": "앱 소유자가 사용자 등록 시 부여한 사용자 ID(고객 사용자 ID).\n<div lang=\"en\" class=\"note\"><strong>참고</strong><br><br>엑솔라는 이 데이터를 결제 토큰을 얻기 위한 호출의 <code>custom_parameters</code> 개체로 전달합니다.</div>",
        "type": "string"
      }
    },
    "responses": {
      "204": {
        "description": "성공적인 처리 표시를 반환합니다."
      },
      "400": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "error": {
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        },
        "description": "제공된 정보에 오류가 있는 경우 반환합니다(예: 필수 매개변수 누락, 인증 실패 등).",
        "x-examples": {
          "application/json": {
            "INCORRECT_AMOUNT": {
              "summary": "Incorrect amount",
              "value": {
                "error": {
                  "code": "INCORRECT_AMOUNT",
                  "message": "Incorrect amount"
                }
              }
            },
            "INCORRECT_INVOICE": {
              "summary": "Incorrect invoice",
              "value": {
                "error": {
                  "code": "INCORRECT_INVOICE",
                  "message": "Incorrect invoice"
                }
              }
            },
            "INVALID_PARAMETER": {
              "summary": "Invalid parameter",
              "value": {
                "error": {
                  "code": "INVALID_PARAMETER",
                  "message": "Invalid parameter"
                }
              }
            },
            "INVALID_SIGNATURE": {
              "summary": "Invalid signature",
              "value": {
                "error": {
                  "code": "INVALID_SIGNATURE",
                  "message": "Invalid signature"
                }
              }
            },
            "INVALID_USER": {
              "summary": "Invalid user",
              "value": {
                "error": {
                  "code": "INVALID_USER",
                  "message": "Invalid user"
                }
              }
            }
          }
        }
      },
      "500": {
        "description": "서버에 일시적인 오류가 있음을 표시하려면 돌아가세요."
      },
      "400-payment": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "error": {
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        },
        "description": "제공된 정보에 오류가 있는 경우 반환됩니다(예: 필수 매개변수 누락, 인증 실패 등). 이 경우 사용자의 돈은 인출되지만 구매는 실패합니다. 환불을 진행하려면 support@xsolla.com으로 엑솔라 고객 지원에 문의해 주세요.",
        "x-examples": {
          "application/json": {
            "INCORRECT_AMOUNT": {
              "summary": "Incorrect amount",
              "value": {
                "error": {
                  "code": "INCORRECT_AMOUNT",
                  "message": "Incorrect amount"
                }
              }
            },
            "INCORRECT_INVOICE": {
              "summary": "Incorrect invoice",
              "value": {
                "error": {
                  "code": "INCORRECT_INVOICE",
                  "message": "Incorrect invoice"
                }
              }
            },
            "INVALID_PARAMETER": {
              "summary": "Invalid parameter",
              "value": {
                "error": {
                  "code": "INVALID_PARAMETER",
                  "message": "Invalid parameter"
                }
              }
            },
            "INVALID_SIGNATURE": {
              "summary": "Invalid signature",
              "value": {
                "error": {
                  "code": "INVALID_SIGNATURE",
                  "message": "Invalid signature"
                }
              }
            },
            "INVALID_USER": {
              "summary": "Invalid user",
              "value": {
                "error": {
                  "code": "INVALID_USER",
                  "message": "Invalid user"
                }
              }
            }
          }
        }
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "사용자 유효성 검사",
      "tags": [
        "user-validation"
      ]
    },
    {
      "name": "결제",
      "tags": [
        "payments"
      ]
    },
    {
      "name": "게임 서비스",
      "tags": [
        "combined-webhooks",
        "separate-webhooks",
        "personalization"
      ]
    },
    {
      "name": "부정 결제 방지",
      "tags": [
        "anti-fraud"
      ]
    },
    {
      "name": "정기 결제",
      "tags": [
        "subscriptions"
      ]
    }
  ]
}