{
  "openapi": "3.1.0",
  "info": {
    "description": "# Основные положения\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# Список обязательных вебхуков\nЕсли вы используете продукты и решения, для которых работа с вебхуками \nобязательна, <a href=\"/webhooks/overview/#section/Set-up-webhooks-in-Publisher-\nAccount\">подключите и протестируйте вебхуки в Личном кабинете</a> и <a \nhref=\"/webhooks/overview/#section/Webhook-listener\">настройте их обработку</a>. \nПри наступлении определенных событий вебхуки отправляются последовательно. \nПоэтому, если вы не обработаете какой-то из вебхуков, последующие вебхуки не \nбудут отправлены. Список необходимых вебхуков представлен ниже.\n\n## Store и Payments\nНа стороне Xsolla настроено 2 варианта отправки вебхуков при покупке и возврате \nтоваров на сайте — информация с данными платежа и транзакции и информация о \nкупленных товарах может приходить отдельно или может быть объединена в один \nвебхук.\n\n<b>Получение информации в объединенных вебхуках:</b>\n\nЕсли вы зарегистрировались в <a href=\"https://publisher.xsolla.com/\">Личном \nкабинете</a> после 22 января 2025 г., вы получаете всю информацию в вебхуках <a \nhref=\"/webhooks/operation/successful-order-payment\">Успешная оплата заказа</a> \n(`order_paid`) и<a href=\"/webhooks/operation/order-cancellation\"> Отмена \nзаказа</a> (`order_canceled`). В этом случае вам не требуется обрабатывать \nвебхуки <a href=\"/webhooks/operation/payment\">Успешный платеж</a> (`payment`) и \n<a href=\"/webhooks/operation/refund\">Возврат платежа</a> (`refund`).\n\n<b>Получение информации в отдельных вебхуках:</b>\n\nЕсли вы зарегистрировались в <a href=\"https://publisher.xsolla.com/\">Личном \nкабинете</a> до 22 января 2025 г. включительно, вы получаете вебхуки:\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\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# Настройка вебхуков в Личном кабинете\n\n## Общие настройки\n\nЧтобы включить получение вебхуков:\n1. В проекте в Личном кабинете перейдите в раздел <a \n   href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\">Настройки \n   проекта &gt; Вебхуки</a>.\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>Внимание</strong></p>\n<p>Основные рекомендации:<ul>\n<li><strong>Сохраните созданный секретный ключ на вашей стороне</strong>. Ключ отображается в Личном кабинете только один раз — сразу после создания.</li>\n<li>Никому не сообщайте ваш секретный ключ.</li>\n<li>Секретный ключ должен храниться на вашем сервере и никогда — в бинарных файлах или на фронтенде.</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>Внимание</strong></p>\n<p>Вы не можете отправлять вебхуки на разные URL-адреса одновременно. Однако вы можете сначала указать в Личном кабинете URL-адрес для тестирования, а затем изменить его на боевой.</p>\n</div>\n\nЧтобы отключить получение вебхуков:\n1. В проекте в Личном кабинете перейдите в раздел <a \n   href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\">Настройки \n   проекта &gt; Вебхуки</a>.\n2. Нажмите <b>Отключить вебхуки</b>.\n\n## Ротация секретных ключей\n\nРегулярное обновление секретных ключей повышает безопасность вашей интеграции. \nВ одном проекте вы можете создать до 5 секретных ключей, чтобы обеспечить их \nротацию. Для этого:\n\n1. В разделе <a \n   href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\">Настройки \n   проекта &gt; Вебхуки</a> нажмите **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>Внимание</strong></p>\n<p>Основные рекомендации:<ul>\n<li><strong>Сохраните созданный секретный ключ на вашей стороне</strong>. Ключ отображается в Личном кабинете только один раз — сразу после создания.</li>\n<li>Никому не сообщайте ваш секретный ключ.</li>\n<li>Секретный ключ должен храниться на вашем сервере и никогда — в бинарных файлах или на фронтенде.</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## Расширенные настройки\n\nДля вебхуков раздела <a href=\"/webhooks/overview/#section/Test-webhooks-in-\nPublisher-Account/Store\">Payments and Store</a> доступны расширенные настройки. \nОни автоматически отобразятся под блоком <a href=\"/webhooks/overview/#section\n/Set-up-webhooks-in-Publisher-Account/General-settings\">Общие настройки</a> \nпосле того, как вы нажмете кнопку <b>Получать вебхуки</b>.\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# Тестирование вебхуков в Личном кабинете\n\nТестирование вебхуков помогает убедиться в корректной настройке проекта как на \nвашей стороне, так и на стороне Xsolla.\n\nЕсли вебхуки <a href=\"/webhooks/overview/#section/Set-up-webhooks-in-Publisher-\nAccount\">настроены</a> успешно, ниже блока настройки вебхуков отобразится блок \nтестирования вебхуков.\n\n![Раздел \nтестирования](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/testing-section.svg)\n\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>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\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. В раскрывающемся списке выберите тип товара. Если выбранный тип товара еще не \n   настроен в Личном кабинете, нажмите кнопку для перехода к настройке товара \n   соответствующего типа. После создания товара вернитесь в раздел тестирования \n   вебхуков и перейдите к следующему шагу.\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\nЕсли в вашем проекте в разделе <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/advanced\">Настройки \nпроекта > Настройки интеграции</a> установлен флажок <b>Использовать public \nuser ID</b>, на URL-адрес сервера вебхуков также придет вебхук <a \nhref=\"/webhooks/user-validation/user-search\">Поиск пользователя</a> и в разделе \nтестирования отобразится результат его проверки.\n\nДля каждого вебхука вам необходимо настроить обработку обоих сценариев: \nуспешного и с ошибкой.\n\n![Раздел тестирования \nплатежей](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/testing-results.svg)\n\n## Subscriptions\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Для тестирования вебхуков у вас должен быть создан хотя бы один <a href=\"/sell-subscriptions/integration-guide/set-up-plan/\">план подписки</a> в Личном кабинете в разделе <a href=\"https://publisher.xsolla.com/0/projects/0/subscriptions/plans\">Каталог товаров &gt; Подписки</a>.</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, который известен пользователю, например, email или \n     никнейм. Это поле отображается, если в вашем проекте в разделе [Настройки \n     проекта > Настройки \n     интеграции](https://publisher.xsolla.com/0/projects/0/edit/advanced) установлен \n     флажок **Использовать public user ID**.\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<a id=\"webhook-listener\"></a>\n\n# Обработчик вебхуков\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## Генерация подписи\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):\n\n```http\nPOST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 165\nauthorization: Signature 52eac2713985e212351610d008e7e14fae46f902\n{\n  \"notification_type\":\"user_validation\",\n  \"user\":{\n      \"ip\":\"127.0.0.1\",\n      \"phone\":\"18777976552\",\n      \"email\":\"email@example.com\",\n      \"id\":1234567,\n      \"name\":\"Xsolla User\",\n      \"country\":\"US\"\n  }\n}\n```\n\n### Пример вебхука (curl):\n\n```bash\ncurl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'authorization: Signature 52eac2713985e212351610d008e7e14fae46f902' \\\n-d '{\n  \"notification_type\":\n    \"user_validation\",\n    \"user\":\n      {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": 1234567,\n        \"name\": \"Xsolla User\",\n        \"country\": \"US\"\n      }\n    }'\n```\n\n### Пример реализации генерации подписи для C# (универсальный пример):\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Этот пример кода совместим с .NET Framework 4.0 и выше, а также с .NET Core и другими современными версиями .NET. Для проверки подписи реализовано сравнение с постоянным временем выполнения с помощью метода <code>ConstantTimeEquals</code>, что помогает предотвратить атаки по времени.</p>\n</div>\n\n```csharp\nusing System;\nusing System.Security.Cryptography;\nusing System.Text;\npublic static class XsollaWebhookSignature\n{\n    public static string ComputeSha1(string jsonBody, string secretKey)\n    {\n        // Concatenation of the JSON from the request body and the project's secret key\n        string dataToSign = jsonBody + secretKey;\n        using (SHA1 sha1 = SHA1.Create())\n        {\n            byte[] hashBytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));\n            // Convert hash bytes to lowercase hexadecimal string\n            var hexString = new StringBuilder(hashBytes.Length * 2);\n            foreach (byte b in hashBytes)\n            {\n                hexString.Append(b.ToString(\"x2\"));\n            }\n            return hexString.ToString();\n        }\n    }\n    public static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)\n    {\n        string computedSignature = ComputeSha1(jsonBody, secretKey);\n        string receivedSignatureLower = receivedSignature.ToLower();\n        // Use constant-time comparison to prevent timing attacks\n        return ConstantTimeEquals(computedSignature, receivedSignatureLower);\n    }\n    private static bool ConstantTimeEquals(string a, string b)\n    {\n        if (a.Length != b.Length)\n        {\n            return false;\n        }\n        int result = 0;\n        for (int i = 0; i < a.Length; i++)\n        {\n            result |= a[i] ^ b[i];\n        }\n        return result == 0;\n    }\n}\n```\n\n### Пример реализации генерации подписи для C# (.NET 5.0 и выше):\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Чтобы использовать метод <code>Convert.ToHexString</code>, вам необходима версия .NET 5.0 или выше.<p></p>Если у вас версия .NET 7.0 или выше, вы также можете использовать метод <code>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 и выше):\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Если у вас версия .NET 7.0 или выше, вы можете использовать метод <code>CryptographicOperations.FixedTimeEquals</code>.</p>\n</div>\n\n```csharp\n// For .NET 7.0+, you can use the built-in CryptographicOperations.FixedTimeEquals:\nusing System.Security.Cryptography;\npublic static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)\n{\n    string computedSignature = ComputeSha1(jsonBody, secretKey);\n    byte[] computedBytes = Encoding.UTF8.GetBytes(computedSignature);\n    byte[] receivedBytes = Encoding.UTF8.GetBytes(receivedSignature.ToLower());\n    return CryptographicOperations.FixedTimeEquals(computedBytes, receivedBytes);\n}\n```\n\n### Пример реализации генерации подписи для C++:\n\n```c++\n#include <string>\n#include <sstream>\n#include <iomanip>\n#include <openssl/sha.h>\nclass XsollaWebhookSignature {\npublic:\n    static std::string computeSha1(const std::string& jsonBody, const std::string& secretKey) {\n        // Concatenation of the JSON from the request body and the project's secret key\n        std::string dataToSign = jsonBody + secretKey;\n        unsigned char digest[SHA_DIGEST_LENGTH];\n        // Create SHA1 hash\n        SHA1(reinterpret_cast<const unsigned char*>(dataToSign.c_str()),\n             dataToSign.length(), digest);\n        // Convert to lowercase hexadecimal string\n        std::ostringstream hexStream;\n        hexStream << std::hex << std::setfill('0');\n        for (int i = 0; i < SHA_DIGEST_LENGTH; ++i) {\n            hexStream << std::setw(2) << static_cast<unsigned int>(digest[i]);\n        }\n        return hexStream.str();\n    }\n    static bool verifySignature(const std::string& jsonBody, const std::string& secretKey, const std::string& receivedSignature) {\n        std::string computedSignature = computeSha1(jsonBody, secretKey);\n        // Timing-safe comparison\n        if (computedSignature.length() != receivedSignature.length()) {\n            return false;\n        }\n        volatile unsigned char result = 0;\n        for (size_t i = 0; i < computedSignature.length(); ++i) {\n            result |= (computedSignature[i] ^ receivedSignature[i]);\n        }\n        return result == 0;\n    }\n};\n```\n\n### Пример реализации генерации подписи для Go:\n\n```go\npackage main\nimport (\n\t\"crypto/sha1\"\n    \"crypto/subtle\"\n\t\"encoding/hex\"\n\t\"strings\"\n)\ntype XsollaWebhookSignature struct{}\nfunc (x *XsollaWebhookSignature) ComputeSha1(jsonBody, secretKey string) string {\n\t// Concatenation of the JSON from the request body and the project's secret key\n\tdataToSign := jsonBody + secretKey\n\t// Create SHA1 hash\n\th := sha1.New()\n\th.Write([]byte(dataToSign))\n\tsignature := h.Sum(nil)\n\t// Convert to lowercase hexadecimal string\n\treturn strings.ToLower(hex.EncodeToString(signature))\n}\nfunc (x *XsollaWebhookSignature) VerifySignature(jsonBody, secretKey, receivedSignature string) bool {\n\tcomputedSignature := x.ComputeSha1(jsonBody, secretKey)\n\treceivedSignatureLower := strings.ToLower(receivedSignature)\n\t// Use constant time comparison to prevent timing attacks\n\treturn subtle.ConstantTimeCompare([]byte(computedSignature), []byte(receivedSignatureLower)) == 1\n}\n```\n\n### Пример реализации генерации подписи для PHP:\n\n```php\n<?php\nclass XsollaWebhookSignature\n{\n    /**\n     * Compute SHA1 signature from webhook JSON body and secret key\n     *\n     * @param string $jsonBody The raw JSON body from webhook\n     * @param string $secretKey The project's secret key\n     * @return string The lowercase SHA1 signature\n     */\n    public static function computeSha1(string $jsonBody, string $secretKey): string\n    {\n        // Concatenation of the JSON from the request body and the project's secret key\n        $dataToSign = $jsonBody . $secretKey;\n        // Generate SHA1 signature\n        $signature = sha1($dataToSign);\n        return strtolower($signature);\n    }\n    /**\n     * Verify webhook signature using timing-safe comparison\n     *\n     * @param string $jsonBody The raw JSON body from webhook\n     * @param string $secretKey The project's secret key  \n     * @param string $receivedSignature The signature from authorization header\n     * @return bool True if signature is valid, false otherwise\n     */\n    public static function verifySignature(string $jsonBody, string $secretKey, string $receivedSignature): bool\n    {\n        $computedSignature = self::computeSha1($jsonBody, $secretKey);\n        // Use hash_equals for timing-safe comparison\n        return hash_equals($computedSignature, strtolower($receivedSignature));\n    }\n}\n?>\n```\n\n### Пример реализации генерации подписи для Node.js:\n\n```js\nconst crypto = require('crypto');\nclass XsollaWebhookSignature {\n    // IMPORTANT: jsonBody must be the raw JSON string exactly as received from Xsolla\n    static computeSha1(jsonBody, secretKey) {\n        // Concatenation of the JSON from the request body and the project's secret key\n        const dataToSign = jsonBody + secretKey;\n        // Create SHA1 hash\n        const hash = crypto.createHash('sha1');\n        hash.update(dataToSign, 'utf8');\n        // Convert to lowercase hexadecimal string\n        return hash.digest('hex').toLowerCase();\n    }\n    static verifySignature(jsonBody, secretKey, receivedSignature) {\n        const computedSignature = this.computeSha1(jsonBody, secretKey);\n        const cleanReceivedSignature = receivedSignature.toLowerCase();\n        // Check if signatures have the same length before using timingSafeEqual\n        if (computedSignature.length !== cleanReceivedSignature.length) {\n            return false;\n        }\n        try {\n            return crypto.timingSafeEqual(\n                Buffer.from(computedSignature, 'hex'),\n                Buffer.from(cleanReceivedSignature, 'hex')\n            );\n        } catch (error) {\n            // Return false if there's any error (e.g., invalid hex characters)\n            return false;\n        }\n    }\n}\n```\n\n## Отправка ответов на вебхук\n\nЧтобы подтвердить получение вебхука, ваш сервер должен вернуть:\n* `200`, `201`, или `204` HTTP-код в случае успешного ответа.\n* `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# Ошибки\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# Лучшие практики\n\n## Безопасность\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## Архитектура обработчика вебхуков\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## Идемпотентность и дубликаты\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## Стабильность системы\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## Примеры реализации\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# Частые вопросы\n\n## Необходимо ли для вебхуков использовать HTTPS?\n\nДа.\n\n## Могу ли я получать платежные вебхуки на несколько URL-адресов?\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>Примечание</strong></p>\n<p>Если вы тестируете интеграцию локально, `POST`-запросы от Xsolla не доходят до URL-адресов вида <code>http://localhost:3000/my-webhook-endpoint</code>. Используется такие сервисы как <a href=\"https://ngrok.com/\">ngrok</a>, которые позволяют создать туннель для внешнего доступа, благодаря чему вы сможете локально получать запросы от Xsolla. Подробнее вы можете прочитать, например, в <a href=\"https://ngrok.com/docs/guides/share-localhost/webhooks#test-webhooks-locally\">документации ngrok</a>.</p>\n</div>\n\n## Почему оповещение от Xsolla не пришло на URL-адрес вебхука?\n\nУбедитесь, что ваш вебхук-сервер поддерживает `POST` и `GET` HTTP-запросы.\n\n## Как предотвратить дубликаты ID транзакций при обработке?\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## Какие есть лучшие практики работы с вебхуками?\n\nМы рекомендуем:\n\n* Возвращать код `204` или `200` сразу после проверки подписи.\n* Проверять подпись вебхука, не изменяя тело запроса.\n* Обеспечить идемпотентность всех операций.\n* Логировать все операции и настроить мониторинг ошибок.\n* Не передавать чувствительные данные в URL-адресах и не раскрывать технические \n  детали в сообщениях об ошибках.\n\nПодробная информация приведена в [разделе с лучшими \nпрактиками](/ru/webhooks/section/best-practices).\n\n# Краткий чеклист интеграции вебхуков\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# Список вебхуков\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\nПосле сохранения URL-адреса вебхука в Личном кабинете вы можете настроить \nполучение дополнительной информации в вебхуке. Для этого в разделе <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Настройки \nпроекта &gt; Вебхуки &gt; Расширенные настройки</a> установите следующий \nпереключатель в активное положение.\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Если вы зарегистрировались в Личном кабинете до 22 января 2025 г. (включительно), переключатели располагаются в разделе <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Настройки проекта &gt; Вебхуки &gt; Тестирование &gt; Payments &gt; Расширенные настройки</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Переключатель</th>\n        <th>Описание</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Показывать информацию о транзакциях сохраненными способами оплаты</td>\n        <td><p>В вебхуке будет передаваться информация в кастомных параметрах:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> — сохраненный способ оплаты не используется;</li><li><code>1</code> — способ оплаты был сохранен при совершении текущей транзакции;</li><li><code>2</code> — используется ранее сохраненный способ оплаты.</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> — единоразовый платеж;</li><li><code>2</code> — рекуррентный платеж.</li></ul></li></ul></td>\n    </tr>\n</tbody>\n</table>\n",
        "operationId": "afs-rejected-transaction",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "refund_details": {
                    "description": "Объект с финансовыми данными рефанда.",
                    "properties": {
                      "author": {
                        "description": "Инициатор возврата платежа. Значение поля передается согласно таблице:\n\n<table>\n    <thead>\n    <tr>\n        <th>Инициатор возврата</th>\n        <th>Значение поля</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Игра (через API).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>Пользователь Личного кабинета (автоматический возврат).</td>\n        <td>Email-адрес пользователя</td>\n    </tr>\n    <tr>\n        <td>Пользователь Личного кабинета (при участии службы поддержки Xsolla).</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>Cancellation by the user request / the game request</td>\n        <td>Используется, если отмена произошла из Личного кабинета.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td>Chargeback</td>\n        <td>Используется, если по транзакции был chargeback.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error</td>\n        <td>Используется в случае проблем с интеграцией между Xsolla и игрой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td>Potential fraud</td>\n        <td>Используется в случае потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment</td>\n        <td>Используется в случае совершения тестового платежа с последующей отменой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td>User invoice expired</td>\n        <td>Используется, если был выбран способ оплаты с системой отложенного платежа.</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS</td>\n        <td>Используется, если платежная система не произвела выплату по транзакции из-за потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td>Cancellation by the PS request</td>\n        <td>Используется, когда платежная система запросила отмену транзакции.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request</td>\n        <td>Используется, если игра или заказ не удовлетворяют требованиям пользователя по каким-либо причинам.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Используется, когда игра просит отменить транзакцию.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td>Account holder called to report fraud</td>\n        <td>Используется, когда владелец аккаунта сообщил, что не совершал данный платеж.</td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td>Friendly fraud</td>\n        <td>Используется, если нам сообщили о friendly fraud.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td>Duplicate</td>\n        <td>Используется, если произошла попытка повторной оплаты по счету.</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "integer"
                      },
                      "reason": {
                        "description": "Причина отмены.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "settings": {
                    "description": "Объект, содержащий настройки проекта.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "Объект с информацией о транзакции, связанной с этой операцией.",
                    "properties": {
                      "agreement": {
                        "description": "ID соглашения.",
                        "type": "integer"
                      },
                      "dry_run": {
                        "description": "Признак тестовой транзакции. Значение параметра равно 1 для тестового платежа, для реального платежа параметр не передается.",
                        "type": "integer"
                      },
                      "external_id": {
                        "description": "Внешний ID транзакции.",
                        "type": "string"
                      },
                      "id": {
                        "description": "ID транзакции.",
                        "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>Пользователь Личного кабинета (автоматический возврат).</td>\n        <td>Email-адрес пользователя</td>\n    </tr>\n    <tr>\n        <td>Пользователь Личного кабинета (при участии службы поддержки Xsolla).</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/igs/operation/update-webhook/).\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "Общая стоимость товаров, рассчитанная c учетом их количества.",
                              "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": "Общая стоимость товаров, рассчитанная c учетом их количества.",
                              "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/igs/operation/update-webhook/).\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "Общая стоимость товаров, рассчитанная c учетом их количества.",
                              "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": "Общая стоимость товаров, рассчитанная c учетом их количества.",
                              "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\nПосле сохранения URL-адреса вебхука в Личном кабинете вы можете настроить \nполучение дополнительной информации в вебхуке. Для этого в разделе <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Настройки \nпроекта &gt; Вебхуки &gt; Расширенные настройки</a> установите следующий \nпереключатель в активное положение.\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Если вы зарегистрировались в Личном кабинете до 22 января 2025 г. (включительно), переключатели располагаются в разделе <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Настройки проекта &gt; Вебхуки &gt; Тестирование &gt; Payments &gt; Расширенные настройки</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Переключатель</th>\n        <th>Описание</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Показывать информацию о транзакциях сохраненными способами оплаты</td>\n        <td><p>В вебхуке будет передаваться информация в кастомных параметрах:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> — сохраненный способ оплаты не используется;</li><li><code>1</code> — способ оплаты был сохранен при совершении текущей транзакции;</li><li><code>2</code> — используется ранее сохраненный способ оплаты.</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> — единоразовый платеж;</li><li><code>2</code> — рекуррентный платеж.</li></ul></li></ul></td>\n    </tr>\n</tbody>\n</table>\n\nКоды отмены:\n\n<table>\n    <thead>\n    <tr>\n        <th>Код</th>\n        <th>Причина отмены</th>\n        <th>Описание</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>Cancellation by the user request / the game request</td>\n        <td>Используется, если отмена произошла из Личного кабинета.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error</td>\n        <td>Используется в случае проблем с интеграцией между Xsolla и игрой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment</td>\n        <td>Используется в случае совершения тестового платежа с последующей отменой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS</td>\n        <td>Используется, если платежная система не произвела выплату по транзакции из-за потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request</td>\n        <td>Используется, если игра или заказ не удовлетворяют требованиям пользователя по каким-либо причинам.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</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>Пользователь Личного кабинета (автоматический возврат).</td>\n        <td>Email-адрес пользователя</td>\n    </tr>\n    <tr>\n        <td>Пользователь Личного кабинета (при участии службы поддержки Xsolla).</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\nПосле сохранения URL-адреса вебхука в <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Личном \nкабинете</a> вы можете настроить получение дополнительной информации в вебхуке.\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Если вы зарегистрировались в Личном кабинете до 22 января 2025 года (включительно), вы можете найти переключатели в проекте в разделе <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Настройки &gt; Вебхуки &gt; Тестирование &gt; Payments &gt; Расширенные настройки</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Переключатель</th>\n        <th>Описание</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Показывать информацию о сохраненном платежном аккаунте</td>\n        <td>Информация о сохраненном способе оплаты передается в кастомном объекте <code>payment_account</code>.</td>\n    </tr>\n    <tr>\n        <td>Показывать информацию о транзакциях сохраненными способами оплаты</td>\n        <td><p>В вебхуке будет передаваться информация в кастомных параметрах:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> — сохраненный способ оплаты не используется;</li><li><code>1</code> — способ оплаты был сохранен при совершении текущей транзакции;</li><li><code>2</code> — используется ранее сохраненный способ оплаты.</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> — единоразовый платеж;</li><li><code>2</code> — рекуррентный платеж.</li></ul></li></ul></td>\n    </tr>\n    <tr>\n        <td>Добавить объект 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>Внимание</strong></p>\n<p>Набор полей, отправляемых в вебхуке, зависит:<ul><li>от расширенных настроек, которые вы установили в Личном кабинете;</li><li>кастомных настроек, которые были заданы на стороне Xsolla.</li></ul></p><p>При возникновении вопросов обратитесь к персональному менеджеру проекта или напишите на <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.</p>\n</div>\n",
        "operationId": "payment",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "Ваши дополнительные параметры.",
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "payment_details": {
                    "description": "Объект с финансовыми данными платежа.",
                    "properties": {
                      "country_wht": {
                        "$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>Пользователь Личного кабинета (автоматический возврат).</td>\n        <td>Email-адрес пользователя</td>\n    </tr>\n    <tr>\n        <td>Пользователь Личного кабинета (при участии службы поддержки Xsolla).</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>Cancellation by the user request / the game request</td>\n        <td>Используется, если отмена произошла из Личного кабинета.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td>Chargeback</td>\n        <td>Используется, если по транзакции был chargeback.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error</td>\n        <td>Используется в случае проблем с интеграцией между Xsolla и игрой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td>Potential fraud</td>\n        <td>Используется в случае потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment</td>\n        <td>Используется в случае совершения тестового платежа с последующей отменой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td>User invoice expired</td>\n        <td>Используется, если был выбран способ оплаты с системой отложенного платежа.</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS</td>\n        <td>Используется, если платежная система не произвела выплату по транзакции из-за потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td>Cancellation by the PS request</td>\n        <td>Используется, когда платежная система запросила отмену транзакции.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request</td>\n        <td>Используется, если игра или заказ не удовлетворяют требованиям пользователя по каким-либо причинам.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Используется, когда игра просит отменить транзакцию.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td>Account holder called to report fraud</td>\n        <td>Используется, когда владелец аккаунта сообщил, что не совершал данный платеж.</td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td>Friendly fraud</td>\n        <td>Используется, если нам сообщили о friendly fraud.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td>Duplicate</td>\n        <td>Используется, если произошла попытка повторной оплаты по счету.</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "integer"
                      },
                      "reason": {
                        "description": "Причина отмены.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "settings": {
                    "description": "Объект, содержащий настройки проекта.",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "Объект с информацией о транзакции, связанной с этой операцией.",
                    "properties": {
                      "dry_run": {
                        "description": "Признак тестовой транзакции. Значение параметра равно 1 для тестового платежа, для реального платежа параметр не передается.",
                        "type": "integer"
                      },
                      "external_id": {
                        "description": "Внешний ID транзакции.",
                        "type": "string"
                      },
                      "id": {
                        "description": "ID транзакции.",
                        "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": {
                              "quantity": {
                                "$ref": "#/components/schemas/quantity"
                              }
                            },
                            "title": "quantity"
                          },
                          {
                            "properties": {
                              "available": {
                                "$ref": "#/components/schemas/available"
                              },
                              "total": {
                                "$ref": "#/components/schemas/total"
                              }
                            },
                            "title": "available"
                          }
                        ],
                        "properties": {
                          "content": {
                            "$ref": "#/components/schemas/bundle_content"
                          },
                          "date_from": {
                            "$ref": "#/components/schemas/date_from"
                          },
                          "date_until": {
                            "$ref": "#/components/schemas/date_until"
                          },
                          "description": {
                            "$ref": "#/components/schemas/description"
                          },
                          "image_url": {
                            "$ref": "#/components/schemas/image_url"
                          },
                          "json_attributes": {
                            "$ref": "#/components/schemas/json_attributes"
                          },
                          "name": {
                            "$ref": "#/components/schemas/name"
                          },
                          "sku": {
                            "$ref": "#/components/schemas/sku"
                          }
                        },
                        "required": [
                          "sku"
                        ],
                        "title": "sku"
                      },
                      {
                        "oneOf": [
                          {
                            "properties": {
                              "quantity": {
                                "$ref": "#/components/schemas/quantity"
                              }
                            },
                            "title": "quantity"
                          },
                          {
                            "properties": {
                              "available": {
                                "$ref": "#/components/schemas/available"
                              },
                              "total": {
                                "$ref": "#/components/schemas/total"
                              }
                            },
                            "title": "available"
                          }
                        ],
                        "properties": {
                          "content": {
                            "$ref": "#/components/schemas/bundle_content"
                          },
                          "date_from": {
                            "$ref": "#/components/schemas/date_from"
                          },
                          "date_until": {
                            "$ref": "#/components/schemas/date_until"
                          },
                          "description": {
                            "$ref": "#/components/schemas/description"
                          },
                          "image_url": {
                            "$ref": "#/components/schemas/image_url"
                          },
                          "item_id": {
                            "$ref": "#/components/schemas/item_id"
                          },
                          "json_attributes": {
                            "$ref": "#/components/schemas/json_attributes"
                          },
                          "name": {
                            "$ref": "#/components/schemas/name"
                          }
                        },
                        "required": [
                          "item_id"
                        ],
                        "title": "item_id"
                      }
                    ],
                    "type": "object"
                  },
                  "type": "array"
                }
              }
            },
            "description": "Верните список товаров, которые доступны пользователю, а также информацию о том, что конкретный пользователь может купить определенный товар заданное количество раз."
          },
          "404": {
            "description": "Пользователь не найден."
          }
        },
        "summary": "Персонализация каталога на стороне партнера",
        "tags": [
          "personalization"
        ],
        "x-codeSamples": [
          {
            "label": "CURL",
            "lang": "cURL",
            "source": "curl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'accept: application/json' \\\n-H 'content-type: application/json' \\\n-H 'authorization: Signature d90d319f05df7b0f86d2485f48e7079f0f752523' \\\n-d '{\n        \"notification_type\": \"partner_side_catalog\",\n        \"user\": {\n            \"user_id\": \"12345\",\n            \"country\": \"US\"\n        }\n    }'"
          },
          {
            "label": "HTTP",
            "lang": "HTTP",
            "source": "POST /your/uri HTTP/1.1\nhost:           your.hostname\naccept:         application/json\ncontent-type:   application/json\nauthorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523\n\n{\n    \"notification_type\": \"partner_side_catalog\",\n    \"user\": {\n      \"user_id\": \"12345\",\n      \"country\": \"US\"\n    }\n}"
          }
        ]
      }
    },
    "refund": {
      "post": {
        "description": "При отмене платежа 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\nПосле сохранения URL-адреса вебхука в <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Личном \nкабинете</a> вы можете настроить получение дополнительной информации в вебхуке.\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Если вы зарегистрировались в Личном кабинете до 22 января 2025 года (включительно), вы можете найти переключатели в проекте в разделе <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Настройки &gt; Вебхуки &gt; Тестирование &gt; Payments &gt; Расширенные настройки</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Переключатель</th>\n        <th>Описание</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Показывать информацию о транзакциях сохраненными способами оплаты</td>\n        <td><p>В вебхуке будет передаваться информация в кастомных параметрах:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code> — сохраненный способ оплаты не используется;</li><li><code>1</code> — способ оплаты был сохранен при совершении текущей транзакции;</li><li><code>2</code> — используется ранее сохраненный способ оплаты.</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code> — единоразовый платеж;</li><li><code>2</code> — рекуррентный платеж.</li></ul></li></ul></td>\n    </tr>\n    <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>Cancellation by the user request / the game request</td>\n        <td>Используется, если отмена произошла из Личного кабинета.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td>Chargeback</td>\n        <td>Используется, если по транзакции был chargeback.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error</td>\n        <td>Используется в случае проблем с интеграцией между Xsolla и игрой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td>Potential fraud</td>\n        <td>Используется в случае потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment</td>\n        <td>Используется в случае совершения тестового платежа с последующей отменой.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td>User invoice expired</td>\n        <td>Используется, если был выбран способ оплаты с системой отложенного платежа.</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS</td>\n        <td>Используется, если платежная система не произвела выплату по транзакции из-за потенциального фрода.<br /><b>В этом случае мы рекомендуем добавить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td>Cancellation by the PS request</td>\n        <td>Используется, когда платежная система запросила отмену транзакции.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request</td>\n        <td>Используется, если игра или заказ не удовлетворяют требованиям пользователя по каким-либо причинам.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Используется, когда игра просит отменить транзакцию.<br /><b>В этом случае мы не рекомендуем заносить пользователя в черный список.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td>Account holder called to report fraud</td>\n        <td>Используется, когда владелец аккаунта сообщил, что не совершал данный платеж.</td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td>Friendly fraud</td>\n        <td>Используется, если нам сообщили о friendly fraud.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td>Duplicate</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>Пользователь Личного кабинета (автоматический возврат).</td>\n        <td>Email-адрес пользователя</td>\n    </tr>\n    <tr>\n        <td>Пользователь Личного кабинета (при участии службы поддержки Xsolla).</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>Внимание</strong></p>\n<p>Набор полей, отправляемых в вебхуке, зависит от настроек, которые:<ul><li>вы установили в Личном кабинете в разделе <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Настройки проекта &gt; Вебхуки &gt; Расширенные настройки</a>;</li><li>были заданы на стороне Xsolla.</li></ul></p><p>При возникновении вопросов обратитесь к персональному менеджеру проекта или напишите на <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/igs/operation/update-webhook/).\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "Общая стоимость товаров, рассчитанная c учетом их количества.",
                              "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": "Общая стоимость товаров, рассчитанная c учетом их количества.",
                              "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/igs/operation/update-webhook/).\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "Общая стоимость товаров, рассчитанная c учетом их количества.",
                              "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": "Общая стоимость товаров, рассчитанная c учетом их количества.",
                              "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\nПосле сохранения URL-адреса вебхука в Личном кабинете вы можете настроить \nполучение дополнительной информации в вебхуке. Для этого в разделе <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Настройки \nпроекта &gt; Вебхуки &gt; Расширенные настройки</a> установите необходимые \nпереключатели в активное положение.\n\n<div class=\"note\">\n<p><strong>Примечание</strong></p>\n<p>Если вы зарегистрировались в Личном кабинете до 22 января 2025 г. (включительно), переключатели располагаются в разделе <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Настройки проекта &gt; Вебхуки &gt; Тестирование &gt; Payments &gt; Расширенные настройки</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Переключатель</th>\n        <th>Описание</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Показывать только необходимую информацию о пользователе без чувствительных данных</td>\n        <td><p>В вебхуке о пользователе будет передаваться только следующая информация:</p><ul><li>ID;</li><li>страна.</li></ul></td>\n    </tr>\n    <tr>\n        <td>Передавать кастомные параметры</td>\n        <td>В вебхуке будет передаваться информация о <a href=\"/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": "ID проекта. Вы можете найти этот параметр в [Личном кабинете](https://publisher.xsolla.com/) рядом с названием проекта.",
        "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": "Объект с информацией о заказе. Чтобы получать эту информацию, в [Личном кабинете](https://publisher.xsolla.com/) в разделе **Настройки проекта &gt; Вебхуки &gt; Расширенные настройки** установите переключатель **Добавить объект order в вебхук** в положение **Вкл**.",
        "type": "object"
      },
      "locale": {
        "description": "Язык интерфейса пользователя. Используется [двухбуквенное обозначение](https://developers.xsolla.com/ru/doc/pay-station/features/localization/) (в нижнем регистре).",
        "type": "string"
      },
      "quantity": {
        "deprecated": true,
        "description": "Количество товара, которое может приобрести один пользователь. Чтобы не ограничивать количество товара, передайте `null`. Чтобы товар был недоступен для покупки, но отображался в каталоге, передайте `0`.\n\nЕсли вы используете этот параметр, информация о лимите покупок не отображается в каталоге. Чтобы информация о лимите покупок отображалась в каталоге (например, `7/10`), передайте пару `available` и `total` вместо `quantity`.",
        "type": "integer"
      },
      "available": {
        "description": "Оставшееся количество товара, которое может приобрести пользователь.\n\nЧтобы информация о лимите покупок отображалась в каталоге (например, `7/10`), передайте пару `available` и `total`.",
        "type": "integer"
      },
      "total": {
        "description": "Максимальное количество товара, которое может приобрести один пользователь.\n\nЗначение должно быть больше 0.Чтобы информация о лимите покупок отображалась в каталоге (например, `7/10`), передайте пару `available` и `total`.",
        "exclusiveMinimum": 0,
        "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": "Уникальный ID предмета, который вы указали в Личном кабинете. Должен быть передан либо `sku`, либо `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"
      ]
    }
  ]
}