{
  "openapi": "3.1.0",
  "info": {
    "description": "# Descripción general\n\nLos webhooks son notificaciones sobre eventos que se producen en el sistema. \nCuando ocurre un evento específico, Xsolla envía una solicitud HTTP, en la cual \nse transmiten los datos del evento, a su aplicación. Generalmente, se trata de \nuna solicitud POST en formato JSON.\n\n<strong>Ejemplos de eventos:</strong>\n- interacción del usuario con un catálogo de artículos\n- pago o cancelación de un pedido\n\nCuando se produce un evento definido, Xsolla lo notifica a su sistema mediante \nun webhook. En consecuencia, puede realizar acciones como:\n- reponer el saldo del usuario\n- efectuar una devolución de pago\n- abonar o cargar nuevos artículos en la cuenta de usuario\n- empezar a proveer una suscripción\n- bloquear a un usuario si hay una sospecha de fraude\n\n<b>Ejemplo de un flujo de trabajo de webhook de procesamiento de pagos:</b>\n\n![Webhook de procesamiento de \npagos](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks-general.svg)\n\n<div class=\"note\">\n<p><strong>Nota</strong></p><p>Dependiendo de la solución utilizada y del tipo de integración, el conjunto de webhooks y la secuencia de interacciones pueden ser distintos a los del ejemplo proporcionado.</p>\n</div>\n\n<b>Videoguía para la integración de webhooks con 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>Configuración de Webhooks para trabajar con productos y soluciones de Xsolla:</b>\n\n<table>\n<thead>\n    <tr>\n        <th>Producto/Solución</th>\n        <th>Obligatorio/Opcional</th>\n        <th>¿Para qué se utilizan los webhooks?</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Payments</td>\n        <td>Obligatorio</td>\n        <td>\n          <ul>\n            <li>Validación del usuario.</li>\n            <li>Recibir información sobre los datos de la transacción en caso de pago aceptado o devolución del pago.</li>\n            <li>Abonar a un usuario los artículos comprados y cargar en su cuenta los artículos si se cancela el pedido.</li>\n          </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>Store</td>\n        <td>Obligatorio</td>\n        <td>\n          <ul>\n            <li>Validación del usuario.</li>\n            <li>Recibir información sobre los datos de la transacción en caso de pago aceptado o devolución del pago.</li>\n            <li>Abonar a un usuario los artículos comprados y cargar en su cuenta los artículos si se cancela el pedido.</li>\n          </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>Game Sales</td>\n        <td>Opcional</td>\n        <td>Para vender claves del juego, la validación del usuario y el abono de los artículos no son necesarios. Puede conectar los webhooks si desea recibir información sobre eventos, como el pago o la cancelación de pedidos.<br />Si conecta webhooks, es esencial procesar todos los <a href=\"/es/webhooks/overview/#section/List-of-required-webhooks\">webhooks requeridos</a> entrantes.\n</td>\n    </tr>\n    <tr>\n        <td>Suscripciones</td>\n        <td>Opcional</td>\n        <td>Recibir información sobre la creación, actualización o cancelación de una suscripción. También puede <a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_information_set_up_via_api\">solicitar información mediante la API</a>.\n       </td>\n    </tr>\n    <tr>\n        <td>Web Shop</td>\n        <td>Obligatorio</td>\n        <td>\n          <ul>\n            <li>Validación del usuario.</li>\n            <li>Recibir información sobre los datos de la transacción en caso de pago aceptado o devolución del pago.</li>\n            <li>Abonar a un usuario los artículos comprados y cargar en su cuenta los artículos si se cancela el pedido.</li>\n            <li>Autenticación de usuario, si usa la autenticación mediante ID de usuario. Como alternativa, puede utilizar <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\">autenticación de usuario mediante Xsolla Login</a>.</li>\n          </ul>\n        </td>\n    </tr>\n    <tr>\n        <td>Digital Distribution Hub</td>\n        <td>Obligatorio</td>\n        <td>\n          <ul>\n            <li>Validación del usuario.</li>\n            <li>Vincular el ID de transacción en el lado de Xsolla con el ID de transacción en su sistema.</li>\n            <li>Transferir parámetros de transacción adicionales en el pedido.</li>\n            <li>Abonar al usuario los artículos comprados y cargar en su cuenta los artículos si se cancela el pedido.</li>\n          </ul>\n          <p>Consulte la <a href=\"/solutions/ddh/#integration_guide_ddh_webhook\">documentación</a> para obtener información detallada sobre cómo establecer webhooks para el Digital Distribution Hub.</p>\n        </td>\n    </tr>\n    <tr>\n        <td>Login</td>\n        <td>Opcional</td>\n        <td>\n          <p>Recibir información sobre un evento:</p>\n          <ul>\n            <li>registro/autorización del usuario</li>\n            <li>Confirmación de la dirección de correo electrónico del usuario</li>\n            <li>vincular la cuenta de redes sociales de un usuario</li>\n          </ul>\n          <p>Consulte la <a href=\"/api/login/operation/add-webhook-for-event/\">documentación de Login</a> para obtener información detallada sobre cómo establecer webhooks.</p>\n        </td>\n    </tr>\n</tbody>\n</table>\n\n# Lista de webhooks requeridos\nSi utiliza productos y soluciones que requieren trabajar con webhooks, <a \nhref=\"/webhooks/overview/#section/Set-up-webhooks-in-Publisher-Account\">active \ny pruebe los webhooks en su Cuenta del editor</a> y <a \nhref=\"/webhooks/overview/#section/Webhook-listener\">establezca su \nprocesamiento</a>. Cuando se producen eventos específicos, los webhooks se \nenvían secuencialmente. Por lo tanto, si no procesa uno de los webhooks, no se \nenviarán los posteriores. La lista de webhooks requeridos se muestra a \ncontinuación.\n\n## Tienda y pagos\nSe han configurado dos opciones de envío de webhooks del lado de Xsolla para la \ncompra y la devolución de artículos en el sitio web: los datos de pago y de la \ntransacción, así como la información sobre los artículos comprados, se pueden \nenviar por separado o se pueden combinar en un webhook.\n\n<b>Recibir información en webhooks combinados:</b>\n\nSi se registró en <a href=\"https://publisher.xsolla.com/\">Cuenta del editor</a> \ndespués del 22 de enero de 2025, recibirá toda la información en los webhooks \n<a href=\"/webhooks/operation/successful-order-payment\">Successful payment for \norder</a> (`order_paid`) y <a href=\"/webhooks/operation/order-\ncancellation\">Order cancellation</a> (`order_canceled`). En este caso, no es \nnecesario procesar los webhooks <a href=\"/webhooks/operation/payment\">Pago</a> \n(`payment`) y <a href=\"/webhooks/operation/refund\">Reembolso</a> (`refund`).\n\n<b>Recibir información en webhooks separados:</b>\n\nSi se registró en <a href=\"https://publisher.xsolla.com/\">Cuenta del editor</a> \nel 22 de enero de 2025 o antes, recibirá los siguientes webhooks:\n- <a href=\"/webhooks/operation/payment\">Pago</a> (`payment`) y <a \n  href=\"/webhooks/operation/refund\">Reembolso</a> (`refund`) con información \n  sobre los datos de pago y los detalles de la transacción.\n- <a href=\"/webhooks/operation/successful-order-payment-separate\">Successful \n  payment for order</a> (`order_paid`) y <a href=\"/webhooks/operation/order-\n  cancellation-separate\">Order cancellation</a> (`order_canceled`) con \n  información sobre los artículos comprados.\n\nDebe procesar todos los webhooks entrantes. Para cambiar a la nueva opción con \nla recepción de webhooks combinados, contacte con sus gestores de éxito del \ncliente o escriba a <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.\n\nPara el funcionamiento completo de la tienda del juego y la gestión de pagos, \nes necesario implementar el procesamiento de los principales webhooks.\n\n<b>Si recibe webhooks combinados</b>:\n\n<table>\n<thead>\n    <tr>\n        <th>Nombre y tipo de webhook</th>\n        <th>Descripción</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Validación del usuario &gt; <a href=\"/webhooks/operation/user-validation/\">Validación del usuario</a> (<code>user_validation</code>)</td>\n        <td>Se envía en diferentes etapas del proceso de pago para garantizar que el usuario está registrado en el juego.</td>\n    </tr>\n    <tr>\n        <td>&gt; Webhooks combinados &gt; de Game services <a href=\"/webhooks/operation/successful-order-payment\">Successful payment for order</a> (<code>order_paid</code>)</td>\n        <td>Contiene datos de pago, detalles de la transacción e información sobre los artículos comprados. Utilice los datos del webhook para añadir artículos al usuario.</td>\n    </tr>\n    <tr>\n        <td>Servicios de juego &gt; Webhooks combinados &gt; <a href=\"/webhooks/operation/order-cancellation\">Cancelación del pedido</a> (<code>order_canceled</code>)</td>\n        <td>Contiene datos del pago cancelado, detalles de la transacción e información sobre los artículos comprados. Utilice los datos del webhook para eliminar los artículos comprados.</td>\n    </tr>\n</tbody>\n</table>\n\n\n<b>Si recibe webhooks separados</b>:\n\n<table>\n<thead>\n    <tr>\n        <th>Nombre y tipo de webhook</th>\n        <th>Descripción</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Validación del usuario &gt; <a href=\"/webhooks/operation/user-validation/\">Validación del usuario</a> (<code>user_validation</code>)</td>\n        <td>Se envía en diferentes etapas del proceso de pago para garantizar que el usuario está registrado en el juego.</td>\n    </tr>\n    <tr>\n        <td>Pagos &gt; <a href=\"/webhooks/operation/payment\">Pago</a> (<code>payment</code>)</td>\n        <td>Contiene los datos del pago y los detalles de la transacción.</td>\n    </tr>\n    <tr>\n        <td>&gt; Webhooks separados &gt;de Game services  <a href=\"/webhooks/operation/successful-order-payment-separate\">Successful payment for order</a> (<code>order_paid</code>)</td>\n        <td>Contiene información sobre los artículos comprados. Utilice los datos del webhook para añadir artículos al usuario.</td>\n    </tr>\n    <tr>\n        <td>Pagos &gt; <a href=\"/webhooks/operation/refund\">Reembolso</a> (<code>refund</code>)</td>\n        <td>Contiene los datos del pago y los detalles de la transacción.</td>\n    </tr>\n    <tr>\n        <td>Servicios de juego &gt; Webhooks separados &gt; <a href=\"/webhooks/operation/order-cancellation-separate\">Cancelación del pedido</a> (<code>order_canceled</code>)</td>\n        <td>Contiene información sobre los artículos comprados y el ID de la transacción cancelada. Utilice los datos del webhook para eliminar los artículos comprados.</td>\n    </tr>\n</tbody>\n</table>\n\nSi la <a href=\"/doc/in-game-store/features/personalization\">personalización</a> \ndel catálogo de artículos se implementa en el lado de su aplicación, establezca \nel procesamiento del webhook <a href=\"/webhooks/operation/personalized-partner-\ncatalog\">Personalización del catálogo en el lado del socio</a>.\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Para recibir pagos reales, solo es necesario <a href=\"/doc/in-game-store/integration-guide/sign-licensing-agreement/\">firmar el acuerdo de licencia</a> e implementar el procesamiento de los webhooks:</p>\n<p><ul><li><a href=\"/webhooks/operation/payment\">Payment</a>, <a href=\"/webhooks/operation/successful-order-payment-separate\">Successful payment for order</a> y <a href=\"/webhooks/operation/user-validation/\">User validation</a> si recibe webhooks separados</li><li><a href=\"/webhooks/operation/successful-order-payment\">Successful payment for order</a> y <a href=\"/webhooks/operation/user-validation/\">User validation</a> si recibe webhooks combinados.</li></ul></p>\n</div>\n\n## Suscripciones\nPara gestionar automáticamente los planes de suscripción, es necesario \nimplementar el procesamiento de los principales webhooks:\n- <a href=\"/webhooks/operation/user-validation/\">Validación del usuario</a> \n  (`user_validation`): se envía en diferentes etapas del proceso de pago para \n  garantizar que el usuario esté registrado en el juego.\n- <a href=\"/webhooks/operation/payment\">Pago</a> (`payment`): se envía cuando se \n  paga un pedido y contiene los datos del pago y los detalles de la transacción.\n- <a href=\"/webhooks/operation/created-subscription/\">Suscripción creada</a> \n  (`create_subscription`): se envía cuando se ha procesado correctamente un \n  webhook de <a href=\"/webhooks/operation/payment\">Pago</a> o el usuario ha \n  adquirido una suscripción con un periodo de prueba. Contiene los detalles de la \n  suscripción adquirida y los datos del usuario. Use los datos del webhook para \n  agregar una suscripción al usuario.\n- <a href=\"/webhooks/operation/updated-subscription/\">Suscripción actualizada</a> \n  (`update_subscription`): se envía cuando se renueva o modifica una suscripción, \n  cuando se ha procesado correctamente un webhook de <a \n  href=\"https://developers.xsolla.com/es/webhooks/operation/payment\">Pago</a>. \n  Contiene los detalles de la suscripción adquirida y los datos del usuario. Use \n  los datos del webhook para ampliar la suscripción del usuario o cambiar los \n  parámetros de la suscripción.\n- <a href=\"/webhooks/operation/refund\">Reembolso</a> (`refund`): se envía cuando \n  se cancela un pedido y contiene los datos del pago cancelado y los detalles de \n  la transacción.\n- <a href=\"/webhooks/operation/canceled-subscription/\">Suscripción cancelada</a> \n  (`cancel_subscription`): se envía cuando se ha procesado correctamente un \n  webhook de <a href=\"/webhooks/operation/refund\">Reembolso</a> o se ha cancelado \n  la suscripción por otro motivo. Contiene información sobre la suscripción y los \n  datos del usuario. Use los datos del webhook para sustraer al usuario las \n  suscripciones adquiridas.\n\n# Establecer webhooks en Cuenta del editor\n\n## Configuración general\n\nPara habilitar la recepción de webhooks:\n1. En el proyecto en Cuenta del editor vaya a <a \n   href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\">Project \n   settings &gt; Webhooks</a>.\n2. En el campo <b>Webhook server</b>, especifique la URL de su servidor en el que \n   desea recibir webhooks en el formato `https://example.com`. También puede \n   especificar la URL que encuentre en una herramienta para probar webhooks.\n\n<div class=\"notice\">\n<p><strong>Aviso</strong></p>\n<p> El protocolo HTTPS se utiliza para transferir datos; el protocolo HTTP no es compatible.</p>\n</div>\n\n<p></p>\n\n3. Genere una clave secreta:\n\n<ol><ol type=\"a\">\n<li>En la sección <strong>Secret keys</strong>, haga clic en <strong>Add key</strong>.</li>\n<li>En la ventana modal que se abre, introduzca el nombre de la clave que le permita identificarla en la lista general.</li>\n<li>Haga clic en <strong>Create key</strong>.</li>\n<li>Haga clic en <strong>Copy secret</strong> y guarde la clave creada en un lugar seguro.</li>\n<li>Haga clic en <strong>Done</strong>.</li>\n<li>Confirme que ha guardado la clave y haga clic en <strong>Ok, close</strong>.</li>\n</ol></ol>\n\n![Añadir \nclave](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/add-key.svg)\n\n<div class=\"notice\">\n<p><strong>Aviso</strong></p>\n<p>Recomendaciones:<ul>\n<li><strong>Guarde la clave secreta generada en un lugar seguro</strong>. Puede ver la clave en Cuenta del editor solo una vez cuando se crea.</li>\n<li>No comparta su clave secreta con nadie.</li>\n<li>La clave secreta debe guardarse en su servidor y nunca en binarios o en el front-end.</li></ul>\n</p>\n</div>\n\n4. Haga clic en **Enable webhooks**.\n\n<div class=\"note\">\n<p><strong>Tenga en cuenta</strong></p>\n<p>Para probar los webhooks, puede seleccionar cualquier sitio web específico, como <a href=\"https://webhook.site/#!/\">webhook.site</a>, o una plataforma, como <a href=\"https://ngrok.com/\">ngrok</a>.</p>\n</div>\n\n<p></p>\n\n<div class=\"notice\">\n    <p><strong>Aviso</strong></p>\n    <p>No es posible enviar webhooks a diferentes URL a la vez. Lo que sí se puede hacer en Cuenta del editor es indicar primero una URL de prueba y, a continuación, sustituirla por la URL real.</p>\n</div>\n\nPara deshabilitar la recepción de webhooks:\n1. En el proyecto en Cuenta del editor vaya a <a \n   href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\">Project \n   settings &gt; Webhooks</a>.\n2. Haga clic en <b>Disable webhooks</b>.\n\n## Rotación de clave secreta\n\nActualizar las claves secretas con frecuencia mejora la seguridad de su \nintegración. Puede crear hasta 5 claves secretas en su proyecto para habilitar \nsu rotación. Para ello:\n\n1. En <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/\">Project \n   settings &gt; Webhooks</a>, haga clic en **Add key**.\n\n![Añadir \nclave](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/add-new-key.svg)\n\n2. En la ventana modal que se abre, introduzca el nombre de la clave que le \n   permita identificarla en la lista general.\n3. Haga clic en **Create key**.\n4. Haga clic en **Copy secret** y guarde la clave creada.\n5. Haga clic en **Done**.\n6. Confirme que ha guardado la clave y haga clic en **Ok, close**.\n\n<div class=\"notice\">\n<p><strong>Aviso</strong></p>\n<p>Recomendaciones:<ul>\n<li><strong>Guarde la clave secreta generada en un lugar seguro</strong>. Puede ver la clave en Cuenta del editor solo una vez cuando se crea.</li>\n<li>No comparta su clave secreta con nadie.</li>\n<li>La clave secreta debe guardarse en su servidor y nunca en binarios o en el front-end.</li></ul>\n</p>\n</div>\n\nSolo puede haber una clave secreta activa por proyecto. Si quiere cambiarla, \nhaga clic en **Set as active** en la fila de otra clave y confirme la acción. \nCuando haya completado correctamente la migración a una nueva clave, le \nrecomendamos que elimine las claves desactivadas.\n\n![Cambiar clave \nactiva](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/activate-key.svg)\n\n## Configuración avanzada\n\nPara los webhooks de la sección <a href=\"/webhooks/overview/#section/Test-\nwebhooks-in-Publisher-Account/Store\">Payments and Store</a>, hay opciones de \nconfiguración avanzada disponibles. Aparecerán automáticamente en el bloque <a \nhref=\"/webhooks/overview/#section/Set-up-webhooks-in-Publisher-Account/General-\nsettings\">General settings</a> después de hacer clic en el botón <b>Get \nwebhooks</b>.\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Si no se muestra la configuración avanzada, asegúrese de que la recepción de webhooks está conectada en la configuración general y de que se encuentra en la pestaña <b>Testing &gt; Payments and Store</b>.</p>\n</div>\n\nEn esta sección puede configurar la recepción de información adicional en \nwebhooks. Para ello, active la opción. La línea de cada permiso indica los \nwebhooks que se verán afectados al cambiar la configuración.\n\n<table>\n<thead>\n    <tr>\n        <th>Conmutador</th>\n        <th>Descripción</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Mostrar información sobre la cuenta de pago guardada (solo se muestra si se registró en Cuenta del editor el 22 de enero de 2025 o antes y recibe webhooks separados).</td>\n        <td>La información sobre el método de pago guardado se transmite en el objeto personalizado <code>payment_account</code>.</td>\n    </tr>\n    <tr>\n        <td>Mostrar información sobre las transacciones realizadas a través de los métodos de pago guardados.</td>\n        <td><p>La información se transmite en los siguientes parámetros personalizados del webhook:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code>: no se utilizó el método de pago guardado</li><li><code>1</code>: el método de pago se guardó al realizar el pago actual</li><li><code>2</code>: se utiliza el método de pago guardado previamente</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code>: pago único</li><li><code>2</code>: pago periódico</li></ul></li></ul></td>\n    </tr>\n    <tr>\n        <td>Añadir el objeto <code>order</code> al webhook (solo se muestra si se registró en Cuenta del editor el 22 de enero de 2025 o antes y recibe webhooks separados).</td>\n        <td>La información sobre el pedido se transmite en el objeto <code>order</code> del webhook <a href=\"/webhooks/operation/payment/\">Pago</a>.</td>\n    </tr>\n    <tr>\n        <td>Enviar solo los parámetros de usuario necesarios, sin incluir datos confidenciales.</td>\n        <td><p>Solamente la siguiente información sobre el usuario se transmite en el webhook:</p><ul><li>ID</li><li>país</li></ul></td>\n    </tr>\n    <tr>\n        <td>Enviar parámetros personalizados.</td>\n        <td>La información sobre los <a href=\"/api/pay-station/operation/create-token/\">parámetros de token personalizados</a> se transmite en el webhook.</td>\n    </tr>\n    <tr>\n        <td>Mostrar el número BIN y el sufijo de la tarjeta.</td>\n        <td><p>La siguiente información sobre el número de tarjeta bancaria se transmite en el webhook:</p><ul><li>los 6 primeros dígitos del parámetro <code>card_bin</code></li><li>los 4 últimos dígitos del <code>card_suffix</code></li></ul></td>\n    </tr>\n    <tr>\n        <td>Mostrar la marca de la tarjeta.</td>\n        <td>La marca de la tarjeta empleada para realizar el pago. Por ejemplo, Mastercard o Visa.</td>\n    </tr>\n    <tr>\n        <td>Mostrar información sobre el motivo del reembolso.</td>\n        <td>Información detallada sobre los motivos del reembolso.</td>\n    </tr>\n    <tr>\n        <td>Mostrar la retención fiscal del país y las comisiones de adquisición de usuarios.</td>\n        <td>Los objetos <code>payment_details.​country_wht</code> y <code>payment_details.​user_acquisition_fee</code> se transmitirán en el webhook. Esta opción está activada por defecto.</td>\n    </tr>\n    <tr>\n        <td>Enviar información de 3DS.</td>\n        <td>El objeto <code>cards</code> que contiene datos sobre la verificación 3-D Secure se transmitirá en el webhook.</td>\n    </tr>\n</tbody>\n</table>\n\n![Configuración \navanzada](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/advanced-settings.png)\n\n# Probar webhooks en Cuenta del editor\n\nProbar los webhooks ayuda a asegurar la correcta configuración del proyecto \ntanto en su lado como en el lado de Xsolla.\n\nSi los webhooks están <a href=\"/webhooks/overview/#section/Set-up-webhooks-in-\nPublisher-Account\">establecidos</a> correctamente, aparecerá una sección de \nprueba de webhooks bajo la sección de configuración de webhooks.\n\n![Sección de pruebas de \nwebhooks](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/testing-section.svg)\n\nLa sección de pruebas de Cuenta del editor varía en función de la opción de \nrecepción de webhooks.\n\nSi se registró en Cuenta del editor después del 22 de enero de 2025, recibirá \nwebhooks combinados:\n\n<table>\n<thead>\n    <tr>\n        <th>Nombre de la pestaña para pruebas de webhooks</th>\n        <th>Nombre y tipo de webhook</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><b>Payments and store</b></td>\n        <td>Validación del usuario &gt; <a href=\"/webhooks/operation/user-validation/\">Validación del usuario</a> (<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>&gt; Webhooks combinados &gt; de Game services <a href=\"/webhooks/operation/successful-order-payment\">Successful payment for order</a> (<code>order_paid</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Servicios de juego &gt; Webhooks combinados &gt; <a href=\"/webhooks/operation/order-cancellation\">Cancelación del pedido</a> (<code>order_canceled</code>)</td>\n    </tr>\n    <tr>\n        <td><b>Subscriptions</b></td>\n        <td>Validación del usuario &gt; <a href=\"/webhooks/operation/user-validation/\">Validación del usuario</a> (<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Pagos &gt; <a href=\"/webhooks/operation/payment\">Pago</a> (<code>payment</code>)</td>\n    </tr>\n</tbody>\n</table>\n\n\nSi se registró en Cuenta del editor el 22 de enero de 2025 o antes, recibirá \nwebhooks separados:\n\n<table>\n<thead>\n    <tr>\n        <th>Nombre de la pestaña para pruebas de webhooks</th>\n        <th>Nombre y tipo de webhook</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><b>Store</b></td>\n        <td>&gt; Webhooks separados &gt;de Game services  <a href=\"/webhooks/operation/successful-order-payment-separate\">Successful payment for order</a> (<code>order_paid</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Servicios de juego &gt; Webhooks separados &gt; <a href=\"/webhooks/operation/order-cancellation-separate\">Cancelación del pedido</a> (<code>order_canceled</code>)</td>\n    </tr>\n    <tr>\n        <td><b>Payments</b></td>\n        <td>Validación del usuario &gt; <a href=\"/webhooks/operation/user-validation/\">Validación del usuario</a> (<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Pagos &gt; <a href=\"/webhooks/operation/payment\">Pago</a> (<code>payment</code>)</td>\n    </tr>\n    <tr>\n        <td><b>Subscriptions</b></td>\n        <td>Validación del usuario &gt; <a href=\"/webhooks/operation/user-validation/\">Validación del usuario</a> (<code>user_validation</code>)</td>\n    </tr>\n    <tr>\n        <td></td>\n        <td>Pagos &gt; <a href=\"/webhooks/operation/payment\">Pago</a> (<code>payment</code>)</td>\n    </tr>\n</tbody>\n</table>\n\n<div class=\"note\">\n<p><strong>Tenga en cuenta</strong></p>\n<p>Si aparece un aviso de que la prueba no se ha superado en la sección de pruebas, verifique la configuración de la respuesta del webhook en su <a href=\"/webhooks/overview/#section/Webhook-listener\">agente de escucha del webhook</a>. Los motivos de los errores en la prueba se indican en los resultados de la prueba. </p>\n<p><b>Ejemplo:</b></p>\n<p>Cuando utiliza el sitio especializado <a href=\"https://webhook.site/#!/\">webhook.site</a> para la prueba.</p>\n<p>Aparece un error en la sección <b>Testing response to invalid signature</b>.</p>\n<p>Esto ocurre porque Xsolla envía un webhook con una firma incorrecta y espera que su controlador responda con un código HTTP <code>4xx</code> que especifique el código de error <code>INVALID_SIGNATURE</code>.</p>\n<p><a href=\"https://webhook.site/#!/\">webhook.site</a> envía un código HTTP <code>200</code> en respuesta a todos los webhooks, incluyendo un webhook con una firma incorrecta. No se puede obtener el código HTTP <code>4xx</code> esperado, por lo que aparece un error en el resultado de la prueba.</p>\n</div>\n\nA continuación se describe el proceso de pruebas para el escenario con webhooks \ncombinados.\n\n## Payments and Store\n\nEn la pestaña <b>Payments and Store</b>, puede probar los siguientes webhooks:\n- <a href=\"/webhooks/operation/user-validation/\">Validación del usuario</a> \n  (`user_validation`)\n- <a href=\"/webhooks/operation/successful-order-payment\">Successful payment for \n  order</a> (`order_paid`)\n- <a href=\"/webhooks/operation/order-cancellation\">Cancelación del pedido</a> \n  (`order_canceled`)\n\nPara probar los webhooks:\n1. En la sección de pruebas de webhooks, vaya a la pestaña <b>Payments and \n   Store</b>.\n2. En la lista desplegable, seleccione el tipo de artículo. Si aún no ha \n   configurado este tipo de artículo en Cuenta del editor, haga clic en el botón \n   para configurarlo. Una vez creado el artículo, vuelva a la sección de pruebas \n   del webhook y continúe con el siguiente paso.\n3. Rellene los campos necesarios:\n   * **User ID**: al realizar pruebas, puede utilizar cualquier combinación de \n     letras y números.\n   * Introduzca cualquier valor en el campo **Xsolla order ID**.\n   * **Xsolla invoice ID**: ID de la transacción en Xsolla. Al hacer pruebas, puede \n     usar cualquier valor numérico.\n   * **Invoice ID**: ID de transacción en el juego. Al hacer pruebas, puede usar \n     cualquier combinación de letras y números. No es un parámetro obligatorio para \n     que el pago se realice correctamente, pero puede indicarlo para vincular el ID \n     de transacción de su sistema con el de Xsolla.\n   * **Amount**: importe del pago. Al hacer pruebas, puede utilizar cualquier valor \n     numérico.\n   * **Currency**: seleccione una moneda de la lista desplegable.\n   * Seleccione el SKU de los artículos en la lista desplegable e indique la \n     cantidad. Puede seleccionar varios artículos del mismo tipo haciendo clic en \n     **+** y añadiéndolos en una nueva línea.\n4. Haga clic en **Test webhooks**.\n\nLos webhooks <a href=\"/webhooks/operation/user-validation/\">User \nvalidation</a>, <a href=\"/webhooks/operation/successful-order-\npayment\">Successful payment for order</a> y <a href=\"/webhooks/operation/order-\ncancellation\">Order cancellation</a> con los datos especificados se envían a la \nURL facilitada. Los resultados de la prueba de cada tipo de webhook se muestran \ndebajo del botón <b>Test webhooks</b>.\n\nSi la casilla <b>Use public user ID</b> está marcada en <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/advanced\">Project settings \n> Integration settings</a>, el webhook <a href=\"/webhooks/user-validation/user-\nsearch\">Búsqueda del usuario</a> también se enviará a la URL de su servidor de \nwebhooks y se mostrará el resultado de la prueba.\n\nPara cada webhook, tiene que establecer el procesamiento de ambos escenarios: \nuno, satisfactorio, y el otro, fallido.\n\n¡[Sección de pruebas de \npagos](https://cdn.xsolla.net/developers/current/images/api_docs/webhooks/testing-results.svg)\n\n## Suscripciones\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Para probar los webhooks, debe tener al menos un <a href=\"/sell-subscriptions/integration-guide/set-up-plan/\">plan de suscripción creado</a> en Cuenta del editor en <a href=\"https://publisher.xsolla.com/0/projects/0/subscriptions/plans\">Items catalog &gt; Subscriptions</a>.</p>\n</div>\n\nEn la pestaña <b>Subscriptions</b> puede probar los siguientes webhooks:\n- <a href=\"/webhooks/operation/user-validation/\">Validación del usuario</a> \n  (`user_validation`)\n- <a href=\"/webhooks/operation/payment\">Pago</a> (`payment`)\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Encontrará información detallada sobre cómo probar otros escenarios de gestión de suscripciones en la <a href=\"/sell-subscriptions/integration-guide/set-up-plan/#guides_subscriptions_set_up_plan_testing_purchase\">guía de integración</a>.</p>\n</div>\n\nPara probar los webhooks:\n\n1. En la sección de pruebas, vaya a la pestaña **Subscriptions**.\n2. Rellene los campos necesarios:\n   * **User ID**: al realizar pruebas, puede utilizar cualquier combinación de \n     letras y números.\n   * **Xsolla invoice ID**: ID de la transacción en Xsolla. Al hacer pruebas, puede \n     usar cualquier valor numérico.\n   * **Public user ID**: ID conocido por el usuario, por ejemplo, una dirección de \n     correo electrónico o un apodo. Este campo se muestra si ha marcado la casilla \n     **Use public user ID** en su proyecto en [Project settings > Integration \n     settings](https://publisher.xsolla.com/0/projects/0/edit/advanced).\n   * **Amount**: importe del pago. Al hacer pruebas, puede utilizar cualquier valor \n     numérico.\n   * **Currency**: seleccione una moneda de la lista desplegable.\n   * **Plan ID**: un plan de suscripción. Elija un plan de la lista desplegable.\n   * **Subscription product**: seleccione un producto de la lista desplegable \n     (opcional). La lista se muestra si hay [productos](/es/sell-subscriptions/integration-guide/get-started/#guides_subscriptions_glossary_product) \n     configurados en su proyecto.\n   * **Invoice ID**: ID de transacción en el juego. Al hacer pruebas, puede usar \n     cualquier combinación de letras y números. No es un parámetro obligatorio para \n     que el pago se realice correctamente, pero puede indicarlo para vincular el ID \n     de transacción de su sistema con el de Xsolla.\n   * **Trial period**. Para probar la [compra de una suscripción sin periodo de \n     prueba](/es/sell-subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_sandbox) o \n     para probar la [renovación de una suscripción](/es/sell-subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_renewal)\n     , indique el valor `0`.\n3. Haga clic en **Test**.\n\nEn la URL indicada, recibirá webhooks con los datos rellenados. Los resultados \nde las pruebas de cada webhook, tanto en el caso de que se haya realizado \ncorrectamente como en el de que se haya producido un error, se muestran debajo \ndel botón <b>Test</b>.\n\n<a id=\"webhook-listener\"></a>\n\n# Agente de escucha de webhooks\n\nEl agente de escucha es un código de programa que permite recibir webhooks \nentrantes en una dirección URL especificada, <a \nhref=\"/webhooks/overview/#section/Webhook-listener/Generation-of-\nsignature\">generar una firma</a> y <a href=\"/webhooks/overview/#section/Webhook-\nlistener/Sending-responses-to-webhook\">enviar una respuesta</a> al servidor de \nwebhooks de Xsolla.\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Puede utilizar la biblioteca de <a href=\"https://developers.xsolla.com/es/sdk/php/\">SDK para PHP de Pay Station</a>, que contiene clases predefinidas para procesar webhooks.</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\nEn el lado de su aplicación, implemente la recepción de webhooks desde las \nsiguientes direcciones 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\nSi ha integrado el producto <a href=\"/doc/login/\">Login</a>, añada webhooks de \nprocesamiento desde las siguientes direcciones 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\nLimitaciones:\n- En la base de datos de su aplicación no debería haber varias transacciones \n  aceptadas con el mismo ID.\n- Si el agente de escucha de webhooks recibió un webhook con un ID que ya existe \n  en la base de datos, deberá devolver el resultado del procesamiento anterior de \n  esta transacción. No se recomienda acreditar al usuario una compra duplicada ni \n  crear registros duplicados en la base de datos.\n\n## Generación de firma\n\nPara garantizar una transmisión de datos segura, debe comprobar que el webhook \nse ha enviado desde el servidor de Xsolla y que no ha sido manipulado durante \nel tránsito. Para ello, genere su propia firma basada en la carga útil del \ncuerpo de la solicitud y compárela con la firma proporcionada en el encabezado \n`authorization` de la solicitud entrante. Si las firmas coinciden, significa \nque el webhook es auténtico y seguro de procesar.\n\nPasos de verificación:\n\n1. Obtenga la firma del encabezado `authorization` de la solicitud de webhook \n   entrante. El formato del encabezado es `Signature <signature_value>`.\n2. Obtenga el cuerpo de la solicitud del webhook en formato JSON. <div \n   class=\"notice\"><p><strong>Aviso</strong></p><p>Use la carga JSON tal y como la \n   ha recibido. No analice ni recodifique la carga, ya que esto alteraría el \n   formato y provocaría que la verificación de la firma fallara.</p></div><p></p>\n\n3. Genere su propia firma para comparar: <ol type=\"a\"> <li>Concatene la carga JSON \n   con la clave secreta de su proyecto al añadir la clave al final de la \n   cadena.</li> <li>Aplique la función hash criptográfica SHA-1 a la cadena \n   obtenida. El resultado será una cadena hexadecimal en minúsculas.</li> </ol>\n4. Compare su firma generada con la del encabezado `authorization`. Si coinciden, \n   significa que el webhook es auténtico.\n\nA continuación encontrará ejemplos de implementación de generación de firmas \npara los siguientes lenguajes: C#, C++, Go, PHP y Node.js.\n\n### Ejemplo de webhook (HTTP):\n\n```http\nPOST /your_uri HTTP/1.1\nhost: your.host\naccept: application/json\ncontent-type: application/json\ncontent-length: 165\nauthorization: Signature 52eac2713985e212351610d008e7e14fae46f902\n{\n  \"notification_type\":\"user_validation\",\n  \"user\":{\n      \"ip\":\"127.0.0.1\",\n      \"phone\":\"18777976552\",\n      \"email\":\"email@example.com\",\n      \"id\":1234567,\n      \"name\":\"Xsolla User\",\n      \"country\":\"US\"\n  }\n}\n```\n\n### Ejemplo de webhook (curl):\n\n```bash\ncurl -v 'https://your.hostname/your/uri' \\\n-X POST \\\n-H 'authorization: Signature 52eac2713985e212351610d008e7e14fae46f902' \\\n-d '{\n  \"notification_type\":\n    \"user_validation\",\n    \"user\":\n      {\n        \"ip\": \"127.0.0.1\",\n        \"phone\": \"18777976552\",\n        \"email\": \"email@example.com\",\n        \"id\": 1234567,\n        \"name\": \"Xsolla User\",\n        \"country\": \"US\"\n      }\n    }'\n```\n\n### Ejemplo C# de implementación de generación de firmas (muestra general):\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Este ejemplo de código es compatible con .NET Framework 4.0 y versiones posteriores, así como con .NET Core y otras versiones modernas de .NET. La verificación de firmas utiliza la comparación en tiempo constante a través del método <code>ConstantTimeEquals</code> para ayudar a prevenir ataques de temporización.</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### Ejemplo C# de implementación de generación de firmas (.NET 5.0 y posteriores):\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Para utilizar el método <code>Convert.ToHexString</code>, necesita .NET 5.0 y posterior.<p></p>Si tiene .NET 7.0 y posterior, también puede utilizar el método <code>CryptographicOperations.FixedTimeEquals</code> en lugar de <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### Ejemplo C# de implementación de generación de firmas (.NET 7.0 y posteriores):\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Si dispone de .NET 7.0 y versiones posteriores, puede utilizar el método <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### Ejemplo C++ de implementación de generación de firmas:\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### Ejemplo Go de implementación de generación de firmas:\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### Ejemplo PHP de implementación de generación de firmas:\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### Ejemplo Node.js de implementación de generación de firmas:\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## Enviar respuestas al webhook\n\nPara confirmar la recepción del webhook, su servidor debe devolver:\n* Código HTTP \"200\", \"201\" o \"204\" en el caso de una respuesta satisfactoria.\n* Código HTTP \"400\" con la <a \n  href=\"/webhooks/overview/#section/Errores\">descripción del problema</a> si no se \n  encontró el usuario especificado o se transmitió una firma no válida. Su gestor \n  de webhooks también puede devolver un código HTTP \"5xx\" si hay problemas \n  temporales en su servidor.\n\nSi el servidor de Xsolla no ha recibido respuesta a los webhooks <a \nhref=\"/webhooks/operation/successful-order-payment\">Successful payment for \norder</a> y <a href=\"/webhooks/operation/order-cancellation\">Order \ncancellation</a> o ha recibido una respuesta con un código `5xx`, los webhooks \nse reenvían de la siguiente manera:\n* 2 intentos con un intervalo de 5 minutos\n* 7 intentos con un intervalo de 15 minutos\n* 10 intentos con un intervalo de 60 minutos\n\nSe realiza un máximo de 20 intentos de envío de webhooks en un plazo de 12 \nhoras desde el primer intento.\n\nLa lógica de reintento para los webhooks de <a \nhref=\"/webhooks/operation/payment\">pago</a> y <a \nhref=\"/webhooks/operation/refund\">reembolso</a> se describe en la página del \nwebhook correspondiente.\n\n<div class=\"notice\">\n<p><strong>Aviso</strong></p>\n<p>El pago se reembolsará al usuario si se cumplen las siguientes condiciones:<ul><li>El reembolso lo inició Xsolla.</li><li>En respuesta a un webhook, se devolvió un código de estado <code>4xx</code>, o no se recibió ninguna respuesta tras todos los intentos, o se devolvió un código de estado <code>5xx</code>.</li></ul></p>\n</div>\n\nSi el servidor de Xsolla no ha recibido respuesta al webhook <a \nhref=\"/webhooks/operation/user-validation/\">User validation</a> o ha recibido \nuna respuesta con un código `400` o `5xx`, el webhook <a \nhref=\"/webhooks/operation/user-validation/\">User validation</a> no se reenvía. \nEn este caso, el usuario ve un error y los webhooks <a \nhref=\"/webhooks/operation/payment\">Payment</a> y <a href=\"/webhooks/operation\n/successful-order-payment\">Successful payment for order</a> no se envían.\n\n# Errores\n\nCódigos de error para el código HTTP 400:\n\n<table>\n<thead>\n    <tr>\n        <th>Código</th>\n        <th>Mensaje</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>INVALID_USER</td>\n        <td>Usuario no válido</td>\n    </tr>\n    <tr>\n        <td>INVALID_PARAMETER</td>\n        <td>Parámetro no válido</td>\n    </tr>\n    <tr>\n        <td>INVALID_SIGNATURE</td>\n        <td>Firma no válida</td>\n    </tr>\n    <tr>\n        <td>INCORRECT_AMOUNT</td>\n        <td>Importe incorrecto</td>\n    </tr>\n    <tr>\n        <td>INCORRECT_INVOICE</td>\n        <td>Factura incorrecta</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# Prácticas recomendadas\n\n## Seguridad\n\nSiga estas directrices:\n\n* Utilice solo HTTPS, con un certificado válido.\n* Verifique siempre la firma comparándola con el cuerpo de la solicitud sin \n  procesar; no analice ni recodifique los datos.\n* No transmita datos sensibles en las URL y evite revelar detalles técnicos en \n  los mensajes de error.\n* Excluya el punto final del webhook del middleware \n  [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery): las \n  solicitudes de Xsolla no incluyen un token CSRF y se rechazarán si no se aplica \n  esta configuración.\n* Incluya las [direcciones IP de Xsolla](/es/webhooks/section/webhook-listener) en \n  la lista de permitidos.\n\n\n## Arquitectura del controlador de webhooks\n\nSiga estas directrices:\n\n1. Acepte la solicitud `POST` con el cuerpo y los encabezados tal cual, **sin \n   modificaciones**.\n2. [Verifique la firma del webhook](/es/webhooks/section/webhook-listener/generation-of-signature) y devuelva el código de estado correspondiente:\n   * `4xx`: si las firmas no coinciden;\n   * `2xx`: en casos de éxito. Recomendamos devolver `204 No Content` **antes** de \n     ejecutar la lógica de negocio principal. También es aceptable `200 OK`.\n3. Transmita la carga útil a una tarea asíncrona o a una cola para su posterior \n   procesamiento.\n4. Implemente la \n   [idempotencia](https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning). Asegúrese de que su sistema admite [recibir el mismo webhook más de una \n   vez](/es/webhooks/section/webhook-listener/sending-responses-to-webhook).\n\n**Ejemplo de flujo:**\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## Idempotencia y duplicados\n\nSiga estas directrices:\n\n* Utilice el ID de transacción o el [ID externo](/es/dev-resources/faq/payments/#faq_payments_q_new_transaction_external_id), ID de \n  pedido como claves de idempotencia.\n* Almacene los ID procesados y devuelva el resultado anterior si se recibe un \n  duplicado.\n* Evite la concesión duplicada de artículos, las entradas duplicadas en la base \n  de datos y los cobros duplicados.\n* Tenga en cuenta que, en el caso de la entrega secuencial, un fallo en un evento \n  anterior bloquea el procesamiento de todos los siguientes.\n\n## Resiliencia del sistema\n\nSiga estas directrices:\n\n* Utilice colas y el procesamiento asíncrono para operaciones que consumen muchos \n  recursos, como llamadas API de terceros, facturación y concesión de artículos.\n* Configure los tiempos de espera en el controlador de webhook (1-3 s). En caso \n  de fallos temporales, utilice el [mecanismo de reintento de \n  Xsolla](/es/webhooks/section/webhook-listener/sending-responses-to-webhook).\n* No implemente reintentos en el controlador del webhook: la reentrega la \n  gestiona Xsolla.\n* Registre las marcas de tiempo de entrega de los webhooks y los estados de \n  procesamiento; configure avisos para los picos de errores `5xx` y los reenvíos.\n* Propague los ID de correlación desde el webhook a sus registros y a su sistema \n  de monitorización (APM).\n* Configure el registro y la supervisión de errores. En los casos de fallos \n  irrecuperables, traslade los trabajos a una cola de mensajes no entregados \n  (DLQ). Desarrolle una herramienta segura para reproducir eventos que esté \n  protegida por un mecanismo de idempotencia.\n\n## Ejemplos de aplicación\n\n**Compra realizada con éxito: artículo concedido en el primer intento:**\n\n![Compra](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/purchase-v2.svg)\n\n**Entrega duplicada (tiempo de espera agotado en el primer intento por parte \ndel socio):**\n\n![Tiempo de espera](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/timeout-v2.svg)\n\n**Reembolso:**\n\n![Reembolso](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/refund-v2.svg)\n\n**Interrupción del servicio del socio**:\n\n![Interrupción del servicio del \nsocio](https://cdn.xsolla.net/developers/current/images/api_docs/webhook-schemes/server-error.svg)\n\n# Preguntas frecuentes\n\n## ¿Es necesario utilizar HTTPS para un protocolo de webhook?\n\nSí.\n\n## ¿Puedo recibir webhooks de pago en varias direcciones URL?\n\nNo. Los webhooks de pago utilizan el protocolo de servidor a servidor y se \nenvían a una única URL especificada en la [configuración del proyecto \n](/es/webhooks/section/set-up-webhooks-in-publisher-account). Si quiere recibir \nnotificaciones en su juego, sitio web o aplicación móvil, configure el envío de \nwebhooks en su servidor para transferir datos entre Xsolla y su juego. También \npuede probar los webhooks desde la consola de desarrollador.\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Si está probando la integración de forma local, las solicitudes `POST` de Xsolla no llegan a direcciones URL como <code>http://localhost:3000/my-webhook-endpoint</code>. Utilice servicios como <a href=\"https://ngrok.com/\">ngrok</a> que permiten crear un túnel de acceso externo para recibir solicitudes de Xsolla en su entorno local. Encontrará más información al respecto en la <a href=\"https://ngrok.com/docs/guides/share-localhost/webhooks#test-webhooks-locally\">documentación de ngrok</a>.</p>\n</div>\n\n## ¿Por qué no se ha enviado la notificación de Xsolla a la URL del webhook?\n\nAsegúrese de que su servidor de webhooks admita los tipos de solicitudes HTTP \n`POST` y `GET`.\n\n## ¿Cómo puedo evitar que se dupliquen los ID de transacción durante el procesamiento?\n\nUtilice el ID externo: este es el ID de la transacción en su juego, asignado al \npedido en su sistema. Del lado de Xsolla, el ID externo está vinculado al ID de \nla transacción, lo que permite a Xsolla evitar pagos duplicados para la misma \ntransacción. Para obtener más información sobre la configuración, consulte \nnuestra [documentación](/es/dev-resources/faq/payments/#faq_payments_q_new_transaction_external_id).\n\n## ¿Cuáles son las prácticas recomendadas para trabajar con webhooks?\n\nRecomendamos:\n\n* Devolver `204` o `200` inmediatamente después de la verificación de la firma.\n* Comprobar la firma del webhook en relación con el cuerpo de la solicitud, sin \n  modificaciones.\n* Implementar la idempotencia para todas las operaciones.\n* Registrar todos los eventos y configurar la supervisión de errores.\n* Evitar incluir datos sensibles en las URL y no exponer detalles técnicos en los \n  mensajes de error.\n\nConsulte la sección [Prácticas recomendadas](/es/webhooks/section/best-practices) \npara obtener información detallada.\n\n# Lista de comprobación para la integración de webhooks\n\nPara que los webhooks funcionen correctamente, asegúrese de tener lo siguiente \nconfigurado antes de activarlos:\n\n* Se utiliza HTTPS.\n* La [verificación de firma](/es/webhooks/section/webhook-listener/generation-of-signature) del webhook se implementa en función del cuerpo de la solicitud sin \n  procesar y sin modificación.\n* Se devuelve una respuesta `204/200` en cuanto se confirma la firma.\n* La idempotencia se aplica a todas las operaciones.\n* Se han configurado el registro de errores y la supervisión.\n* No se transmiten datos sensibles en las URL ni se exponen detalles técnicos en \n  los mensajes de error.\n* Se admiten reintentos de webhooks conforme a la [lógica de reintentos de \n  Xsolla](/es/webhooks/section/webhook-listener/sending-responses-to-webhook).\n* Toda la integración está documentada.\n\n# Lista de webhooks\n\n<div class=\"note\">\n<p><strong>Observación</strong></p>\n<p>El tipo de notificación se envía en el parámetro <code>notification_type</code>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Webhook</th>\n        <th>Tipo de notificación</th>\n        <th>Descripción</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td><a href=\"/webhooks/operation/user-validation/\">Validación del usuario</a></td>\n        <td><code>user_validation</code></td>\n        <td>Se envía para comprobar si un usuario existe en el juego.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/user-search/\">Búsqueda de usuario</a></td>\n        <td><code>user_search</code></td>\n        <td>Se envía para obtener información de usuario basada en el ID público del usuario.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/payment/\">Pago</a></td>\n        <td><code>payment</code></td>\n        <td>Se envía cuando un usuario realiza un pago.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/refund/\">Reembolso</a></td>\n        <td><code>refund</code></td>\n        <td>Se envía cuando un pago debe cancelarse por cualquier motivo.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/partial-refund/\">Reembolso parcial</a></td>\n        <td><code>partial_refund</code></td>\n        <td>Se envía cuando un pago debe cancelarse parcialmente por cualquier motivo.</td>\n    </tr>\n    <tr>\n        <td><a href=\"/webhooks/operation/payment-declined/\">Pago rechazado</a></td>\n        <td><code>ps_declined</code></td>\n        <td>Se envía cuando un pago es rechazado por el sistema de pago.</td>\n    </tr>\n    <tr>\n        <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/afs-rejected-transaction/\">Transacción de AFS rechazada</a> </td>\n        <td><code>afs_reject</code></td>\n        <td>Se envía cuando se rechaza una transacción durante una comprobación de AFS.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/afs-rejected-blocklist/\">Lista de bloqueo de AFS rechazada</a></td>\n      <td><code>afs_black_list</code></td>\n      <td>Se envía cuando se actualiza la lista de bloqueo de AFS.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/created-subscription/\">Suscripción creada</a></td>\n      <td><code>create_subscription</code></td>\n      <td>Se envía cuando un usuario crea una suscripción.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/updated-subscription/\">Suscripción actualizada</a></td>\n      <td><code>update_subscription</code></td>\n      <td>Se envía cuando se renueva o modifica una suscripción.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/canceled-subscription/\">Suscripción cancelada</a></td>\n      <td><code>cancel_subscription</code></td>\n      <td>Se envía cuando se cancela una suscripción.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/nonrenewing-subscription/\">Suscripción con renovación suspendida</a></td>\n      <td><code>non_renewal_subscription</code></td>\n      <td>Se envía cuando el estado es de renovación suspendida.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/add-payment-account/\">Añadir cuenta de pago</a></td>\n      <td><code>payment_account_add</code></td>\n      <td>Se envía cuando un usuario añade o guarda una cuenta de pago.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/remove-payment-account/\">Eliminar cuenta de pago</a></td>\n      <td><code>payment_account_remove</code></td>\n      <td>Se envía cuando un usuario elimina la cuenta de pago de las cuentas guardadas.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/user-validation-in-webshop\">Validación del usuario en Web Shop</a></td>\n      <td><code>-</code></td>\n      <td>Se envía desde un sitio de Web Shop para comprobar si un usuario existe en el juego.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/personalized-partner-catalog\">Personalización del catálogo en el lado del socio</a></td>\n      <td><code>partner_side_catalog</code></td>\n      <td>Se envía cuando un usuario interactúa con la tienda.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/successful-order-payment\">Successful payment for order</a></td>\n      <td><code>order_paid</code></td>\n      <td>Se envía cuando se paga un pedido.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/order-cancellation\">Order cancellation</a></td>\n      <td><code>order_canceled</code></td>\n      <td>Se envía cuando se cancela un pedido.</td>\n    </tr>\n    <tr>\n      <td><a href=\"https://developers.xsolla.com/es/webhooks/operation/dispute\">Dispute</a></td>\n      <td><code>dispute</code></td>\n      <td>Se envía cuando se abre una nueva disputa.</td>\n    </tr>\n</tbody>\n</table>\n",
    "title": "Webhooks",
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://api.xsolla.com/merchant/v2"
    }
  ],
  "tags": [
    {
      "name": "user-validation",
      "x-displayName": "Validación del usuario"
    },
    {
      "name": "payments",
      "x-displayName": "Payments"
    },
    {
      "name": "game-services",
      "x-displayName": "Servicios de juego"
    },
    {
      "name": "anti-fraud",
      "x-displayName": "Anti-fraud"
    },
    {
      "name": "subscriptions",
      "x-displayName": "Suscripciones"
    },
    {
      "name": "combined-webhooks",
      "x-displayName": "Webhooks combinados"
    },
    {
      "name": "separate-webhooks",
      "x-displayName": "Webhooks independientes"
    },
    {
      "name": "personalization",
      "x-displayName": "Webhook de personalización"
    }
  ],
  "webhooks": {
    "add-payment-account": {
      "post": {
        "description": "Xsolla envía un webhook con el tipo de `payment_account_add` a la URL del webhook cada vez que un usuario añade una cuenta de pago o guarda una cuenta de pago al comprar algo dentro del juego. Para recibir este webhook, contacte con su gestor del éxito del cliente o envíe un correo electrónico a <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": "Datos de la cuenta de pago (objeto).",
                    "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": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Añadir cuenta de pago",
        "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": "Cuando se actualiza la lista de bloqueo del sistema antifraude (agregar o eliminar un parámetro), Xsolla envía un webhook con el tipo de `afs_black_list` a la URL del webhook. La adición del parámetro se realiza automáticamente en el lado de Xsolla o previa solicitud. La eliminación de un parámetro solo puede realizarse previa solicitud. Para recibir este webhook, contacte con su gestor del éxito del cliente o envíe un correo electrónico a <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.",
        "operationId": "afs-rejected-blocklist",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "event": {
                    "description": "Objeto con información sobre el evento de lista de bloques de AFS.",
                    "properties": {
                      "action": {
                        "description": "Tipo de evento.",
                        "enum": [
                          "adding",
                          "removing"
                        ],
                        "type": "string"
                      },
                      "date_of_last_action": {
                        "description": "Hora del último evento de lista de bloques de AFS en el formato de la norma [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).",
                        "type": "string"
                      },
                      "parameter": {
                        "description": "Nombre del parámetro por el cual se produjo el evento.",
                        "enum": [
                          "nick",
                          "email",
                          "ps_account",
                          "ip_address",
                          "card_issuer",
                          "phone"
                        ],
                        "type": "string",
                        "x-enumDescriptions": {
                          "card_issuer": "banco emisor de la tarjeta de crédito del usuario",
                          "email": "dirección de correo electrónico del usuario",
                          "ip_address": "Dirección IP del usuario",
                          "nick": "alias del usuario",
                          "phone": "número de teléfono del usuario",
                          "ps_account": "cuenta de facturación del usuario"
                        }
                      },
                      "parameter_value": {
                        "description": "Nombre del parámetro por el cual se produjo el evento.",
                        "type": "string"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      },
                      "reason": {
                        "description": "Causa del evento.",
                        "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": "Filtro de AFS (adición)",
                          "chargeback": "contracargo (adición)",
                          "fraud_activity": "fraude (adición)",
                          "friendly_fraud": "fraude amistoso (adición)",
                          "linked_chargeback": "relación de contracargo (adición)",
                          "linked_parameter": "parámetro vinculado en la lista de bloqueo de AFS (adición)",
                          "other_data_in_blacklist": "otros parámetros en la lista de bloqueo de AFS (adición)",
                          "other_forgiveness_reason": "otro motivo para eliminar (eliminación)",
                          "partner_request": "previa solicitud (adición)",
                          "ps_reported_fraud": "notificación del sistema de pago sobre fraude (adición)",
                          "removed_by_cs_review": "eliminado tras informar al servicio técnico de Xsolla (eliminación)",
                          "suspicious_activity": "actividad sospechosa (adición)",
                          "user_reported_fraud": "informe de usuario sobre fraude (adición)",
                          "wrongly_added": "añadido por error (eliminación)"
                        }
                      },
                      "transaction_id": {
                        "description": "ID de transacción asociado al parámetro por el cual se produjo el evento.",
                        "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": "Actualización de la lista de bloqueo antifraude",
        "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": "Cuando se rechaza una transacción durante una comprobación del sistema \nAntifraude, Xsolla envía los detalles de la transacción en el webhook con el \ntipo de `afs_reject` a la URL del webhook. Para recibir este webhook, contacte \ncon su gestor del éxito del cliente o envíe un correo electrónico a <a \nhref=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.\n\nAl guardar la URL del webhook en Cuenta del editor, puede dar permisos para \nrecibir información detallada en los webhooks. Para ello, active la siguiente \nopción en Cuenta del editor en <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Project \nsettings &gt; Webhooks &gt; Advanced settings</a>.\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Si se registró en Cuenta del editor el 22 de enero de 2025 o antes, encontrará las opciones en <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Project settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Conmutador</th>\n        <th>Descripción</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Mostrar información sobre las transacciones mediante los métodos de pago guardados</td>\n        <td><p>La información se transmite en los siguientes parámetros personalizados del webhook:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code>: no se utilizó el método de pago guardado</li><li><code>1</code>: el método de pago se guardó al realizar el pago actual</li><li><code>2</code>: se utiliza el método de pago guardado previamente</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code>: pago único</li><li><code>2</code>: pago periódico</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": "Detalles del reembolso (objeto).",
                    "properties": {
                      "author": {
                        "description": "Iniciador del reembolso. El valor del campo se transmite de acuerdo con la \ntabla:\n\n<table>\n    <thead>\n    <tr>\n        <th>Iniciador del reembolso</th>\n        <th>Valor de campo</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Juego (vía API).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>Usuario de Cuenta del editor (reembolso automático).</td>\n        <td>Correo electrónico del usuario</td>\n    </tr>\n    <tr>\n        <td>Usuario de Cuenta del editor (con asistencia del servicio de atención al cliente de Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (con asistencia del servicio de atención al cliente de Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "string"
                      },
                      "code": {
                        "description": "ID del código.\n\n<table>\n    <thead>\n    <tr>\n        <th>Código</th>\n        <th>Motivo</th>\n        <th>Descripción</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>Cancelación por solicitud del usuario/solicitud del juego</td>\n        <td>Cancelación iniciada desde Cuenta del editor.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td>Chargeback (Contracargo)</td>\n        <td>Contracargo de transacción solicitado.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error (Error de integración)</td>\n        <td>Problemas con la integración entre Xsolla y el juego.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td>Potential fraud (Fraude potencial)</td>\n        <td>Sospecha de fraude.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment (Pago de prueba)</td>\n        <td>Transacción de prueba seguida de cancelación.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td>User invoice expired (Factura de usuario expirada)</td>\n        <td>Factura vencida (se usa para el modelo de pospago).</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS (Notificación de fraude de PS)</td>\n        <td>Pago rechazado por el sistema de pago. Fraude potencial detectado por PS.<br /><b>Recomendación: añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td>Cancellation by the PS request (Cancelación solicitada por PS)</td>\n        <td>Cancelación solicitada por el sistema de pago.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request (Cancelación solicitada por el usuario)</td>\n        <td>El usuario no quedó satisfecho con el juego o con la compra por cualquier motivo.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Cancelación solicitada por el juego.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td>Account holder called to report fraud</td>\n        <td>El titular de la cuenta declara que no realizó la transacción.</td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td>Friendly fraud</td>\n        <td>Fraude amistoso comunicado.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td>Duplicate</td>\n        <td>Transacción duplicada para la misma factura.</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "integer"
                      },
                      "reason": {
                        "description": "Motivo del reembolso.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "settings": {
                    "description": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "Datos de la transacción (objeto).",
                    "properties": {
                      "agreement": {
                        "description": "ID del acuerdo.",
                        "type": "integer"
                      },
                      "dry_run": {
                        "description": "Transacción de prueba. El parámetro tiene el valor 1 si es una transacción de prueba, o no se envía si la transacción es real.",
                        "type": "integer"
                      },
                      "external_id": {
                        "description": "ID externo de la transacción.",
                        "type": "string"
                      },
                      "id": {
                        "description": "ID de la transacción.",
                        "format": "int64",
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Teléfono del usuario.",
                        "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": "Transacción rechazada por el sistema 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": "Cuando se cancela una suscripción, Xsolla envía un webhook con el tipo de `cancel_subscription` a la URL del webhook.",
        "operationId": "canceled-subscription",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "subscription": {
                    "description": "Datos de la suscripción (objeto).",
                    "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": "Datos del usuario (objeto).",
                    "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": "Suscripción cancelada",
        "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": "Cuando un usuario crea una suscripción, Xsolla envía un webhook con el tipo de `create_subscription` a la URL del webhook.",
        "operationId": "created-subscription",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "Sus parámetros personalizados.",
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "subscription": {
                    "description": "Datos de la suscripción (objeto).",
                    "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": "Periodo de prueba (objeto).",
                        "properties": {
                          "type": {
                            "description": "Tipo de periodo de prueba: día.",
                            "type": "string"
                          },
                          "value": {
                            "description": "Periodo de prueba.",
                            "type": "integer"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Suscripción creada",
        "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": "Cuando se abre una nueva disputa o una disputa cambia de estado, Xsolla envía un webhook con el tipo `dispute` a la URL del webhook. Para recibir este webhook, contacte con su gestor de éxito del cliente o envíe un correo electrónico a <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.",
        "operationId": "dispute",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "action": {
                    "description": "Tipo de acción.",
                    "enum": [
                      "adding",
                      "updating"
                    ],
                    "type": "string",
                    "x-enumDescriptions": {
                      "adding": "Se ha abierto una nueva disputa.",
                      "updating": "El estado de una disputa ha cambiado."
                    }
                  },
                  "dispute": {
                    "description": "Objeto con información sobre la disputa.",
                    "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": "Objeto con información sobre la configuración del proyecto personalizada.",
                    "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": "Objeto con información sobre la transacción.",
                    "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": "Objeto con información sobre el importe de la transacción.",
                        "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": "Objeto con información sobre un usuario.",
                    "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": "Disputa",
        "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": "Cuando el estado de una suscripción se establece como \"con renovación suspendida\", Xsolla envía un webhook con el tipo `non_renewal_subscription` a la URL del webhook. Para recibir este webhook, contacte con su gestor del éxito del cliente o envíe un correo electrónico a <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": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "required": [
                      "project_id"
                    ],
                    "type": "object"
                  },
                  "subscription": {
                    "description": "Datos de la suscripción (objeto).",
                    "properties": {
                      "amount": {
                        "description": "Precio en moneda real.",
                        "format": "float",
                        "type": "number"
                      },
                      "currency": {
                        "$ref": "#/components/schemas/currency"
                      },
                      "date_create": {
                        "$ref": "#/components/schemas/subscription.date_create"
                      },
                      "date_next_charge": {
                        "description": "Próxima fecha de facturación. Es la fecha en la que se esperaba el siguiente pago antes de que la suscripción del usuario se estableciera como \"con renovación suspendida\". Fecha y hora conforme a la norma [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": "Datos del usuario (objeto).",
                    "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": "Suscripción con renovación suspendida",
        "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 envía el webhook <code>order_canceled</code> a la URL especificada \ncuando el pago es cancelado por el usuario, socio o de forma automática. El \nwebhook contiene información sobre los artículos devueltos, los datos de pago y \nlos detalles del pedido cancelado.\n\nEl webhook no se envía si el pago no se realiza correctamente, por ejemplo:\n* se abrió la interfaz de pago, pero el usuario no pagó el pedido\n* se abrió la interfaz de pago, pero hubo errores durante el pago\n\nEl tiempo de procesamiento recomendado del webhook es de menos de 3 segundos.\n",
        "operationId": "order-cancellation",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "billing": {
                    "description": "Datos de la transacción y del pago.",
                    "properties": {
                      "notification_type": {
                        "$ref": "#/components/schemas/notification_type"
                      },
                      "payment_details": {
                        "description": "Datos del pago (objeto).",
                        "properties": {
                          "country_wht": {
                            "$ref": "#/components/schemas/country_whc"
                          },
                          "direct_wht": {
                            "description": "Retención fiscal directa.",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "Tipo de retención fiscal directa.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "payment": {
                            "description": "Importe pagado por el usuario (objeto).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payment_method_fee": {
                            "description": "Comisión del sistema de pago.",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payment_method_sum": {
                            "description": "Importe cargado en el sistema de pago.",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payout": {
                            "description": "Datos del desembolso (objeto).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payout_currency_rate": {
                            "description": "Tipo de cambio entre las monedas de pago y de desembolso.",
                            "type": "string"
                          },
                          "repatriation_commission": {
                            "description": "Objeto con datos sobre costes de repatriación, que son impuestos a Xsolla por terceros.",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "sales_tax": {
                            "description": "Impuesto sobre las ventas (objeto; solo en EE. UU. y Canadá).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "Tipo impositivo sobre las ventas.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "user_acquisition_fee": {
                            "description": "Importe total de los costes de adquisición del usuario deducidos por las compras realizadas mediante redes de afiliación e influencers (objeto).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "Tasa del coste de adquisición del usuario, %.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "vat": {
                            "description": "Datos sobre el IVA (objeto; solo en la UE).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "Tipo de IVA.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_balance_sum": {
                            "description": "Importe cargado en el saldo de Xsolla.",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_fee": {
                            "description": "Comisión de Xsolla (objeto).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "type": "object"
                      },
                      "purchase": {
                        "description": "Datos de la compra (objeto).",
                        "properties": {
                          "subscription": {
                            "description": "Datos de la suscripción (objeto).",
                            "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": "Precio total de la compra (objeto).",
                            "properties": {
                              "amount": {
                                "description": "Importe total del pago.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "required": [
                          "total"
                        ],
                        "type": "object"
                      },
                      "refund_details": {
                        "description": "Detalles del reembolso (objeto).",
                        "properties": {
                          "author": {
                            "description": "Iniciador del reembolso. El valor del campo se transmite de acuerdo con la \ntabla:\n\n<table>\n    <thead>\n    <tr>\n        <th>Iniciador del reembolso</th>\n        <th>Valor de campo</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Juego (vía API).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>Usuario de Cuenta del editor (reembolso automático).</td>\n        <td>Correo electrónico del usuario</td>\n    </tr>\n    <tr>\n        <td>Usuario de Cuenta del editor (con asistencia del servicio de atención al cliente de Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (con asistencia del servicio de atención al cliente de Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n",
                            "type": "string"
                          },
                          "code": {
                            "description": "ID del código.",
                            "type": "integer"
                          },
                          "reason": {
                            "description": "Motivo del reembolso.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "settings": {
                        "description": "Configuración del proyecto personalizada (objeto).",
                        "properties": {
                          "merchant_id": {
                            "$ref": "#/components/schemas/settings.merchant_id"
                          },
                          "project_id": {
                            "$ref": "#/components/schemas/settings.project_id"
                          }
                        },
                        "type": "object"
                      },
                      "transaction": {
                        "description": "Datos de la transacción (objeto).",
                        "properties": {
                          "agreement": {
                            "description": "ID del acuerdo.",
                            "type": "integer"
                          },
                          "dry_run": {
                            "description": "Transacción de prueba. El parámetro tiene el valor 1 si es una transacción de prueba, o no se envía si la transacción es real.",
                            "type": "integer"
                          },
                          "external_id": {
                            "description": "ID externo de la transacción.",
                            "type": "string"
                          },
                          "id": {
                            "description": "ID de la transacción.",
                            "format": "int64",
                            "type": "integer"
                          },
                          "payment_method_order_id": {
                            "description": "ID de pago en el sistema de pago.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "notification_type",
                      "transaction",
                      "payment_details"
                    ],
                    "type": "object"
                  },
                  "custom_parameters": {
                    "description": "Información adicional.",
                    "type": "object"
                  },
                  "items": {
                    "description": "Lista de artículos adquiridos por el usuario.\n\nEl conjunto de parámetros incluidos en la matriz depende de la versión del \nwebhook. La versión 2 incluye parámetros adicionales: `is_free`, `is_bonus` y \n`is_bundle_content`. Para cambiar de versión, introduzca su número en el \nparámetro `version` en la llamada API [Update information about webhook \nsettings](/es/api/igs/operation/update-webhook/).\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "Coste total de los artículos en función de su cantidad.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "Un objeto JSON que contiene los atributos y valores del artículo.",
                              "type": "object"
                            },
                            "is_pre_order": {
                              "description": "Si es `true`, el artículo se reserva (pedido por anticipado).",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "Cantidad de artículos.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order"
                          ],
                          "title": "versión = 1",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "amount": {
                              "description": "Coste total de los artículos en función de su cantidad.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "Un objeto JSON que contiene los atributos y valores del artículo.",
                              "type": "object"
                            },
                            "is_bonus": {
                              "description": "Si es `true`, el artículo es una bonificación.",
                              "type": "boolean"
                            },
                            "is_bundle_content": {
                              "description": "Si es `true`, el artículo pertenece a un lote.",
                              "type": "boolean"
                            },
                            "is_free": {
                              "description": "Si es `true`, el artículo es gratuito.",
                              "type": "boolean"
                            },
                            "is_pre_order": {
                              "description": "Si es `true`, el artículo se reserva (pedido por anticipado).",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "Cantidad de artículos.",
                              "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": "versión = 2",
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "order": {
                    "description": "Información sobre el pedido.",
                    "properties": {
                      "amount": {
                        "description": "El coste total de una cesta en función de la moneda elegida.",
                        "type": "string"
                      },
                      "comment": {
                        "description": "Comentario del usuario sobre el pedido.",
                        "nullable": true,
                        "type": "string"
                      },
                      "coupons": {
                        "description": "Cupones aplicados. Si no se aplica el cupón, la matriz no devuelve.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "El código de un cupón aplicado.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "ID externo.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "currency": {
                        "description": "Moneda del pedido. La moneda virtual utiliza el código de artículo (SKU) y la moneda real usa un código de tres letras según la [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "Identificador único del pedido del usuario en el lado de Xsolla.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "ID de factura de pagos en moneda real. Los pagos en moneda virtual o los artículos gratuitos tienen un valor de `null`.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "Modo de pago. `default` se utiliza para pagos reales; `sandbox` para pagos de prueba.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "Plataforma de pago. Para realizar pagos vía Xsolla se utiliza el valor `xsolla`. Para otros pagos se usa el valor correspondiente al nombre de la plataforma de publicación de juegos: `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": "Códigos promocionales aplicados. Si no se aplica el código promocional, la matriz no devuelve.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "El código de un código promocional aplicado.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "ID externo.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "promotions": {
                        "$ref": "#/components/schemas/order.promotions"
                      },
                      "status": {
                        "description": "Estado del pedido.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "mode",
                      "currency_type",
                      "currency",
                      "amount",
                      "status",
                      "platform",
                      "comment",
                      "invoice_id",
                      "promotions"
                    ],
                    "type": "object"
                  },
                  "user": {
                    "description": "Información del usuario.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "description": "Dirección de correo electrónico del usuario.",
                        "type": "string"
                      },
                      "external_id": {
                        "description": "ID de usuario.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "external_id",
                      "email"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "items",
                  "order",
                  "user",
                  "transaction",
                  "payment_details"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Devuelve para indicar un procesamiento realizado correctamente."
          },
          "400": {
            "description": "Devuelve en caso de error en la información proporcionada (p. ej., falta un parámetro obligatorio, autorización fallida, etc.)."
          }
        },
        "summary": "Cancelación del pedido (con los detalles del pago y la transacción)",
        "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 envía el webhook <code>order_canceled</code> a la URL especificada \ncuando el pago ha sido cancelado por el usuario, el socio o automáticamente. El \nwebhook contiene información sobre los artículos devueltos y los detalles del \npedido cancelado.\n\nEl webhook no se envía si el pago no se ha realizado correctamente, por ejemplo:\n* se abrió la interfaz de pago, pero el usuario no pagó el pedido\n* se abrió la interfaz de pago, pero hubo errores durante el pago\n\nEl tiempo de procesamiento recomendado del webhook es de menos de 3 segundos.\n",
        "operationId": "order-cancellation-separate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "Información adicional.",
                    "type": "object"
                  },
                  "items": {
                    "description": "Lista de artículos adquiridos por el usuario.\n\nEl conjunto de parámetros incluidos en la matriz depende de la versión del \nwebhook. La versión 2 incluye parámetros adicionales: `is_free`, `is_bonus` y \n`is_bundle_content`. Para cambiar de versión, introduzca su número en el \nparámetro `version` en la llamada API [Update information about webhook \nsettings](/es/api/igs/operation/update-webhook/).\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "Coste total de los artículos en función de su cantidad.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "Un objeto JSON que contiene los atributos y valores del artículo.",
                              "type": "object"
                            },
                            "is_pre_order": {
                              "description": "Si es `true`, el artículo se reserva (pedido por anticipado).",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "Cantidad de artículos.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order"
                          ],
                          "title": "versión = 1",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "amount": {
                              "description": "Coste total de los artículos en función de su cantidad.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "Un objeto JSON que contiene los atributos y valores del artículo.",
                              "type": "object"
                            },
                            "is_bonus": {
                              "description": "Si es `true`, el artículo es una bonificación.",
                              "type": "boolean"
                            },
                            "is_bundle_content": {
                              "description": "Si es `true`, el artículo pertenece a un lote.",
                              "type": "boolean"
                            },
                            "is_free": {
                              "description": "Si es `true`, el artículo es gratuito.",
                              "type": "boolean"
                            },
                            "is_pre_order": {
                              "description": "Si es `true`, el artículo se reserva (pedido por anticipado).",
                              "type": "boolean"
                            },
                            "promotions": {
                              "description": "Promociones aplicadas. Si no se ha aplicado ninguna promoción, se transmite una matriz vacía en el parámetro.",
                              "items": {
                                "properties": {
                                  "amount_with_discount": {
                                    "description": "Coste total de los artículos con descuento.",
                                    "type": "string"
                                  },
                                  "amount_without_discount": {
                                    "description": "Coste total de los artículos sin descuento.",
                                    "type": "string"
                                  },
                                  "sequence": {
                                    "description": "Pedido de aplicación de promociones.",
                                    "type": "integer"
                                  }
                                },
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "quantity": {
                              "description": "Cantidad de artículos.",
                              "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": "versión = 2",
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "order": {
                    "description": "Información sobre el pedido.",
                    "properties": {
                      "amount": {
                        "description": "El coste total de una cesta en función de la moneda elegida.",
                        "type": "string"
                      },
                      "comment": {
                        "description": "Comentario del usuario sobre el pedido.",
                        "nullable": true,
                        "type": "string"
                      },
                      "coupons": {
                        "description": "Cupones aplicados. Si no se aplica el cupón, la matriz no devuelve.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "El código de un cupón aplicado.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "ID externo.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "currency": {
                        "description": "Moneda del pedido. La moneda virtual utiliza el código de artículo (SKU) y la moneda real usa un código de tres letras según la [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "Identificador único del pedido del usuario en el lado de Xsolla.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "ID de factura de pagos en moneda real. Los pagos en moneda virtual o los artículos gratuitos tienen un valor de `null`.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "Modo de pago. `default` se utiliza para pagos reales; `sandbox` para pagos de prueba.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "Plataforma de pago. Para realizar pagos vía Xsolla se utiliza el valor `xsolla`. Para otros pagos se usa el valor correspondiente al nombre de la plataforma de publicación de juegos: `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": "Códigos promocionales aplicados. Si no se aplica el código promocional, la matriz no devuelve.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "El código de un código promocional aplicado.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "ID externo.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "promotions": {
                        "$ref": "#/components/schemas/order.promotions"
                      },
                      "status": {
                        "description": "Estado del pedido.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "mode",
                      "currency_type",
                      "currency",
                      "amount",
                      "status",
                      "platform",
                      "comment",
                      "invoice_id",
                      "promotions"
                    ],
                    "type": "object"
                  },
                  "user": {
                    "description": "Información del usuario.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "description": "Dirección de correo electrónico del usuario.",
                        "type": "string"
                      },
                      "external_id": {
                        "description": "ID de usuario.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "external_id",
                      "email"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "items",
                  "order",
                  "user"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Devuelve para indicar un procesamiento realizado correctamente."
          },
          "400": {
            "description": "Devuelve en caso de error en la información proporcionada (p. ej., falta un parámetro obligatorio, autorización fallida, etc.)."
          }
        },
        "summary": "Cancelación del pedido (sin los detalles del pago y la transacción)",
        "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": "Cuando se realiza un reembolso parcial, Xsolla envía los detalles de la \ntransacción cancelada en un webhook con el tipo de `partial_refund` a la URL \ndel webhook. Obtenga más información sobre el proceso de reembolso parcial en \nestas [instrucciones](/es/doc/pay-station/features/refund/#pay_station_features_refund_how_it_works_partial_refund_flow).\n\nAl guardar la URL del webhook en Cuenta del editor, puede dar permisos para \nrecibir información detallada en los webhooks. Para ello, active la siguiente \nopción en Cuenta del editor en <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Project \nsettings &gt; Webhooks &gt; Advanced settings</a>.\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Si se registró en Cuenta del editor el 22 de enero de 2025 o antes, encontrará las opciones en <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Project settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Conmutador</th>\n        <th>Descripción</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Mostrar información sobre las transacciones mediante los métodos de pago guardados</td>\n        <td><p>La información se transmite en los siguientes parámetros personalizados del webhook:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code>: no se utilizó el método de pago guardado</li><li><code>1</code>: el método de pago se guardó al realizar el pago actual</li><li><code>2</code>: se utiliza el método de pago guardado previamente</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code>: pago único</li><li><code>2</code>: pago periódico</li></ul></li></ul></td>\n    </tr>\n</tbody>\n</table>\n\nCódigos de reembolso:\n\n<table>\n    <thead>\n    <tr>\n        <th>Código</th>\n        <th>Motivo</th>\n        <th>Descripción</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>Cancelación por solicitud del usuario/solicitud del juego</td>\n        <td>Cancelación iniciada desde Cuenta del editor.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error (Error de integración)</td>\n        <td>Problemas con la integración entre Xsolla y el juego.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment (Pago de prueba)</td>\n        <td>Transacción de prueba seguida de cancelación.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS (Notificación de fraude de PS)</td>\n        <td>Pago rechazado por el sistema de pago. Fraude potencial detectado por PS.<br /><b>Recomendación: añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request (Cancelación solicitada por el usuario)</td>\n        <td>El usuario no quedó satisfecho con el juego o con la compra por cualquier motivo.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Cancelación solicitada por el juego.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    </tbody>\n</table>\n",
        "operationId": "partial-refund",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "Sus parámetros personalizados.",
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "payment_details": {
                    "description": "Datos del pago (objeto).",
                    "properties": {
                      "direct_wht": {
                        "description": "Retención fiscal directa.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tipo de retención fiscal directa.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "payment": {
                        "description": "Importe pagado por el usuario (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_fee": {
                        "description": "Comisión del sistema de pago.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_sum": {
                        "description": "Importe cargado en el sistema de pago.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout": {
                        "description": "Datos del desembolso (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout_currency_rate": {
                        "description": "Tipo de cambio entre las monedas de pago y de desembolso.",
                        "type": "string"
                      },
                      "repatriation_commission": {
                        "description": "Objeto con datos sobre costes de repatriación, que son impuestos a Xsolla por terceros.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "sales_tax": {
                        "description": "Impuesto sobre las ventas (objeto; solo en EE. UU. y Canadá).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tipo impositivo sobre las ventas.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "vat": {
                        "description": "Datos sobre el IVA (objeto; solo en la UE).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tipo de IVA.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_balance_sum": {
                        "description": "Importe cargado en el saldo de Xsolla.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_fee": {
                        "description": "Comisión de Xsolla (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "purchase": {
                    "description": "Datos de la compra (objeto).",
                    "properties": {
                      "checkout": {
                        "description": "Datos del proceso de pago (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe de la compra.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "total": {
                        "description": "Precio total de la compra (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe del pago del reembolso parcial.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "total"
                    ],
                    "type": "object"
                  },
                  "refund_details": {
                    "description": "Detalles del reembolso (objeto).",
                    "properties": {
                      "author": {
                        "description": "Iniciador del reembolso. El valor del campo se transmite de acuerdo con la \ntabla:\n\n<table>\n    <thead>\n    <tr>\n        <th>Iniciador del reembolso</th>\n        <th>Valor de campo</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Juego (vía API).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>Usuario de Cuenta del editor (reembolso automático).</td>\n        <td>Correo electrónico del usuario</td>\n    </tr>\n    <tr>\n        <td>Usuario de Cuenta del editor (con asistencia del servicio de atención al cliente de Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (con asistencia del servicio de atención al cliente de Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "string"
                      },
                      "code": {
                        "description": "ID del código.",
                        "type": "integer"
                      },
                      "date": {
                        "description": "Fecha del reembolso.",
                        "type": "string"
                      },
                      "reason": {
                        "description": "Motivo del reembolso.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "settings": {
                    "description": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "Datos de la transacción (objeto).",
                    "properties": {
                      "agreement": {
                        "description": "ID del acuerdo.",
                        "type": "integer"
                      },
                      "date": {
                        "description": "Fecha de la transacción.",
                        "type": "string"
                      },
                      "dry_run": {
                        "description": "Transacción de prueba. El parámetro tiene el valor 1 si es una transacción de prueba, o no se envía si la transacción es real.",
                        "type": "integer"
                      },
                      "external_id": {
                        "description": "ID externo de la transacción.",
                        "type": "string"
                      },
                      "id": {
                        "description": "ID de la transacción.",
                        "format": "int64",
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Reembolso parcial",
        "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": "Cuando un usuario finaliza el proceso de pago, Xsolla envía los datos del pago \nen un webhook con el tipo `payment` a la URL del webhook.\n\nLos códigos de respuesta esperados se describen en la sección <b>Responses</b>, \npero también puede usar otros códigos de respuesta:\n\n<table>\n    <thead>\n    <tr>\n        <th>Código de respuesta</th>\n        <th>Descripción</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td><code>200</code>, <code>201</code>, <code>204</code></td>\n        <td>Una respuesta correcta.</td>\n    </tr>\n    <tr>\n        <td><code>4xx</code></td>\n        <td>Se ha producido un error. Por ejemplo, si no se ha encontrado el usuario especificado o se ha transmitido una firma que no es válida.</td>\n    </tr>\n    <tr>\n        <td><code>5xx</code></td>\n        <td>Un error temporal del servidor. Cuando se recibe esta respuesta, Xsolla automáticamente volverá a intentar enviar el webhook, aumentando progresivamente el intervalo entre intentos hasta que su agente de escucha confirme la recepción. El número máximo de reintentos es de 12 en un periodo de 48 horas.</td>\n    </tr>\n    </tbody>\n</table>\n\nCuando guarde la URL del webhook en <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Cuenta del \neditor</a>, también podrá configurar la recepción de información adicional en \nwebhooks.\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Si se registró en Cuenta del editor el 22 de enero de 2025 o antes, encontrará las opciones en su proyecto en <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Conmutador</th>\n        <th>Descripción</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Mostrar información sobre la cuenta de pago guardada</td>\n        <td>La información sobre el método de pago guardado se transmite en el objeto personalizado <code>payment_account</code>.</td>\n    </tr>\n    <tr>\n        <td>Mostrar información sobre las transacciones mediante los métodos de pago guardados</td>\n        <td><p>La información se transmite en los siguientes parámetros personalizados del webhook:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code>: no se utilizó el método de pago guardado</li><li><code>1</code>: el método de pago se guardó al realizar el pago actual</li><li><code>2</code>: se utiliza el método de pago guardado previamente</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code>: pago único</li><li><code>2</code>: pago periódico</li></ul></li></ul></td>\n    </tr>\n    <tr>\n        <td>Añadir objeto del pedido al webhook</td>\n        <td>La información sobre el pedido se transmite en el objeto <code>order</code> del webhook <a href=\"/es/webhooks/operation/payment/\">Pago</a>.</td>\n    </tr>\n    <tr>\n        <td>Enviar solamente los parámetros de usuario necesarios sin datos confidenciales</td>\n        <td><p>Solamente la siguiente información sobre el usuario se transmite en el webhook:</p><ul><li>ID</li><li>país</li></ul></td>\n    </tr>\n    <tr>\n        <td>Mostrar número de BIC y sufijo de la tarjeta</td>\n        <td><p>La siguiente información sobre el número de tarjeta bancaria se transmite en el webhook:</p><ul><li>los 6 primeros dígitos del parámetro <code>card_bin</code></li><li>los 4 últimos dígitos del <code>card_suffix</code></li></ul></td>\n    </tr>\n    <tr>\n        <td>Mostrar marca de tarjeta</td>\n        <td>La marca de la tarjeta empleada para realizar el pago. Por ejemplo, Mastercard o Visa.</td>\n    </tr>\n    <tr>\n        <td>Mostrar la retención fiscal del país y las comisiones de adquisición de usuarios.</td>\n        <td>Los objetos <code>payment_details.​country_wht</code> y <code>payment_details.​user_acquisition_fee</code> se transmitirán en el webhook. Esta opción está activada por defecto.</td>\n    </tr>\n    <tr>\n        <td>Enviar información de 3DS.</td>\n        <td>El objeto <code>cards</code> que contiene datos sobre la verificación 3-D Secure se transmitirá en el webhook.</td>\n    </tr>\n</tbody>\n</table>\n\n<div class=\"notice\">\n<p><strong>Aviso</strong></p>\n<p>Los campos que se envían en un webhook dependen de:<ul><li>los parámetros establecidos en la configuración avanzada de Cuenta del editor</li><li>la configuración personalizada establecida en el lado de Xsolla</li></ul></p><p>Si tiene alguna pregunta, contacte con su gestor del éxito del cliente o envíe un correo electrónico a <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": "Sus parámetros personalizados.",
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "payment_details": {
                    "description": "Datos del pago (objeto).",
                    "properties": {
                      "country_wht": {
                        "$ref": "#/components/schemas/country_whc"
                      },
                      "direct_wht": {
                        "description": "Retención fiscal directa.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tipo de retención fiscal directa.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "payment": {
                        "description": "Importe pagado por el usuario (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_fee": {
                        "description": "Comisión del sistema de pago.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_sum": {
                        "description": "Importe cargado en el sistema de pago.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout": {
                        "description": "Datos del desembolso (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout_currency_rate": {
                        "description": "Tipo de cambio entre las monedas de pago y de desembolso.",
                        "type": "string"
                      },
                      "repatriation_commission": {
                        "description": "Objeto con datos sobre costes de repatriación, que son impuestos a Xsolla por terceros.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "sales_tax": {
                        "description": "Impuesto sobre las ventas (objeto; solo en EE. UU. y Canadá).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tipo impositivo sobre las ventas.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "user_acquisition_fee": {
                        "description": "Importe total de los costes de adquisición del usuario deducidos por las compras realizadas mediante redes de afiliación e influencers (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tasa del coste de adquisición del usuario, %.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "vat": {
                        "description": "Datos sobre el IVA (objeto; solo en la UE).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tipo de IVA.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_balance_sum": {
                        "description": "Importe cargado en el saldo de Xsolla.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_fee": {
                        "description": "Comisión de Xsolla (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "purchase": {
                    "description": "Datos de la compra (objeto).",
                    "properties": {
                      "checkout": {
                        "description": "Datos del proceso de pago (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe de la compra.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "coupon": {
                        "description": "Detalles del cupón (objeto; si se utilizó un cupón al crear la suscripción).",
                        "properties": {
                          "campaign_code": {
                            "description": "Código de campaña.",
                            "type": "string"
                          },
                          "coupon_code": {
                            "description": "Código de cupón.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "gift": {
                        "description": "Datos del regalo (objeto).",
                        "properties": {
                          "giver_id": {
                            "description": "ID del obsequiador.",
                            "type": "string"
                          },
                          "hide_giver_from_receiver": {
                            "description": "Si se oculta la identidad del obsequiador al destinatario.",
                            "type": "string"
                          },
                          "message": {
                            "description": "Mensaje del obsequiador.",
                            "type": "string"
                          },
                          "receiver_email": {
                            "description": "Correo electrónico del destinatario del regalo.",
                            "type": "string"
                          },
                          "receiver_id": {
                            "description": "ID del destinatario del regalo.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "order": {
                        "$ref": "#/components/schemas/order",
                        "properties": {
                          "id": {
                            "description": "ID de pedido.",
                            "type": "integer"
                          },
                          "lineitems": {
                            "description": "Matriz de parámetros que contienen información sobre los artículos.",
                            "items": {
                              "properties": {
                                "price": {
                                  "description": "Objeto que contiene información sobre el precio de un artículo.",
                                  "properties": {
                                    "amount": {
                                      "description": "Precio total del artículo en la moneda seleccionada.",
                                      "format": "float",
                                      "type": "number"
                                    },
                                    "currency": {
                                      "description": "Moneda del precio del artículo.",
                                      "type": "string"
                                    }
                                  },
                                  "type": "object"
                                },
                                "quantity": {
                                  "description": "Cantidad del artículo.",
                                  "type": "integer"
                                },
                                "sku": {
                                  "description": "Código (SKU) del artículo.",
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          }
                        }
                      },
                      "promotions": {
                        "description": "Promociones aplicadas a esta transacción.",
                        "items": {
                          "properties": {
                            "id": {
                              "description": "ID de promoción.",
                              "type": "integer"
                            },
                            "technical_name": {
                              "description": "Nombre técnico de la promoción.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "subscription": {
                        "description": "Datos de la suscripción (objeto).",
                        "properties": {
                          "amount": {
                            "$ref": "#/components/schemas/amount-float"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "date_create": {
                            "$ref": "#/components/schemas/subscription.date_create"
                          },
                          "date_next_charge": {
                            "description": "Próxima fecha de facturación. Fecha y hora de conformidad con la norma [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).",
                            "type": "string"
                          },
                          "plan_id": {
                            "$ref": "#/components/schemas/subscription.plan_id"
                          },
                          "product_id": {
                            "description": "ID del producto (si se envía en el token de acceso).",
                            "type": "string"
                          },
                          "subscription_id": {
                            "$ref": "#/components/schemas/subscription.subscription_id"
                          },
                          "tags": {
                            "$ref": "#/components/schemas/subscription.tags"
                          }
                        },
                        "type": "object"
                      },
                      "total": {
                        "description": "Precio total de la compra (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe total del pago.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "total"
                    ],
                    "type": "object"
                  },
                  "settings": {
                    "description": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "Datos de la transacción (objeto).",
                    "properties": {
                      "agreement": {
                        "description": "ID del acuerdo.",
                        "type": "integer"
                      },
                      "dry_run": {
                        "description": "Transacción de prueba. El parámetro tiene el valor 1 si es una transacción de prueba, o no se envía si la transacción es real.",
                        "type": "integer"
                      },
                      "external_id": {
                        "$ref": "#/components/schemas/external-id"
                      },
                      "id": {
                        "description": "ID de la transacción.",
                        "format": "int64",
                        "type": "integer"
                      },
                      "payment_date": {
                        "description": "Fecha del pago.",
                        "type": "string"
                      },
                      "payment_method": {
                        "description": "ID del método de pago.",
                        "type": "integer"
                      },
                      "payment_method_name": {
                        "description": "Nombre del método de pago.",
                        "type": "string"
                      },
                      "payment_method_order_id": {
                        "description": "ID de pago en el sistema de pago.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Pago",
        "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": "Si una transacción es rechazada por un sistema de pago, Xsolla envía los \ndetalles de la transacción en un webhook del tipo `ps_declined` a la URL \nconfigurada de su webhook. El webhook se envía durante la fase de autorización \no de procesamiento del pago. En este caso, el webhook \n[payment](/es/webhooks/operation/payment/)\\ [order_paid](/es/webhooks/operation/successful-order-payment/) no se envía.\n\nRazones habituales del rechazo por parte de los sistemas de pago:\n\n* Se produjo un error en la autorización de la tarjeta (por ejemplo, el sistema \n  de pago no pudo finalizar el proceso de autorización debido a un error técnico \n  o a la falta de respuesta del banco) o la transacción fue rechazada (por \n  ejemplo, el banco respondió pero denegó la transacción por fondos insuficientes \n  o porque los datos de la tarjeta no eran válidos).\n* Se produjo un error en la verificación 3-D Secure, no se ha realizado o se \n  agotó el tiempo de confirmación del usuario.\n* El procesador o el banco adquirente no está disponible temporalmente o devuelve \n  un rechazo definitivo debido a un error irreversible, como una cuenta cerrada o \n  un número de tarjeta no válido. Volver a intentarlo sin solucionar el problema \n  de fondo no resultará en una transacción satisfactoria.\n\nNo debe confundirse con:\n\n* Rechazos por el sistema antifraude, que se notifican mediante el webhook \n  [afs_reject](https://developers.xsolla.com/es/webhooks/operation/afs-rejected-transaction/).\n* Reembolsos y reembolsos parciales tras un pago realizado con éxito, que se \n  notifican mediante los webhooks \n  [refund](https://developers.xsolla.com/es/webhooks/operation/refund/) y \n  [partial_refund](https://developers.xsolla.com/es/webhooks/operation/partial-refund/).\n\n<div class=\"note\">\n<p><strong>Observación</strong></p>\n<p>Para recibir el webhook <code>ps_declined</code>, contacte con su gestor de éxito del cliente o envíe un correo electrónico a <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": "Detalles del reembolso (objeto).",
                    "properties": {
                      "author": {
                        "description": "Iniciador del reembolso. El valor del campo se transmite de acuerdo con la \ntabla:\n\n<table>\n    <thead>\n    <tr>\n        <th>Iniciador del reembolso</th>\n        <th>Valor de campo</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Juego (vía API).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>Usuario de Cuenta del editor (reembolso automático).</td>\n        <td>Correo electrónico del usuario</td>\n    </tr>\n    <tr>\n        <td>Usuario de Cuenta del editor (con asistencia del servicio de atención al cliente de Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (con asistencia del servicio de atención al cliente de Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "string"
                      },
                      "code": {
                        "description": "ID del código.\n\n<table>\n    <thead>\n    <tr>\n        <th>Código</th>\n        <th>Motivo</th>\n        <th>Descripción</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>Cancelación por solicitud del usuario/solicitud del juego</td>\n        <td>Cancelación iniciada desde Cuenta del editor.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td>Chargeback (Contracargo)</td>\n        <td>Contracargo de transacción solicitado.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error (Error de integración)</td>\n        <td>Problemas con la integración entre Xsolla y el juego.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td>Potential fraud (Fraude potencial)</td>\n        <td>Sospecha de fraude.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment (Pago de prueba)</td>\n        <td>Transacción de prueba seguida de cancelación.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td>User invoice expired (Factura de usuario expirada)</td>\n        <td>Factura vencida (se usa para el modelo de pospago).</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS (Notificación de fraude de PS)</td>\n        <td>Pago rechazado por el sistema de pago. Fraude potencial detectado por PS.<br /><b>Recomendación: añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td>Cancellation by the PS request (Cancelación solicitada por PS)</td>\n        <td>Cancelación solicitada por el sistema de pago.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request (Cancelación solicitada por el usuario)</td>\n        <td>El usuario no quedó satisfecho con el juego o con la compra por cualquier motivo.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Cancelación solicitada por el juego.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td>Account holder called to report fraud</td>\n        <td>El titular de la cuenta declara que no realizó la transacción.</td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td>Friendly fraud</td>\n        <td>Fraude amistoso comunicado.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td>Duplicate</td>\n        <td>Transacción duplicada para la misma factura.</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "integer"
                      },
                      "reason": {
                        "description": "Motivo del reembolso.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "settings": {
                    "description": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "Datos de la transacción (objeto).",
                    "properties": {
                      "dry_run": {
                        "description": "Transacción de prueba. El parámetro tiene el valor 1 si es una transacción de prueba, o no se envía si la transacción es real.",
                        "type": "integer"
                      },
                      "external_id": {
                        "description": "ID externo de la transacción.",
                        "type": "string"
                      },
                      "id": {
                        "description": "ID de la transacción.",
                        "format": "int64",
                        "type": "integer"
                      },
                      "payment_method": {
                        "description": "ID del método de pago.",
                        "type": "integer"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Pago rechazado",
        "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 enviará un webhook <code>partner_side_catalog</code> que contenga los \nparámetros del usuario y del proyecto a la URL del webhook cuando un usuario \ninteractúe con la tienda.\n\nDevuelve una lista de <code>item_id</code> o de SKU de artículos que están \ndisponibles para el usuario como respuesta. En este caso, también puede incluir \ninformación de que un usuario concreto puede comprar un determinado producto un \nnúmero especificado de veces. Esta función le permite controlar el número y el \ntipo de productos que el usuario puede añadir a la cesta y comprar.\n\n<div class=\"notice\">\n\n<p><strong>Aviso</strong></p>\n<p>Al procesar el webhook, tenga en cuenta las siguientes limitaciones:<ul><li>El webhook debe procesarse en menos de 3 segundos. Si el procesamiento tarda más, las llamadas API <a href=\"/es/api/catalog/virtual-items-currency-catalog/get-virtual-items\">obtener lista de artículos virtuales</a>, <a href=\"/api/catalog/payment-server-side/admin-create-payment-token\">crear token de pago</a> y <a href=\"/api/catalog/payment-client-side/create-order\">crear pedido</a> devolverán un error.</li><li>El tamaño de la respuesta del webhook no debe superar los 64 KB. Las respuestas que superen este límite no se procesarán: el usuario verá un catálogo vacío y no podrá comprar artículos. Para cambiar el tamaño máximo de la respuesta, contacte con su gestor de éxito del cliente o envíe un correo electrónico a <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": "Datos del usuario (objeto).",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "currency": {
                        "$ref": "#/components/schemas/currency"
                      },
                      "locale": {
                        "$ref": "#/components/schemas/locale"
                      },
                      "user_id": {
                        "description": "ID de usuario. Si el usuario no está autenticado, se envía el valor `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": "Devuelve una lista de artículos disponibles para el usuario y el número de veces que un usuario concreto puede comprar un determinado artículo."
          },
          "404": {
            "description": "Usuario no encontrado."
          }
        },
        "summary": "Personalización del catálogo en el lado del socio",
        "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": "Cuando se cancela un pago, Xsolla envía los detalles de la transacción \ncancelada en un webhook con el tipo `refund` a la URL del webhook.\n\nEl mecanismo de reintento del webhook depende de quién haya iniciado el \nreembolso:\n* Si el reembolso se inició desde su lado, el webhook no se volverá a enviar. El \n  pago se reembolsará al usuario independientemente de la respuesta al webhook.\n* Si el reembolso lo inició un tercero (por ejemplo, un sistema de pagos o el \n  equipo de atención al cliente de Xsolla) y, en respuesta a un webhook, se \n  devolvió un código de estado `5xx`, el webhook se reenvía a intervalos cada vez \n  mayores. El número máximo de reintentos es de 12 en un plazo de 48 horas desde \n  el primer intento.\n\nPara obtener información detallada sobre el proceso de reembolso, consulte las \n[instrucciones](/es/doc/pay-station/features/refund/).\n\n<div class=\"notice\">\n<p><strong>Aviso</strong></p>\n<p>El pago se reembolsará al usuario si se cumplen las siguientes condiciones:<ul><li>El reembolso lo inició Xsolla.</li><li>En respuesta a un webhook, se devolvió un código de estado <code>4xx</code>, o no se recibió ninguna respuesta tras todos los intentos, o se devolvió un código de estado <code>5xx</code>.</li></ul></p>\n</div>\n\nCuando guarde la URL del webhook en <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Cuenta del \neditor</a>, también podrá configurar la recepción de información adicional en \nwebhooks.\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Si se registró en Cuenta del editor el 22 de enero de 2025 o antes, encontrará las opciones en su proyecto en <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Conmutador</th>\n        <th>Descripción</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Mostrar información sobre las transacciones mediante los métodos de pago guardados</td>\n        <td><p>La información se transmite en los siguientes parámetros personalizados del webhook:</p><ul><li><code>saved_payment_method</code>:<ul><li><code>0</code>: no se utilizó el método de pago guardado</li><li><code>1</code>: el método de pago se guardó al realizar el pago actual</li><li><code>2</code>: se utiliza el método de pago guardado previamente</li></ul></li><li><code>payment_type</code>:<ul><li><code>1</code>: pago único</li><li><code>2</code>: pago periódico</li></ul></li></ul></td>\n    </tr>\n    <tr>\n        <td>Mostrar información sobre el motivo del reembolso.</td>\n        <td>Información detallada sobre los motivos del reembolso.</td>\n    </tr>\n</tbody>\n</table>\n\nCódigos de reembolso:\n\n<table>\n    <thead>\n    <tr>\n        <th>Código</th>\n        <th>Motivo</th>\n        <th>Descripción</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>1</td>\n        <td>Cancelación por solicitud del usuario/solicitud del juego</td>\n        <td>Cancelación iniciada desde Cuenta del editor.</td>\n    </tr>\n    <tr>\n        <td>2</td>\n        <td>Chargeback (Contracargo)</td>\n        <td>Contracargo de transacción solicitado.</td>\n    </tr>\n    <tr>\n        <td>3</td>\n        <td>Integration error (Error de integración)</td>\n        <td>Problemas con la integración entre Xsolla y el juego.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>4</td>\n        <td>Potential fraud (Fraude potencial)</td>\n        <td>Sospecha de fraude.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>5</td>\n        <td>Test payment (Pago de prueba)</td>\n        <td>Transacción de prueba seguida de cancelación.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>6</td>\n        <td>User invoice expired (Factura de usuario expirada)</td>\n        <td>Factura vencida (se usa para el modelo de pospago).</td>\n    </tr>\n    <tr>\n        <td>7</td>\n        <td>Fraud notification from PS (Notificación de fraude de PS)</td>\n        <td>Pago rechazado por el sistema de pago. Fraude potencial detectado por PS.<br /><b>Recomendación: añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>8</td>\n        <td>Cancellation by the PS request (Cancelación solicitada por PS)</td>\n        <td>Cancelación solicitada por el sistema de pago.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>9</td>\n        <td>Cancellation by the user request (Cancelación solicitada por el usuario)</td>\n        <td>El usuario no quedó satisfecho con el juego o con la compra por cualquier motivo.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>10</td>\n        <td>Cancellation by the game request</td>\n        <td>Cancelación solicitada por el juego.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>\n    </tr>\n    <tr>\n        <td>11</td>\n        <td>Account holder called to report fraud</td>\n        <td>El titular de la cuenta declara que no realizó la transacción.</td>\n    </tr>\n    <tr>\n        <td>12</td>\n        <td>Friendly fraud</td>\n        <td>Fraude amistoso comunicado.</td>\n    </tr>\n    <tr>\n        <td>13</td>\n        <td>Duplicate</td>\n        <td>Transacción duplicada para la misma factura.</td>\n    </tr>\n    </tbody>\n</table>\n",
        "operationId": "refund",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "Sus parámetros personalizados.",
                    "type": "object"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "payment_details": {
                    "description": "Datos del pago (objeto).",
                    "properties": {
                      "country_wht": {
                        "$ref": "#/components/schemas/country_whc"
                      },
                      "direct_wht": {
                        "description": "Retención fiscal directa.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tipo de retención fiscal directa.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "payment": {
                        "description": "Importe pagado por el usuario (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_fee": {
                        "description": "Comisión del sistema de pago.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payment_method_sum": {
                        "description": "Importe cargado en el sistema de pago.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout": {
                        "description": "Datos del desembolso (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "payout_currency_rate": {
                        "description": "Tipo de cambio entre las monedas de pago y de desembolso.",
                        "type": "string"
                      },
                      "repatriation_commission": {
                        "description": "Objeto con datos sobre costes de repatriación, que son impuestos a Xsolla por terceros.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "sales_tax": {
                        "description": "Impuesto sobre las ventas (objeto; solo en EE. UU. y Canadá).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tipo impositivo sobre las ventas.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "user_acquisition_fee": {
                        "description": "Importe total de los costes de adquisición del usuario deducidos por las compras realizadas mediante redes de afiliación e influencers (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tasa del coste de adquisición del usuario, %.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "vat": {
                        "description": "Datos sobre el IVA (objeto; solo en la UE).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          },
                          "percent": {
                            "description": "Tipo de IVA.",
                            "format": "float",
                            "type": "number"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_balance_sum": {
                        "description": "Importe cargado en el saldo de Xsolla.",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "xsolla_fee": {
                        "description": "Comisión de Xsolla (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "purchase": {
                    "description": "Datos de la compra (objeto).",
                    "properties": {
                      "checkout": {
                        "description": "Datos del proceso de pago (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe de la compra.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      },
                      "subscription": {
                        "description": "Datos de la suscripción (objeto).",
                        "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": "Precio total de la compra (objeto).",
                        "properties": {
                          "amount": {
                            "description": "Importe total del pago.",
                            "format": "float",
                            "type": "number"
                          },
                          "currency": {
                            "$ref": "#/components/schemas/currency"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "total"
                    ],
                    "type": "object"
                  },
                  "refund_details": {
                    "description": "Detalles del reembolso (objeto).",
                    "properties": {
                      "author": {
                        "description": "Iniciador del reembolso. El valor del campo se transmite de acuerdo con la \ntabla:\n\n<table>\n    <thead>\n    <tr>\n        <th>Iniciador del reembolso</th>\n        <th>Valor de campo</th>\n    </tr>\n    </thead>\n    <tbody>\n    <tr>\n        <td>Juego (vía API).</td>\n        <td>API</td>\n    </tr>\n    <tr>\n        <td>Usuario de Cuenta del editor (reembolso automático).</td>\n        <td>Correo electrónico del usuario</td>\n    </tr>\n    <tr>\n        <td>Usuario de Cuenta del editor (con asistencia del servicio de atención al cliente de Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    <tr>\n        <td>Xsolla (con asistencia del servicio de atención al cliente de Xsolla).</td>\n        <td>support@xsolla.com</td>\n    </tr>\n    </tbody>\n</table>\n",
                        "type": "string"
                      },
                      "code": {
                        "description": "ID del código.",
                        "type": "integer"
                      },
                      "reason": {
                        "description": "Motivo del reembolso.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "settings": {
                    "description": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "transaction": {
                    "description": "Datos de la transacción (objeto).",
                    "properties": {
                      "agreement": {
                        "description": "ID del acuerdo.",
                        "type": "integer"
                      },
                      "dry_run": {
                        "description": "Transacción de prueba. El parámetro tiene el valor 1 si es una transacción de prueba, o no se envía si la transacción es real.",
                        "type": "integer"
                      },
                      "external_id": {
                        "description": "ID externo de la transacción.",
                        "type": "string"
                      },
                      "id": {
                        "description": "ID de la transacción.",
                        "format": "int64",
                        "type": "integer"
                      },
                      "payment_method_order_id": {
                        "description": "ID de pago en el sistema de pago.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Reembolso",
        "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": "Cuando un usuario elimina la cuenta de pago de las cuentas guardadas, Xsolla envía un webhook con el tipo `payment_account_remove` a la URL del webhook. Para recibir este webhook, contacte con su gestor del éxito del cliente o envíe un correo electrónico a <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": "Datos de la cuenta de pago (objeto).",
                    "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": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Eliminar cuenta de pago",
        "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 envía el webhook <code>order_paid</code> a la URL especificada cuando el \nusuario paga el pedido.\n\nEl webhook <code>order_paid</code> contiene información sobre los artículos \ncomprados, los datos de pago y los detalles de la transacción.\n\nEl webhook <code>order_paid</code> no se envía si el pago no se realiza \ncorrectamente, por ejemplo:\n* se abrió el formulario de pago, pero el usuario no pagó el pedido\n* se abrió el formulario de pago, pero hubo errores durante el pago\n\nSe recomienda que el tiempo de procesamiento del webhook \n<code>order_paid</code> sea inferior a 3 segundos.\n\n<div class=\"notice\">\n<p><strong>Aviso</strong></p>\n<p>Los campos que se envían en un webhook dependen de los siguientes parámetros de configuración:<ul><li>los que haya establecido en Cuenta del editor en <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Project settings &gt; Webhooks &gt; Advanced settings</a></li><li> los establecidos en el lado de Xsolla</li></ul></p><p>Si tiene alguna duda, contacte con su gestor del éxito del cliente o envíe un correo electrónico a <a href=\"mailto:csm@xsolla.com\">csm@xsolla.com</a>.</p>\n</div>\n\nLas respuestas esperadas se describen en la sección <b>Responses</b>. Puede \nutilizar otros códigos de respuesta. Dependiendo del código de respuesta y de \nla conexión de la función de reembolso automático de pagos, la lógica de \nprocesamiento del webhook por parte de Xsolla es la siguiente:\n\n<table>\n    <thead>\n    <tr>\n        <th>Código de respuesta</th>\n        <th>El reembolso automático de pagos está desactivado (por defecto)</th>\n        <th>El reembolso automático de pagos está activado</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>Ninguna acción</td>\n        <td>Reembolso automático al usuario</td>\n    </tr>\n    <tr>\n        <td><code>200</code>, <code>201</code>, <code>204</code></td>\n        <td>Ninguna acción</td>\n        <td>Ninguna acción</td>\n    </tr>\n    <tr>\n        <td>Diferente código o ninguna respuesta al webhook</td>\n        <td>Se envían varios webhooks en un intervalo de tiempo especificado: 2 intentos con un intervalo de 5 minutos, 7 intentos con un intervalo de 15 minutos, 10 intentos con un intervalo de 60 minutos.</td>\n        <td>Se envían varios webhooks en un intervalo especificado: 2 intentos con un intervalo de 5 minutos, 7 intentos con un intervalo de 15 minutos, 10 intentos con un intervalo de 60 minutos. Si se envían todos los webhooks pero no se recibe una respuesta satisfactoria, se emite un reembolso automático al usuario.</td>\n    </tr>\n    </tbody>\n</table>\n\nPara conectar la función de reembolso automático, contacte con sus gestores de \néxito del cliente o escriba a csm@xsolla.com.\n",
        "operationId": "successful-order-payment",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "billing": {
                    "description": "Datos de la transacción y del pago.",
                    "properties": {
                      "notification_type": {
                        "$ref": "#/components/schemas/notification_type"
                      },
                      "payment_details": {
                        "description": "Datos del pago (objeto).",
                        "properties": {
                          "country_wht": {
                            "$ref": "#/components/schemas/country_whc"
                          },
                          "direct_wht": {
                            "description": "Retención fiscal directa.",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "Tipo de retención fiscal directa.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "payment": {
                            "description": "Importe pagado por el usuario (objeto).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payment_method_fee": {
                            "description": "Comisión del sistema de pago.",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payment_method_sum": {
                            "description": "Importe cargado en el sistema de pago.",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payout": {
                            "description": "Datos del desembolso (objeto).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "payout_currency_rate": {
                            "description": "Tipo de cambio entre las monedas de pago y de desembolso.",
                            "type": "string"
                          },
                          "repatriation_commission": {
                            "description": "Objeto con datos sobre costes de repatriación, que son impuestos a Xsolla por terceros.",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "sales_tax": {
                            "description": "Impuesto sobre las ventas (objeto; solo en EE. UU. y Canadá).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "Tipo impositivo sobre las ventas.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "user_acquisition_fee": {
                            "description": "Importe total de los costes de adquisición del usuario deducidos por las compras realizadas mediante redes de afiliación e influencers (objeto).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "Tasa del coste de adquisición del usuario, %.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "vat": {
                            "description": "Datos sobre el IVA (objeto; solo en la UE).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "percent": {
                                "description": "Tipo de IVA.",
                                "format": "float",
                                "type": "number"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_balance_sum": {
                            "description": "Importe cargado en el saldo de Xsolla.",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          },
                          "xsolla_fee": {
                            "description": "Comisión de Xsolla (objeto).",
                            "properties": {
                              "amount": {
                                "description": "Importe.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "type": "object"
                      },
                      "purchase": {
                        "description": "Datos de la compra (objeto).",
                        "properties": {
                          "coupon": {
                            "description": "Detalles del cupón (objeto; si se utilizó un cupón al crear la suscripción).",
                            "properties": {
                              "campaign_code": {
                                "description": "Código de campaña.",
                                "type": "string"
                              },
                              "coupon_code": {
                                "description": "Código de cupón.",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "gift": {
                            "description": "Datos del regalo (objeto).",
                            "properties": {
                              "giver_id": {
                                "description": "ID del obsequiador.",
                                "type": "string"
                              },
                              "hide_giver_from_receiver": {
                                "description": "Si se oculta la identidad del obsequiador al destinatario.",
                                "type": "string"
                              },
                              "message": {
                                "description": "Mensaje del obsequiador.",
                                "type": "string"
                              },
                              "receiver_email": {
                                "description": "Correo electrónico del destinatario del regalo.",
                                "type": "string"
                              },
                              "receiver_id": {
                                "description": "ID del destinatario del regalo.",
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "promotions": {
                            "description": "Promociones aplicadas a esta transacción.",
                            "items": {
                              "properties": {
                                "id": {
                                  "description": "ID de promoción.",
                                  "type": "integer"
                                },
                                "technical_name": {
                                  "description": "Nombre técnico de la promoción.",
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "subscription": {
                            "description": "Datos de la suscripción (objeto).",
                            "properties": {
                              "amount": {
                                "$ref": "#/components/schemas/amount-float"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              },
                              "date_create": {
                                "$ref": "#/components/schemas/subscription.date_create"
                              },
                              "date_next_charge": {
                                "description": "Próxima fecha de facturación. Fecha y hora de conformidad con la norma [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).",
                                "type": "string"
                              },
                              "plan_id": {
                                "$ref": "#/components/schemas/subscription.plan_id"
                              },
                              "product_id": {
                                "description": "ID del producto (si se envía en el token de acceso).",
                                "type": "string"
                              },
                              "subscription_id": {
                                "$ref": "#/components/schemas/subscription.subscription_id"
                              },
                              "tags": {
                                "$ref": "#/components/schemas/subscription.tags"
                              }
                            },
                            "type": "object"
                          },
                          "total": {
                            "description": "Precio total de la compra (objeto).",
                            "properties": {
                              "amount": {
                                "description": "Importe total del pago.",
                                "format": "float",
                                "type": "number"
                              },
                              "currency": {
                                "$ref": "#/components/schemas/currency"
                              }
                            },
                            "type": "object"
                          }
                        },
                        "required": [
                          "total"
                        ],
                        "type": "object"
                      },
                      "settings": {
                        "description": "Configuración del proyecto personalizada (objeto).",
                        "properties": {
                          "merchant_id": {
                            "$ref": "#/components/schemas/settings.merchant_id"
                          },
                          "project_id": {
                            "$ref": "#/components/schemas/settings.project_id"
                          }
                        },
                        "type": "object"
                      },
                      "transaction": {
                        "description": "Datos de la transacción (objeto).",
                        "properties": {
                          "agreement": {
                            "description": "ID del acuerdo.",
                            "type": "integer"
                          },
                          "dry_run": {
                            "description": "Transacción de prueba. El parámetro tiene el valor 1 si es una transacción de prueba, o no se envía si la transacción es real.",
                            "type": "integer"
                          },
                          "external_id": {
                            "$ref": "#/components/schemas/external-id"
                          },
                          "id": {
                            "description": "ID de la transacción.",
                            "format": "int64",
                            "type": "integer"
                          },
                          "payment_date": {
                            "description": "Fecha del pago.",
                            "type": "string"
                          },
                          "payment_method": {
                            "description": "ID del método de pago.",
                            "type": "integer"
                          },
                          "payment_method_name": {
                            "description": "Nombre del método de pago.",
                            "type": "string"
                          },
                          "payment_method_order_id": {
                            "description": "ID de pago en el sistema de pago.",
                            "type": "string"
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "notification_type",
                      "transaction",
                      "payment_details"
                    ],
                    "type": "object"
                  },
                  "custom_parameters": {
                    "description": "Información adicional.",
                    "type": "object"
                  },
                  "items": {
                    "description": "Lista de artículos adquiridos por el usuario.\n\nEl conjunto de parámetros incluidos en la matriz depende de la versión del \nwebhook. La versión 2 incluye parámetros adicionales: `is_free`, `is_bonus` y \n`is_bundle_content`. Para cambiar de versión, introduzca su número en el \nparámetro `version` en la llamada API [Update information about webhook \nsettings](/es/api/igs/operation/update-webhook/).\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "Coste total de los artículos en función de su cantidad.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "Un objeto JSON que contiene los atributos y valores del artículo.",
                              "type": "object"
                            },
                            "is_pre_order": {
                              "description": "Si es `true`, el artículo se reserva (pedido por anticipado).",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "Cantidad de artículos.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order"
                          ],
                          "title": "versión = 1",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "amount": {
                              "description": "Coste total de los artículos en función de su cantidad.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "Un objeto JSON que contiene los atributos y valores del artículo.",
                              "type": "object"
                            },
                            "is_bonus": {
                              "description": "Si es `true`, el artículo es una bonificación.",
                              "type": "boolean"
                            },
                            "is_bundle_content": {
                              "description": "Si es `true`, el artículo pertenece a un lote.",
                              "type": "boolean"
                            },
                            "is_free": {
                              "description": "Si es `true`, el artículo es gratuito.",
                              "type": "boolean"
                            },
                            "is_pre_order": {
                              "description": "Si es `true`, el artículo se reserva (pedido por anticipado).",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "Cantidad de artículos.",
                              "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": "versión = 2",
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "order": {
                    "description": "Información sobre el pedido.",
                    "properties": {
                      "amount": {
                        "description": "El coste total de una cesta en función de la moneda elegida.",
                        "type": "string"
                      },
                      "comment": {
                        "description": "Comentario del usuario sobre el pedido.",
                        "nullable": true,
                        "type": "string"
                      },
                      "coupons": {
                        "description": "Cupones aplicados. Si no se aplica el cupón, la matriz no devuelve.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "El código de un cupón aplicado.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "ID externo.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "currency": {
                        "description": "Moneda del pedido. La moneda virtual utiliza el código de artículo (SKU) y la moneda real usa un código de tres letras según la [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "Identificador único del pedido del usuario en el lado de Xsolla.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "ID de factura de pagos en moneda real. Los pagos en moneda virtual o los artículos gratuitos tienen un valor de `null`.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "Modo de pago. `default` se utiliza para pagos reales; `sandbox` para pagos de prueba.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "Plataforma de pago. Para pagos a través de Xsolla se utiliza el valor `xsolla`. Para otros pagos, se utiliza el valor correspondiente al nombre de la plataforma de publicación de juegos.",
                        "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": "Códigos promocionales aplicados. Si no se aplica el código promocional, la matriz no devuelve.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "El código de un código promocional aplicado.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "ID externo.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "promotions": {
                        "$ref": "#/components/schemas/order.promotions"
                      },
                      "status": {
                        "description": "Estado del pedido.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "mode",
                      "currency_type",
                      "currency",
                      "amount",
                      "status",
                      "platform",
                      "comment",
                      "invoice_id",
                      "promotions"
                    ],
                    "type": "object"
                  },
                  "user": {
                    "description": "Información del usuario.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "description": "Dirección de correo electrónico del usuario.",
                        "type": "string"
                      },
                      "external_id": {
                        "description": "ID de usuario.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "external_id",
                      "email"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "items",
                  "order",
                  "user",
                  "transaction",
                  "payment_details"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Devuelve para indicar un procesamiento realizado correctamente."
          },
          "400": {
            "description": "Devuelve en caso de error en la información proporcionada (p. ej., falta un parámetro obligatorio, autorización fallida, etc.)."
          }
        },
        "summary": "Pago del pedido realizado correctamente (con detalles del pago y de la transacción)",
        "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 envía el webhook <code>order_paid</code> a la URL especificada cuando se \ncumplen las siguientes condiciones:\n1. El usuario pagó correctamente el pedido.\n2. Xsolla recibió una respuesta sobre el procesamiento correcto del webhook \n   [payment](/es/webhooks/operation/payment/).\n\nEl webhook <code>order_paid</code> contiene información sobre los artículos \ncomprados y los datos de la transacción.\n\nEl webhook <code>order_paid</code> no se envía si:\n* El pago no se realizó correctamente, por ejemplo:\n  * se abrió el formulario de pago, pero el usuario no pagó el pedido\n  * se abrió el formulario de pago, pero hubo errores durante el pago\n* No se ha recibido la respuesta sobre el procesamiento correcto del webhook \n  [payment](/es/webhooks/operation/payment/).\n\nSe recomienda que el tiempo de procesamiento del webhook \n<code>order_paid</code> sea inferior a 3 segundos.\n\nLas respuestas esperadas se describen en la sección <b>Responses</b>. Puede \nutilizar otros códigos de respuesta. Dependiendo del código de respuesta y de \nla conexión de la función de reembolso automático de pagos, la lógica de \nprocesamiento del webhook por parte de Xsolla es la siguiente:\n\n<table>\n    <thead>\n    <tr>\n        <th>Código de respuesta</th>\n        <th>El reembolso automático de pagos está desactivado (por defecto)</th>\n        <th>El reembolso automático de pagos está activado</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>Ninguna acción</td>\n        <td>Reembolso automático al usuario</td>\n    </tr>\n    <tr>\n        <td><code>200</code>, <code>201</code>, <code>204</code></td>\n        <td>Ninguna acción</td>\n        <td>Ninguna acción</td>\n    </tr>\n    <tr>\n        <td>Diferente código o ninguna respuesta al webhook</td>\n        <td>Se envían varios webhooks en un intervalo de tiempo especificado: 2 intentos con un intervalo de 5 minutos, 7 intentos con un intervalo de 15 minutos, 10 intentos con un intervalo de 60 minutos.</td>\n        <td>Se envían varios webhooks en un intervalo especificado: 2 intentos con un intervalo de 5 minutos, 7 intentos con un intervalo de 15 minutos, 10 intentos con un intervalo de 60 minutos. Si se envían todos los webhooks pero no se recibe una respuesta satisfactoria, se emite un reembolso automático al usuario.</td>\n    </tr>\n    </tbody>\n</table>\n\nPara conectar la función de reembolso automático, contacte con sus gestores de \néxito del cliente o escriba a csm@xsolla.com.\n",
        "operationId": "successful-order-payment-separate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "custom_parameters": {
                    "description": "Información adicional.",
                    "type": "object"
                  },
                  "items": {
                    "description": "Lista de artículos adquiridos por el usuario.\n\nEl conjunto de parámetros incluidos en la matriz depende de la versión del \nwebhook. La versión 2 incluye parámetros adicionales: `is_free`, `is_bonus` y \n`is_bundle_content`. Para cambiar de versión, introduzca su número en el \nparámetro `version` en la llamada API [Update information about webhook \nsettings](/es/api/igs/operation/update-webhook/).\n",
                    "items": {
                      "oneOf": [
                        {
                          "properties": {
                            "amount": {
                              "description": "Coste total de los artículos en función de su cantidad.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "Un objeto JSON que contiene los atributos y valores del artículo.",
                              "type": "object"
                            },
                            "is_pre_order": {
                              "description": "Si es `true`, el artículo se reserva (pedido por anticipado).",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "Cantidad de artículos.",
                              "type": "integer"
                            },
                            "sku": {
                              "$ref": "#/components/schemas/items.sku"
                            },
                            "type": {
                              "$ref": "#/components/schemas/items.type"
                            }
                          },
                          "required": [
                            "sku",
                            "type",
                            "quantity",
                            "amount",
                            "promotions",
                            "is_pre_order"
                          ],
                          "title": "versión = 1",
                          "type": "object"
                        },
                        {
                          "properties": {
                            "amount": {
                              "description": "Coste total de los artículos en función de su cantidad.",
                              "type": "string"
                            },
                            "custom_attributes": {
                              "description": "Un objeto JSON que contiene los atributos y valores del artículo.",
                              "type": "object"
                            },
                            "is_bonus": {
                              "description": "Si es `true`, el artículo es una bonificación.",
                              "type": "boolean"
                            },
                            "is_bundle_content": {
                              "description": "Si es `true`, el artículo pertenece a un lote.",
                              "type": "boolean"
                            },
                            "is_free": {
                              "description": "Si es `true`, el artículo es gratuito.",
                              "type": "boolean"
                            },
                            "is_pre_order": {
                              "description": "Si es `true`, el artículo se reserva (pedido por anticipado).",
                              "type": "boolean"
                            },
                            "promotions": {
                              "$ref": "#/components/schemas/items.promotions"
                            },
                            "quantity": {
                              "description": "Cantidad de artículos.",
                              "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": "versión = 2",
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "order": {
                    "description": "Información sobre el pedido.",
                    "properties": {
                      "amount": {
                        "description": "El coste total de una cesta en función de la moneda elegida.",
                        "type": "string"
                      },
                      "comment": {
                        "description": "Comentario del usuario sobre el pedido.",
                        "nullable": true,
                        "type": "string"
                      },
                      "coupons": {
                        "description": "Cupones aplicados. Si no se aplica el cupón, la matriz no devuelve.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "El código de un cupón aplicado.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "ID externo.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "currency": {
                        "description": "Moneda del pedido. La moneda virtual utiliza el código de artículo (SKU) y la moneda real usa un código de tres letras según la [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).",
                        "type": "string"
                      },
                      "currency_type": {
                        "$ref": "#/components/schemas/currency-type"
                      },
                      "id": {
                        "description": "Identificador único del pedido del usuario en el lado de Xsolla.",
                        "type": "integer"
                      },
                      "invoice_id": {
                        "description": "ID de factura de pagos en moneda real. Los pagos en moneda virtual o los artículos gratuitos tienen un valor de `null`.",
                        "nullable": true,
                        "type": "string"
                      },
                      "mode": {
                        "description": "Modo de pago. `default` se utiliza para pagos reales; `sandbox` para pagos de prueba.",
                        "enum": [
                          "default",
                          "sandbox"
                        ],
                        "type": "string"
                      },
                      "platform": {
                        "description": "Plataforma de pago. Para pagos a través de Xsolla se utiliza el valor `xsolla`. Para otros pagos, se utiliza el valor correspondiente al nombre de la plataforma de publicación de juegos.",
                        "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": "Códigos promocionales aplicados. Si no se aplica el código promocional, la matriz no devuelve.",
                        "items": {
                          "properties": {
                            "code": {
                              "description": "El código de un código promocional aplicado.",
                              "type": "string"
                            },
                            "external_id": {
                              "description": "ID externo.",
                              "type": "string"
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "promotions": {
                        "$ref": "#/components/schemas/order.promotions"
                      },
                      "status": {
                        "description": "Estado del pedido.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "mode",
                      "currency_type",
                      "currency",
                      "amount",
                      "status",
                      "platform",
                      "comment",
                      "invoice_id",
                      "promotions"
                    ],
                    "type": "object"
                  },
                  "user": {
                    "description": "Información del usuario.",
                    "properties": {
                      "country": {
                        "$ref": "#/components/schemas/user.country"
                      },
                      "email": {
                        "description": "Dirección de correo electrónico del usuario.",
                        "type": "string"
                      },
                      "external_id": {
                        "description": "ID de usuario.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "external_id",
                      "email"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "notification_type",
                  "items",
                  "order",
                  "user"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Devuelve para indicar un procesamiento realizado correctamente."
          },
          "400": {
            "description": "Devuelve en caso de error en la información proporcionada (p. ej., falta un parámetro obligatorio, autorización fallida, etc.)."
          }
        },
        "summary": "Pago del pedido realizado correctamente (sin los detalles del pago ni de la transacción)",
        "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": "Si algunos parámetros de la suscripción (`plan_id`, `date_next_charge`) fueran modificados, y en el caso de cada renovación de suscripción, Xsolla envía un webhook con el tipo `update_subscription` a la URL del webhook.",
        "operationId": "updated-subscription",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "subscription": {
                    "description": "Datos de la suscripción (objeto).",
                    "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": "Datos del usuario (objeto).",
                    "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": "Suscripción actualizada",
        "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> es un parámetro que identifica al usuario de forma exclusiva y que este conoce, a diferencia de <nt>User ID</nt> (<nt>Public User ID</nt> puede ser correo electrónico, nombre de usuario, etc). Xsolla envía un webhook con el tipo `user_search` cuando se realiza una compra fuera de la tienda de juegos (p. ej., a través de quioscos de efectivo/cajeros automáticos).",
        "operationId": "user-search",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "notification_type": {
                    "$ref": "#/components/schemas/notification_type"
                  },
                  "settings": {
                    "description": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Búsqueda del usuario",
        "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 envía un webhook con el tipo `user_validation` a la dirección URL del \nwebhook para verificar que un usuario esté registrado en el juego. La solicitud \nse envía varias veces como parte del proceso de pago:\n\n* cuando un usuario elige un método de pago en la interfaz de pago\n* cuando un usuario introduce datos en el formulario de pago, p. ej., los datos \n  de la tarjeta bancaria o el código postal al pagar a través de PayPal\n* cuando un usuario hace clic en **Pagar ahora** para proceder al pago\n* cuando finalice el proceso de pago y el estado de la transacción cambie a `done`\n\nLa solicitud se envía al pagar con cualquier método de pago.\n\nAl guardar la URL del webhook en Cuenta del editor, puede dar permisos para \nrecibir información detallada en los webhooks. Para ello, active las opciones \ncorrespondientes en Cuenta del editor en <a \nhref=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/store\">Project \nsettings &gt; Webhooks &gt; Advanced settings</a>.\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Si se registró en Cuenta del editor el 22 de enero de 2025 o antes, encontrará las opciones en <a href=\"https://publisher.xsolla.com/0/projects/0/edit/webhooks/payments\">Project settings &gt; Webhooks &gt; Testing &gt; Payments &gt; Advanced settings</a>.</p>\n</div>\n\n<table>\n<thead>\n    <tr>\n        <th>Conmutador</th>\n        <th>Descripción</th>\n    </tr>\n</thead>\n<tbody>\n    <tr>\n        <td>Enviar solamente los parámetros de usuario necesarios sin datos confidenciales</td>\n        <td><p>Solamente la siguiente información sobre el usuario se transmite en el webhook:</p><ul><li>ID</li><li>país</li></ul></td>\n    </tr>\n    <tr>\n        <td>Enviar parámetros personalizados</td>\n        <td>La información sobre los <a href=\"/es/api/pay-station/operation/create-token/\">parámetros de token personalizados</a> se transmite en el webhook.</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": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Validación del usuario",
        "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 envía un webhook desde un sitio de Web Shop para comprobar si un usuario existe en el juego. El webhook se envió desde la siguiente dirección IP: \"34.102.38.178\".\n<div class=\"note\"><strong>Observación</strong><br><br>El webhook se utiliza solamente para la \nvalidación de usuarios en Web Shop. Consulte estas <a target=\"_blank\" href=\"https://developers.xsolla.com/es/solutions/web-shop/authentication-and-analytics/set-up-authentication/\">instrucciones </a> para obtener más información sobre cómo configurar este webhook en Site Builder.</div>",
        "operationId": "user-validation-in-webshop",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "settings": {
                    "description": "Configuración del proyecto personalizada (objeto).",
                    "properties": {
                      "merchant_id": {
                        "$ref": "#/components/schemas/settings.merchant_id"
                      },
                      "project_id": {
                        "$ref": "#/components/schemas/settings.project_id"
                      }
                    },
                    "type": "object"
                  },
                  "user": {
                    "description": "Datos del usuario (objeto).",
                    "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": "Atributos de usuario usados para la personalización. Consulte la <a target=\"_blank\" href=\"https://developers.xsolla.com/es/doc/login/features/user-attributes/#login_features_user_attributes\">documentación</a> para obtener información detallada.",
                      "items": {
                        "properties": {
                          "key": {
                            "description": "Nombre del atributo.",
                            "type": "string"
                          },
                          "value": {
                            "description": "Valor del atributo."
                          }
                        },
                        "required": [
                          "key",
                          "value"
                        ]
                      },
                      "type": "array"
                    },
                    "removingKeys": {
                      "description": "Lista de atributos que desea eliminar. Si especifica el mismo atributo en el parámetro `attributes`, no se eliminará.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "user": {
                      "description": "Datos del usuario (objeto).",
                      "properties": {
                        "appPlayerId": {
                          "$ref": "#/components/schemas/appPlayerId"
                        },
                        "id": {
                          "description": "ID de usuario.",
                          "type": "string"
                        },
                        "name": {
                          "description": "Nombre de usuario.",
                          "type": "string"
                        },
                        "picture": {
                          "description": "Enlace al avatar del usuario.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "id"
                      ],
                      "type": "object"
                    }
                  },
                  "required": [
                    "user"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Devuelve información sobre el usuario."
          },
          "404": {
            "description": "Usuario no encontrado."
          }
        },
        "summary": "Validación de usuarios en 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": "Tipo de notificación.",
        "type": "string"
      },
      "payment_account.country": {
        "description": "País de la cuenta de pago. Por ejemplo, el país del banco emisor de la tarjeta o el país especificado al crear una cuenta de PayPal. Código de país de dos letras en mayúscula según la norma [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).",
        "type": "string"
      },
      "payment_account.id": {
        "description": "ID de la cuenta de pago.",
        "type": "string"
      },
      "payment_account.name": {
        "description": "El nombre de la cuenta de pago en el sistema de pago (p. ej., número de la tarjeta de pago o correo electrónico).",
        "type": "string"
      },
      "payment_account.payment_method": {
        "description": "ID del método de pago.",
        "type": "integer"
      },
      "payment_account.type": {
        "description": "Tipo de cuenta de pago (p. ej., tarjeta o PayPal).",
        "type": "string"
      },
      "settings.merchant_id": {
        "description": "ID de vendedor.",
        "type": "integer"
      },
      "settings.project_id": {
        "description": "ID del proyecto. Encontrará este parámetro en su cuenta [Publisher](https://publisher.xsolla.com/) junto al nombre del proyecto.",
        "type": "integer"
      },
      "user.country": {
        "description": "Código de país. Dos letras mayúsculas de conformidad con la norma [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).",
        "type": "string"
      },
      "user.email": {
        "description": "Correo electrónico del usuario.",
        "type": "string"
      },
      "user.id": {
        "description": "ID de usuario.",
        "type": "string"
      },
      "user.ip": {
        "description": "IP del usuario.",
        "type": "string"
      },
      "user.name": {
        "description": "Nombre de usuario.",
        "type": "string"
      },
      "user.zip": {
        "description": "Código postal o ZIP del usuario.",
        "type": "string"
      },
      "subscription.date_create": {
        "description": "Fecha de creación de la suscripción. Fecha y hora de conformidad con la norma [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).",
        "type": "string"
      },
      "subscription.date_end": {
        "description": "Fecha de finalización de la suscripción. Fecha y hora de conformidad con la norma [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).",
        "type": "string"
      },
      "subscription.plan_id": {
        "description": "ID del plan (externo si el plan se creó usando una API).",
        "type": "string"
      },
      "subscription.product_id": {
        "description": "ID del producto (si se envía en el token de acceso).",
        "type": "string"
      },
      "subscription.subscription_id": {
        "description": "ID de suscripción en la base de datos de Xsolla.",
        "type": "integer"
      },
      "subscription.tags": {
        "description": "Etiquetas del plan.",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "subscription.date_next_charge": {
        "description": "Próxima fecha de facturación. Fecha y hora de conformidad con la norma [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).",
        "type": "string"
      },
      "subscription.is_gift": {
        "description": "Si la suscripción era un regalo. El parámetro se transmite solamente si el valor es `true`.",
        "type": "boolean"
      },
      "dispute-date": {
        "description": "Fecha de apertura de la disputa según la norma [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339).",
        "type": "string"
      },
      "dispute-reason": {
        "description": "Motivo de la apertura de la disputa. Consulte la [documentación](/es/payment-ui-and-flow/anti-fraud/chargeback/#payments_chargeback_reasons) para obtener una descripción de los grupos de motivos.",
        "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": "Estado de la disputa.",
        "enum": [
          "new",
          "accepted",
          "no_actions_required",
          "won",
          "lost"
        ],
        "type": "string",
        "x-enumDescriptions": {
          "accepted": "<b>Aceptada</b>",
          "lost": "<b>Perdida</b>",
          "new": "<b>Nueva</b>",
          "no_actions_required": "<b>En curso</b>",
          "won": "<b>Ganada</b>"
        }
      },
      "dispute-type": {
        "description": "Tipo de disputa.",
        "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": "Primer contracargo.",
          "2nd_time_chargeback": "Segundo contracargo (previo al arbitraje).",
          "arbitration": "Resolver una disputa entre el banco emisor y el comerciante cuando se rechazaron el 1.er contracargo y el 2.º contracargo.",
          "chargeback": "Primer contracargo.",
          "chargeback_reversal": "El contracargo ha sido revocado.",
          "claim": "Una disputa en PayPal entre un cliente y un comerciante.",
          "dispute": "Un titular de tarjeta ha solicitado los detalles del pago al banco.",
          "inquiry": "Un titular de tarjeta ha solicitado los detalles del pago al banco.",
          "other": "Se utiliza para los tipos de contracargos no cubiertos por ningún otro tipo.",
          "reimbursement": "Se ha realizado el reembolso.",
          "reimbursement_reversal": "El contracargo ha sido revocado.",
          "representment": "El equipo de gestión de contracargos ha enviado las pruebas al sistema de pago.",
          "representment_reversal": "El contracargo ha sido revocado.",
          "retrieval": "Un titular de tarjeta ha solicitado los detalles del pago al banco."
        }
      },
      "date-create": {
        "description": "Fecha de pago.",
        "type": "string"
      },
      "external-id": {
        "description": "ID externo de la transacción. Consulte [FAQs](/es/doc/pay-station/references/faq/#faq_payments_q_new_transaction_external_id) para obtener información detallada.",
        "type": "string"
      },
      "transaction-id": {
        "description": "ID de la transacción.",
        "format": "int64",
        "type": "integer"
      },
      "dispute-payment-method": {
        "description": "Método de pago.",
        "enum": [
          "credit_debit_card",
          "paypal"
        ],
        "type": "string",
        "x-enumDescriptions": {
          "credit_debit_card": "Tarjeta de crédito o débito",
          "paypal": "PayPal"
        }
      },
      "transaction-total-amount": {
        "description": "Importe del pago.",
        "format": "float",
        "type": "number"
      },
      "currency": {
        "description": "Moneda. Código de moneda de tres letras de conformidad con la norma [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217).",
        "type": "string"
      },
      "country_whc": {
        "description": "Objeto con datos sobre los costes de retención fiscal en origen aplicados en determinados países por transacciones transfronterizas.",
        "properties": {
          "amount": {
            "description": "Importe.",
            "format": "float",
            "type": "number"
          },
          "currency": {
            "$ref": "#/components/schemas/currency"
          },
          "percent": {
            "description": "Porcentaje de la tasa de costes de retención fiscal en origen.",
            "format": "float",
            "type": "number"
          }
        },
        "type": "object"
      },
      "amount-float": {
        "description": "Precio en moneda real.",
        "format": "float",
        "type": "number"
      },
      "items.promotions": {
        "description": "Promociones aplicadas para artículos específicos en el pedido.\nLa matriz se devuelve en los siguientes casos:\n - Se configura una promoción de descuento para un artículo específico.\n - Se aplica un código promocional con el parámetro **Descuento en artículos seleccionados**.\n\nSi no se aplican promociones a nivel de artículo, se devuelve una matriz vacía.",
        "items": {
          "properties": {
            "amount_with_discount": {
              "description": "Coste total de los artículos con descuento.",
              "type": "string"
            },
            "amount_without_discount": {
              "description": "Coste total de los artículos sin descuento.",
              "type": "string"
            },
            "sequence": {
              "description": "Pedido de aplicación de promociones.",
              "type": "integer"
            }
          },
          "type": "object"
        },
        "type": "array"
      },
      "items.sku": {
        "description": "ID único del artículo. Para los artículos con el tipo `game_key`, se utiliza un valor con el formato `sku_drm`.",
        "type": "string"
      },
      "items.type": {
        "description": "Tipo de artículos.\nPara los artículos del tipo `bundle`, incluidos los paquetes de monedas virtuales, la matriz `items` mostrará:\n - parámetros del lote o del paquete de monedas virtuales\n - artículos incluidos en el lote o monedas incluidas en el paquete\n  \nEl tipo `value_point` se utiliza en operaciones de [puntos de fidelidad](/es/solutions/loyalty-as-service/) - cuando se gastan o conceden puntos.",
        "enum": [
          "virtual_good",
          "virtual_currency",
          "game_key",
          "bundle",
          "value_point"
        ],
        "type": "string"
      },
      "currency-type": {
        "description": "Tipo de moneda de pago. Para realizar un pedido gratuito, se especifica el valor `unknown`.",
        "enum": [
          "real",
          "virtual",
          "unknown",
          "loyalty_point"
        ],
        "type": "string",
        "x-enumDescriptions": {
          "loyalty_point": "puntos de fidelidad",
          "real": "moneda real",
          "unknown": "pedido gratuito",
          "virtual": "moneda virtual"
        }
      },
      "order.promotions": {
        "description": "Promociones aplicadas para todo el pedido.\nLa matriz se devuelve en los siguientes casos:\n - Una promoción afecta al importe total de la compra, como un código promocional con el parámetro **Descuento en compras**.\n - No se aplica ningún descuento a la compra, pero se añaden artículos de bonificación al pedido. En este caso, se devuelven los valores del coste con descuento ([amount_with_discount](/es/webhooks/#operation/order-cancellation!path=order/promotions/amount_with_discount&t=request)) y sin descuento ([amount_without_discount](/es/webhooks/#operation/order-cancellation!path=order/promotions/amount_without_discount&t=request)) e idénticos, ya que no se aplica ningún descuento.\n\nSi no se aplican promociones a nivel de pedido, se devuelve una matriz vacía.",
        "items": {
          "properties": {
            "amount_with_discount": {
              "description": "Coste total de los artículos con descuento.",
              "type": "string"
            },
            "amount_without_discount": {
              "description": "Coste total de los artículos sin descuento.",
              "type": "string"
            },
            "sequence": {
              "description": "Pedido de aplicación de promociones.",
              "type": "integer"
            }
          },
          "type": "object"
        },
        "type": "array"
      },
      "user.phone": {
        "description": "Teléfono del usuario.",
        "type": "string"
      },
      "order": {
        "description": "Objeto que contiene información sobre un pedido. Para recibir esta información, ponga el conmutador **Añadir objeto de pedido a webhook** en la posición **On** en [Cuenta del editor](https://publisher.xsolla.com/) en la sección **Project settings &gt; Webhooks &gt; Advanced settings**.",
        "type": "object"
      },
      "locale": {
        "description": "Idioma del usuario. [Código de idioma](https://developers.xsolla.com/es/doc/pay-station/features/localization/) de dos letras minúsculas.",
        "type": "string"
      },
      "quantity": {
        "deprecated": true,
        "description": "Número de artículos que puede comprar un usuario. Para fijar una cantidad ilimitada, transmita `null`. Para que el artículo no esté a la venta pero sea visible en el catálogo, transmita `0`.\n\nSi utiliza este parámetro, la información sobre el límite de compra no se mostrará en el catálogo. Para que aparezca la información sobre el límite de compra en el catálogo (por ejemplo, `7/10`), transmita el par `available` y `total` en lugar de `quantity`.",
        "type": "integer"
      },
      "available": {
        "description": "Número restante de artículos que el usuario puede comprar.\n\nPara mostrar información sobre el límite de compra en el catálogo (por ejemplo, `7/10`), transmita el par `available` y `total`.",
        "type": "integer"
      },
      "total": {
        "description": "Número máximo de artículos que puede comprar un usuario.\n\nPara mostrar información sobre el límite de compra en el catálogo (por ejemplo, `7/10`), transmita el par `available` y `total`.",
        "exclusiveMinimum": 0,
        "type": "integer"
      },
      "bundle_content": {
        "description": "Conjunto de objetos con contenido del lote para mostrar en el catálogo. Solamente se puede utilizar para el tipo de lote [partner_side_content](https://developers.xsolla.com/es/api/shop-builder/operation/admin-create-bundle/).",
        "items": {
          "properties": {
            "description": {
              "description": "Descripción del artículo que se mostrará en el catálogo como parte del lote. Si no se proporciona, se transmite el valor `null`.",
              "maxLength": 255,
              "type": "string"
            },
            "image_url": {
              "description": "URL de la imagen del artículo que se mostrará en el catálogo como parte del lote. Solo se admite el protocolo HTTPS. Si no se proporciona, se transmite el valor `null`.",
              "format": "uri",
              "maxLength": 255,
              "type": "string"
            },
            "name": {
              "description": "Descripción del artículo que se mostrará en el catálogo como parte del lote. Si no se proporciona, se transmite una cadena (string) vacía.",
              "maxLength": 255,
              "type": "string"
            },
            "quantity": {
              "default": 1,
              "description": "Cantidad del artículo que contiene el lote.",
              "minimum": 1,
              "type": "integer"
            }
          },
          "type": "object"
        },
        "type": "array"
      },
      "date_from": {
        "description": "Fecha en la que el artículo dejó de estar disponible para la venta. Con un formato acorde al estándar [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339).",
        "type": "string"
      },
      "date_until": {
        "description": "Fecha en la que el artículo dejó de estar disponible para la venta. Con un formato acorde al estándar [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339).",
        "type": "string"
      },
      "description": {
        "description": "Descripción del artículo que se mostrará en el catálogo. Sobrescribe la descripción guardada en un artículo.",
        "maxLength": 255,
        "type": "string"
      },
      "image_url": {
        "description": "URL de la imagen que se mostrará en el catálogo. Sobrescribe la URL de la imagen guardada en un artículo. Solamente se admite el protocolo HTTPS. Si la URL no cumple los requisitos, se ignorará.",
        "format": "uri",
        "maxLength": 255,
        "type": "string"
      },
      "json_attributes": {
        "description": "Un objeto JSON que contiene atributos y valores del artículo. Sobrescribe [custom_attributes](https://developers.xsolla.com/es/webhooks/operation/successful-order-payment/#!path=items/0/custom_attributes&t=request) guardado en un artículo. Si el objeto JSON no cumple los requisitos o es más largo que la longitud máxima, se ignorará.",
        "format": "json",
        "maxLength": 500,
        "type": "object"
      },
      "name": {
        "description": "Nombre del artículo que se mostrará en el catálogo. Sobrescribe el nombre guardado en un artículo.",
        "maxLength": 255,
        "type": "string"
      },
      "sku": {
        "description": "El ID único del artículo que especificó en su Cuenta del editor. Debe transmitir el `sku` (código de artículo) o el `item_id`.",
        "type": "string"
      },
      "item_id": {
        "description": "ID único de artículo en el lado de Xsolla. Debe transmitir el `sku` (código de artículo ) o el `item_id`.",
        "type": "integer"
      },
      "user.public_id": {
        "description": "ID público del usuario.",
        "type": "string"
      },
      "appPlayerId": {
        "description": "ID de usuario asignado por el propietario de la aplicación en el momento del registro del usuario (ID de usuario de cliente).\n<div lang=\"en\" class=\"note\"><strong>Nota</strong><br><br> Xsolla transmite estos datos en el objeto <code>custom_parameters</code> de la llamada para obtener un token de pago.</div>",
        "type": "string"
      }
    },
    "responses": {
      "204": {
        "description": "Devuelve para indicar un procesamiento realizado correctamente."
      },
      "400": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "error": {
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        },
        "description": "Devuelve en caso de error en la información proporcionada (p. ej., falta un parámetro obligatorio, autorización fallida, etc.).",
        "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": "Devuelve para indicar errores temporales en sus servidores."
      },
      "400-payment": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "error": {
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        },
        "description": "Devuelve en caso de error en la información proporcionada (p. ej., falta un parámetro obligatorio, autorización fallida, etc.). En este caso, se carga el importe en la cuenta del usuario, pero hay un fallo en la compra. Para hacer un reembolso, contacte con el servicio de atención al cliente de Xsolla escribiendo a 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": "Validación del usuario",
      "tags": [
        "user-validation"
      ]
    },
    {
      "name": "Payments",
      "tags": [
        "payments"
      ]
    },
    {
      "name": "Servicios de juego",
      "tags": [
        "combined-webhooks",
        "separate-webhooks",
        "personalization"
      ]
    },
    {
      "name": "Antifraude",
      "tags": [
        "anti-fraud"
      ]
    },
    {
      "name": "Suscripciones",
      "tags": [
        "subscriptions"
      ]
    }
  ]
}