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>In-Game 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## In-Game Store y Payments\nSe han configurado 2 opciones de envío de webhook por parte de Xsolla al \ncomprar y devolver artículos en el sitio: la información con los datos de pago \ny transacción, y la información sobre los artículos comprados pueden enviarse \npor separado o pueden combinarse en un solo 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 \nhref=\"/webhooks/operation/payment\">Payment</a> (`payment`) y <a \nhref=\"/webhooks/operation/refund\">Refund</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 por separado</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 la 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>Atención</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. Por defecto, se genera una clave secreta para firmar los webhooks del proyecto. \n   Si desea generar una nueva clave secreta, haga clic en el icono de \n   actualización.\n4. Haga clic en <b>Enable webhooks</b>.\n\n![Enable \nwebhooks](https://cdn.xsolla.net/developers/current/images/api_docs/enable.png)\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>Atención</strong></p>\n    <p>No puede enviar simultáneamente webhooks a diferentes URL. Lo que sí puede hacer en la Cuenta del editor es especificar primero una URL de prueba y luego sustituirla por la real.</p>\n</div>\n\nPara deshabilitar la recepción de webhooks:\n1. En el proyecto en la 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## 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</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=\"/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>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 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</tbody>\n</table>\n\n![Configuración \navanzada](https://cdn.xsolla.net/developers/current/images/api_docs/advanced-settings-upd.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/testing.png)\n\nLa sección de pruebas de la Cuenta del editor varía en función de la opción de \nrecepción del webhook.\n\n<b>Si recibe webhooks combinados</b>:\n\n<table>\n<thead>\n    <tr>\n        <th>Nombre de la pestaña para pruebas de webhook</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\n<b>Si recibe webhooks por separado</b>:\n\n<table>\n<thead>\n    <tr>\n        <th>Nombre de la pestaña para pruebas de webhook</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\n![Error en la prueba](https://cdn.xsolla.net/developers/current/images/api_docs/test-error.png)\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 realizar la prueba:\n1. En la sección de pruebas de webhooks, vaya a la pestaña <b>Payments and \n   Store</b>.\n2. En el menú desplegable, seleccione el tipo de artículo. Si el artículo del tipo \n   seleccionado no está establecido en Cuenta del editor, haga clic en:\n   * <b>Connect</b>: si el módulo con artículos de este tipo no está conectado.\n   * <b>Configure</b>: si conectó el módulo anteriormente, pero no ha finalizado la \n     configuración <br/>Cuando haga clic en el botón, se le redirigirá a la sección \n     de Cuenta del editor correspondiente al tipo de artículo seleccionado. Cuando \n     haya creado el artículo, vuelva a la sección de pruebas de webhooks y proceda \n     al siguiente paso.\n3. Rellene los campos necesarios: <ol type=\"a\"> <li>Seleccione el SKU de los \n   artículos en la lista desplegable e indique la cantidad. Puede elegir varios \n   artículos del mismo tipo haciendo clic en <b>+</b> y añadiéndolos en una nueva \n   línea.</li> <li><b>User ID</b>: al realizar la prueba, puede utilizar cualquier \n   combinación de letras y dígitos.</li> <li><b>Public user ID</b>: ID conocido \n   por un usuario, por ejemplo, un correo electrónico o un apodo. Este campo se \n   muestra si el ID de usuario público está habilitado en su proyecto en <b>Pay \n   Station &gt; Settings</b>.</li> <li>Introduzca cualquier valor en el campo \n   <b>Xsolla Order ID</b>.</li> <li><b>Xsolla Invoice ID</b>: ID de transacción en \n   el lado de Xsolla. Al realizar la prueba, puede usar cualquier valor \n   numérico.</li> <li><b>Invoice ID</b>: ID de transacción del lado de su juego. \n   Al realizar la prueba, puede utilizar cualquier combinación de letras y \n   dígitos. No es un parámetro requerido para pagar correctamente, pero puede \n   transmitirlo para enlazar el ID de transacción de su lado con el ID de \n   transacción del lado de Xsolla.</li> <li><b>Amount</b>: cantidad del pago. Al \n   realizar la prueba, puede utilizar cualquier valor numérico.</li> \n   <li><b>Currency</b>: seleccione una moneda de la lista desplegable.</li> </ol>\n\n4. Haga clic en <b>Test webhooks</b>.\n\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 el ID de usuario público está activado en su proyecto, también verá los \nresultados de una comprobación de búsqueda de usuarios.\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/payments-tab.png)\n\n## Suscripciones\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>En la Cuenta del editor, solo es posible probar los webhooks básicos de Validación del usuario y Pago. Para probar otros tipos de webhooks, vaya a:</p>\n<p><ul><li><a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_payment\">Test subscription purchase</a></li><li><a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_renewal\">Test subscription renewal</a></li><li><a href=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_cancelation\">Test subscription cancellation</a></li></ul></p>\n</div>\n\n<p></p>\n\n<div class=\"note\">\n<p><strong>Nota</strong></p>\n<p>Para probar los webhooks, debe tener al menos un <a href=\"/doc/subscriptions/integration-guide/set-up-plan/\">plan de suscripción creado</a> en la sección <b>Cuenta del editor &gt; Subscriptions &gt; Subscription Plans</b>.</p>\n</div>\n\nPara realizar pruebas: <ol> <li>En la sección de pruebas, vaya a la pestaña \n<b>Subscriptions</b>.</li> <li>Rellene los campos necesarios: <ol type=\"a\"><li><b>User ID</b>: al realizar la prueba, puede usar cualquier combinación de \nletras y dígitos.</li> <li><b>Xsolla Invoice ID</b>: ID de transacción en el \nlado de Xsolla. Cuando realice pruebas, puede usar cualquier valor \nnumérico.</li> <li><b>Public user ID</b>: ID conocido por un usuario, p.\_ej., \nun correo electrónico o un alias. Este campo se muestra si el ID público de \nusuario está habilitado en su proyecto en la sección Pay Station &gt; Settings \n&gt; Additional settings.</li> <li><b>Currency</b>: seleccione una moneda de la \nlista desplegable.</li> <li><b>Plan ID</b>: un plan de suscripción. Elija un \nplan de la lista desplegable.</li> <li><b>Subscription product</b>: elija un \nproducto de la lista desplegable (opcional).</li> <li><b>Amount</b>: importe \ndel pago. Al realizar pruebas, puede usar cualquier valor numérico.</li><li><b>Invoice ID</b>: ID de transacción en el lado del juego. Cuando realice \npruebas, puede usar cualquier combinación de letras y dígitos. No es un \nparámetro obligatorio para que el pago sea aceptado, pero puede transmitirlo \npara vincular el ID de transacción de su lado con el ID de transacción del lado \nde Xsolla.</li> <li><b>Periodo de prueba</b>. Para probar la <a \nhref=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_sandbox\">comp\nra de una suscripción sin periodo de prueba</a> o para probar la <a \nhref=\"/doc/subscriptions/integration-guide/get-subscription-information/#guides_subscriptions_get_subscription_set_up_webhooks_test_renewal\">renovación de una suscripción</a>, especifique el valor <code>0</code>.</li></ol> </li> <li>Haga clic en <b>Test webhooks</b>.</li> </ol>\n\nEn la URL especificada, recibirá webhooks con datos rellenados. Los resultados \nde las pruebas de cada webhook, tanto para un escenario con satisfactorio como \npara un escenario fallido, se muestran bajo el botón <b>Test webhooks</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>Atención</strong></p><p>Utilice la carga JSON tal y \n   como la recibió. No analice ni recodifique la carga útil, ya que modificaría el \n   formato y provocaría un error en la verificación de la firma.</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# 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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \

            -d '{
                "notification_type":"payment_account_add",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "ip": "127.0.0.1",
                    "email": "email@example.com",
                    "id": "1234567",
                    "name": "John Smith",
                    "country": "US",
                    "zip": "12345"
                },
                "payment_account": {
                    "id": "12345678",
                    "name": "email@example.com",
                    "payment_method": "24",
                    "country": "US",
                    "type": "paypal"
                }
            }'
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host:           your.hostname
            accept:         application/json
            content-length: 255
            content-type:   application/json
            authorization:  Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843

            {
                "notification_type": "payment_account_add",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "ip": "127.0.0.1",
                    "email": "email@example.com",
                    "id": "1234567",
                    "name": "John Smith",
                    "country": "US",
                    "zip": "12345"
                },
                "payment_account": {
                    "id": "12345678",
                    "name": "email@example.com",
                    "payment_method": "24",
                    "country": "US",
                    "type": "paypal"
                }
            }
  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' \

            -X POST \

            -H 'authorization: Signature
            32c64a80d2527dc08906ae1891bac4489509b9f6' \

            -d '{
              "event": {
                "action": "adding",
                "date_of_last_action": "2020-11-27T10:09:05+03:00",
                "parameter": "email",
                "parameter_value": "email@example.com",
                "reason": "ps_reported_fraud",
                "transaction_id": "111111111",
                "project_id": "123456"
              },
              "notification_type": "afs_black_list"
            }'
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your_uri HTTP/1.1
            host: your.host
            accept: application/json
            content-type: application/json
            content-length: 233
            authorization: Signature 32c64a80d2527dc08906ae1891bac4489509b9f6

            {
              "event": {
                "action": "adding",
                "date_of_last_action": "2020-11-27T10:09:05+03:00",
                "parameter": "email",
                "parameter_value": "email@example.com",
                "reason": "ps_reported_fraud",
                "transaction_id": "111111111",
                "project_id": "123456"
              },
              "notification_type": "afs_black_list"
            }
  afs-rejected-transaction:
    post:
      description: >
        Cuando se rechaza una transacción durante una comprobación del sistema 

        Antifraude, Xsolla envía los detalles de la transacción en el webhook
        con el 

        tipo de `afs_reject` 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>.


        Al guardar la URL del webhook en Cuenta del editor, puede dar permisos
        para 

        recibir información detallada en los webhooks. Para ello, active la
        siguiente 

        opción 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>.


        <div class="note">

        <p><strong>Nota</strong></p>

        <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>

        </div>


        <table>

        <thead>
            <tr>
                <th>Conmutador</th>
                <th>Descripción</th>
            </tr>
        </thead>

        <tbody>
            <tr>
                <td>Mostrar información sobre las transacciones mediante los métodos de pago guardados</td>
                <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>
            </tr>
        </tbody>

        </table>
      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.
                      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.
                      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' \
            -X POST \
            -d '{
              "notification_type": "afs_reject",
              "settings": {
                "project_id": 18404,
                "merchant_id": 2340
              },
              "user": {
                "ip": "127.0.0.1",
                "phone": "18777976552",
                "email": "email@example.com",
                "id": "1234567",
                "name": "John Smith",
                "country": "US"
              },
              "transaction": {
                "id": 1,
                "external_id": 1,
                "dry_run": 1,
                "agreement": 1
              },
              "refund_details": {
                "code": 4,
                "reason": "Potential fraud"
              }
            }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
              'notification_type' => 'afs_reject',
              'settings' => array(
                'project_id' => 18404,
                'merchant_id' => 2340
              ),
              'user' => array(
                'ip' => '127.0.0.1',
                'phone' => '18777976552',
                'email' => 'email@example.com',
                'id' => '1234567',
                'country' => 'US'
              ),
              'transaction' => array(
                'id' => 87654321,
                'payment_method' => 1380,
                'dry_run' => 1
              ),
              'refund_details' => array(
                'code' => 4,
                'reason' => 'Potential fraud'
              )
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your_uri HTTP/1.1
            host: your.host
            accept: application/json
            content-type: application/json
            content-length: 1220
            authorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7

            {
              "notification_type": "afs_reject",
              "settings": {
                "project_id": 18404,
                "merchant_id": 2340
              },
              "user": {
                "ip": "127.0.0.1",
                "phone": "18777976552",
                "email": "email@example.com",
                "id": "1234567",
                "name": "John Smith",
                "country": "US"
              },
              "transaction": {
                "id": 1,
                "external_id": 1,
                "dry_run": 1,
                "agreement": 1
              },
              "refund_details": {
                "code": 4,
                "reason": "Potential fraud"
              }
            }
  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            13342703ccaca5064ad33ba451d800c5e823db8f' \

            -d '{
                    "notification_type": "cancel_subscription",
                    "settings": {
                      "project_id": 18404,
                      "merchant_id": 2340
                    },
                    "user": {
                        "id": "1234567",
                        "name": "John Smith"
                    },
                    "subscription": {
                        "plan_id": "b5dac9c8",
                        "subscription_id": "10",
                        "product_id": "Demo Product",
                        "date_create": "2014-09-22T19:25:25+04:00",
                        "date_end": "2015-01-22T19:25:25+04:00"
                    }
                }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
                'notification_type' => 'cancel_subscription',
                'settings' => array(
                  'project_id' => 18404,
                  'merchant_id' => 2340
                ),
                'user' => array(
                    'id' => '1234567',
                    'name' => 'John Smith'
                ),
                'subscription' => array(
                    'plan_id' => 'b5dac9c8',
                    'subscription_id' => '10',
                    'product_id' => 'Demo Product',
                    'date_create' => '2014-09-22T19:25:25+04:00',
                    'date_end' => '2015-01-22T19:25:25+04:00',
                )
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host: your.hostname
            accept: application/json
            content-type: application/json
            content-length: 240
            authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

            {
                "notification_type": "cancel_subscription",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user":{
                    "id": "1234567",
                    "name": "John Smith"
                },
                "subscription": {
                    "plan_id": "b5dac9c8",
                    "subscription_id": "10",
                    "product_id": "Demo Product",
                    "date_create": "2014-09-22T19:25:25+04:00",
                    "date_end": "2015-01-22T19:25:25+04:00"
                }
            }
  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            13342703ccaca5064ad33ba451d800c5e823db8f' \

            -d '{
                    "notification_type": "create_subscription",
                    "settings": {
                      "project_id": 18404,
                      "merchant_id": 2340
                    },
                    "user": {
                        "id": "1234567",
                        "name": "John Smith"
                    },
                    "subscription": {
                        "plan_id": "b5dac9c8",
                        "subscription_id": "10",
                        "product_id": "Demo Product",
                        "date_create": "2014-09-22T19:25:25+04:00",
                        "date_next_charge": "2015-01-22T19:25:25+04:00",
                        "trial": {
                                "value": 90,
                                "type": "day"
                            },
                        "is_gift": true
                    }
                }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
                'notification_type' => 'create_subscription',
                'settings' => array(
                  'project_id' => 18404,
                  'merchant_id' => 2340
                ),
                'user' => array(
                    'id' => '1234567',
                    'name' => 'John Smith'
                ),
                'subscription' => array(
                    'plan_id' => 'b5dac9c8',
                    'subscription_id' => '10',
                    'product_id' => 'Demo Product',
                    'date_create' => '2014-09-22T19:25:25+04:00',
                    'date_next_charge' => '2015-01-22T19:25:25+04:00',
                    'trial' =>  array(
                            'value' =>  90,
                            'type' =>  'day'
                        ),
                    'is_gift' => true,
                )
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            Host: your.hostname
            accept: application/json
            content-type: application/json
            content-length: 240
            authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

            {
                "notification_type": "create_subscription",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "id": "1234567",
                    "name": "John Smith"
                },
                "subscription": {
                    "plan_id": "b5dac9c8",
                    "subscription_id": "10",
                    "product_id": "Demo Product",
                    "date_create": "2014-09-22T19:25:25+04:00",
                    "date_next_charge": "2015-01-22T19:25:25+04:00",
                    "trial": {
                            "value": 90,
                            "type": "day"
                        },
                    "is_gift": true
                }
            }
  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' \

            -X POST \

            -H 'authorization: Signature
            32c64a80d2527dc08906ae1891bac4489509b9f6' \

            -d '{
              "notification_type": "dispute",
              "action": "adding",
              "transaction": {
                "id": 123456789,
                "date_create": "2023-08-24T10:21:00+04:00",
                "total": {
                  "amount": 1,
                  "currency": "EUR"
                },
                "payment_method": "credit_debit_card"
              },
              "settings": {
                "project_id": 18404,
                "merchant_id": 2340
              },
              "user": {
                "id": "1234567",
                "email": "email@example.com",
                "country_code": "US"
              },
              "dispute": {
                "incoming_date": "2024-01-25T01:02:03+04:00",
                "reason": "not_as_described",
                "type": "retrieval",
                "status": "new"
              }
            }'
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your_uri HTTP/1.1
            host: your.host
            accept: application/json
            content-Type: application/json
            content-Length: 578
            authorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7

            {
              "notification_type": "dispute",
              "action": "adding",
              "transaction": {
                "id": 123456789,
                "date_create": "2023-08-24T10:21:00+04:00",
                "total": {
                  "amount": 1,
                  "currency": "EUR"
                },
                "payment_method": "credit_debit_card"
              },
              "settings": {
                "project_id": 18404,
                "merchant_id": 2340
              },
              "user": {
                "id": "1234567",
                "email": "email@example.com",
                "country_code": "US"
              },
              "dispute": {
                "incoming_date": "2024-01-25T01:02:03+04:00",
                "reason": "not_as_described",
                "type": "retrieval",
                "status": "new"
              }
            }
  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            13342703ccaca5064ad33ba451d800c5e823db8f' \

            -d '{
                    "notification_type": "non_renewal_subscription",
                    "settings": {
                      "project_id": 12345,
                      "merchant_id": 1234
                    },
                    "user": {
                        "id": "1234567",
                        "email": "email@example.com"
                    },
                    "subscription": {
                        "plan_id": "a1bcd2e3",
                        "subscription_id": "10",
                        "date_create": "2014-12-22T15:25:25+04:00",
                        "date_next_charge": "2015-01-22T19:25:25+04:00",
                        "currency": "USD",
                        "amount": 0.03
                    }
                }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
                'notification_type' => 'non_renewal_subscription',
                'settings' => array(
                  'project_id' => 12345,
                  'merchant_id' => 1234
                ),
                'user' => array(
                    'id' => '1234567',
                    'email' => 'email@example.com'
                ),
                'subscription' => array(
                    'plan_id' => 'a1bcd2e3',
                    'subscription_id' => '10',
                    'date_create' => '2014-12-22T15:25:25+04:00',
                    'date_next_charge' => '2015-01-22T19:25:25+04:00',
                    'currency' => 'USD',
                    'amount' => 0.03
                )
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host: your.hostname
            accept: application/json
            content-type: application/json
            content-length: 240
            authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

            {
                "notification_type": "non_renewal_subscription",
                "settings": {
                  "project_id": 12345,
                  "merchant_id": 1234
                },
                "user": {
                    "id": "1234567",
                    "email": "email@example.com"
                },
                "subscription": {
                    "plan_id": "a1bcd2e3",
                    "subscription_id": "10",
                    "date_create": "2014-12-22T15:25:25+04:00",
                    "date_next_charge": "2015-01-22T19:25:25+04:00",
                    "currency": "USD",
                    "amount": 0.03
                }
            }
  order-cancellation:
    post:
      description: >
        Xsolla envía el webhook <code>order_canceled</code> a la URL
        especificada 

        cuando el pago es cancelado por el usuario, socio o de forma automática.
        El 

        webhook contiene información sobre los artículos devueltos, los datos de
        pago y 

        los detalles del pedido cancelado.


        El webhook no se envía si el pago no se realiza correctamente, por
        ejemplo:

        * se abrió la interfaz de pago, pero el usuario no pagó el pedido

        * se abrió la interfaz de pago, pero hubo errores durante el pago


        El tiempo de procesamiento recomendado del webhook es de menos de 3
        segundos.
      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:
                          description: >-
                            Retención fiscal aplicada en determinados países
                            debido a transacciones transfronterizas (objeto).
                          properties:
                            amount:
                              description: Importe.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: Tipo de retención fiscal del país, %.
                              format: float
                              type: number
                          type: object
                        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 

                            tabla:


                            <table>
                                <thead>
                                <tr>
                                    <th>Iniciador del reembolso</th>
                                    <th>Valor de campo</th>
                                </tr>
                                </thead>
                                <tbody>
                                <tr>
                                    <td>Juego (vía API).</td>
                                    <td>API</td>
                                </tr>
                                <tr>
                                    <td>Usuario de Cuenta del editor (reembolso automático).</td>
                                    <td>Correo electrónico del usuario</td>
                                </tr>
                                <tr>
                                    <td>Usuario de Cuenta del editor (con asistencia del servicio de atención al cliente de Xsolla).</td>
                                    <td>support@xsolla.com</td>
                                </tr>
                                <tr>
                                    <td>Xsolla (con asistencia del servicio de atención al cliente de Xsolla).</td>
                                    <td>support@xsolla.com</td>
                                </tr>
                                </tbody>
                            </table>
                          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.
                          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.


                    El conjunto de parámetros incluidos en la matriz depende de
                    la versión del 

                    webhook. La versión 2 incluye parámetros adicionales:
                    `is_free`, `is_bonus` y 

                    `is_bundle_content`. Para cambiar de versión, introduzca su
                    número en el 

                    parámetro `version` en la llamada API [Update information
                    about webhook 

                    settings](/es/api/igs/operation/update-webhook/).
                  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \

            -d '{
                "notification_type": "order_canceled",
                "items": [
                  {
                    "sku": "com.xsolla.v.item_1",
                    "type": "virtual_good",
                    "is_pre_order": false,
                    "quantity": 3,
                    "amount": "1000",
                    "promotions": [
                      {
                        "amount_without_discount": "6000",
                        "amount_with_discount": "5000",
                        "sequence": 1
                      },
                      {
                        "amount_without_discount": "5000",
                        "amount_with_discount": "4000",
                        "sequence": 2
                      }
                    ],
                    "custom_attributes": {
                        "purchased": 0,
                        "attr": "value"
                      }
                  },
                  {
                    "sku": "com.xsolla.v.item_new_1",
                    "type": "bundle",
                    "is_pre_order": false,
                    "quantity": 1,
                    "amount": "1000",
                    "promotions": []
                  },
                  {
                    "sku": "com.xsolla.gold_1",
                    "type": "virtual_currency",
                    "is_pre_order": false,
                    "quantity": 1500,
                    "amount": null,
                    "promotions": []
                  }
                ],
                "order": {
                  "id": 1,
                  "mode": "default",
                  "currency_type": "virtual",
                  "currency": "sku_currency",
                  "amount": "2000",
                  "status": "paid",
                  "platform": "xsolla",
                  "comment": null,
                  "invoice_id": "1",
                  "promotions": [
                    {
                      "amount_without_discount": "4000",
                      "amount_with_discount": "2000",
                      "sequence": 1
                    }
                  ],
                  "promocodes": [
                    {
                      "code": "promocode_some_code",
                      "external_id": "promocode_sku"
                    }
                  ],
                  "coupons": [
                    {
                      "code": "WINTER2021",
                      "external_id": "coupon_sku"
                    }
                  ]
                },
                "user": {
                  "external_id": "id_xsolla_login_1",
                  "email": "email@example.com",
                  "country": "US"
                },
                "billing": {
                  "notification_type": "refund",
                  "settings": {
                    "project_id": 18404,
                    "merchant_id": 2340
                  },
                  "purchase": {
                          "subscription": {
                              "plan_id": "b5dac9c8",
                              "subscription_id": "10",
                              "date_create": "2014-09-22T19:25:25+04:00",
                              "currency": "USD",
                              "amount": 9.99
                          },
                          "total":{
                              "currency": "USD",
                              "amount": 200
                          }
                      },
                  "transaction": {
                          "id": 1,
                          "external_id": 1,
                          "dry_run": 1,
                          "agreement": 1
                      },
                  "refund_details": {
                          "code": 4,
                          "reason": "Potential fraud"
                      },
                  "payment_details": {
                          "sales_tax": {
                              "currency": "USD",
                              "amount": 0
                          },
                          "direct_wht": {
                              "currency": "USD",
                              "amount": 0.70
                          },
                          "xsolla_fee": {
                              "currency": "USD",
                              "amount": "10"
                          },
                          "payout": {
                              "currency": "USD",
                              "amount": "200"
                          },
                          "payment_method_fee": {
                              "currency": "USD",
                              "amount": "20"
                          },
                          "payment": {
                              "currency": "USD",
                              "amount": "230"
                          },
                          "repatriation_commission": {
                              "currency": "USD",
                              "amount": 10
                          }
                      }
                }
            }
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host:           your.hostname
            accept:         application/json
            content-length: 258
            content-type:   application/json
            authorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523


            {
                "notification_type": "order_canceled",
                "items": [
                  {
                    "sku": "com.xsolla.v.item_1",
                    "type": "virtual_good",
                    "is_pre_order": false,
                    "quantity": 3,
                    "amount": "1000",
                    "promotions": [
                      {
                        "amount_without_discount": "6000",
                        "amount_with_discount": "5000",
                        "sequence": 1
                      },
                      {
                        "amount_without_discount": "5000",
                        "amount_with_discount": "4000",
                        "sequence": 2
                      }
                    ],
                    "custom_attributes": {
                        "purchased": 0,
                        "attr": "value"
                      }
                  },
                  {
                    "sku": "com.xsolla.v.item_new_1",
                    "type": "bundle",
                    "is_pre_order": false,
                    "quantity": 1,
                    "amount": "1000",
                    "promotions": []
                  },
                  {
                    "sku": "com.xsolla.gold_1",
                    "type": "virtual_currency",
                    "is_pre_order": false,
                    "quantity": 1500,
                    "amount": null,
                    "promotions": []
                  }
                ],
                "order": {
                  "id": 1,
                  "mode": "default",
                  "currency_type": "virtual",
                  "currency": "sku_currency",
                  "amount": "2000",
                  "status": "paid",
                  "platform": "xsolla",
                  "comment": null,
                  "invoice_id": "1",
                  "promotions": [
                    {
                      "amount_without_discount": "4000",
                      "amount_with_discount": "2000",
                      "sequence": 1
                    }
                  ],
                  "promocodes": [
                    {
                      "code": "promocode_some_code",
                      "external_id": "promocode_sku"
                    }
                  ],
                  "coupons": [
                    {
                      "code": "WINTER2021",
                      "external_id": "coupon_sku"
                    }
                  ]
                },
                "user": {
                  "external_id": "id_xsolla_login_1",
                  "email": "email@example.com",
                  "country": "US"
                },
                "billing": {
                  "notification_type": "refund",
                  "settings": {
                    "project_id": 18404,
                    "merchant_id": 2340
                  },
                  "purchase": {
                      "subscription": {
                          "plan_id": "b5dac9c8",
                          "subscription_id": "10",
                          "date_create": "2014-09-22T19:25:25+04:00",
                          "currency": "USD",
                          "amount": 9.99
                      },
                      "total": {
                          "currency": "USD",
                          "amount": 200
                      }
                  },
                  "transaction": {
                      "id": 1,
                      "external_id": 1,
                      "dry_run": 1,
                      "agreement": 1
                  },
                  "refund_details": {
                      "code": 4,
                      "reason": "Potential fraud"
                  },
                  "payment_details": {
                      "sales_tax": {
                          "currency": "USD",
                          "amount": 0
                      },
                      "direct_wht": {
                          "currency": "USD",
                          "amount": 0.70
                      },
                      "xsolla_fee": {
                          "currency": "USD",
                          "amount": "10"
                      },
                      "payout": {
                          "currency": "USD",
                          "amount": "200"
                      },
                      "payment_method_fee": {
                          "currency": "USD",
                          "amount": "20"
                      },
                      "payment": {
                          "currency": "USD",
                          "amount": "230"
                      },
                      "repatriation_commission": {
                          "currency": "USD",
                          "amount": 10
                      }
                    }
                  }
                }
  order-cancellation-separate:
    post:
      description: >
        Xsolla envía el webhook <code>order_canceled</code> a la URL
        especificada 

        cuando el pago ha sido cancelado por el usuario, el socio o
        automáticamente. El 

        webhook contiene información sobre los artículos devueltos y los
        detalles del 

        pedido cancelado.


        El webhook no se envía si el pago no se ha realizado correctamente, por
        ejemplo:

        * se abrió la interfaz de pago, pero el usuario no pagó el pedido

        * se abrió la interfaz de pago, pero hubo errores durante el pago


        El tiempo de procesamiento recomendado del webhook es de menos de 3
        segundos.
      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.


                    El conjunto de parámetros incluidos en la matriz depende de
                    la versión del 

                    webhook. La versión 2 incluye parámetros adicionales:
                    `is_free`, `is_bonus` y 

                    `is_bundle_content`. Para cambiar de versión, introduzca su
                    número en el 

                    parámetro `version` en la llamada API [Update information
                    about webhook 

                    settings](/es/api/igs/operation/update-webhook/).
                  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \

            -d '{
                "notification_type": "order_canceled",
                "items": [
                  {
                    "sku": "com.xsolla.v.item_1",
                    "type": "virtual_good",
                    "is_pre_order": false,
                    "quantity": 3,
                    "amount": "1000",
                    "promotions": [
                      {
                        "amount_without_discount": "6000",
                        "amount_with_discount": "5000",
                        "sequence": 1
                      },
                      {
                        "amount_without_discount": "5000",
                        "amount_with_discount": "4000",
                        "sequence": 2
                      }
                    ],
                    "custom_attributes": {
                        "purchased": 0,
                        "attr": "value"
                      }
                  },
                  {
                    "sku": "com.xsolla.v.item_new_1",
                    "type": "bundle",
                    "is_pre_order": false,
                    "quantity": 1,
                    "amount": "1000",
                    "promotions": []
                  },
                  {
                    "sku": "com.xsolla.gold_1",
                    "type": "virtual_currency",
                    "is_pre_order": false,
                    "quantity": 1500,
                    "amount": "[null]",
                    "promotions": []
                  }
                ],
                "order": {
                  "id": 1,
                  "mode": "default",
                  "currency_type": "virtual",
                  "currency": "sku_currency",
                  "amount": "2000",
                  "status": "paid",
                  "platform": "xsolla",
                  "comment": null,
                  "invoice_id": "1",
                  "promotions": [
                    {
                      "amount_without_discount": "4000",
                      "amount_with_discount": "2000",
                      "sequence": 1
                    }
                  ],
                  "promocodes": [
                    {
                      "code": "promocode_some_code",
                      "external_id": "promocode_sku"
                    }
                  ],
                  "coupons": [
                    {
                      "code": "WINTER2021",
                      "external_id": "coupon_sku"
                    }
                  ]
                },
                "user": {
                  "external_id": "id_xsolla_login_1",
                  "email": "email@example.com",
                  "country": "US"
                }

            }'
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host:           your.hostname
            accept:         application/json
            content-length: 258
            content-type:   application/json
            authorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523


            {
                "notification_type": "order_canceled",
                "items": [
                  {
                    "sku": "com.xsolla.v.item_1",
                    "type": "virtual_good",
                    "is_pre_order": false,
                    "quantity": 3,
                    "amount": "1000",
                    "promotions": [
                      {
                        "amount_without_discount": "6000",
                        "amount_with_discount": "5000",
                        "sequence": 1
                      },
                      {
                        "amount_without_discount": "5000",
                        "amount_with_discount": "4000",
                        "sequence": 2
                      }
                    ],
                    "custom_attributes": {
                        "purchased": 0,
                        "attr": "value"
                      }
                  },
                  {
                    "sku": "com.xsolla.v.item_new_1",
                    "type": "bundle",
                    "is_pre_order": false,
                    "quantity": 1,
                    "amount": "1000",
                    "promotions": []
                  },
                  {
                    "sku": "com.xsolla.gold_1",
                    "type": "virtual_currency",
                    "is_pre_order": false,
                    "quantity": 1500,
                    "amount": "[null]",
                    "promotions": []
                  }
                ],
                "order": {
                  "id": 1,
                  "mode": "default",
                  "currency_type": "virtual",
                  "currency": "sku_currency",
                  "amount": "2000",
                  "status": "paid",
                  "platform": "xsolla",
                  "comment": null,
                  "invoice_id": "1",
                  "promotions": [
                    {
                      "amount_without_discount": "4000",
                      "amount_with_discount": "2000",
                      "sequence": 1
                    }
                  ],
                  "promocodes": [
                    {
                      "code": "promocode_some_code",
                      "external_id": "promocode_sku"
                    }
                  ],
                  "coupons": [
                    {
                      "code": "WINTER2021",
                      "external_id": "coupon_sku"
                    }
                  ]
                },
                "user": {
                  "external_id": "id_xsolla_login_1",
                  "email": "email@example.com",
                  "country": "US"
                }
            }
  partial-refund:
    post:
      description: >
        Cuando se realiza un reembolso parcial, Xsolla envía los detalles de la 

        transacción cancelada en un webhook con el tipo de `partial_refund` a la
        URL 

        del webhook. Obtenga más información sobre el proceso de reembolso
        parcial en 

        estas
        [instrucciones](/es/doc/pay-station/features/refund/#pay_station_features_refund_how_it_works_partial_refund_flow).


        Al guardar la URL del webhook en Cuenta del editor, puede dar permisos
        para 

        recibir información detallada en los webhooks. Para ello, active la
        siguiente 

        opción 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>.


        <div class="note">

        <p><strong>Nota</strong></p>

        <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>

        </div>


        <table>

        <thead>
            <tr>
                <th>Conmutador</th>
                <th>Descripción</th>
            </tr>
        </thead>

        <tbody>
            <tr>
                <td>Mostrar información sobre las transacciones mediante los métodos de pago guardados</td>
                <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>
            </tr>
        </tbody>

        </table>


        Códigos de reembolso:


        <table>
            <thead>
            <tr>
                <th>Código</th>
                <th>Motivo</th>
                <th>Descripción</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td>1</td>
                <td>Cancelación por solicitud del usuario/solicitud del juego</td>
                <td>Cancelación iniciada desde Cuenta del editor.</td>
            </tr>
            <tr>
                <td>3</td>
                <td>Integration error (Error de integración)</td>
                <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>
            </tr>
            <tr>
                <td>5</td>
                <td>Test payment (Pago de prueba)</td>
                <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>
            </tr>
            <tr>
                <td>7</td>
                <td>Fraud notification from PS (Notificación de fraude de PS)</td>
                <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>
            </tr>
            <tr>
                <td>9</td>
                <td>Cancellation by the user request (Cancelación solicitada por el usuario)</td>
                <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>
            </tr>
            <tr>
                <td>10</td>
                <td>Cancellation by the game request</td>
                <td>Cancelación solicitada por el juego.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>
            </tr>
            </tbody>
        </table>
      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 

                        tabla:


                        <table>
                            <thead>
                            <tr>
                                <th>Iniciador del reembolso</th>
                                <th>Valor de campo</th>
                            </tr>
                            </thead>
                            <tbody>
                            <tr>
                                <td>Juego (vía API).</td>
                                <td>API</td>
                            </tr>
                            <tr>
                                <td>Usuario de Cuenta del editor (reembolso automático).</td>
                                <td>Correo electrónico del usuario</td>
                            </tr>
                            <tr>
                                <td>Usuario de Cuenta del editor (con asistencia del servicio de atención al cliente de Xsolla).</td>
                                <td>support@xsolla.com</td>
                            </tr>
                            <tr>
                                <td>Xsolla (con asistencia del servicio de atención al cliente de Xsolla).</td>
                                <td>support@xsolla.com</td>
                            </tr>
                            </tbody>
                        </table>
                      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.
                      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' \
            -X POST \
            -d '{
                    "notification_type": "partial_refund",
                    "settings": {
                      "project_id": 18404,
                      "merchant_id": 2340
                    },
                    "purchase": {
                        "checkout": {
                            "currency": "USD",
                            "amount": 50
                        },
                        "total":{
                            "currency": "USD",
                            "amount": 200
                        }
                    },
                    "user": {
                        "ip": "127.0.0.1",
                        "phone": "18777976552",
                        "email": "email@example.com",
                        "id": "1234567",
                        "name": "John Smith",
                        "country": "US"
                    },
                    "transaction": {
                        "id": 1,
                        "external_id": 1,
                        "dry_run": 1,
                        "agreement": 1,
                        "date": "2022-03-01 10:53:15"
                    },
                    "refund_details": {
                        "author": "email@example.com",
                        "date": "2022-03-01 10:56:48"
                    },
                    "payment_details": {
                        "sales_tax": {
                            "currency": "USD",
                            "amount": 0
                        },
                        "direct_wht": {
                            "currency": "USD",
                            "amount": 0.70
                        },
                        "xsolla_fee": {
                            "currency": "USD",
                            "amount": "10"
                        },
                        "payout": {
                            "currency": "USD",
                            "amount": "200"
                        },
                        "payment_method_fee": {
                            "currency": "USD",
                            "amount": "20"
                        },
                        "payment": {
                            "currency": "USD",
                            "amount": "230"
                        },
                        "repatriation_commission": {
                            "currency": "USD",
                            "amount": 10
                        }
                    }
                }
            }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
                'notification_type' => 'partial_refund',
                'settings' => array(
                  'project_id' => 18404,
                  'merchant_id' => 2340
                ),
                'purchase' => array(
                    'total' => array(
                        'currency' => 'USD',
                        'amount' => 9.99
                    )
                ),
                'user' => array(
                    'ip' => '127.0.0.1',
                    'phone' => '18777976552',
                    'email' => 'email@example.com',
                    'id' => '1234567',
                    'country' => 'US'
                ),
                'transaction' => array(
                    'id' => 87654321,
                    'payment_date' => '2014-09-23T19:25:25+04:00',
                    'payment_method' => 1380,
                    'dry_run' => 1,
                    'date' => '2022-03-31 10:53:15'
                ),
                'refund_details' => array(
                        'author' => 'email@example.com',
                        'date' => '2022-03-01 10:56:48'
                ),
                'payment_details' => array(
                    'payment' => array(
                        'currency' => 'USD',
                        'amount' => 9.99
                    ),
                    'vat' => array(
                        'currency' => 'USD',
                        'amount' => 0
                    ),
                    'sales_tax' => array(
                        'currency' => 'USD',
                        'amount' => 0
                    ),
                    'direct_wht' => array(
                        'currency' => 'USD',
                        'amount' => 70
                    ),
                    'payout_currency_rate' => 1,
                    'payout' => array(
                        'currency' => 'USD',
                        'amount' => 9.49
                    ),
                    'xsolla_fee' => array(
                        'currency' => 'USD',
                        'amount' => 0.19
                    ),
                    'payment_method_fee' => array(
                        'currency' => 'USD',
                        'amount' => 0.31
                    ),
                    'repatriation_commission' => array(
                        'currency' => 'USD',
                        'amount' => 0.2
                    )
                )
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your_uri HTTP/1.1
            host: your.host
            accept: application/json
            content-type: application/json
            content-length: 1220
            authorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7

            {
                "notification_type": "partial_refund",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "purchase": {
                    "checkout": {
                        "currency": "USD",
                        "amount": 50
                    },
                    "total": {
                        "currency": "USD",
                        "amount": 200
                    }
                },
                "user": {
                    "ip": "127.0.0.1",
                    "phone": "18777976552",
                    "email": "email@example.com",
                    "id": "1234567",
                    "name": "John Smith",
                    "country": "US"
                },
                "transaction": {
                    "id": 1,
                    "external_id": 1,
                    "dry_run": 1,
                    "agreement": 1,
                    "date": "2022-03-31 10:53:15"
                },
                "refund_details": {
                    "author": "email@example.com",
                    "date": "2022-03-31 10:56:48"
                },
                "payment_details": {
                    "sales_tax": {
                        "currency": "USD",
                        "amount": 0
                    },
                    "direct_wht": {
                        "currency": "USD",
                        "amount": 0.70
                    },
                    "xsolla_fee": {
                        "currency": "USD",
                        "amount": "10"
                    },
                    "payout": {
                        "currency": "USD",
                        "amount": "200"
                    },
                    "payment_method_fee": {
                        "currency": "USD",
                        "amount": "20"
                    },
                    "payment": {
                        "currency": "USD",
                        "amount": "230"
                    },
                    "repatriation_commission": {
                        "currency": "USD",
                        "amount": 10
                    }
                }
            }
  payment:
    post:
      description: >
        Cuando un usuario finaliza el proceso de pago, Xsolla envía los datos
        del pago 

        en un webhook con el tipo `payment` a la URL del webhook.


        Los códigos de respuesta esperados se describen en la sección
        <b>Responses</b>, 

        pero también puede usar otros códigos de respuesta:


        <table>
            <thead>
            <tr>
                <th>Código de respuesta</th>
                <th>Descripción</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td><code>200</code>, <code>201</code>, <code>204</code></td>
                <td>Una respuesta correcta.</td>
            </tr>
            <tr>
                <td><code>4xx</code></td>
                <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>
            </tr>
            <tr>
                <td><code>5xx</code></td>
                <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>
            </tr>
            </tbody>
        </table>


        Cuando guarde la URL del webhook en <a 

        href="https://publisher.xsolla.com/0/projects/0/edit/webhooks/store">Cuenta
        del 

        editor</a>, también podrá configurar la recepción de información
        adicional en 

        webhooks.


        <div class="note">

        <p><strong>Nota</strong></p>

        <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>

        </div>


        <table>

        <thead>
            <tr>
                <th>Conmutador</th>
                <th>Descripción</th>
            </tr>
        </thead>

        <tbody>
            <tr>
                <td>Mostrar información sobre la cuenta de pago guardada</td>
                <td>La información sobre el método de pago guardado se transmite en el objeto personalizado <code>payment_account</code>.</td>
            </tr>
            <tr>
                <td>Mostrar información sobre las transacciones mediante los métodos de pago guardados</td>
                <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>
            </tr>
            <tr>
                <td>Añadir objeto del pedido al webhook</td>
                <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>
            </tr>
            <tr>
                <td>Enviar solamente los parámetros de usuario necesarios sin datos confidenciales</td>
                <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>
            </tr>
            <tr>
                <td>Mostrar número de BIC y sufijo de la tarjeta</td>
                <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>
            </tr>
            <tr>
                <td>Mostrar marca de tarjeta</td>
                <td>La marca de la tarjeta empleada para realizar el pago. Por ejemplo, Mastercard o Visa.</td>
            </tr>
        </tbody>

        </table>


        <div class="notice">

        <p><strong>Aviso</strong></p>

        <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>

        </div>
      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:
                      description: >-
                        Retención fiscal aplicada en determinados países debido
                        a transacciones transfronterizas (objeto).
                      properties:
                        amount:
                          description: Importe.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Tipo de retención fiscal del país, %.
                          format: float
                          type: number
                      type: object
                    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.
                      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' \
            -X POST \
            -d '{
                "notification_type": "payment",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "purchase": {
                    "subscription": {
                        "plan_id": "b5dac9c8",
                        "subscription_id": "10",
                        "product_id": "Demo Product",
                        "date_create": "2014-09-22T19:25:25+04:00",
                        "date_next_charge": "2014-10-22T19:25:25+04:00",
                        "currency": "USD",
                        "amount": 9.99
                    },
                    "checkout": {
                        "currency": "USD",
                        "amount": 50
                    },
                    "total": {
                        "currency": "USD",
                        "amount": 200
                    },
                    "promotions": [{
                        "technical_name": "Demo Promotion",
                        "id": 853
                    }],
                    "coupon": {
                        "coupon_code": "ICvj45S4FUOyy",
                        "campaign_code": "1507"
                    },
                    "order": {
                      "id": 1234
                      "lineitems": [
                      {
                        "sku": "com.xsolla.item_1",
                        "quantity": 1,
                        "price": {
                          "currency": "EUR",
                          "amount": 6.5
                          }
                      }
                      ]
                      }
                },
                "user": {
                    "ip": "127.0.0.1",
                    "phone": "18777976552",
                    "email": "email@example.com",
                    "id": "1234567",
                    "name": "John Smith",
                    "country": "US"
                },
                "transaction": {
                    "id": 1,
                    "external_id": 1,
                    "payment_date": "2014-09-24T20:38:16+04:00",
                    "payment_method": 1,
                    "payment_method_name": "PayPal",
                    "payment_method_order_id": 1234567890123456789,
                    "dry_run": 1,
                    "agreement": 1
                },
                "payment_details": {
                    "payment": {
                        "currency": "USD",
                        "amount": 230
                    },
                    "vat": {
                        "currency": "USD",
                        "amount": 0,
                        "percent": 20
                    },
                    "sales_tax": {
                        "currency": "USD",
                        "amount": 0,
                        "percent": 0
                    },
                    "direct_wht": {
                        "currency": "USD",
                        "amount": 0,
                        "percent": 0
                    },
                    "payout_currency_rate": "1",
                    "payout": {
                        "currency": "USD",
                        "amount": 200
                    },
                    "country_wht": {
                        "currency": "USD",
                        "amount": 2,
                        "percent": 10
                    },
                    "user_acquisition_fee": {
                        "currency": "USD",
                        "amount": 2,
                        "percent": 1
                    },
                    "xsolla_fee": {
                        "currency": "USD",
                        "amount": 10
                    },
                    "payment_method_fee": {
                        "currency": "USD",
                        "amount": 20
                    },
                    "repatriation_commission": {
                        "currency": "USD",
                        "amount": 10
                    }
                },
                "custom_parameters": {
                    "parameter1": "value1",
                    "parameter2": "value2"
                }
            }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
                'notification_type' => 'payment',
                'settings' => array(
                  'project_id' => 18404,
                  'merchant_id' => 2340
                ),
                'purchase' => array(
                    'total' => array(
                        'currency' => 'USD',
                        'amount' => 9.99
                    )
                ),
                'user' => array(
                    'ip' => '127.0.0.1',
                    'phone' => '18777976552',
                    'email' => 'email@example.com',
                    'id' => '1234567',
                    'country' => 'US'
                ),
                'transaction' => array(
                    'id' => 87654321,
                    'payment_date' => '2014-09-23T19:25:25+04:00',
                    'payment_method' => 1380,
                    'payment_method_name' => 'PayPal'
                    'payment_method_order_id' => 1234567890123456789,
                    'dry_run' => 1
                ),
                'payment_details' => array(
                    'payment' => array(
                        'currency' => 'USD',
                        'amount' => 9.99
                    ),
                    'vat' => array(
                        'currency' => 'USD',
                        'amount' => 0
                    ),
                    'sales_tax' => array(
                        'currency' => 'USD',
                        'amount' => 0
                    ),
                    'direct_wht' => array(
                        'currency' => 'USD',
                        'amount' => 70
                    ),
                    'payout_currency_rate' => '1',
                    'country_wht ' => array(
                        'currency' => 'USD',
                        'amount' => 2,
                        'percent' => 10
                    ),
                    'user_acquisition_fee' => array(
                        'currency' => 'USD',
                        'amount' => 2,
                        'percent' => 1
                    ),
                    'payout' => array(
                        'currency' => 'USD',
                        'amount' => 9.49
                    ),
                    'xsolla_fee' => array(
                        'currency' => 'USD',
                        'amount' => 0.19
                    ),
                    'payment_method_fee' => array(
                        'currency' => 'USD',
                        'amount' => 0.31
                    ),
                    'repatriation_commission' => array(
                        'currency' => 'USD',
                        'amount' => 0.2
                    )
                )
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your_uri HTTP/1.1
            host: your.host
            accept: application/json
            content-type: application/json
            content-length: 1721
            authorization: Signature 34553d151e656110c656696c919f9a10e05de542

            {
                "notification_type": "payment",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "purchase":{
                    "subscription": {
                        "plan_id": "b5dac9c8",
                        "subscription_id": "10",
                        "product_id": "Demo Product",
                        "date_create": "2014-09-22T19:25:25+04:00",
                        "date_next_charge": "2014-10-22T19:25:25+04:00",
                        "currency": "USD",
                        "amount": 9.99
                    },
                    "checkout": {
                        "currency": "USD",
                        "amount": 50
                    },
                    "total": {
                        "currency": "USD",
                        "amount": 200
                    },
                    "promotions": [{
                        "technical_name": "Demo Promotion",
                        "id": 853
                    }],
                    "coupon": {
                        "coupon_code": "ICvj45S4FUOyy",
                        "campaign_code": "1507"
                    },
                    "order": {
                      "id": 1234
                      "lineitems": [
                      {
                        "sku": "com.xsolla.item_1",
                        "quantity": 1,
                        "price": {
                          "currency": "EUR",
                          "amount": 6.5
                          }
                      }
                      ]
                      }
                },
                "user": {
                    "ip": "127.0.0.1",
                    "phone": "18777976552",
                    "email": "email@example.com",
                    "id": "1234567",
                    "name": "John Smith",
                    "country": "US"
                },
                "transaction": {
                    "id": 1,
                    "external_id": 1,
                    "payment_date": "2014-09-24T20:38:16+04:00",
                    "payment_method": 1,
                    "payment_method_name": "PayPal"
                    "payment_method_order_id": 1234567890123456789,
                    "dry_run": 1,
                    "agreement": 1
                },
                "payment_details": {
                    "payment": {
                        "currency": "USD",
                        "amount": 230
                    },
                    "vat": {
                        "currency": "USD",
                        "amount": 0,
                        "percent": 20
                    },
                    "sales_tax": {
                        "currency": "USD",
                        "amount": 0,
                        "percent": 0
                    },
                    "direct_wht": {
                        "currency": "USD",
                        "amount": 0,
                        "percent": 0
                    },
                    "payout_currency_rate": "1",
                    "country_wht": {
                        "currency": "USD",
                        "amount": 2,
                        "percent": 10
                    },
                    "user_acquisition_fee": {
                        "currency": "USD",
                        "amount": 2,
                        "percent": 1
                    },
                    "payout": {
                        "currency": "USD",
                        "amount": 200
                    },
                    "xsolla_fee": {
                        "currency": "USD",
                        "amount": 10
                    },
                    "payment_method_fee": {
                        "currency": "USD",
                        "amount": 20
                    },
                    "repatriation_commission": {
                        "currency": "USD",
                        "amount": 10
                    }
                },
                "custom_parameters": {
                    "parameter1": "value1",
                    "parameter2": "value2"
                }
            }
  payment-declined:
    post:
      description: >
        Si una transacción es rechazada por un sistema de pago, Xsolla envía
        los 

        detalles de la transacción en un webhook del tipo `ps_declined` a la
        URL 

        configurada de su webhook. El webhook se envía durante la fase de
        autorización 

        o de procesamiento del pago. En este caso, el webhook 

        [payment](/es/webhooks/operation/payment/)\
        [order_paid](/es/webhooks/operation/successful-order-payment/) no se
        envía.


        Razones habituales del rechazo por parte de los sistemas de pago:


        * Se produjo un error en la autorización de la tarjeta (por ejemplo, el
        sistema 
          de pago no pudo finalizar el proceso de autorización debido a un error técnico 
          o a la falta de respuesta del banco) o la transacción fue rechazada (por 
          ejemplo, el banco respondió pero denegó la transacción por fondos insuficientes 
          o porque los datos de la tarjeta no eran válidos).
        * Se produjo un error en la verificación 3-D Secure, no se ha realizado
        o se 
          agotó el tiempo de confirmación del usuario.
        * El procesador o el banco adquirente no está disponible temporalmente o
        devuelve 
          un rechazo definitivo debido a un error irreversible, como una cuenta cerrada o 
          un número de tarjeta no válido. Volver a intentarlo sin solucionar el problema 
          de fondo no resultará en una transacción satisfactoria.

        No debe confundirse con:


        * Rechazos por el sistema antifraude, que se notifican mediante el
        webhook 
          [afs_reject](https://developers.xsolla.com/es/webhooks/operation/afs-rejected-transaction/).
        * Reembolsos y reembolsos parciales tras un pago realizado con éxito,
        que se 
          notifican mediante los webhooks 
          [refund](https://developers.xsolla.com/es/webhooks/operation/refund/) y 
          [partial_refund](https://developers.xsolla.com/es/webhooks/operation/partial-refund/).

        <div class="note">

        <p><strong>Observación</strong></p>

        <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>

        </div>
      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 

                        tabla:


                        <table>
                            <thead>
                            <tr>
                                <th>Iniciador del reembolso</th>
                                <th>Valor de campo</th>
                            </tr>
                            </thead>
                            <tbody>
                            <tr>
                                <td>Juego (vía API).</td>
                                <td>API</td>
                            </tr>
                            <tr>
                                <td>Usuario de Cuenta del editor (reembolso automático).</td>
                                <td>Correo electrónico del usuario</td>
                            </tr>
                            <tr>
                                <td>Usuario de Cuenta del editor (con asistencia del servicio de atención al cliente de Xsolla).</td>
                                <td>support@xsolla.com</td>
                            </tr>
                            <tr>
                                <td>Xsolla (con asistencia del servicio de atención al cliente de Xsolla).</td>
                                <td>support@xsolla.com</td>
                            </tr>
                            </tbody>
                        </table>
                      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:
                    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.
                      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' \

            -X POST \

            -H 'Accept: application/json' \

            -H 'Content-Type: application/json' \

            -H 'Authorization: Signature
            80543ba63e1e50cf05f15150fe75e7245da9a898' \

            -d '{
              "notification_type": "ps_declined",
              "settings": {
                "project_id": "18404",
                "merchant_id": "2340"
              },
              "user": {
                "ip": "127.0.0.1",
                "email": "email@example.com",
                "id": "1234567",
                "country": "US"
              },
              "transaction": {
                "id": "1",
                "dry_run": "1",
                "payment_method": "1"
              },
              "refund_details": {
                "author": "support@xsolla.com",
                "code": "8",
                "reason": "Cancellation by the PS request",
                "reason_detail": "Insufficient funds"
              }
            }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
              'notification_type' => 'ps_declined',
              'settings' => array(
                'project_id' => '18404',
                'merchant_id' => '2340',
              ),
              'user' => array(
                'ip' => '127.0.0.1',
                'email' => 'email@example.com',
                'id' => '1234567',
                'country' => 'US',
              ),
              'transaction' => array(
                'id' => '1',
                'dry_run' => '1',
                'payment_method' => '1',
              ),
              'refund_details' => array(
                'author' => 'support@xsolla.com',
                'code' => '8',
                'reason' => 'Cancellation by the PS request',
                'reason_detail' => 'Insufficient funds',
              ),
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your_uri HTTP/1.1
            host: your.host
            accept: application/json
            content-type: application/json
            content-length: 338
            authorization: Signature 80543ba63e1e50cf05f15150fe75e7245da9a898

            {
              "notification_type": "ps_declined",
              "settings": {
                "project_id": "18404",
                "merchant_id": "2340"
              },
              "user": {
                "ip": "127.0.0.1",
                "email": "email@example.com",
                "id": "1234567",
                "country": "US"
              },
              "transaction": {
                "id": "1",
                "dry_run": "1",
                "payment_method": "1"
              },
              "refund_details": {
                "author": "support@xsolla.com",
                "code": "8",
                "reason": "Cancellation by the PS request",
                "reason_detail": "Insufficient funds"
              }
            }
  personalized-partner-catalog:
    post:
      description: >
        Xsolla enviará un webhook <code>partner_side_catalog</code> que contenga
        los 

        parámetros del usuario y del proyecto a la URL del webhook cuando un
        usuario 

        interactúe con la tienda.


        Devuelve una lista de <code>item_id</code> o de SKU (códigos) de
        artículo que 

        están disponibles para el usuario como respuesta. En este caso, también
        puede 

        incluir información de que un usuario concreto puede comprar un
        determinado 

        producto un número especificado de veces. Esta función le permite
        controlar el 

        número y el tipo de productos que el usuario puede añadir a la cesta y
        comprar.


        Se recomienda que el tiempo de procesamiento del webhook 

        <code>partner_side_catalog</code> sea inferior a 3 segundos.
      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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            d90d319f05df7b0f86d2485f48e7079f0f752523' \

            -d '{
                    "notification_type": "partner_side_catalog",
                    "user": {
                        "user_id": "12345",
                        "country": "US"
                    }
                }'
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host:           your.hostname
            accept:         application/json
            content-type:   application/json
            authorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523

            {
                "notification_type": "partner_side_catalog",
                "user": {
                  "user_id": "12345",
                  "country": "US"
                }
            }
  refund:
    post:
      description: >
        Cuando se cancela un pago, Xsolla envía los detalles de la transacción 

        cancelada en un webhook con el tipo `refund` a la URL del webhook.


        El mecanismo de reintento del webhook depende de quién haya iniciado el 

        reembolso:

        * Si el reembolso se inició desde su lado, el webhook no se volverá a
        enviar. El 
          pago se reembolsará al usuario independientemente de la respuesta al webhook.
        * Si el reembolso lo inició un tercero (por ejemplo, un sistema de pagos
        o el 
          equipo de atención al cliente de Xsolla) y, en respuesta a un webhook, se 
          devolvió un código de estado `5xx`, el webhook se reenvía a intervalos cada vez 
          mayores. El número máximo de reintentos es de 12 en un plazo de 48 horas desde 
          el primer intento.

        Para obtener información detallada sobre el proceso de reembolso,
        consulte las 

        [instrucciones](/es/doc/pay-station/features/refund/).


        <div class="notice">

        <p><strong>Aviso</strong></p>

        <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>

        </div>


        Cuando guarde la URL del webhook en <a 

        href="https://publisher.xsolla.com/0/projects/0/edit/webhooks/store">Cuenta
        del 

        editor</a>, también podrá configurar la recepción de información
        adicional en 

        webhooks.


        <div class="note">

        <p><strong>Nota</strong></p>

        <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>

        </div>


        <table>

        <thead>
            <tr>
                <th>Conmutador</th>
                <th>Descripción</th>
            </tr>
        </thead>

        <tbody>
            <tr>
                <td>Mostrar información sobre las transacciones mediante los métodos de pago guardados</td>
                <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>
            </tr>
        </tbody>

        </table>


        Códigos de reembolso:


        <table>
            <thead>
            <tr>
                <th>Código</th>
                <th>Motivo</th>
                <th>Descripción</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td>1</td>
                <td>Cancelación por solicitud del usuario/solicitud del juego</td>
                <td>Cancelación iniciada desde Cuenta del editor.</td>
            </tr>
            <tr>
                <td>2</td>
                <td>Chargeback (Contracargo)</td>
                <td>Contracargo de transacción solicitado.</td>
            </tr>
            <tr>
                <td>3</td>
                <td>Integration error (Error de integración)</td>
                <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>
            </tr>
            <tr>
                <td>4</td>
                <td>Potential fraud (Fraude potencial)</td>
                <td>Sospecha de fraude.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>
            </tr>
            <tr>
                <td>5</td>
                <td>Test payment (Pago de prueba)</td>
                <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>
            </tr>
            <tr>
                <td>6</td>
                <td>User invoice expired (Factura de usuario expirada)</td>
                <td>Factura vencida (se usa para el modelo de pospago).</td>
            </tr>
            <tr>
                <td>7</td>
                <td>Fraud notification from PS (Notificación de fraude de PS)</td>
                <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>
            </tr>
            <tr>
                <td>8</td>
                <td>Cancellation by the PS request (Cancelación solicitada por PS)</td>
                <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>
            </tr>
            <tr>
                <td>9</td>
                <td>Cancellation by the user request (Cancelación solicitada por el usuario)</td>
                <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>
            </tr>
            <tr>
                <td>10</td>
                <td>Cancellation by the game request</td>
                <td>Cancelación solicitada por el juego.<br /><b>Recomendación: no añada el usuario a la lista de bloqueo.</b></td>
            </tr>
            <tr>
                <td>11</td>
                <td>Account holder called to report fraud</td>
                <td>El titular de la cuenta declara que no realizó la transacción.</td>
            </tr>
            <tr>
                <td>12</td>
                <td>Friendly fraud</td>
                <td>Fraude amistoso comunicado.</td>
            </tr>
            <tr>
                <td>13</td>
                <td>Duplicate</td>
                <td>Transacción duplicada para la misma factura.</td>
            </tr>
            </tbody>
        </table>
      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:
                      description: >-
                        Retención fiscal aplicada en determinados países debido
                        a transacciones transfronterizas (objeto).
                      properties:
                        amount:
                          description: Importe.
                          format: float
                          type: number
                        currency:
                          $ref: '#/components/schemas/currency'
                        percent:
                          description: Tipo de retención fiscal del país, %.
                          format: float
                          type: number
                      type: object
                    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 

                        tabla:


                        <table>
                            <thead>
                            <tr>
                                <th>Iniciador del reembolso</th>
                                <th>Valor de campo</th>
                            </tr>
                            </thead>
                            <tbody>
                            <tr>
                                <td>Juego (vía API).</td>
                                <td>API</td>
                            </tr>
                            <tr>
                                <td>Usuario de Cuenta del editor (reembolso automático).</td>
                                <td>Correo electrónico del usuario</td>
                            </tr>
                            <tr>
                                <td>Usuario de Cuenta del editor (con asistencia del servicio de atención al cliente de Xsolla).</td>
                                <td>support@xsolla.com</td>
                            </tr>
                            <tr>
                                <td>Xsolla (con asistencia del servicio de atención al cliente de Xsolla).</td>
                                <td>support@xsolla.com</td>
                            </tr>
                            </tbody>
                        </table>
                      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.
                      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' \
            -X POST \
            -d '{
                    "notification_type": "refund",
                    "settings": {
                      "project_id": 18404,
                      "merchant_id": 2340
                    },
                    "purchase": {
                        "subscription": {
                            "plan_id": "b5dac9c8",
                            "subscription_id": "10",
                            "date_create": "2014-09-22T19:25:25+04:00",
                            "currency": "USD",
                            "amount": 9.99
                        },
                        "checkout": {
                            "currency": "USD",
                            "amount": 50
                        },
                        "total":{
                            "currency": "USD",
                            "amount": 200
                        }
                    },
                    "user": {
                        "ip": "127.0.0.1",
                        "phone": "18777976552",
                        "email": "email@example.com",
                        "id": "1234567",
                        "name": "John Smith",
                        "country": "US"
                    },
                    "transaction": {
                        "id": 1,
                        "external_id": 1,
                        "dry_run": 1,
                        "agreement": 1
                    },
                    "refund_details": {
                        "code": 4,
                        "reason": "Potential fraud"
                    },
                    "payment_details": {
                        "sales_tax": {
                            "currency": "USD",
                            "amount": 0
                        },
                        "direct_wht": {
                            "currency": "USD",
                            "amount": 0.70
                        },
                        "xsolla_fee": {
                            "currency": "USD",
                            "amount": "10"
                        },
                        "payout": {
                            "currency": "USD",
                            "amount": "200"
                        },
                        "payment_method_fee": {
                            "currency": "USD",
                            "amount": "20"
                        },
                        "payment": {
                            "currency": "USD",
                            "amount": "230"
                        },
                        "repatriation_commission": {
                            "currency": "USD",
                            "amount": 10
                        }
                    }
                }
            }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
                'notification_type' => 'refund',
                'settings' => array(
                  'project_id' => 18404,
                  'merchant_id' => 2340
                ),
                'purchase' => array(
                    'total' => array(
                        'currency' => 'USD',
                        'amount' => 9.99
                    )
                ),
                'user' => array(
                    'ip' => '127.0.0.1',
                    'phone' => '18777976552',
                    'email' => 'email@example.com',
                    'id' => '1234567',
                    'country' => 'US'
                ),
                'transaction' => array(
                    'id' => 87654321,
                    'payment_date' => '2014-09-23T19:25:25+04:00',
                    'payment_method' => 1380,
                    'dry_run' => 1
                ),
                'refund_details' => array(
                        'code' => 4,
                        'reason' => 'Potential fraud'
                ),
                'payment_details' => array(
                    'payment' => array(
                        'currency' => 'USD',
                        'amount' => 9.99
                    ),
                    'vat' => array(
                        'currency' => 'USD',
                        'amount' => 0
                    ),
                    'sales_tax' => array(
                        'currency' => 'USD',
                        'amount' => 0
                    ),
                    'direct_wht' => array(
                        'currency' => 'USD',
                        'amount' => 70
                    ),
                    'payout_currency_rate' => 1,
                    'payout' => array(
                        'currency' => 'USD',
                        'amount' => 9.49
                    ),
                    'xsolla_fee' => array(
                        'currency' => 'USD',
                        'amount' => 0.19
                    ),
                    'payment_method_fee' => array(
                        'currency' => 'USD',
                        'amount' => 0.31
                    ),
                    'repatriation_commission' => array(
                        'currency' => 'USD',
                        'amount' => 0.2
                    )
                )
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your_uri HTTP/1.1
            host: your.host
            accept: application/json
            content-type: application/json
            content-length: 1220
            authorization: Signature 31bd5924dd6cbc9cbe99d331c4a086a57291f9d7

            {
                "notification_type": "refund",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "purchase": {
                    "subscription": {
                        "plan_id": "b5dac9c8",
                        "subscription_id": "10",
                        "date_create": "2014-09-22T19:25:25+04:00",
                        "currency": "USD",
                        "amount": 9.99
                    },
                    "checkout": {
                        "currency": "USD",
                        "amount": 50
                    },
                    "total": {
                        "currency": "USD",
                        "amount": 200
                    }
                },
                "user": {
                    "ip": "127.0.0.1",
                    "phone": "18777976552",
                    "email": "email@example.com",
                    "id": "1234567",
                    "name": "John Smith",
                    "country": "US"
                },
                "transaction": {
                    "id": 1,
                    "external_id": 1,
                    "dry_run": 1,
                    "agreement": 1
                },
                "refund_details": {
                    "code": 4,
                    "reason": "Potential fraud"
                },
                "payment_details": {
                    "sales_tax": {
                        "currency": "USD",
                        "amount": 0
                    },
                    "direct_wht": {
                        "currency": "USD",
                        "amount": 0.70
                    },
                    "xsolla_fee": {
                        "currency": "USD",
                        "amount": "10"
                    },
                    "payout": {
                        "currency": "USD",
                        "amount": "200"
                    },
                    "payment_method_fee": {
                        "currency": "USD",
                        "amount": "20"
                    },
                    "payment": {
                        "currency": "USD",
                        "amount": "230"
                    },
                    "repatriation_commission": {
                        "currency": "USD",
                        "amount": 10
                    }
                }
            }
  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \

            -d '{
                "notification_type": "payment_account_remove",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "email": "email@example.com",
                    "id": "1234567",
                    "name": "John Smith"
                },
                "payment_account": {
                    "id": "12345678",
                    "name": "email@example.com",
                    "payment_method": "24",
                    "type": "paypal"
                }
            }'
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host:           your.hostname
            accept:         application/json
            content-length: 258
            content-type:   application/json
            authorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523


            {
                "notification_type": "payment_account_remove",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "email": "email@example.com",
                    "id": "1234567",
                    "name": "John Smith"
                },
                "payment_account": {
                    "id": "12345678",
                    "name": "email@example.com",
                    "payment_method": "24",
                    "type": "paypal"
                }
            }
  successful-order-payment:
    post:
      description: >
        Xsolla envía el webhook <code>order_paid</code> a la URL especificada
        cuando el 

        usuario paga el pedido.


        El webhook <code>order_paid</code> contiene información sobre los
        artículos 

        comprados, los datos de pago y los detalles de la transacción.


        El webhook <code>order_paid</code> no se envía si el pago no se realiza 

        correctamente, por ejemplo:

        * se abrió el formulario de pago, pero el usuario no pagó el pedido

        * se abrió el formulario de pago, pero hubo errores durante el pago


        Se recomienda que el tiempo de procesamiento del webhook 

        <code>order_paid</code> sea inferior a 3 segundos.


        <div class="notice">

        <p><strong>Aviso</strong></p>

        <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>

        </div>


        Las respuestas esperadas se describen en la sección <b>Responses</b>.
        Puede 

        utilizar otros códigos de respuesta. Dependiendo del código de respuesta
        y de 

        la conexión de la función de reembolso automático de pagos, la lógica
        de 

        procesamiento del webhook por parte de Xsolla es la siguiente:


        <table>
            <thead>
            <tr>
                <th>Código de respuesta</th>
                <th>El reembolso automático de pagos está desactivado (por defecto)</th>
                <th>El reembolso automático de pagos está activado</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <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>
                <td>Ninguna acción</td>
                <td>Reembolso automático al usuario</td>
            </tr>
            <tr>
                <td><code>200</code>, <code>201</code>, <code>204</code></td>
                <td>Ninguna acción</td>
                <td>Ninguna acción</td>
            </tr>
            <tr>
                <td>Diferente código o ninguna respuesta al webhook</td>
                <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>
                <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>
            </tr>
            </tbody>
        </table>


        Para conectar la función de reembolso automático, contacte con sus
        gestores de 

        éxito del cliente o escriba a csm@xsolla.com.
      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:
                          description: >-
                            Retención fiscal aplicada en determinados países
                            debido a transacciones transfronterizas (objeto).
                          properties:
                            amount:
                              description: Importe.
                              format: float
                              type: number
                            currency:
                              $ref: '#/components/schemas/currency'
                            percent:
                              description: Tipo de retención fiscal del país, %.
                              format: float
                              type: number
                          type: object
                        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.
                          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.


                    El conjunto de parámetros incluidos en la matriz depende de
                    la versión del 

                    webhook. La versión 2 incluye parámetros adicionales:
                    `is_free`, `is_bonus` y 

                    `is_bundle_content`. Para cambiar de versión, introduzca su
                    número en el 

                    parámetro `version` en la llamada API [Update information
                    about webhook 

                    settings](/es/api/igs/operation/update-webhook/).
                  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \

            -d '{
                "notification_type": "order_paid",
                "items": [
                  {
                    "sku": "com.xsolla.item_1",
                    "type": "virtual_good",
                    "is_pre_order": false,
                    "quantity": 3,
                    "amount": "1000",
                    "promotions": [
                      {
                        "amount_without_discount": "6000",
                        "amount_with_discount": "5000",
                        "sequence": 1
                      },
                      {
                        "amount_without_discount": "5000",
                        "amount_with_discount": "4000",
                        "sequence": 2
                      }
                    ],
                    "custom_attributes":
                      {
                        "purchased": 0,
                        "attr": "value"
                      }
                  },
                  {
                    "sku": "com.xsolla.item_new_1",
                    "type": "bundle",
                    "is_pre_order": false,
                    "quantity": 1,
                    "amount": "1000",
                    "promotions": []
                  },
                  {
                    "sku": "com.xsolla.gold_1",
                    "type": "virtual_currency",
                    "is_pre_order": false,
                    "quantity": 1500,
                    "amount": null,
                    "promotions": []
                  }
                ],
                "order": {
                  "id": 1,
                  "mode": "default",
                  "currency_type": "virtual",
                  "currency": "sku_currency",
                  "amount": "2000",
                  "status": "paid",
                  "platform": "xsolla",
                  "comment": null,
                  "invoice_id": "1",
                  "promotions": [
                    {
                      "amount_without_discount": "4000",
                      "amount_with_discount": "2000",
                      "sequence": 1
                    }
                  ],
                  "promocodes": [
                    {
                      "code": "promocode_some_code",
                      "external_id": "promocode_sku"
                    }
                  ],
                  "coupons": [
                    {
                      "code": "WINTER2021",
                      "external_id": "coupon_sku"
                    }
                  ]
                },
                "user": {
                  "external_id": "id_xsolla_login_1",
                  "email": "gc_user@xsolla.com",
                  "country": "US"
                },
                "billing": {
                  "notification_type": "payment",
                  "settings": {
                    "project_id": 18404,
                    "merchant_id": 2340
                  },
                  "purchase": {
                      "subscription": {
                          "plan_id": "b5dac9c8",
                          "subscription_id": "10",
                          "product_id": "Demo Product",
                          "date_create": "2014-09-22T19:25:25+04:00",
                          "date_next_charge": "2014-10-22T19:25:25+04:00",
                          "currency": "USD",
                          "amount": 9.99
                      },
                      "total": {
                          "currency": "USD",
                          "amount": 200
                      },
                      "promotions": [{
                          "technical_name": "Demo Promotion",
                          "id": 853
                      }],
                      "coupon": {
                          "coupon_code": "ICvj45S4FUOyy",
                          "campaign_code": "1507"
                      }
                    },
                  "transaction": {
                      "id": 1,
                      "external_id": 1,
                      "payment_date": "2014-09-24T20:38:16+04:00",
                      "payment_method": 1,
                      "payment_method_name": "PayPal",
                      "payment_method_order_id": 1234567890123456789,
                      "dry_run": 1,
                      "agreement": 1
                  },
                  "payment_details": {
                      "payment": {
                          "currency": "USD",
                          "amount": 230
                      },
                      "vat": {
                          "currency": "USD",
                          "amount": 0,
                          "percent": 20
                      },
                      "sales_tax": {
                          "currency": "USD",
                          "amount": 0,
                          "percent": 0
                      },
                      "direct_wht": {
                          "currency": "USD",
                          "amount": 0,
                          "percent": 0
                      },
                      "payout_currency_rate": "1",
                      "payout": {
                          "currency": "USD",
                          "amount": 200
                      },
                      "country_wht": {
                          "currency": "USD",
                          "amount": 2,
                          "percent": 10
                      },
                      "user_acquisition_fee": {
                          "currency": "USD",
                          "amount": 2,
                          "percent": 1
                      },
                      "xsolla_fee": {
                          "currency": "USD",
                          "amount": 10
                      },
                      "payment_method_fee": {
                          "currency": "USD",
                          "amount": 20
                      },
                      "repatriation_commission": {
                          "currency": "USD",
                          "amount": 10
                      }
                  }
                }
             ,
              "custom_parameters": {
                "parameter1": "value1",
                "parameter2": "value2"
              }
            }
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host:           your.hostname
            accept:         application/json
            content-length: 258
            content-type:   application/json
            authorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523


            {
                "notification_type": "order_paid",
                "items": [
                  {
                    "sku": "com.xsolla.item_1",
                    "type": "virtual_good",
                    "is_pre_order": false,
                    "quantity": 3,
                    "amount": "1000",
                    "promotions": [
                      {
                        "amount_without_discount": "6000",
                        "amount_with_discount": "5000",
                        "sequence": 1
                      },
                      {
                        "amount_without_discount": "5000",
                        "amount_with_discount": "4000",
                        "sequence": 2
                      }
                    ],
                    "custom_attributes":
                      {
                        "purchased": 0,
                        "attr": "value"
                      }
                  },
                  {
                    "sku": "com.xsolla.item_new_1",
                    "type": "bundle",
                    "is_pre_order": false,
                    "quantity": 1,
                    "amount": "1000",
                    "promotions": []
                  },
                  {
                    "sku": "com.xsolla.gold_1",
                    "type": "virtual_currency",
                    "is_pre_order": false,
                    "quantity": 1500,
                    "amount": null,
                    "promotions": []
                  }
                ],
                "order": {
                  "id": 1,
                  "mode": "default",
                  "currency_type": "virtual",
                  "currency": "sku_currency",
                  "amount": "2000",
                  "status": "paid",
                  "platform": "xsolla",
                  "comment": null,
                  "invoice_id": "1",
                  "promotions": [
                    {
                      "amount_without_discount": "4000",
                      "amount_with_discount": "2000",
                      "sequence": 1
                    }
                  ],
                  "promocodes": [
                    {
                      "code": "promocode_some_code",
                      "external_id": "promocode_sku"
                    }
                  ],
                  "coupons": [
                    {
                      "code": "WINTER2021",
                      "external_id": "coupon_sku"
                    }
                  ]
                },
                "user": {
                  "external_id": "id_xsolla_login_1",
                  "email": "gc_user@xsolla.com",
                  "country": "US"
                },
                "billing": {
                  "notification_type": "payment",
                  "settings": {
                    "project_id": 18404,
                    "merchant_id": 2340
                  },
                  "purchase":{
                      "subscription": {
                          "plan_id": "b5dac9c8",
                          "subscription_id": "10",
                          "product_id": "Demo Product",
                          "date_create": "2014-09-22T19:25:25+04:00",
                          "date_next_charge": "2014-10-22T19:25:25+04:00",
                          "currency": "USD",
                          "amount": 9.99
                      },
                      "total": {
                          "currency": "USD",
                          "amount": 200
                      },
                      "promotions": [{
                          "technical_name": "Demo Promotion",
                          "id": 853
                      }],
                      "coupon": {
                          "coupon_code": "ICvj45S4FUOyy",
                          "campaign_code": "1507"
                      }
                  },
                  "transaction": {
                      "id": 1,
                      "external_id": 1,
                      "payment_date": "2014-09-24T20:38:16+04:00",
                      "payment_method": 1,
                      "payment_method_name": "PayPal",
                      "payment_method_order_id": 1234567890123456789,
                      "dry_run": 1,
                      "agreement": 1
                  },
                  "payment_details": {
                      "payment": {
                          "currency": "USD",
                          "amount": 230
                      },
                      "vat": {
                          "currency": "USD",
                          "amount": 0,
                          "percent": 20
                      },
                      "sales_tax": {
                          "currency": "USD",
                          "amount": 0,
                          "percent": 0
                      },
                      "direct_wht": {
                          "currency": "USD",
                          "amount": 0,
                          "percent": 0
                      },
                      "payout_currency_rate": "1",
                      "country_wht": {
                          "currency": "USD",
                          "amount": 2,
                          "percent": 10
                      },
                      "user_acquisition_fee": {
                          "currency": "USD",
                          "amount": 2,
                          "percent": 1
                      },
                      "payout": {
                          "currency": "USD",
                          "amount": 200
                      },
                      "xsolla_fee": {
                          "currency": "USD",
                          "amount": 10
                      },
                      "payment_method_fee": {
                          "currency": "USD",
                          "amount": 20
                      },
                      "repatriation_commission": {
                          "currency": "USD",
                          "amount": 10
                      }
                  }
                },
                "custom_parameters": {
                    "parameter1": "value1",
                    "parameter2": "value2"
                    }
                }
  successful-order-payment-separate:
    post:
      description: >
        Xsolla envía el webhook <code>order_paid</code> a la URL especificada
        cuando se 

        cumplen las siguientes condiciones:

        1. El usuario pagó correctamente el pedido.

        2. Xsolla recibió una respuesta sobre el procesamiento correcto del
        webhook 
           [payment](/es/webhooks/operation/payment/).

        El webhook <code>order_paid</code> contiene información sobre los
        artículos 

        comprados y los datos de la transacción.


        El webhook <code>order_paid</code> no se envía si:

        * El pago no se realizó correctamente, por ejemplo:
          * se abrió el formulario de pago, pero el usuario no pagó el pedido
          * se abrió el formulario de pago, pero hubo errores durante el pago
        * No se ha recibido la respuesta sobre el procesamiento correcto del
        webhook 
          [payment](/es/webhooks/operation/payment/).

        Se recomienda que el tiempo de procesamiento del webhook 

        <code>order_paid</code> sea inferior a 3 segundos.


        Las respuestas esperadas se describen en la sección <b>Responses</b>.
        Puede 

        utilizar otros códigos de respuesta. Dependiendo del código de respuesta
        y de 

        la conexión de la función de reembolso automático de pagos, la lógica
        de 

        procesamiento del webhook por parte de Xsolla es la siguiente:


        <table>
            <thead>
            <tr>
                <th>Código de respuesta</th>
                <th>El reembolso automático de pagos está desactivado (por defecto)</th>
                <th>El reembolso automático de pagos está activado</th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <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>
                <td>Ninguna acción</td>
                <td>Reembolso automático al usuario</td>
            </tr>
            <tr>
                <td><code>200</code>, <code>201</code>, <code>204</code></td>
                <td>Ninguna acción</td>
                <td>Ninguna acción</td>
            </tr>
            <tr>
                <td>Diferente código o ninguna respuesta al webhook</td>
                <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>
                <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>
            </tr>
            </tbody>
        </table>


        Para conectar la función de reembolso automático, contacte con sus
        gestores de 

        éxito del cliente o escriba a csm@xsolla.com.
      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.


                    El conjunto de parámetros incluidos en la matriz depende de
                    la versión del 

                    webhook. La versión 2 incluye parámetros adicionales:
                    `is_free`, `is_bonus` y 

                    `is_bundle_content`. Para cambiar de versión, introduzca su
                    número en el 

                    parámetro `version` en la llamada API [Update information
                    about webhook 

                    settings](/es/api/igs/operation/update-webhook/).
                  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \

            -d '{
                "notification_type": "order_paid",
                "items": [
                  {
                    "sku": "com.xsolla.v.item_1",
                    "type": "virtual_good",
                    "is_pre_order": false,
                    "quantity": 3,
                    "amount": "1000",
                    "promotions": [
                      {
                        "amount_without_discount": "6000",
                        "amount_with_discount": "5000",
                        "sequence": 1
                      },
                      {
                        "amount_without_discount": "5000",
                        "amount_with_discount": "4000",
                        "sequence": 2
                      }
                    ],
                    "custom_attributes":
                      {
                        "purchased": 0,
                        "attr": "value"
                      }
                  },
                  {
                    "sku": "com.xsolla.v.item_new_1",
                    "type": "bundle",
                    "is_pre_order": false,
                    "quantity": 1,
                    "amount": "1000",
                    "promotions": []
                  },
                  {
                    "sku": "com.xsolla.gold_1",
                    "type": "virtual_currency",
                    "is_pre_order": false,
                    "quantity": 1500,
                    "amount": "[null]",
                    "promotions": []
                  }
                ],
                "order": {
                  "id": 1,
                  "mode": "default",
                  "currency_type": "virtual",
                  "currency": "sku_currency",
                  "amount": "2000",
                  "status": "paid",
                  "platform": "xsolla",
                  "comment": null,
                  "invoice_id": "1",
                  "promotions": [
                    {
                      "amount_without_discount": "4000",
                      "amount_with_discount": "2000",
                      "sequence": 1
                    }
                  ],
                  "promocodes": [
                    {
                      "code": "promocode_some_code",
                      "external_id": "promocode_sku"
                    }
                  ],
                  "coupons": [
                    {
                      "code": "WINTER2021",
                      "external_id": "coupon_sku"
                    }
                  ]
                },
                "user": {
                  "external_id": "id_xsolla_login_1",
                  "email": "gc_user@xsolla.com",
                  "country": "US"
                }

            }'
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host:           your.hostname
            accept:         application/json
            content-length: 258
            content-type:   application/json
            authorization:  Signature d90d319f05df7b0f86d2485f48e7079f0f752523


            {
                "notification_type": "order_paid",
                "items": [
                  {
                    "sku": "com.xsolla.v.item_1",
                    "type": "virtual_good",
                    "is_pre_order": false,
                    "quantity": 3,
                    "amount": "1000",
                    "promotions": [
                      {
                        "amount_without_discount": "6000",
                        "amount_with_discount": "5000",
                        "sequence": 1
                      },
                      {
                        "amount_without_discount": "5000",
                        "amount_with_discount": "4000",
                        "sequence": 2
                      }
                    ],
                    "custom_attributes":
                      {
                        "purchased": 0,
                        "attr": "value"
                      }
                  },
                  {
                    "sku": "com.xsolla.v.item_new_1",
                    "type": "bundle",
                    "is_pre_order": false,
                    "quantity": 1,
                    "amount": "1000",
                    "promotions": []
                  },
                  {
                    "sku": "com.xsolla.gold_1",
                    "type": "virtual_currency",
                    "is_pre_order": false,
                    "quantity": 1500,
                    "amount": "[null]",
                    "promotions": []
                  }
                ],
                "order": {
                  "id": 1,
                  "mode": "default",
                  "currency_type": "virtual",
                  "currency": "sku_currency",
                  "amount": "2000",
                  "status": "paid",
                  "platform": "xsolla",
                  "comment": null,
                  "invoice_id": "1",
                  "promotions": [
                    {
                      "amount_without_discount": "4000",
                      "amount_with_discount": "2000",
                      "sequence": 1
                    }
                  ],
                  "promocodes": [
                    {
                      "code": "promocode_some_code",
                      "external_id": "promocode_sku"
                    }
                  ],
                  "coupons": [
                    {
                      "code": "WINTER2021",
                      "external_id": "coupon_sku"
                    }
                  ]
                },
                "user": {
                  "external_id": "id_xsolla_login_1",
                  "email": "gc_user@xsolla.com",
                  "country": "US"
                }
            }
  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            13342703ccaca5064ad33ba451d800c5e823db8f' \

            -d '{
                    "notification_type": "update_subscription",
                    "settings": {
                      "project_id": 18404,
                      "merchant_id": 2340
                    },
                    "user": {
                        "id": "1234567",
                        "name": "John Smith"
                    },
                    "subscription": {
                        "plan_id": "b5dac9c8",
                        "subscription_id": "10",
                        "product_id": "Demo Product",
                        "date_next_charge": "2015-01-22T19:25:25+04:00"
                    }
                }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
                'notification_type' => 'update_subscription',
                'settings' => array(
                  'project_id' => 18404,
                  'merchant_id' => 2340
                ),
                'user' => array(
                    'id' => '1234567',
                    'name' => 'John Smith'
                ),
                'subscription' => array(
                    'plan_id' => 'b5dac9c8',
                    'subscription_id' => '10',
                    'product_id' => 'Demo Product',
                    'date_next_charge' => '2015-01-22T19:25:25+04:00'
                )
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host: your.hostname
            accept: application/json
            content-type: application/json
            content-length: 240
            authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

            {
                "notification_type": "update_subscription",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "id": "1234567",
                    "name": "John Smith"
                },
                "subscription": {
                    "plan_id": "b5dac9c8",
                    "subscription_id": "10",
                    "product_id": "Demo Product",
                    "date_next_charge": "2015-01-22T19:25:25+04:00"
                }
            }
  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            13342703ccaca5064ad33ba451d800c5e823db8f' \

            -d '{
                "notification_type": "user_search",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "public_id": "email@example.com"
                }
            }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
                'notification_type' => 'user_search',
                'settings' => array(
                  'project_id' => 18404,
                  'merchant_id' => 2340
                ),
                'user' => array(
                    'public_id' => 'email@example.com'
                )
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host: your.hostname
            accept: application/json
            content-type: application/json
            content-length: 240
            authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

            {
                "notification_type": "user_search",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "public_id": "email@example.com"
                }
            }
  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' \

            -X POST \

            -H 'accept: application/json' \

            -H 'content-type: application/json' \

            -H 'authorization: Signature
            13342703ccaca5064ad33ba451d800c5e823db8f' \

            -d '{
                "notification_type":"user_validation",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "ip": "127.0.0.1",
                    "phone": "18777976552",
                    "email": "email@example.com",
                    "id": "1234567",
                    "name": "John Smith",
                    "country": "US"
                }
            }'
        - label: PHP
          lang: PHP
          source: |-
            <?php

            $request = array(
                'notification_type' => 'user_validation',
                'settings' => array(
                  'project_id' => 18404,
                  'merchant_id' => 2340
                ),
                'user' => array(
                    'ip' => '127.0.0.1',
                    'phone' => '18777976552',
                    'email'=> 'email@example.com',
                    'id'=> '1234567',
                    'country' => 'US'
                )
            );
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host: your.hostname
            accept: application/json
            content-type: application/json
            content-length: 240
            authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f

            {
                "notification_type": "user_validation",
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "ip": "127.0.0.1",
                    "phone": "18777976552",
                    "email": "email@example.com",
                    "id": "1234567",
                    "name": "John Smith",
                    "country": "US"
                }
            }
  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".

        <div class="note"><strong>Observación</strong><br><br>El webhook se
        utiliza solamente para la 

        validació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:
                  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:
                      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' \
            -X POST \
            -H 'accept: application/json' \
            -H 'content-type: application/json' \
            -d '{
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "id": "1234567",
                    "country": "US"
                }
            }'
        - label: HTTP
          lang: HTTP
          source: |-
            POST /your/uri HTTP/1.1
            host: your.hostname
            accept: application/json
            content-type: application/json
            content-length: 240

            {
                "settings": {
                  "project_id": 18404,
                  "merchant_id": 2340
                },
                "user": {
                    "id": "1234567",
                    "country": "US"
                }
            }
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/solutions/payments/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.
      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
    amount-float:
      description: Precio en moneda real.
      format: float
      type: number
    items.promotions:
      description: >-
        Promociones aplicadas para artículos específicos en el pedido.

        La matriz se devuelve en los siguientes casos:
         - Se configura una promoción de descuento para un artículo específico.
         - Se aplica un código promocional con el parámetro **Descuento en artículos seleccionados**.

        Si 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.

        Para los artículos del tipo `bundle`, incluidos los paquetes de monedas
        virtuales, la matriz `items` mostrará:
         - parámetros del lote o del paquete de monedas virtuales
         - artículos incluidos en el lote o monedas incluidas en el paquete
          
        El 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.

        La matriz se devuelve en los siguientes casos:
         - Una promoción afecta al importe total de la compra, como un código promocional con el parámetro **Descuento en compras**.
         - 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.

        Si 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`.


        Si 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.


        Para 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.


        Para 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
  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
