{
  "openapi": "3.1.0",
  "info": {
    "description": "# Основные положения {% #overview %}\n\nВебхуки — это оповещения о происходящих в системе событиях. При наступлении \nопределенного события Xsolla отправляет HTTP-запрос к вашему приложению, в \nкотором передаются данные о событии. Чаще всего отправляется POST-запрос в \nJSON-формате.\n\n<strong>Примеры событий:</strong>\n- взаимодействие пользователя с каталогом товаров;\n- оплата или отмена заказа.\n\nКогда происходит настроенное событие, Xsolla через вебхук оповещает вашу \nсистему об этом. В результате вы можете:\n- пополнить баланс пользователя;\n- выполнить возврат платежа;\n- начислить новые предметы пользователю или списать их;\n- начать предоставление подписки;\n- заблокировать пользователя в случае подозрения в мошенничестве.\n\n<b>Пример работы вебхука обработки платежей:</b>\n\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>Видеоинструкция по интеграции вебхуков Xsolla:</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>Настройка вебхуков при работе с продуктами и решениями Xsolla:</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>Payments</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>Game Sales</td>\n        <td>Опционально</td>\n        <td>Для продажи ключей не требуется валидация пользователя и начисление ему товаров. Вы можете подключить вебхуки, если вы хотите получать информацию о событиях, например об оплате или отмене заказа.<br />Если вы подключите вебхуки, важно обрабатывать все поступающие <a href=\"/ru/webhooks/overview/#section/List-of-required-webhooks\">обязательные вебхуки</a>.\n</td>\n    </tr>\n    <tr>\n        <td>Subscriptions</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>Web Shop</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\">аутентификации пользователей через Xsolla Login</a>.</li>\n          </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>Digital Distribution Hub</td>\n        <td>Обязательно</td>\n        <td>\n          <ul>\n            <li>Валидация пользователей.</li>\n            <li>Связывание ID транзакции со стороны Xsolla с ID транзакции в вашей системе.</li>\n            <li>Передача дополнительных параметров транзакции в заказе.</li>\n            <li>Начисление купленных товаров пользователю и списание их в случае отмены заказа.</li>\n          </ul>\n          <p>Подробная информация по настройке вебхуков для Digital Distribution Hub приведена в <a href=\"/solutions/ddh/#integration_guide_ddh_webhook\">инструкции</a>.</p>\n        </td>\n    </tr>\n    <tr>\n        <td>Login</td>\n        <td>Опционально</td>\n        <td>\n          <p>Получение информации о наступлении события:</p>\n          <ul>\n            <li>регистрация/ авторизация пользователей;</li>\n            <li>подтверждение пользователем email-адреса;</li>\n            <li>привязка аккаунта социальной сети пользователя.</li>\n          </ul>\n          <p>Подробная информация о настройке вебхуков приведена в <a href=\"/api/login/operation/add-webhook-for-event/\">документации Login</a>.</p>\n        </td>\n    </tr>\n</tbody>\n</table>\n\n# Xsolla Business Accounts {% #business-accounts %}\n\nBusiness Account is the primary tool for configuring Xsolla features, as well \nas for working with analytics and transactions.\n\nXsolla develops tools for different business categories. To simplify \nnavigation, these tools are grouped into separate accounts by target audience:\n\n* [mobile games](https://xsolla.com/for/mobile-games/account/)\n\n* [free-to-play PC games](https://xsolla.com/for/free-to-play-pc/account/)\n\n* [premium PC games](https://xsolla.com/for/premium-pc-games/account/)\n\n* [web games](https://xsolla.com/for/web-games/account/)\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p><p><a href=\"https://publisher.xsolla.com/\">Publisher Account</a> is a legacy tool.</p>\n</div>\n\n# Список обязательных вебхуков {% #list-of-required-webhooks %}\nIf you use products and solutions that require working with webhooks, <a \nhref=\"/webhooks/overview/#section/Set-up-webhooks-in-account\">enable and test \nthe webhooks in your account</a> and <a href=\"/webhooks/overview/#section\n/Webhook-listener\">set up their processing</a>. When specific events occur, \nwebhooks are sent sequentially. Therefore, if you do not process one of the \nwebhooks, subsequent webhooks will not be sent. The list of required webhooks \nis presented below.\n\n## Store и Payments {% #store-and-payments %}\nНа стороне Xsolla настроено 2 варианта отправки вебхуков при покупке и возврате \nтоваров на сайте — информация с данными платежа и транзакции и информация о \nкупленных товарах может приходить отдельно или может быть объединена в один \nвебхук.\n\n<b>Получение информации в объединенных вебхуках:</b>\n\nIf you registered in the [account](#business-accounts) after January 22, 2025, \nyou receive all the information in the <a href=\"/webhooks/operation/successful-\norder-payment\">Successful payment for order</a> (`order_paid`) and <a \nhref=\"/webhooks/operation/order-cancellation\">Order cancellation</a> \n(`order_canceled`) webhooks. In this case, you do not need to process the <a \nhref=\"/webhooks/operation/payment\">Payment</a> (`payment`) and <a \nhref=\"/webhooks/operation/refund\">Refund</a> (`refund`) webhooks.\n\n<b>Получение информации в отдельных вебхуках:</b>\n\nIf you registered in Publisher Account on or before January 22, 2025, you \nreceive the following webhooks:\n- <a href=\"/webhooks/operation/payment\">Успешный платеж</a> (`payment`) и <a \n  href=\"/webhooks/operation/refund\">Возврат платежа</a> (`refund`) с информацией \n  о данных платежа и детали транзакции.\n- <a href=\"/webhooks/operation/successful-order-payment-separate\">Успешная оплата \n  заказа </a> (`order_paid`) и <a href=\"/webhooks/operation/order-cancellation-\n  separate\">Отмена заказа</a> (`order_canceled`) с информацией о купленных \n  товарах.\n\nВам необходимо обрабатывать все поступающие вебхуки. Для перехода к новому \nварианту с получением объединенных вебхуков обратитесь к персональному \nменеджеру проекта или напишите на <a \nhref=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.\n\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>Информация о купленных товарах. Используйте данные вебхука для списания купленных товаров у пользователя.</td>\n    </tr>\n</tbody>\n</table>\n\nЕсли вы используете <a href=\"/doc/in-game-\nstore/features/personalization\">персонализацию</a> каталога товаров, \nреализованную на стороне вашего приложения, настройте обработку вебхука <a \nhref=\"/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## Subscriptions {% #required-webhooks-subscriptions %}\nДля автоматического управления планами подписок необходимо реализовать \nобработку основных вебхуков:\n- <a href=\"/webhooks/operation/user-validation/\">Проверка существования \n  пользователя</a> (`user_validation`) — отправляется на разных этапах оплаты, \n  чтобы удостовериться, что пользователь зарегистрирован в игре.\n- <a href=\"/webhooks/operation/payment\">Успешный платеж</a> (`payment`) — \n  отправляется, когда заказ оплачен, и содержит информацию о данных платежа и \n  детали транзакции.\n- <a href=\"/webhooks/operation/created-subscription/\">Создание подписки</a> \n  (`create_subscription`) — отправляется, когда был получен ответ об успешной \n  обработке вебхука <a href=\"/webhooks/operation/payment\">Успешный платеж</a> или \n  пользователь приобрел подписку с пробным периодом. Содержит детали купленной \n  подписки и данные пользователя. Используйте данные вебхука для добавления \n  подписки пользователю.\n- <a href=\"/webhooks/operation/updated-subscription/\">Изменение подписки</a> \n  (`update_subscription`) — отправляется при продлении или изменении подписки, \n  когда был получен ответ об успешной обработке вебхука <a \n  href=\"https://developers.xsolla.com/ru/webhooks/operation/payment\">Успешный \n  платеж</a>. Содержит детали купленной подписки и данные пользователя. \n  Используйте данные вебхука для продления подписки пользователю или изменения \n  параметров подписки.\n- <a href=\"/webhooks/operation/refund\">Возврат платежа</a> (`refund`) — \n  отправляется, когда заказ был отменен, и содержит информацию о данных \n  отмененного платежа и детали транзакции.\n- <a href=\"/webhooks/operation/canceled-subscription/\">Отмена подписки</a> \n  (`cancel_subscription`) — отправляется, если был получен ответ об успешной \n  обработке вебхука <a href=\"/webhooks/operation/refund\">Возврат платежа</a> или \n  подписка была отменена по другой причине. Содержит информацию о подписке и \n  данные пользователя. Используйте данные вебхука для списания купленных подписок \n  у пользователя. \n\n# Set up webhooks in account {% #set-up-webhooks-in-account %}\n\n## Общие настройки {% #general-settings %}\n\nЧтобы включить получение вебхуков:\n1. In the project in the [account](#business-accounts) go to the **Settings > \n   Webhooks** section.\n2. В поле <b>Сервер для вебхуков</b> укажите URL-адрес вашего сервера для \n   получения вебхуков в формате `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. Создайте секретный ключ:\n\n<ol><ol type=\"a\">\n<li>В разделе <strong>Secret keys</strong> нажмите <strong>Add key</strong>.</li>\n<li>В открывшемся модальном окне введите название ключа, которое позволит идентифицировать его в общем списке.</li>\n<li>Нажмите <strong>Create key</strong>.</li>\n<li>Нажмите <strong>Copy secret</strong> и сохраните созданный ключ на вашей стороне.</li>\n<li>Нажмите <strong>Done</strong>.</li>\n<li>Подтвердите, что вы сохранили ключ, и нажмите <strong>Ok, close</strong>.</li>\n</ol></ol>\n\n![Добавить \nключ](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/add-key.svg)\n\n<div class=\"notice\">\n<p><strong>Notice</strong></p>\n<p>Key recommendations:<ul>\n<li><strong>Save the generated secret key on your side</strong>. You can view the key in the account only once when it is created.</li>\n<li>Don’t share your secret key with anyone.</li>\n<li>The secret key must be stored on your server and never in binaries or on the front end.</li></ul>\n</p>\n</div>\n\n4. Нажмите **Получать вебхуки**.\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>Notice</strong></p>\n    <p>You can’t simultaneously send webhooks to different URLs. What you can do in the account is specify a URL for testing first, and then replace it with the real one.</p>\n</div>\n\nЧтобы отключить получение вебхуков:\n1. In the project in the account, go to the **Settings > Webhooks** section.\n2. Нажмите <b>Отключить вебхуки</b>.\n\n## Ротация секретных ключей {% #secret-key-rotation %}\n\nРегулярное обновление секретных ключей повышает безопасность вашей интеграции. \nВ одном проекте вы можете создать до 5 секретных ключей, чтобы обеспечить их \nротацию. Для этого:\n\n1. In the **Settings > Webhooks** section, click **Add key**.\n\n![Добавить \nключ](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/add-new-key.svg)\n\n2. В открывшемся модальном окне введите название ключа, которое позволит \n   идентифицировать его в общем списке.\n3. Нажмите **Create key**.\n4. Нажмите **Copy secret** и сохраните созданный ключ на вашей стороне.\n5. Нажмите **Done**.\n6. Подтвердите, что вы сохранили ключ, и нажмите **Ok, close**.\n\n<div class=\"notice\">\n<p><strong>Notice</strong></p>\n<p>Key recommendations:<ul>\n<li><strong>Save the generated secret key on your side</strong>. You can view the key in the account only once when it is created.</li>\n<li>Don’t share your secret key with anyone.</li>\n<li>The secret key must be stored on your server and never in binaries or on the front end.</li></ul>\n</p>\n</div>\n\nВ проекте может быть только один активный секретный ключ. Если вы хотите его \nизменить, нажмите **Set as active** у другого ключа и подтвердите действие. \nПосле успешной миграции на новый ключ мы рекомендуем удалять деактивированные \nключи.\n\n![Изменить активный \nключ](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/activate-key.svg)\n\n## Расширенные настройки {% #advanced-settings %}\n\nFor the webhooks in the <a href=\"/webhooks/overview/#payments-and-\nstore\">Payments and Store</a> section, advanced settings are available. They \nwill automatically appear under the <a href=\"/webhooks/overview/#section/Set-up-\nwebhooks-in-account/General-settings\">General settings</a> block after you \nclick the <b>Enable webhooks</b> button.\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Если расширенные настройки не отображаются, убедитесь, что получение вебхуков подключено в общих настройках и вы находитесь на вкладке <b>Тестирование &gt; Payments and Store</b>.</p>\n</div>\n\nВ этом разделе вы можете настроить получение дополнительной информации в \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>Показывать информацию о транзакциях сохраненными способами оплаты (отображается, если вы зарегистрировались в Личном кабинете до 22 января 2025 г. и получаете отдельные вебхуки).</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>Добавить объект <code>order</code> в вебхук (отображается, если вы зарегистрировались в Личном кабинете до 22 января 2025 г. и получаете отдельные вебхуки).</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>Показывать БИН карты и последние 4 цифры ее номера.</td>\n        <td><p>В вебхуке будет передаваться следующая информация о номере карты:</p><ul><li>первые 6 цифр в параметре <code>card_bin</code>;</li><li>последние 4 цифры в параметре <code>card_suffix</code>.</li></ul></td>\n    </tr>\n    <tr>\n        <td>Показывать бренд карты.</td>\n        <td>Бренд карты, с которой была совершена оплата. Например, Mastercard или Visa.</td>\n    </tr>\n    <tr>\n        <td>Показывать информацию о причине возврата.</td>\n        <td>Детальная информация о причине возврата.</td>\n    </tr>\n    <tr>\n        <td>Показать региональный налог у источника и стоимость каналов привлечения трафика.</td>\n        <td>В вебхуке будут передаваться объекты <code>payment_details.​country_wht</code> и <code>payment_details.​user_acquisition_fee</code>. По умолчанию этот переключатель активирован.</td>\n    </tr>\n    <tr>\n        <td>Отправлять информацию о 3DS.</td>\n        <td>В вебхуке будет передаваться объект cards с данными о прохождении пользователем проверки 3-D Secure.</td>\n    </tr>\n</tbody>\n</table>\n\n![Расширенные \nнастройки](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/advanced-settings.png)\n\n# Test webhooks in account {% #test-webhooks-in-account %}\n\nТестирование вебхуков помогает убедиться в корректной настройке проекта как на \nвашей стороне, так и на стороне Xsolla.\n\nIf webhooks are <a href=\"/webhooks/overview/#section/Set-up-webhooks-in-\naccount\">set up</a> successfully, a webhooks testing section is displayed below \nthe webhooks setup section.\n\n![Раздел \nтестирования](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/testing-section.svg)\n\nThe testing section in the account varies depending on the webhook receiving \noption.\n\nIf you registered in the account after January 22, 2025, you receive combined \nwebhooks:\n\n<table>\n<thead>\n    <tr>\n        <th>Название вкладки для тестирования вебхуков</th>\n        <th>Название и тип вебхука</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><b>Payments and Store</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>Subscriptions</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Если вы зарегистрировались в Личном кабинете до 22 января 2025 г., вы получаете \nотдельные вебхуки:\n\n<table>\n<thead>\n    <tr>\n        <th>Название вкладки для тестирования вебхуков</th>\n        <th>Название и тип вебхука</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><b>Store</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>Payments</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>Subscriptions</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>Это происходит, потому что Xsolla отправляет вебхук с неверной подписью и ожидает, что ваш обработчик ответит <code>4xx</code> HTTP-кодом с указанием кода ошибки <code>INVALID_SIGNATURE</code>.</p>\n<p><a href=\"https://webhook.site/#!/\">webhook.site</a> отправляет <code>200</code> HTTP-код в ответ на все вебхуки, в том числе на вебхук с неверной подписью. Ожидаемый <code>4xx</code> HTTP-код не может быть получен, поэтому в результате тестирования отображается ошибка.</p>\n</div>\n\nДалее описан процесс тестирования для сценария с объединенными вебхуками.\n\n## Payments and Store {% #payments-and-store %}\n\nНа вкладке <b>Payments and Store</b> вы можете протестировать работу следующих \nвебхуков:\n- <a href=\"/webhooks/operation/user-validation/\">Проверка пользователей</a> \n  (`user_validation`)\n- <a href=\"/webhooks/operation/successful-order-payment\">Успешная оплата \n  заказа</a> (`order_paid`)\n- <a href=\"/webhooks/operation/order-cancellation\">Отмена заказа</a> \n  (`order_canceled`)\n\nЧтобы протестировать вебхуки:\n1. В блоке тестирования вебхуков перейдите на вкладку <b>Payments and Store</b>.\n2. In the drop-down list, select the item type. If you haven’t set up this item \n   type in the account yet, click the button to configure it. After creating the \n   item, return to the webhook testing section and proceed to the next step.\n3. Заполните необходимые поля:\n   * **ID пользователя** — при тестировании вы можете указать любую комбинацию букв \n     и цифр.\n   * Укажите произвольное значение в поле **ID заказа Xsolla**.\n   * **ID заявки в Xsolla** — ID транзакции на стороне Xsolla. При тестировании вы \n     можете указать любое числовое значение.\n   * **Invoice ID** — ID транзакции на стороне вашей игры. При тестировании вы \n     можете указать любую комбинацию букв и цифр. Для успешной оплаты это не \n     обязательный параметр, но вы можете передать его, чтобы связать ID транзакции \n     на вашей стороне с ID транзакции на стороне Xsolla.\n   * **Сумма** — сумма платежа. При тестировании вы можете указать любое числовое \n     значение.\n   * **Валюта** — выберите валюту из раскрывающегося списка.\n   * Выберите артикул товара из раскрывающегося списка и укажите его количество. Вы \n     можете выбрать несколько товаров. Для этого нажмите **+** и добавьте товары в \n     новой строке.\n4. Нажмите **Проверить вебхуки**.\n\nНа URL-адрес сервера вебхуков придут вебхуки <a href=\"/webhooks/operation/user-\nvalidation/\">Проверка существования пользователя</a>, <a \nhref=\"/webhooks/operation/successful-order-payment\">Успешная оплата заказа</a> \nи <a href=\"/webhooks/operation/order-cancellation\">Отмена заказа</a> с \nуказанными данными. Ниже кнопки <b>Проверить вебхук</b> отобразятся результаты \nтестирования каждого типа вебхука.\n\nIf the **Use public user ID** box is checked in your account in the **Settings \n> Integration settings** section, the <a href=\"/webhooks/user-validation/user-\nsearch\">User search</a> webhook will also be sent to your webhook server URL \nand the testing result will be displayed.\n\nДля каждого вебхука вам необходимо настроить обработку обоих сценариев: \nуспешного и с ошибкой.\n\n![Раздел тестирования \nплатежей](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/testing-results.svg)\n\n## Subscriptions {% #test-webhooks-subscriptions %}\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>To test webhooks, you should have at least one <a href=\"/sell-subscriptions/integration-guide/set-up-plan/\">subscription plan created</a> in the <a href=\"/webhooks/overview/#business-accounts\">account</a> in the <b>Items catalog &gt; Subscriptions</b> section.</p>\n</div>\n\nНа вкладке <b>Subscriptions</b> вы можете протестировать работу следующих \nвебхуков при управлении подписками:\n- <a href=\"/webhooks/operation/user-validation/\">Проверка пользователей</a> \n  (`user_validation`)\n- <a href=\"/webhooks/operation/payment\">Успешный платеж</a> (`payment`)\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Тестирование других сценариев управления подписками описано в <a href=\"/sell-subscriptions/integration-guide/set-up-plan/#guides_subscriptions_set_up_plan_testing_purchase\">руководстве по интеграции</a>.</p>\n</div>\n\nЧтобы протестировать вебхуки:\n\n1. В блоке тестирования вебхуков перейдите на вкладку **Subscriptions**.\n2. Заполните необходимые поля:\n   * **ID пользователя** — при тестировании вы можете указать любую комбинацию букв \n     и цифр.\n   * **ID заявки в Xsolla** — ID транзакции на стороне Xsolla. При тестировании вы \n     можете указать любое числовое значение.\n   * **Public user ID** — ID known to a user, e.g., an email or nickname. This field \n     is displayed if you checked the **Use public user ID** box in your account in \n     the **Settings > Integration settings** section.\n   * **Сумма** — сумма платежа. При тестировании вы можете указать любое числовое \n     значение.\n   * **Валюта** — выберите валюту из раскрывающегося списка.\n   * **ID плана** — план подписки. Выберите план из раскрывающегося списка.\n   * **Продукт подписки** — выберите продукт из раскрывающегося списка \n     (опционально). Список отображается, если в вашем проекте есть настроенные \n     [продукты](/ru/sell-subscriptions/integration-guide/get-started/#guides_subscriptions_glossary_product).\n   * **Invoice ID** — ID транзакции на стороне вашей игры. При тестировании вы \n     можете указать любую комбинацию букв и цифр. Для успешной оплаты это не \n     обязательный параметр, но вы можете передать его, чтобы связать ID транзакции \n     на вашей стороне с ID транзакции на стороне Xsolla.\n   * **Пробный период**. Для тестирования [покупки подписки без пробного периода\n     ](/ru/sell-subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_sandbox) или \n     тестирования [продления подписки](/ru/sell-subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_renewal)\n     , укажите значение `0`.\n3. Нажмите **Протестировать**.\n\nНа указанный URL-адрес придут вебхуки с введенными данными. Ниже кнопки \n<b>Протестировать</b> отобразятся результаты тестирования каждого вебхука как \nдля успешного сценария, так и для случая возникновения ошибки.\n\n# Обработчик вебхуков {% #webhook-listener %}\n\nОбработчик вебхуков – это программный код, который позволяет принимать \nпоступающие вебхуки на указанный URL-адрес, <a href=\"/webhooks/overview/#section\n/Webhook-listener/Generation-of-signature\">генерировать подпись</a> и <a \nhref=\"/webhooks/overview/#section/Webhook-listener/Sending-responses-to-\nwebhook\">отправлять ответ</a> на вебхук на сервер Xsolla.\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Вы можете использовать <a href=\"https://developers.xsolla.com/ru/sdk/php/\">библиотеку Pay Station 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/\">Login</a>, дополнительно \nдобавьте обработку вебхуков со следующих 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- В базе данных вашего приложения не должно быть нескольких успешных транзакций с \n  одинаковым ID.\n- Если обработчик вебхуков получил вебхук с ID, который уже существует в базе, \n  необходимо вернуть результат предыдущей обработки данной транзакции. Не \n  рекомендуется зачислять пользователю повторную покупку и создавать дублирующие \n  записи в базе данных.\n\n## Генерация подписи {% #generation-of-signature %}\n\nЧтобы обеспечить безопасную передачу данных, вам необходимо убедиться, что \nвебхук действительно был отправлен с сервера Xsolla и не был изменен в процессе \nпередачи. Для этого сгенерируйте собственную подпись на основе тела запроса и \nсравните ее с подписью, полученной в заголовке `authorization` этого же \nзапроса. Если подписи совпадают, вебхук является подлинным и его можно \nобрабатывать.\n\nШаги верификации:\n\n1. Получите подпись из заголовка `authorization` входящего запроса вебхука. Формат \n   заголовка: `Signature <signature_value>`.\n2. Получите тело запроса вебхука в формате JSON. <div \n   class=\"notice\"><p><strong>Внимание</strong></p><p>Используйте JSON в полученном \n   виде. Не парсите и не перекодируйте данные, так как это изменит форматирование \n   и приведет к ошибке проверки подписи.</p></div><p></p>\n\n3. Сгенерируйте собственную подпись для сравнения:<ol type=\"a\"> <li>Конкатенируйте \n   JSON из тела запроса и секретный ключ проекта, т. е. объедините две строки, \n   добавив секретный ключ проекта в конец строки.</li> <li>Примените к полученной \n   строке криптографическую хэш-функцию SHA-1. В результате вы получите \n   шестнадцатеричную строку в нижнем регистре.</li> </ol>\n4. Сравните полученную строку с подписью из заголовка `authorization`. Если \n   подписи совпадают, вебхук является подлинным.\n\nНиже вы можете найти примеры реализации генерации подписи для следующих языков: \nC#, C++, Go, PHP и Node.js.\n\n### Пример вебхука (HTTP): {% #example-of-a-webhook-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): {% #example-of-a-webhook-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# (универсальный пример): {% #csharp-signature-generation-general-sample %}\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 и выше): {% #csharp-signature-generation-net-5-0-and-later %}\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>CryptographicOperations.FixedTimeEquals</code> вместо <code>ConstantTimeEquals</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 и выше): {% #csharp-signature-generation-net-7-0-and-later %}\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++: {% #cpp-signature-generation %}\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: {% #go-signature-generation %}\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: {% #php-signature-generation %}\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: {% #nodejs-signature-generation %}\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## Отправка ответов на вебхук {% #sending-responses-to-webhook %}\n\nЧтобы подтвердить получение вебхука, ваш сервер должен вернуть:\n* `200`, `201`, или `204` HTTP-код в случае успешного ответа.\n* `400` HTTP-код с <a href=\"/webhooks/overview/#section/Oshibki\">описанием \n  проблемы</a>, если указанный пользователь не был найден или если передана \n  недействительная подпись. Ваш обработчик вебхуков также может возвращать `5xx` \n  HTTP-код при временных проблемах на вашем сервере.\n\nЕсли на вебхуки <a href=\"/webhooks/operation/successful-order-payment\">Успешная \nоплата заказа</a> и <a href=\"/webhooks/operation/order-cancellation\">Отмена \nзаказа</a> сервер Xsolla не получил ответ или получил ответ с кодом `5xx`, \nосуществляется повторная отправка вебхуков по следующему расписанию:\n* 2 попытки с интервалом 5 минут;\n* 7 попыток с интервалом 15 минут;\n* 10 попыток с интервалом 60 минут.\n\nМаксимально осуществляется 20 попыток отправки вебхуков в течение 12 часов с \nмомента первой попытки.\n\nЛогика повторной отправки вебхуков <a \nhref=\"/webhooks/operation/payment\">Успешный платеж</a> и <a \nhref=\"/webhooks/operation/refund\">Возврат платежа</a> описана на странице \nсоответствующего вебхука.\n\n<div class=\"notice\">\n<p><strong>Внимание</strong></p>\n<p>При одновременном выполнении следующих условий платеж все равно будет возвращен пользователю:<ul><li>Инициатор возврата — Xsolla.</li><li>На вебхук получен ответ с кодом <code>4xx</code>, или после всех повторных попыток ответ не был получен, или был получен код <code>5xx</code>.</li></ul></p>\n</div>\n\nЕсли на вебхук <a href=\"/webhooks/operation/user-validation/\">Проверка \nсуществования пользователя</a> сервер Xsolla не получил ответ или получил ответ \nс `400` или `5xx` HTTP-кодом, повторная отправка вебхука <a \nhref=\"/webhooks/operation/user-validation/\">Проверка существования \nпользователя</a> не осуществляется. Пользователь увидит ошибку, вебхуки <a \nhref=\"/webhooks/operation/payment\">Успешный платеж</a> и <a \nhref=\"/webhooks/operation/successful-order-payment\">Успешная оплата заказа</a> \nотправлены не будут.\n\n# Ошибки {% #errors %}\n\nКоды ошибок для HTTP-кода 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# Лучшие практики {% #best-practices %}\n\n## Безопасность {% #security %}\n\nСоблюдайте следующие рекомендации:\n\n* Используйте только протокол HTTPS с действительным сертификатом.\n* При проверке подписи всегда используйте тело запроса в полученном виде — не \n  парсите и не перекодируйте данные.\n* Не передавайте чувствительные данные в URL-адресах и не раскрывайте технические \n  детали в сообщениях об ошибках.\n* Отключите проверку [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery) для URL-адреса вебхука — входящие запросы от Xsolla не \n  содержат токен CSRF и будут отклонены без этой настройки.\n* Добавьте [IP-адреса Xsolla](/ru/webhooks/section/webhook-listener) в белый список.\n\n\n## Архитектура обработчика вебхуков {% #webhook-handler-architecture %}\n\nСоблюдайте следующие рекомендации:\n\n1. Принимайте `POST`-запрос с телом запроса и заголовками, **не изменяя их**.\n2. [Сгенерируйте подпись для проверки подлинности вебхука](/ru/webhooks/section/webhook-listener/generation-of-signature) и верните в ответе соответствующий \n   статус:\n   * `4xx` — при несовпадении подписей.\n   * `2xx` — в случае успешного ответа. Мы рекомендуем вернуть `204 No Content` до \n     выполнения основной бизнес-логики. `200 OK` также допустим.\n3. Передайте тело ответа (payload) в асинхронную задачу или очередь для дальнейшей \n   обработки.\n4. Обеспечьте \n   [идемпотентность](https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning). Ваша система должна быть готова к [повторному получению \n   вебхуков](/ru/webhooks/section/webhook-listener/sending-responses-to-webhook).\n\n**Пример сценария:**\n\n```http\nHTTP POST /webhooks/xsolla\n  read raw_body, headers\n  if !verify_signature(raw_body, headers['authorization']):\n     return 400 {\"error\":{\"code\":\"INVALID_SIGNATURE\",\"message\":\"Invalid signature\"}}\n  enqueue(raw_body)\n  return 204  # or 200\n```\n\n## Идемпотентность и дубликаты {% #idempotency-and-duplicates %}\n\nСоблюдайте следующие рекомендации:\n\n* Используйте ID транзакции и/или [внешний ID](/ru/dev-resources/faq/payments/#faq_payments_q_new_transaction_external_id), ID заказа \n  в качестве ключей идемпотентности.\n* Сохраняйте обработанные ID и возвращайте прежний результат при получении \n  дубликата.\n* Исключите повторное начисление товаров, двойное списание средств и дублирование \n  записей в базе данных.\n* Обратите внимание, что при последовательной доставке сбой на более раннем \n  событии блокирует обработку последующих.\n\n## Стабильность системы {% #system-resilience %}\n\nСоблюдайте следующие рекомендации:\n\n* Для выполнения ресурсозатратных задач (таких как обращение к внешним сервисам, \n  биллинг или начисление товаров) используйте очереди и асинхронный подход.\n* Установите интервалы для обработчика вебхука (1–3 с). При временных сбоях \n  полагайтесь на [механизм повторной отправки Xsolla](/ru/webhooks/section/webhook-listener/sending-responses-to-webhook).\n* Не используйте обработчик для повторной отправки вебхуков — это выполняется на \n  стороне Xsolla.\n* Логируйте время отправки вебхуков и статусы их обработки, настройте оповещения \n  при резком росте ошибок `5xx` и повторных попыток.\n* Передавайте ID корреляции из вебхука в логи и систему мониторинга (APM).\n* Настройте логирование и мониторинг ошибок. В случае неустранимых ошибок \n  перемещайте задачи в очередь недоставленных сообщений (dead-letter queue, DLQ). \n  Реализуйте инструмент безопасного воспроизведения событий, защищенный \n  механизмом идемпотентности.\n\n## Примеры реализации {% #implementation-examples %}\n\n**Успешная покупка — начисление выполнено один раз:**\n\n![Покупка](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/purchase-v2.svg)\n\n**Повторная отправка (таймаут на стороне партнера):**\n\n![Таймаут](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/timeout-v2.svg)\n\n**Возврат платежа:**\n\n![Возврат](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/refund-v2.svg)\n\n**Недоступность сервера партнера:**\n\n![Недоступность \nсервера](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/server-error.svg)\n\n# Частые вопросы {% #faqs %}\n\n## Необходимо ли для вебхуков использовать HTTPS? {% #do-i-need-to-use-https-for-a-webhook-protocol %}\n\nДа.\n\n## Могу ли я получать платежные вебхуки на несколько URL-адресов? {% #can-i-receive-payment-webhooks-at-several-urls %}\n\nНет. Платежные вебхуки работают по протоколу Server-to-Server и отправляются на \nодин URL-адрес, указанный в [настройках проекта](/ru/webhooks/section/set-up-webhooks-in-publisher-account). Если вы хотите получать оповещения в вашей \nигре, на сайте или мобильном приложении, реализуйте отправку вебхуков на \nсобственном сервере, чтобы пересылать данные между Xsolla и игрой. Вы также \nможете протестировать работу вебхуков из консоли разработчика.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>If you are testing the integration locally, <code>POST</code> requests from Xsolla don’t reach URLs like <code>http://localhost:3000/my-webhook-endpoint</code>. Use services such as <a href=\"https://ngrok.com/\">Ngrok</a> that allow you to create a tunnel for external access, enabling you to receive requests from Xsolla locally. E.g., you can read more about this in the <a href=\"https://ngrok.com/docs/guides/share-localhost/webhooks#test-webhooks-locally\">ngrok documentation</a>.</p>\n</div>\n\n## Почему оповещение от Xsolla не пришло на URL-адрес вебхука? {% #why-was-xsolla-notification-not-sent-to-the-webhook-url %}\n\nУбедитесь, что ваш вебхук-сервер поддерживает `POST` и `GET` HTTP-запросы.\n\n## Как предотвратить дубликаты ID транзакций при обработке? {% #how-do-i-prevent-duplicate-transaction-ids-during-processing %}\n\nИспользуйте внешний ID — это ID транзакции в игре, который присваивается заказу \nв вашей системе. На стороне Xsolla внешний ID связан с ID транзакции, поэтому \nналичие внешнего ID позволяет Xsolla предотвращать повторную оплату одной и той \nже транзакции. Подробная информация о настройке приведена в [документации](/ru/dev-resources/faq/payments/#faq_payments_q_new_transaction_external_id).\n\n## Какие есть лучшие практики работы с вебхуками? {% #are-there-any-best-practices-for-working-with-webhooks %}\n\nМы рекомендуем:\n\n* Возвращать код `204` или `200` сразу после проверки подписи.\n* Проверять подпись вебхука, не изменяя тело запроса.\n* Обеспечить идемпотентность всех операций.\n* Логировать все операции и настроить мониторинг ошибок.\n* Не передавать чувствительные данные в URL-адресах и не раскрывать технические \n  детали в сообщениях об ошибках.\n\nПодробная информация приведена в [разделе с лучшими \nпрактиками](/ru/webhooks/section/best-practices).\n\n# Краткий чеклист интеграции вебхуков {% #webhook-integration-checklist %}\n\nДля корректной работы вебхуков убедитесь, что перед запуском проекта выполнены \nследующие пункты:\n\n* Используется протокол HTTPS.\n* Реализована [проверка подписи](/ru/webhooks/section/webhook-listener/generation-of-signature) вебхука без изменения тела запроса.\n* Ответ `204/200` отправляется, как только подтверждена подпись.\n* Обеспечена идемпотентность всех операций.\n* Настроены логирование ошибок и их мониторинг.\n* Чувствительные данные не передаются в URL-адресах, и технические детали не \n  раскрываются в сообщениях об ошибках.\n* Поддерживаются повторные попытки отправки вебхуков с учетом [логики работы \n  Xsolla](/ru/webhooks/section/webhook-listener/sending-responses-to-webhook).\n* Вся интеграция задокументирована.\n\n# Список вебхуков {% #webhooks-list %}\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/ru/webhooks/operation/afs-rejected-transaction/\">Транзакция отклонена при проверке AFS</a></td>\n        <td><code>afs_reject</code></td>\n        <td>Оповещение об отмене транзакции системой расширенного антифрода.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ru/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/ru/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/ru/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/ru/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/ru/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/ru/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/ru/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/ru/webhooks/operation/user-validation-in-webshop\">Проверка пользователя в Web Shop</a></td>\n      <td><code>-</code></td>\n      <td>Отправлено из Web Shop для проверки существования пользователя в игре.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/ru/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/ru/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/ru/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/ru/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": "Payments"
    },
    {
      "name": "game-services",
      "x-displayName": "Игровые сервисы"
    },
    {
      "name": "anti-fraud",
      "x-displayName": "Антифрод"
    },
    {
      "name": "subscriptions",
      "x-displayName": "Subscriptions"
    },
    {
      "name": "combined-webhooks",
      "x-displayName": "Объединенные вебхуки"
    },
    {
      "name": "separate-webhooks",
      "x-displayName": "Отдельные вебхуки"
    },
    {
      "name": "personalization",
      "x-displayName": "Вебхук персонализации"
    }
  ],
  "webhooks": {
    "add-payment-account": {
      "post": {
        "description": "Когда пользователь добавляет платежный аккаунт вручную или сохраняет платежный аккаунт при совершении покупки, Xsolla отправляет вебхук с типом `payment_account_add` на URL-адрес вебхука. Чтобы получать вебхук, обратитесь к персональному менеджеру проекта или напишите на <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": "При обновлении черного списка системы Anti-fraud (добавление или удаление параметра) Xsolla отправляет вебхук с типом `afs_black_list` на URL-адрес вебхука. Добавление параметра выполняется автоматически на стороне Xsolla или по запросу. Удаление параметра возможно только по запросу. Чтобы получать вебхук, добавить или удалить параметр, обратитесь к персональному менеджеру проекта или напишите на <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": "Время последнего события черного списка AFS в формате [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).",
                        "type": "string"
                      },
                      "parameter": {
                        "description": "Название параметра, по которому возникло событие.",
                        "enum": [
                          "nick",
                          "email",
                          "ps_account",
                          "ip_address",
                          "card_issuer",
                          "phone"
                        ],
                        "type": "string",
                        "x-enumDescriptions": {
                          "card_issuer": "банк-эмитент кредитной карты пользователя",
                          "email": "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": "chargeback (добавление)",
                          "fraud_activity": "мошенничество (добавление)",
                          "friendly_fraud": "дружеский фрод (добавление)",
                          "linked_chargeback": "связь с chargeback (добавление)",
                          "linked_parameter": "связанный параметр в черном списке (добавление)",
                          "other_data_in_blacklist": "другие параметры в черном списке (добавление)",
                          "other_forgiveness_reason": "другая причина удаления (удаление)",
                          "partner_request": "по запросу (добавление)",
                          "ps_reported_fraud": "оповещение платежной системы о фроде (добавление)",
                          "removed_by_cs_review": "удален после обращения в техническую поддержку Xsolla",
                          "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": "Обновление черного списка системы Anti-fraud",
        "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": "Если транзакция была отклонена при проверке системой Anti-fraud, Xsolla \nприсылает детали транзакции в вебхуке с типом `afs_reject` URL-адрес вебхука. \nЧтобы получать вебхук, обратитесь к персональному менеджеру проекта или \nнапишите на <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.\n\nWhen you save the webhook URL in the account, you can give permissions to \nreceive detailed information in webhooks. To do that, activate the following \ntoggle in your [account](/ru/webhooks/overview/#business-accounts) in the \n**Settings > Webhooks > Advanced settings** section.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>If you registered in Publisher Account on or before January 22, 2025, you can find the toggles in the <b>Settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</b> section.</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>Account user (automatic refund).</td>\n        <td>Email-адрес пользователя</td>\n    </tr>\n    <tr>\n        <td>Account user (with assistance from Xsolla customer support).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (при участии службы поддержки Xsolla).</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><nt>Cancellation by the user request / the game request</nt></td>\n        <td>Cancellation initiated from the account.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td><nt>Chargeback</nt></td>\n        <td>Используется, если по транзакции был chargeback.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td><nt>Integration error</nt></td>\n        <td>Используется в случае проблем с интеграцией между Xsolla и игрой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td><nt>Potential fraud – AFS reject</nt></td>\n        <td>Используется, когда транзакция была отклонена из-за потенциального фрода, который обнаружила система Xsolla Anti-fraud.</td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td><nt>Test payment</nt></td>\n        <td>Используется в случае совершения тестового платежа с последующей отменой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td><nt>User invoice expired</nt></td>\n        <td>Используется, если был выбран способ оплаты с системой отложенного платежа.</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td><nt>Fraud notification from PS</nt></td>\n        <td>Используется, если платежная система не произвела выплату по транзакции из-за потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td><nt>Cancellation by the PS request</nt></td>\n        <td>Используется, когда платежная система запросила отмену транзакции.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td><nt>Cancellation by the user request</nt></td>\n        <td>Используется, если игра или заказ не удовлетворяют требованиям пользователя по каким-либо причинам.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td><nt>Cancellation by the game request</nt></td>\n        <td>Используется, когда игра просит отменить транзакцию.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td><nt>Account holder called to report fraud</nt></td>\n        <td>Используется, когда владелец аккаунта сообщил, что не совершал данный платеж.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td><nt>Potential fraud – friendly fraud</nt></td>\n        <td>Используется, когда законный держатель карты оспорил свою транзакцию.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td><nt>Duplicate</nt></td>\n        <td>Используется, если произошла попытка повторной оплаты по счету.</td>\n    </tr>\n    <tr>\n        <td>21</td>\n        <td><nt>Potential fraud – BIN attack</nt></td>\n        <td>Используется, когда происходит массовая кража данных карт с одним или несколькими BIN. Особенность: всплеск попыток использования одинаковых BIN за короткий промежуток времени, зачастую с использованием последовательных номеров карт.</td>\n    </tr>\n    <tr>\n        <td>22</td>\n        <td><nt>Potential fraud – monetization fraud</nt></td>\n        <td>Используется, когда товары, доступные для обмена, были куплены с помощью украденной карты с целью перепродажи.</td>\n    </tr>\n    <tr>\n        <td>23</td>\n        <td><nt>Potential fraud – low-scale card fraud</nt></td>\n        <td>Используется, когда происходит кража данных карт с одним или несколькими BIN. Не такая масштабная и скоординированная, как атака по BIN (код отмены <code>21</code>).</td>\n    </tr>\n    <tr>\n        <td>24</td>\n        <td><nt>Potential fraud – regional price abuse</nt></td>\n        <td>Используется при злоупотреблении региональными ценами или перепродажей ключей. Пользователи воспользовались региональными ценами — зачастую через смену геолокации или подмену информации о способе оплаты — чтобы дешевле купить товары и перепродать их по более высоким ценам.</td>\n    </tr>\n    <tr>\n        <td>25</td>\n        <td><nt>Potential fraud – partner or PS exploit</nt></td>\n        <td>Используется, когда происходит кража учетных данных и захват аккаунта. Относится к злоупотреблению учетной записью или интеграцией на стороне партнера или платежной системы, а не к использованию карты.</td>\n    </tr>\n    <tr>\n        <td>26</td>\n        <td><nt>Potential fraud – not definable</nt></td>\n        <td>Используется, когда фрод был подтвержден, но доказательств недостаточно, чтобы определить конкретный тип атаки.</td>\n    </tr>\n    <tr>\n        <td>27</td>\n        <td><nt>Fraud notification from PS – linked transactions</nt></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 транзакции.",
                        "format": "int64",
                        "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": "Транзакция отклонена при проверке системой Anti-fraud",
        "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": "Когда подписка отменяется по каким-либо причинам, Xsolla отправляет вебхук с типом `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": "Когда пользователь создает подписку, Xsolla отправляет вебхук с типом `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": "При открытии нового диспута или изменении статуса диспута Xsolla отправляет вебхук с типом `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": "Если статус подписки меняется на непродлеваемый, Xsolla отправляет вебхук с типом `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": "Xsolla отправляет вебхук <code>order_canceled</code> на указанный URL-адрес, \nкогда платеж отменен пользователем, партнером или автоматически. В вебхуке \nсодержится информация о возвращенных товарах, платежные данные и детали \nотмененного заказа.\n\nВебхук не отправляется, если оплата не была успешной, например:\n* платежный интерфейс был открыт, но пользователь не оплатил заказ;\n* платежный интерфейс был открыт, но при оплате возникли ошибки.\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": {
                            "$ref": "#/components/schemas/country_whc"
                          },
                          "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": "Объект с информацией о затратах на репатриацию, возлагаемых на Xsolla третьими сторонами.",
                            "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": "Процент VAT.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_balance_sum": {
                            "description": "Объект с данными о сумме, которая была оплачена с Xsolla-баланса.",
                            "properties": {
                              "amount": {
                                "description": "Сумма.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_fee": {
                            "description": "Размер комиссии Xsolla.",
                            "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>Account user (automatic refund).</td>\n        <td>Email-адрес пользователя</td>\n    </tr>\n    <tr>\n        <td>Account user (with assistance from Xsolla customer support).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (при участии службы поддержки Xsolla).</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 транзакции.",
                            "format": "int64",
                            "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 \nдополнительно передаются параметры `is_free`, `is_bonus` и `is_bundle_content`. \nДля переключения версии передайте ее номер в параметре `version` в методе \n[Обновление версии вебхука](/ru/api/catalog/common-webhooks/update-webhook-version/).\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": "version = 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": "version = 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": "Валюта заказа. Для виртуальной валюты используется артикул, для реальной валюты используется трехбуквенное обозначение согласно стандарту [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "Уникальный идентификатор заказа пользователя на стороне Xsolla.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "ID счета для платежей за реальную валюту. Для платежей за виртуальную валюту или для бесплатных товаров передается значение `null`.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "Тип платежа. Значение `default` (по умолчанию) используется для реальных платежей. Значение `sandbox` используется для тестовых платежей.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "Платформа платежа. Для платежей через Xsolla используется значение `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": "Email-адрес пользователя.",
                        "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": "Xsolla отправляет вебхук <code>order_canceled</code> на указанный URL-адрес, \nкогда платеж отменен пользователем, партнером или автоматически. В вебхуке \nсодержится информация о возвращенных товарах и детали отмененного заказа.\n\nВебхук не отправляется, если оплата не была успешной, например:\n* платежный интерфейс был открыт, но пользователь не оплатил заказ;\n* платежный интерфейс был открыт, но при оплате возникли ошибки.\n\nРекомендуемое время обработки вебхука — до 3 секунд.\n",
        "operationId": "order-cancellation-separate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "Дополнительная информация.",
                    "type": "object"
                  },
                  "items": {
                    "description": "Список предметов, которые купил пользователь.\n\nНабор передаваемых параметров в массиве зависит от версии вебхука. В версии 2 \nдополнительно передаются параметры `is_free`, `is_bonus` и `is_bundle_content`. \nДля переключения версии передайте ее номер в параметре `version` в методе \n[Обновление версии вебхука](/ru/api/catalog/common-webhooks/update-webhook-version/).\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": "version = 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": "version = 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": "Валюта заказа. Для виртуальной валюты используется артикул, для реальной валюты используется трехбуквенное обозначение согласно стандарту [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "Уникальный идентификатор заказа пользователя на стороне Xsolla.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "ID счета для платежей за реальную валюту. Для платежей за виртуальную валюту или для бесплатных товаров передается значение `null`.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "Тип платежа. Значение `default` (по умолчанию) используется для реальных платежей. Значение `sandbox` используется для тестовых платежей.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "Платформа платежа. Для платежей через Xsolla используется значение `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": "Email-адрес пользователя.",
                        "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": "При частичном возврате платежа Xsolla отправляет детали отмененной транзакции в \nвебхуке с типом `partial_refund` на URL-адрес вебхука. Подробная информация о \nпроцессе частичного возврата платежа приведена в [инструкции](/ru/doc/pay-station/features/refund/#pay_station_features_refund_how_it_works_partial_refund_flow).\n\nWhen you save the webhook URL in the account, you can give permissions to \nreceive detailed information in webhooks. To do that, activate the following \ntoggle in your [account](/ru/webhooks/overview/#business-accounts) in the \n**Settings > Webhooks > Advanced settings** section.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>If you registered in Publisher Account on or before January 22, 2025, you can find the toggles in the <b>Project settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</b> section.</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><nt>Cancellation by the user request / the game request</nt></td>\n        <td>Cancellation initiated from the account.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td><nt>Integration error</nt></td>\n        <td>Используется в случае проблем с интеграцией между Xsolla и игрой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td><nt>Test payment</nt></td>\n        <td>Используется в случае совершения тестового платежа с последующей отменой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td><nt>Fraud notification from PS</nt></td>\n        <td>Используется, если платежная система не произвела выплату по транзакции из-за потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td><nt>Cancellation by the user request</nt></td>\n        <td>Используется, если игра или заказ не удовлетворяют требованиям пользователя по каким-либо причинам.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td><nt>Cancellation by the game request</nt></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": "Объект с информацией о затратах на репатриацию, возлагаемых на Xsolla третьими сторонами.",
                        "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": "Процент VAT.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_balance_sum": {
                        "description": "Объект с данными о сумме, которая была оплачена с Xsolla-баланса.",
                        "properties": {
                          "amount": {
                            "description": "Сумма.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_fee": {
                        "description": "Размер комиссии Xsolla.",
                        "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>Account user (automatic refund).</td>\n        <td>Email-адрес пользователя</td>\n    </tr>\n    <tr>\n        <td>Account user (with assistance from Xsolla customer support).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (при участии службы поддержки Xsolla).</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 транзакции.",
                        "format": "int64",
                        "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": "Когда пользователь успешно совершает оплату, Xsolla отправляет детали платежа в \nвебхуке с типом `payment` на URL-адрес вебхука.\n\nОжидаемые коды ответов описаны в разделе <b>Responses</b>, но вы можете \nиспользовать и другие коды:\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>Временная ошибка на сервере. При получении этого ответа Xsolla отправляет вебхук повторно с увеличенным интервалом, пока ваш обработчик не подтвердит их получение. Максимальное количество попыток — 12 в течение 48 часов.</td>\n    </tr>\n    </tbody>\n</table>\n\nWhen you save the webhook URL in the [account](/ru/webhooks/overview/#business-accounts), you can also set up receiving additional information in webhooks.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>If you registered in Publisher Account on or before January 22, 2025, you can find the toggles in your project in the <b>Settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</b> section.</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>Добавить объект order в вебхук</td>\n        <td>В вебхуке <a href=\"/ru/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>Показывать БИН карты и последние 4 цифры ее номера</td>\n        <td><p>В вебхуке будет передаваться следующая информация о номере карты:</p><ul><li>первые 6 цифр в параметре <code>card_bin</code>;</li><li>последние 4 цифры в параметре <code>card_suffix</code>.</li></ul></td>\n    </tr>\n    <tr>\n        <td>Показывать бренд карты</td>\n        <td>Бренд карты, с которой была совершена оплата. Например, Mastercard или Visa.</td>\n    </tr>\n    <tr>\n        <td>Показать региональный налог у источника и стоимость каналов привлечения трафика.</td>\n        <td>В вебхуке будут передаваться объекты <code>payment_details.​country_wht</code> и <code>payment_details.​user_acquisition_fee</code>. По умолчанию этот переключатель активирован.</td>\n    </tr>\n    <tr>\n        <td>Отправлять информацию о 3DS.</td>\n        <td>В вебхуке будет передаваться объект cards с данными о прохождении пользователем проверки 3-D Secure.</td>\n    </tr>\n</tbody>\n</table>\n\n<div class=\"notice\">\n<p><strong>Notice</strong></p>\n<p>The set of fields sent in a webhook depends on:<ul><li>the advanced settings configured in the account</li><li>the custom settings configured on the Xsolla side</li></ul></p><p>If you have any questions, contact your Customer Success Manager or email to <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": {
                        "$ref": "#/components/schemas/country_whc"
                      },
                      "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": "Объект с информацией о затратах на репатриацию, возлагаемых на Xsolla третьими сторонами.",
                        "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": "Процент VAT.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_balance_sum": {
                        "description": "Объект с данными о сумме, которая была оплачена с Xsolla-баланса.",
                        "properties": {
                          "amount": {
                            "description": "Сумма.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_fee": {
                        "description": "Размер комиссии Xsolla.",
                        "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": "Флаг, показывать ли дарителя получателю подарка.",
                            "type": "string"
                          },
                          "message": {
                            "description": "Сообщение от дарителя.",
                            "type": "string"
                          },
                          "receiver_email": {
                            "description": "Email получателя подарка.",
                            "type": "string"
                          },
                          "receiver_id": {
                            "description": "ID получателя подарка.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "order": {
                        "$ref": "#/components/schemas/order",
                        "properties": {
                          "id": {
                            "description": "Идентификатор заказа.",
                            "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": "Артикул предмета.",
                                  "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 транзакции.",
                        "format": "int64",
                        "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": "Если транзакция была отклонена платежной системой, Xsolla присылает детали \nтранзакции в вебхуке с типом `ps_declined` на URL-адрес вебхука. Вебхук \nотправляется на этапе авторизации или обработки платежа. Вебхук \n[payment](/ru/webhooks/operation/payment/)\\ [order_paid](/ru/webhooks/operation/successful-order-payment/) при этом отправлен не будет.\n\nТипичные причины отклонения транзакции платежной системой:\n\n* Авторизация карты не удалась (пример: платежная система не смогла завершить \n  процесс авторизации из-за технического сбоя или отсутствия ответа от банка) или \n  была отклонена (пример: банк ответил, но отказал в операции из-за недостатка \n  средств или неверных данных карты).\n* Проверка 3-D Secure не удалась, не была завершена или истекло время ожидания \n  подтверждения пользователем.\n* Процессор или банк-эквайер временно недоступен или возвращает жесткий отказ \n  (hard decline) из-за необратимой ошибки: например, закрытого счета или \n  недействительного номера карты. Повторная попытка без устранения причины ошибки \n  не приведет к успешному результату.\n\nСледует отличать:\n\n* От отклонений транзакции со стороны антифрод-системы, информация о которых \n  передается в вебхуке \n  [afs_reject](https://developers.xsolla.com/ru/webhooks/operation/afs-rejected-transaction/).\n* Возврата и частичного возврата платежа после успешной оплаты, информация о \n  котором передается в вебхуках \n  [refund](https://developers.xsolla.com/ru/webhooks/operation/refund/) и \n  [partial_refund](https://developers.xsolla.com/ru/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>Account user (automatic refund).</td>\n        <td>Email-адрес пользователя</td>\n    </tr>\n    <tr>\n        <td>Account user (with assistance from Xsolla customer support).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (при участии службы поддержки Xsolla).</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><nt>Cancellation by the user request / the game request</nt></td>\n        <td>Cancellation initiated from the account.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td><nt>Chargeback</nt></td>\n        <td>Используется, если по транзакции был chargeback.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td><nt>Integration error</nt></td>\n        <td>Используется в случае проблем с интеграцией между Xsolla и игрой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td><nt>Potential fraud – AFS reject</nt></td>\n        <td>Используется, когда транзакция была отклонена из-за потенциального фрода, который обнаружила система Xsolla Anti-fraud.</td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td><nt>Test payment</nt></td>\n        <td>Используется в случае совершения тестового платежа с последующей отменой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td><nt>User invoice expired</nt></td>\n        <td>Используется, если был выбран способ оплаты с системой отложенного платежа.</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td><nt>Fraud notification from PS</nt></td>\n        <td>Используется, если платежная система не произвела выплату по транзакции из-за потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td><nt>Cancellation by the PS request</nt></td>\n        <td>Используется, когда платежная система запросила отмену транзакции.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td><nt>Cancellation by the user request</nt></td>\n        <td>Используется, если игра или заказ не удовлетворяют требованиям пользователя по каким-либо причинам.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td><nt>Cancellation by the game request</nt></td>\n        <td>Используется, когда игра просит отменить транзакцию.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td><nt>Account holder called to report fraud</nt></td>\n        <td>Используется, когда владелец аккаунта сообщил, что не совершал данный платеж.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td><nt>Potential fraud – friendly fraud</nt></td>\n        <td>Используется, когда законный держатель карты оспорил свою транзакцию.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td><nt>Duplicate</nt></td>\n        <td>Используется, если произошла попытка повторной оплаты по счету.</td>\n    </tr>\n    <tr>\n        <td>21</td>\n        <td><nt>Potential fraud – BIN attack</nt></td>\n        <td>Используется, когда происходит массовая кража данных карт с одним или несколькими BIN. Особенность: всплеск попыток использования одинаковых BIN за короткий промежуток времени, зачастую с использованием последовательных номеров карт.</td>\n    </tr>\n    <tr>\n        <td>22</td>\n        <td><nt>Potential fraud – monetization fraud</nt></td>\n        <td>Используется, когда товары, доступные для обмена, были куплены с помощью украденной карты с целью перепродажи.</td>\n    </tr>\n    <tr>\n        <td>23</td>\n        <td><nt>Potential fraud – low-scale card fraud</nt></td>\n        <td>Используется, когда происходит кража данных карт с одним или несколькими BIN. Не такая масштабная и скоординированная, как атака по BIN (код отмены <code>21</code>).</td>\n    </tr>\n    <tr>\n        <td>24</td>\n        <td><nt>Potential fraud – regional price abuse</nt></td>\n        <td>Используется при злоупотреблении региональными ценами или перепродажей ключей. Пользователи воспользовались региональными ценами — зачастую через смену геолокации или подмену информации о способе оплаты — чтобы дешевле купить товары и перепродать их по более высоким ценам.</td>\n    </tr>\n    <tr>\n        <td>25</td>\n        <td><nt>Potential fraud – partner or PS exploit</nt></td>\n        <td>Используется, когда происходит кража учетных данных и захват аккаунта. Относится к злоупотреблению учетной записью или интеграцией на стороне партнера или платежной системы, а не к использованию карты.</td>\n    </tr>\n    <tr>\n        <td>26</td>\n        <td><nt>Potential fraud – not definable</nt></td>\n        <td>Используется, когда фрод был подтвержден, но доказательств недостаточно, чтобы определить конкретный тип атаки.</td>\n    </tr>\n    <tr>\n        <td>27</td>\n        <td><nt>Fraud notification from PS – linked transactions</nt></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 транзакции.",
                        "format": "int64",
                        "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": "Xsolla при взаимодействии пользователя с магазином отправит вебхук \n<code>partner_side_catalog</code>, который содержит параметры пользователя и \nпроекта, на URL-адрес вебхука.\n\nВ ответе вам следует вернуть список <code>item_id</code> или артикулов \nпредметов, которые доступны пользователю. При этом вы также можете передать \nинформацию о том, что конкретный пользователь может купить определенный товар \nзаданное количество раз. Эта возможность позволяет регулировать количество и \nвид товаров, которые пользователь может добавить в корзину и купить.\n\n<div class=\"notice\">\n<p><strong>Внимание</strong></p><p>При обработке вебхука учитывайте следующие ограничения:<ul><li>Вебхук должен обрабатываться менее, чем за 3 секунды. Если обработка занимает больше времени, методы <a href=\"/ru/api/catalog/virtual-items-currency-catalog/get-virtual-items\">получения каталога</a>, <a href=\"/api/catalog/payment-server-side/admin-create-payment-token\">создания платежного токена</a> и <a href=\"/api/catalog/payment-client-side/create-order\">создания заказа</a> вернут ошибку.</li><li>Размер ответа на вебхук не должен превышать 64 КБ. Ответы большего размера не обрабатываются. В этом случае пользователь увидит пустой каталог и не сможет купить товары. Чтобы изменить допустимый размер ответа, обратитесь к персональному менеджеру проекта или напишите на <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.</li></ul></p>\n</div>\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": {
                              "available": {
                                "$ref": "#/components/schemas/available"
                              },
                              "total": {
                                "$ref": "#/components/schemas/total"
                              }
                            },
                            "title": "available"
                          },
                          {
                            "properties": {
                              "quantity": {
                                "$ref": "#/components/schemas/quantity"
                              }
                            },
                            "title": "quantity"
                          }
                        ],
                        "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": {
                              "available": {
                                "$ref": "#/components/schemas/available"
                              },
                              "total": {
                                "$ref": "#/components/schemas/total"
                              }
                            },
                            "title": "available"
                          },
                          {
                            "properties": {
                              "quantity": {
                                "$ref": "#/components/schemas/quantity"
                              }
                            },
                            "title": "quantity"
                          }
                        ],
                        "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": "При отмене платежа Xsolla отправляет детали отмененной транзакции в вебхуке с \nтипом `refund` на URL-адрес вебхука.\n\nМеханизм повторной отправки вебхуков зависит от инициатора возврата платежа:\n* Если возврат был инициирован на вашей стороне, повторная отправка не \n  выполняется. Платеж возвращается пользователю вне зависимости от полученного \n  ответа на вебхук.\n* Если возврат был инициирован третьей стороной, например платежной системой или \n  службой поддержки Xsolla, и на вебхук был получен ответ с кодом `5xx`, вебхуки \n  отправляются повторно. Максимально выполняется 12 попыток с увеличивающимся \n  интервалом в течение 48 часов с момента первой попытки.\n\nПодробная информация о процессе возврата платежа приведена в [инструкции](/ru/doc/pay-station/features/refund/).\n\n<div class=\"notice\">\n<p><strong>Внимание</strong></p>\n<p>При одновременном выполнении следующих условий платеж все равно будет возвращен пользователю:<ul><li>Инициатор возврата — Xsolla.</li><li>На вебхук получен ответ с кодом <code>4xx</code>, или после всех повторных попыток ответ не был получен, или был получен код <code>5xx</code>.</li></ul></p>\n</div>\n\nWhen you save the webhook URL in the [account](/ru/webhooks/overview/#business-accounts), you can also set up receiving additional information in webhooks.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>If you registered in Publisher Account on or before January 22, 2025, you can find the toggles in your project in the <b>Settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</b> section.</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    <tr>\n        <td>Показывать информацию о причине возврата.</td>\n        <td>Детальная информация о причине возврата.</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><nt>Cancellation by the user request / the game request</nt></td>\n        <td>Cancellation initiated from the account.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td><nt>Chargeback</nt></td>\n        <td>Используется, если по транзакции был chargeback.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td><nt>Integration error</nt></td>\n        <td>Используется в случае проблем с интеграцией между Xsolla и игрой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td><nt>Potential fraud – AFS reject</nt></td>\n        <td>Используется, когда транзакция была отклонена из-за потенциального фрода, который обнаружила система Xsolla Anti-fraud.</td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td><nt>Test payment</nt></td>\n        <td>Используется в случае совершения тестового платежа с последующей отменой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td><nt>User invoice expired</nt></td>\n        <td>Используется, если был выбран способ оплаты с системой отложенного платежа.</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td><nt>Fraud notification from PS</nt></td>\n        <td>Используется, если платежная система не произвела выплату по транзакции из-за потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td><nt>Cancellation by the PS request</nt></td>\n        <td>Используется, когда платежная система запросила отмену транзакции.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td><nt>Cancellation by the user request</nt></td>\n        <td>Используется, если игра или заказ не удовлетворяют требованиям пользователя по каким-либо причинам.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td><nt>Cancellation by the game request</nt></td>\n        <td>Используется, когда игра просит отменить транзакцию.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td><nt>Account holder called to report fraud</nt></td>\n        <td>Используется, когда владелец аккаунта сообщил, что не совершал данный платеж.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td><nt>Potential fraud – friendly fraud</nt></td>\n        <td>Используется, когда законный держатель карты оспорил свою транзакцию.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td><nt>Duplicate</nt></td>\n        <td>Используется, если произошла попытка повторной оплаты по счету.</td>\n    </tr>\n    <tr>\n        <td>21</td>\n        <td><nt>Potential fraud – BIN attack</nt></td>\n        <td>Используется, когда происходит массовая кража данных карт с одним или несколькими BIN. Особенность: всплеск попыток использования одинаковых BIN за короткий промежуток времени, зачастую с использованием последовательных номеров карт.</td>\n    </tr>\n    <tr>\n        <td>22</td>\n        <td><nt>Potential fraud – monetization fraud</nt></td>\n        <td>Используется, когда товары, доступные для обмена, были куплены с помощью украденной карты с целью перепродажи.</td>\n    </tr>\n    <tr>\n        <td>23</td>\n        <td><nt>Potential fraud – low-scale card fraud</nt></td>\n        <td>Используется, когда происходит кража данных карт с одним или несколькими BIN. Не такая масштабная и скоординированная, как атака по BIN (код отмены <code>21</code>).</td>\n    </tr>\n    <tr>\n        <td>24</td>\n        <td><nt>Potential fraud – regional price abuse</nt></td>\n        <td>Используется при злоупотреблении региональными ценами или перепродажей ключей. Пользователи воспользовались региональными ценами — зачастую через смену геолокации или подмену информации о способе оплаты — чтобы дешевле купить товары и перепродать их по более высоким ценам.</td>\n    </tr>\n    <tr>\n        <td>25</td>\n        <td><nt>Potential fraud – partner or PS exploit</nt></td>\n        <td>Используется, когда происходит кража учетных данных и захват аккаунта. Относится к злоупотреблению учетной записью или интеграцией на стороне партнера или платежной системы, а не к использованию карты.</td>\n    </tr>\n    <tr>\n        <td>26</td>\n        <td><nt>Potential fraud – not definable</nt></td>\n        <td>Используется, когда фрод был подтвержден, но доказательств недостаточно, чтобы определить конкретный тип атаки.</td>\n    </tr>\n    <tr>\n        <td>27</td>\n        <td><nt>Fraud notification from PS – linked transactions</nt></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": {
                        "$ref": "#/components/schemas/country_whc"
                      },
                      "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": "Объект с информацией о затратах на репатриацию, возлагаемых на Xsolla третьими сторонами.",
                        "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": "Процент VAT.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_balance_sum": {
                        "description": "Объект с данными о сумме, которая была оплачена с Xsolla-баланса.",
                        "properties": {
                          "amount": {
                            "description": "Сумма.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_fee": {
                        "description": "Размер комиссии Xsolla.",
                        "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>Account user (automatic refund).</td>\n        <td>Email-адрес пользователя</td>\n    </tr>\n    <tr>\n        <td>Account user (with assistance from Xsolla customer support).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (при участии службы поддержки Xsolla).</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 транзакции.",
                        "format": "int64",
                        "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": "Когда пользователь удаляет платежный аккаунт из сохраненных, Xsolla отправляет вебхук с типом `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": "Xsolla отправляет вебхук <code>order_paid</code> на указанный URL-адрес, когда \nпользователь успешно оплатил заказ.\n\nВ вебхуке <code>order_paid</code> содержится информация о купленных товарах, \nданные платежа и детали транзакции.\n\nВебхук <code>order_paid</code> не отправляется, если оплата неуспешна, например:\n* форма оплаты была открыта, но пользователь не оплатил заказ;\n* форма оплаты была открыта, но при оплате возникли ошибки.\n\nРекомендуется обеспечить время обработки вебхука <code>order_paid</code> менее \n3 секунд.\n\n<div class=\"notice\">\n<p><strong>Notice</strong></p>\n<p>The set of fields sent in a webhook depends on the following settings:<ul><li>the ones you configured in the <a href=\"/ru/webhooks/overview/#business-accounts\">account</a> in the <b>Settings &gt; Webhooks &gt; Advanced settings</b> section</li><li>the ones configured on the Xsolla side</li></ul></p><p>If you have any questions, contact your Customer Success Manager or email to <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.</p>\n</div>\n\nОжидаемые коды ответов описаны в разделе <b>Responses</b>. Вы можете \nиспользовать другие коды ответов. В зависимости от кода ответа и подключения \nфункциональности автоматического возврата платежа логика обработки вебхука на \nстороне Xsolla следующая:\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>Многократная отправка вебхуков через заданный временной промежуток: 2 попытки с шагом 5 минут, 7 попыток с шагом 15 минут, 10 попыток с шагом 60 минут.</td>\n        <td>Многократная отправка вебхуков через заданный временной промежуток: 2 попытки с шагом 5 минут, 7 попыток с шагом 15 минут, 10 попыток с шагом 60 минут. Если все вебхуки отправлены, а успешный ответ не получен, осуществляется автоматический возврат средств пользователю.</td>\n    </tr>\n    </tbody>\n</table>\n\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": {
                            "$ref": "#/components/schemas/country_whc"
                          },
                          "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": "Объект с информацией о затратах на репатриацию, возлагаемых на Xsolla третьими сторонами.",
                            "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": "Процент VAT.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_balance_sum": {
                            "description": "Объект с данными о сумме, которая была оплачена с Xsolla-баланса.",
                            "properties": {
                              "amount": {
                                "description": "Сумма.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_fee": {
                            "description": "Размер комиссии Xsolla.",
                            "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": "Флаг, показывать ли дарителя получателю подарка.",
                                "type": "string"
                              },
                              "message": {
                                "description": "Сообщение от дарителя.",
                                "type": "string"
                              },
                              "receiver_email": {
                                "description": "Email получателя подарка.",
                                "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 транзакции.",
                            "format": "int64",
                            "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 \nдополнительно передаются параметры `is_free`, `is_bonus` и `is_bundle_content`. \nДля переключения версии передайте ее номер в параметре `version` в методе \n[Обновление версии вебхука](/ru/api/catalog/common-webhooks/update-webhook-version/).\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": "version = 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": "version = 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": "Валюта заказа. Для виртуальной валюты используется артикул, для реальной валюты используется трехбуквенное обозначение согласно стандарту [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "Уникальный идентификатор заказа пользователя на стороне Xsolla.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "ID счета для платежей за реальную валюту. Для платежей за виртуальную валюту или для бесплатных товаров передается значение `null`.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "Тип платежа. Значение `default` (по умолчанию) используется для реальных платежей. Значение `sandbox` используется для тестовых платежей.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "Платформа платежа. Для платежей через Xsolla используется значение `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": "Email-адрес пользователя.",
                        "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": "Xsolla отправляет вебхук <code>order_paid</code> на указанный URL-адрес, когда \nвыполнены условия:\n1. Пользователь успешно оплатил заказ.\n2. Xsolla получила ответ об успешной обработке вебхука \n   [payment](/ru/webhooks/operation/payment/).\n\nВ вебхуке <code>order_paid</code> содержится информация о купленных товарах и \nдетали транзакции.\n\nВебхук <code>order_paid</code> не отправляется, если:\n* Оплата не была успешной, например:\n  * форма оплаты была открыта, но пользователь не оплатил заказ;\n  * форма оплаты была открыта, но при оплате возникли ошибки.\n* Ответ об успешной обработке вебхука [payment](/ru/webhooks/operation/payment/) не \n  получен.\n\nРекомендуется обеспечить время обработки вебхука <code>order_paid</code> менее \n3 секунд.\n\nОжидаемые коды ответов описаны в разделе <b>Responses</b>. Вы можете \nиспользовать другие коды ответов. В зависимости от кода ответа и подключения \nфункциональности автоматического возврата платежа логика обработки вебхука на \nстороне Xsolla следующая:\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>Многократная отправка вебхуков через заданный временной промежуток: 2 попытки с шагом 5 минут, 7 попыток с шагом 15 минут, 10 попыток с шагом 60 минут.</td>\n        <td>Многократная отправка вебхуков через заданный временной промежуток: 2 попытки с шагом 5 минут, 7 попыток с шагом 15 минут, 10 попыток с шагом 60 минут. Если все вебхуки отправлены, а успешный ответ не получен, осуществляется автоматический возврат средств пользователю.</td>\n    </tr>\n    </tbody>\n</table>\n\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 \nдополнительно передаются параметры `is_free`, `is_bonus` и `is_bundle_content`. \nДля переключения версии передайте ее номер в параметре `version` в методе \n[Обновление версии вебхука](/ru/api/catalog/common-webhooks/update-webhook-version/).\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": "version = 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": "version = 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": "Валюта заказа. Для виртуальной валюты используется артикул, для реальной валюты используется трехбуквенное обозначение согласно стандарту [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "Уникальный идентификатор заказа пользователя на стороне Xsolla.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "ID счета для платежей за реальную валюту. Для платежей за виртуальную валюту или для бесплатных товаров передается значение `null`.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "Тип платежа. Значение `default` (по умолчанию) используется для реальных платежей. Значение `sandbox` используется для тестовых платежей.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "Платформа платежа. Для платежей через Xsolla используется значение `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": "Email-адрес пользователя.",
                        "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`) подписки и в случае каждого продления подписки, Xsolla отправляет вебхук с типом `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> может быть email, никнейм и т. д.). Xsolla отправляет вебхук с типом `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": "Xsolla отправляет вебхук с типом `user_validation` на URL-адрес вебхука, чтобы \nудостовериться, что пользователь зарегистрирован в игре. В процессе оплаты \nзапрос отправляется несколько раз:\n\n* при выборе способа оплаты в платежном интерфейсе;\n* вводе данных в форме оплаты, например, при вводе данных банковской карты или \n  индекса для оплаты с помощью PayPal;\n* нажатии **Далее** для перехода к оплате;\n* завершении обработки платежа и переходе транзакции в статус `done`.\n\nЗапрос отправляется при оплате любыми способами.\n\nWhen you save the webhook URL in the [account](/ru/webhooks/overview/#business-accounts), you can give permissions to receive detailed information in \nwebhooks. To do that, activate the necessary toggles in the **Settings > \nWebhooks > Advanced settings** section.\n\n<div class=\"note\">\n<p><strong>Note</strong></p>\n<p>If you registered in Publisher Account on or before January 22, 2025, you can find the toggles in the <b>Settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</b> section.</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=\"/ru/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": "Xsolla отправляет вебхук с сайта интернет-магазина на URL-адрес вебхука для проверки существования пользователя в игре. Вебхук поступает с IP-адреса `34.102.38.178`.\n<div class=\"note\"><strong>Примечание</strong> <br><br>Вебхук используется только для\nпроверки пользователя в Web Shop. Дополнительные сведения о настройке вебхука вы можете найти в <a target=\"_blank\" href=\"https://developers.xsolla.com/ru/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/ru/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": "Проверка пользователя в Web Shop",
        "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).",
        "type": "string"
      },
      "payment_account.id": {
        "description": "ID платежного аккаунта.",
        "type": "string"
      },
      "payment_account.name": {
        "description": "Название платежного аккаунта в платежной системе (например: номер карты, email-адрес).",
        "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": "Project ID. You can find this parameter in your [account](/ru/webhooks/overview/#business-accounts) next to the name of the project.",
        "type": "integer"
      },
      "user.country": {
        "description": "Страна пользователя. Используется двухбуквенное обозначение страны согласно стандарту [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).",
        "type": "string"
      },
      "user.email": {
        "description": "Email пользователя.",
        "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 плана (внешний id, если план был создан через API).",
        "type": "string"
      },
      "subscription.product_id": {
        "description": "ID продукта (если был отправлен в токене).",
        "type": "string"
      },
      "subscription.subscription_id": {
        "description": "ID подписки в базе данных Xsolla.",
        "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": "Причина открытия диспута. Описания групп причин приведены в [документации](/ru/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": "Первичный чарджбэк.",
          "2nd_time_chargeback": "Повторный чарджбэк (pre-arbitration).",
          "arbitration": "Решение спора между банком-эмитентом и продавцом, когда первичный и повторный чарджбэк были отклонены.",
          "chargeback": "Первичный чарджбэк.",
          "chargeback_reversal": "Чарджбэк отозван.",
          "claim": "Спор между покупателем и продавцом в PayPal.",
          "dispute": "Владелец карты запрашивает детали платежа через банк.",
          "inquiry": "Владелец карты запрашивает детали платежа через банк.",
          "other": "Используется в случае, когда ни один из существующих типов не подходит.",
          "reimbursement": "Сделан возврат средств.",
          "reimbursement_reversal": "Чарджбэк отозван.",
          "representment": "Команда управления чарджбэками отправляет доказательства платежной системе.",
          "representment_reversal": "Чарджбэк отозван.",
          "retrieval": "Владелец карты запрашивает детали платежа через банк."
        }
      },
      "date-create": {
        "description": "Дата платежа.",
        "type": "string"
      },
      "external-id": {
        "description": "Внешний ID транзакции. Изучите подробную информацию в [Частых вопросах](/ru/doc/pay-station/references/faq/#faq_payments_q_new_transaction_external_id).",
        "type": "string"
      },
      "transaction-id": {
        "description": "ID транзакции.",
        "format": "int64",
        "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).",
        "type": "string"
      },
      "country_whc": {
        "description": "Объект с данными о дополнительных издержках при международных транзакциях в некоторых странах.",
        "properties": {
          "amount": {
            "description": "Сумма.",
            "format": "float",
            "type": "number"
          },
          "currency": {
            "$ref": "#/components/schemas/currency"
          },
          "percent": {
            "description": "Размер дополнительных издержек, в процентах.",
            "format": "float",
            "type": "number"
          }
        },
        "type": "object"
      },
      "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Тип `value_point` используется при [операциях с баллами лояльности](/ru/solutions/loyalty-as-service/) – их оплате или начислении.",
        "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](/ru/webhooks/#operation/order-cancellation!path=order/promotions/amount_with_discount&t=request)) и без нее ([amount_without_discount](/ru/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": "Object that contains information about an order. To receive this information, activate the **Add order object to webhook** toggle in your [account](/ru/webhooks/overview/#business-accounts) in the **Settings > Webhooks > Advanced settings** section.",
        "type": "object"
      },
      "locale": {
        "description": "Язык интерфейса пользователя. Используется [двухбуквенное обозначение](https://developers.xsolla.com/ru/doc/pay-station/features/localization/) (в нижнем регистре).",
        "type": "string"
      },
      "available": {
        "description": "Оставшееся количество товара, которое может приобрести пользователь.\n\nЧтобы информация о лимите покупок отображалась в каталоге (например, `7/10`), передайте пару `available` и `total`.",
        "type": "integer"
      },
      "total": {
        "description": "Максимальное количество товара, которое может приобрести один пользователь.\n\nЗначение должно быть больше 0.Чтобы информация о лимите покупок отображалась в каталоге (например, `7/10`), передайте пару `available` и `total`.",
        "exclusiveMinimum": 0,
        "type": "integer"
      },
      "quantity": {
        "deprecated": true,
        "description": "Количество товара, которое может приобрести один пользователь. Чтобы не ограничивать количество товара, передайте `null`. Чтобы товар был недоступен для покупки, но отображался в каталоге, передайте `0`.\n\nЕсли вы используете этот параметр, информация о лимите покупок не отображается в каталоге. Чтобы информация о лимите покупок отображалась в каталоге (например, `7/10`), передайте пару `available` и `total` вместо `quantity`.",
        "type": "integer"
      },
      "bundle_content": {
        "description": "Массив объектов с содержимым бандла для отображения в каталоге. Может использоваться только для бандлов с типом [partner_side_content](https://developers.xsolla.com/ru/api/shop-builder/operation/admin-create-bundle/).",
        "items": {
          "properties": {
            "description": {
              "description": "Описание товара для отображения в каталоге в составе бандла. Если не указано, передается `null`.",
              "maxLength": 255,
              "type": "string"
            },
            "image_url": {
              "description": "URL-адрес изображения товара для отображения в каталоге в составе бандла. Поддерживается только протокол HTTPS. Если URL-адрес не указан, передается `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, содержащий атрибуты товара и их значения. Заменяет [custom_attributes](https://developers.xsolla.com/ru/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": "The unique ID of the item you specified in your account. You should pass either the `sku` or `item_id`.",
        "type": "string"
      },
      "item_id": {
        "description": "Уникальный ID предмета на стороне Xsolla. Должен быть передан либо `sku`, либо `item_id`.",
        "type": "integer"
      },
      "user.public_id": {
        "description": "Public ID пользователя.",
        "type": "string"
      },
      "appPlayerId": {
        "description": "ID пользователя, установленный владельцем приложения в момент регистрации пользователя (customer user ID).\n<div lang=\"en\" class=\"note\"><strong>Примечание</strong><br><br>Xsolla передает эти данные в объекте <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": "Верните в случае ошибки в предоставленной информации (например, обязательный параметр не передан, или авторизация не прошла). В этом случае денежные средства пользователя списываются, но покупка не осуществляется. Чтобы оформить возврат платежа, необходимо обратиться в службу поддержки Xsolla на 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": "Payments",
      "tags": [
        "payments"
      ]
    },
    {
      "name": "Игровые сервисы",
      "tags": [
        "combined-webhooks",
        "separate-webhooks",
        "personalization"
      ]
    },
    {
      "name": "Антифрод",
      "tags": [
        "anti-fraud"
      ]
    },
    {
      "name": "Subscriptions",
      "tags": [
        "subscriptions"
      ]
    }
  ]
}